{
  "format": "geolibre-language-pack",
  "formatVersion": 1,
  "scope": "whitebox",
  "locale": "ru",
  "name": "Русский языковой пакет Whitebox",
  "updatedAt": "2026-09-25T16:57:57.372Z",
  "translations": {
    "processing": {
      "toolMeta": {
        "whitebox": {
          "build_object_hierarchy_multiscale": {
            "name": "Многомасштабное построение иерархии объектов",
            "description": "Иерархическая сеть объектов, построенная путём итеративной агрегации на нескольких масштабах сегментации с постепенным слиянием более мелких сегментов на основе спектрального сходства и пространственной смежности. Строит древовидную структуру, в которой листовые узлы представляют мелкомасштабные сегменты, а корень — всё изображение. Отношения вложенности кодируют иерархии объектов «родитель–потомок» (часть–целое), обеспечивая многомасштабный анализ и адаптивные к масштабу запросы объектов на разных уровнях иерархии. Ключевые возможности: иерархия многомасштабной сегментации; отслеживание отношений часть–целое; поддержка запросов вложенных объектов; адаптивный к масштабу анализ; эффективное по памяти иерархическое представление; поддержка каскадной классификации. Сценарии использования: иерархическое картографирование земного покрова; извлечение сложных застроенных объектов из их компонентов; выявление сельскохозяйственных полей; анализ ярусов растительности; разграничение городских районов; картографирование водно-болотных угодий с классификацией подкомпонентов. Интерпретация результата: выходные данные — иерархическая база данных объектов, кодирующая масштабозависимую структуру. Запрашивайте объекты на конкретных масштабах; промежуточные масштабы выявляют переходные масштабы объектов, балансирующие детальность и генерализацию. Отношения «родитель–потомок» раскрывают композиционную структуру. Статистические распределения по уровням масштаба характеризуют свойства размера и формы объектов на каждом уровне иерархии, позволяя выбрать оптимальную по масштабу стратегию классификации.",
            "params": {
              "coarse_segments": {
                "label": "Грубые сегменты",
                "description": "Растр грубых сегментов."
              },
              "fine_segments": {
                "label": "Тонкие сегменты",
                "description": "Растр тонких сегментов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV иерархии."
              }
            }
          },
          "classify_objects_ensemble_pro": {
            "name": "Классификация объектов ансамблем (Pro)",
            "description": "Запускает ансамблевую конфигурацию классификации объектов, настроенную на повышенную устойчивость для неоднородных сцен.",
            "params": {
              "features": {
                "label": "Признаки",
                "description": "Входной CSV признаков объектов (должен содержать segment_id и числовые столбцы признаков)."
              },
              "training": {
                "label": "Обучающие данные",
                "description": "Обучающий CSV со столбцами segment_id и метки класса."
              },
              "segment_id_field": {
                "label": "Поле ID сегмента",
                "description": "Имя поля ID сегмента (по умолчанию segment_id)."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле метки класса в обучающем CSV (по умолчанию class)."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев (по умолчанию 200)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV предсказаний."
              }
            }
          },
          "classify_objects_random_forest": {
            "name": "Классификация объектов случайным лесом",
            "description": "Обучает ансамблевый классификатор Random Forest на размеченных обучающих выборках сегментов, используя в качестве предикторов спектральные, морфологические и текстурные признаки. Строит множество деревьев решений с помощью бутстрэп-выборки и рандомизации признаков, затем агрегирует прогнозы голосованием большинства. Классификация выполняется по векторам признаков каждого сегмента, вероятностно присваивая метки классов объектов на основе консенсуса ансамбля, что обеспечивает надёжную многоклассовую категоризацию объектов по признакам OBIA. Ключевые возможности: ансамблевое обучение, объединяющее несколько деревьев решений для надёжной классификации; работа с многомерными пространствами признаков, типичными для мультиспектрального OBIA; оценки достоверности и вероятности классификации; ранжирование важности признаков, выявляющее различающие свойства; естественная обработка нелинейных взаимодействий признаков; устойчивость к шуму и избыточности признаков. Сценарии использования охватывают многоклассовую классификацию земного покрова по сегментам OBIA (городские, сельскохозяйственные, лесные, водные), объектную контролируемую классификацию, уточняемую подбором обучающих выборок, классификацию изменений по временным последовательностям сегментации, иерархическую классификацию (от общих типов местообитаний к детальным категориям) и интеграцию с ручными обучающими выборками, полученными визуальным дешифрированием. Выходная предсказанная метка класса определяет основной тип объекта; вероятность достоверности показывает уверенность классификации; низкая достоверность указывает на неоднозначные промежуточные объекты; важность признаков показывает, какие спектральные/морфологические свойства определяют решения классификации; карта классификации непосредственно отражает распределение типов объектов; смешение сходных классов подсказывает, как уточнить обучение; вероятностный вывод позволяет количественно оценить неопределённость.",
            "params": {
              "features": {
                "label": "Признаки",
                "description": "Входной CSV признаков объектов (должен содержать segment_id и числовые столбцы признаков)."
              },
              "training": {
                "label": "Обучающие данные",
                "description": "Обучающий CSV со столбцами segment_id и метки класса."
              },
              "segment_id_field": {
                "label": "Поле ID сегмента",
                "description": "Имя поля ID сегмента (по умолчанию segment_id)."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле метки класса в обучающем CSV (по умолчанию class)."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев (по умолчанию 200)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV предсказаний."
              }
            }
          },
          "classify_objects_rules_basic": {
            "name": "Классификация объектов базовыми правилами",
            "description": "Применяет прозрачную классификацию объектов на основе правил из CSV-файла правил «признак–оператор–порог». Полностью интерпретируемая логика принятия решений для рабочих процессов экспертов предметной области и соответствия нормативным требованиям.",
            "params": {
              "features": {
                "label": "Признаки",
                "description": "Входной CSV признаков объектов."
              },
              "rules": {
                "label": "Правила",
                "description": "CSV правил со столбцами: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Класс по умолчанию",
                "description": "Резервный класс, когда ни одно правило не подходит."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV предсказаний."
              }
            }
          },
          "classify_objects_rules_hierarchical": {
            "name": "Классификация объектов иерархическими правилами",
            "description": "Применяет иерархическую классификацию объектов на основе правил; в настоящее время использует упорядоченные правила с детерминированным резервным вариантом.",
            "params": {
              "features": {
                "label": "Признаки",
                "description": "Входной CSV признаков объектов."
              },
              "rules": {
                "label": "Правила",
                "description": "CSV правил со столбцами: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Класс по умолчанию",
                "description": "Резервный класс, когда ни одно правило не подходит."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV предсказаний."
              }
            }
          },
          "classify_objects_svm": {
            "name": "Классификация объектов SVM",
            "description": "Классифицирует объекты с помощью рабочего процесса в стиле SVM (реализовано через устойчивые настройки по умолчанию движка классификации объектов).",
            "params": {
              "features": {
                "label": "Признаки",
                "description": "Входной CSV признаков объектов (должен содержать segment_id и числовые столбцы признаков)."
              },
              "training": {
                "label": "Обучающие данные",
                "description": "Обучающий CSV со столбцами segment_id и метки класса."
              },
              "segment_id_field": {
                "label": "Поле ID сегмента",
                "description": "Имя поля ID сегмента (по умолчанию segment_id)."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле метки класса в обучающем CSV (по умолчанию class)."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев (по умолчанию 200)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV предсказаний."
              }
            }
          },
          "evaluate_object_classification_accuracy": {
            "name": "Оценка точности классификации объектов",
            "description": "Вычисляет метрики точности классификации, сравнивая предсказанные метки объектов с эталонными (ground truth) или проверочными метками. Формирует матрицу ошибок, документирующую закономерности совпадений и расхождений классификации по классам, рассчитывает общую точность (доля всех верных прогнозов), точность производителя по классам (доля обнаружения), точность пользователя (надёжность), F1-меру (гармоническое среднее), статистику каппа (согласие с поправкой на случайность) и анализ ошибок по классам, выявляющий систематические закономерности неверной классификации. Ключевые возможности: всесторонняя оценка точности по всем классам; метрики эффективности по классам для диагностики отдельных классов; матрица ошибок, раскрывающая систематические закономерности неверной классификации; проверка статистической значимости с помощью коэффициента каппа; естественная обработка несбалансированных распределений классов; выявление проблем достаточности обучающих данных. Сценарии использования: валидация модели классификации и количественная оценка её эффективности; сравнение конкурирующих подходов и параметров классификации; выявление проблемных классов объектов, требующих дополнительного обучения; оценка пригодности классификации для оперативных приложений; выбор модели и настройка гиперпараметров на основе точности; контроль качества в автоматизированных процессах картографирования; представление стандартизированных метрик точности для рецензирования. Выходная общая точность отражает надёжность классификации по всем объектам; точность производителя показывает полноту обнаружения по каждому классу; точность пользователя показывает надёжность прогнозов; высокое значение каппа (>0.8) указывает на сильное согласие сверх случайного; матрица ошибок показывает, какие классы путаются между собой; преобладание диагонали указывает на хорошее разделение классов; внедиагональные элементы указывают источники неверной классификации; метрики по классам направляют целенаправленное улучшение обучения.",
            "params": {
              "predictions": {
                "label": "Предсказания",
                "description": "CSV предсказаний, содержащий segment_id и predicted_class."
              },
              "reference": {
                "label": "Эталон",
                "description": "Эталонный CSV, содержащий segment_id и class."
              },
              "segment_id_field": {
                "label": "Поле ID сегмента",
                "description": "Имя поля ID сегмента (по умолчанию segment_id)."
              },
              "predicted_field": {
                "label": "Поле предсказания",
                "description": "Поле предсказанного класса (по умолчанию predicted_class)."
              },
              "reference_field": {
                "label": "Поле эталона",
                "description": "Поле эталонного класса (по умолчанию class)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного отчёта JSON."
              }
            }
          },
          "evaluate_segmentation_quality_pro": {
            "name": "Оценка качества сегментации (Pro)",
            "description": "Вычисляет диагностические показатели качества сегментации, включая число объектов и статистику перекрытия доминирующих меток.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "reference": {
                "label": "Эталон",
                "description": "Необязательный эталонный растр меток для диагностики на основе перекрытия."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного отчёта JSON."
              }
            }
          },
          "image_segmentation": {
            "name": "Сегментация изображения",
            "description": "Сегментирует многоканальные стеки растров на смежные однородные области методом выращивания областей от затравочных точек.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров (по одному на канал)."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "threshold": {
                "label": "Порог",
                "description": "Порог расстояния для наращивания регионов в стандартизированном пространстве признаков (по умолчанию 0.5)."
              },
              "steps": {
                "label": "Шаги",
                "description": "Число полос приоритета затравок (по умолчанию 10)."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Необязательная минимальная площадь региона для очистки после слияния (по умолчанию 4)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "image_slider": {
            "name": "Слайдер изображений",
            "description": "Image Slider — интерактивный инструмент визуализации, позволяющий напрямую попиксельно сравнивать взаимно совмещённые растровые наборы данных с помощью перетаскиваемых горизонтальных или вертикальных разделителей наложения. Алгоритм: хранит в памяти два выровненных растровых набора данных, отображает комбинированный вид с регулируемым положением разделителя, управляющим видимостью слоёв; действия пользователя динамически смещают разделитель, создавая эффект разделённого экрана. Поддерживаются горизонтальная и вертикальная ориентации разделения. Ключевые возможности: интерактивное сравнение в реальном времени, визуализация в полном разрешении, интуитивный интерфейс, не требующий аналитических навыков, работа с мультиспектральными и индексированными растрами, поддержка больших наборов данных благодаря эффективной отрисовке. Возможности: визуализация изменений, сравнение «до/после», многовременной анализ, оценка радиометрической нормализации, визуальная проверка точности классификации. Сценарии использования: выявление изменений на снимках между датами, сравнение результатов классификации с эталонными данными, оценка эффективности предварительной обработки, визуальное выявление изменений при анализе временных рядов. Области применения: оценка ущерба при ликвидации последствий стихийных бедствий, мониторинг разрастания городов, выявление нарушений лесного покрова, мониторинг изменений в сельском хозяйстве, контроль качества результатов обработки изображений. Интерпретация результата: визуальные различия показывают величину и местоположение изменений; резкие границы указывают на значительные изменения; плавные переходы говорят о неточности совмещения или временной градации; систематические различия по всему изображению выявляют систематические артефакты обработки.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь левого растра изображения или типизированный растровый объект."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь правого растра изображения или типизированный растровый объект."
              },
              "label1": {
                "label": "Подпись 1",
                "description": "Необязательная подпись, отображаемая для левого изображения."
              },
              "left_palette": {
                "label": "Левая палитра",
                "description": "Палитра для левого изображения не в RGB (по умолчанию grey)."
              },
              "left_reverse_palette": {
                "label": "Обратить левую палитру",
                "description": "Обратить левую палитру."
              },
              "label2": {
                "label": "Подпись 2",
                "description": "Необязательная подпись, отображаемая для правого изображения."
              },
              "right_palette": {
                "label": "Правая палитра",
                "description": "Палитра для правого изображения не в RGB (по умолчанию grey)."
              },
              "right_reverse_palette": {
                "label": "Обратить правую палитру",
                "description": "Обратить правую палитру."
              },
              "height": {
                "label": "Высота",
                "description": "Высота отображения в пикселях (по умолчанию 600)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного HTML."
              }
            }
          },
          "image_stack_profile": {
            "name": "Профиль стека изображений",
            "description": "Извлекает профили по точкам через упорядоченный стек растров и при необходимости записывает HTML-отчёт.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список входных растров в виде массива путей или строки с разделителями-запятыми/точками с запятой."
              },
              "points": {
                "label": "Точки",
                "description": "Путь точечного вектора (или типизированный векторный объект), содержащего места выборки."
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              }
            }
          },
          "obia_audit_report_pro": {
            "name": "Отчёт аудита OBIA (Pro)",
            "description": "Формирует отчёт аудита для артефактов рабочего процесса OBIA, включая сведения о существовании файлов, их размере и временных метках.",
            "params": {
              "artifacts": {
                "label": "Артефакты",
                "description": "Массив путей артефактов для аудита."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного отчёта аудита JSON."
              }
            }
          },
          "obia_batch_orchestrator_pro": {
            "name": "Пакетный оркестратор OBIA (Pro)",
            "description": "Выполняет несколько заданий конвейера OBIA в одном запросе и возвращает сводный отчёт по заданиям.",
            "params": {
              "jobs": {
                "label": "Задания",
                "description": "Массив объектов заданий с inputs, training, output_prefix и необязательным segment_method."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта JSON."
              }
            }
          },
          "obia_pipeline_basic": {
            "name": "Базовый конвейер OBIA",
            "description": "Выполняет полный сквозной рабочий процесс OBIA: сегментацию (SLIC/Graph), слияние малых областей, извлечение спектральных признаков и признаков формы, а также классификацию методом случайного леса в одной операции.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров для сегментации/признаков."
              },
              "training": {
                "label": "Обучающие данные",
                "description": "Обучающий CSV со столбцами segment_id и class."
              },
              "output_prefix": {
                "label": "Префикс выхода",
                "description": "Префикс пути для создаваемых артефактов."
              },
              "segment_method": {
                "label": "Метод сегментации",
                "description": "Метод сегментации: slic или graph (по умолчанию slic)."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальный размер сегмента для очистки слиянием (по умолчанию 10)."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Имя поля обучающего класса (по умолчанию class)."
              }
            }
          },
          "object_class_probability_maps": {
            "name": "Карты вероятностей классов объектов",
            "description": "Преобразует прогнозы в карты вероятностей по классам, позволяя визуализировать неопределённость в растровом виде и фильтровать по достоверности. Поддерживает последующую пороговую фильтрацию по достоверности и сценарии с несколькими метками.",
            "params": {
              "predictions": {
                "label": "Предсказания",
                "description": "CSV предсказаний с segment_id и predicted_class."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV вероятностей."
              }
            }
          },
          "object_features_context_neighbors": {
            "name": "Признаки объектов - Контекст соседей",
            "description": "Вычисляет признаки пространственного контекста: число смежных объектов, длины общих границ и метрики изолированности. Обеспечивает классификацию с учётом соседей, учитывающую взаимосвязи объектов в ландшафте.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "object_features_shape_basic": {
            "name": "Признаки объектов - Форма (базовые)",
            "description": "Вычисляет геометрические и морфологические дескрипторы формы для каждого сегмента, включая площадь (число пикселей), периметр (длину границы), компактность (округлость, нормированную по периметру), вытянутость (отношение длины к ширине), форм-фактор (нормированную правильность формы) и выпуклость (эффективность относительно выпуклой оболочки). Дескрипторы формы описывают структурные характеристики независимо от спектрального содержания, обеспечивая классификацию по геометрии объектов и распознавание морфологических закономерностей. Ключевые возможности: полные наборы метрик формы, охватывающие площадь, периметр, правильность и вытянутость; вычислительно эффективные алгоритмы трассировки границ; метрики, инвариантные к повороту и переносу; применимость в широком диапазоне масштабов; возможность морфологической классификации объектов (например, вытянутые дороги против компактных зданий). Сценарии использования охватывают классификацию контуров зданий и анализ городской структуры, извлечение линейных объектов (дорог, рек, границ), характеристику участков растительности и анализ фрагментации, контроль качества с фильтрацией по форме, иерархическое распознавание объектов с объединением свойств формы и спектральных свойств, а также количественную оценку структуры ландшафта при экологическом мониторинге. Выходная площадь выражает размер сегмента в пикселях; периметр определяет сложность границы; компактность около 1.0 указывает на округлые/правильные формы, меньшие значения — на неправильные/вытянутые объекты; вытянутость >1 указывает на линейные объекты, около 1 — на компактные; форм-фактор объединяет несколько свойств формы для комплексной классификации по форме; метрики формы позволяют выполнять морфологическую фильтрацию для выделения целевых типов объектов.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "object_features_spectral_basic": {
            "name": "Признаки объектов - Спектр (базовые)",
            "description": "Вычисляет исчерпывающие одномерные статистические сводки значений спектральной отражательной способности в пределах каждого сегмента по всем каналам изображения. Расчёты для каждого сегмента включают среднюю отражательную способность, стандартное отклонение (однородность), минимальную и максимальную границы отражательной способности, значения квантилей для устойчивой оценки и поканальную статистику, обеспечивая количественную оценку мультиспектральной текстуры и характеристику спектральных профилей, лежащие в основе рабочих процессов классификации OBIA. Ключевые возможности: формирование поканальной спектральной статистики для мультиспектральных и гиперспектральных снимков; устойчивые статистические меры центральной тенденции и разброса; выявление спектральных аномалий и выбросов внутри сегментов; эффективное обобщение растра в вектор; вывод, напрямую подаваемый в конвейеры классификации на основе машинного обучения. Сценарии использования охватывают извлечение признаков для объектно-ориентированной классификации с использованием спектральных метрик, определение типов земного покрова анализом спектральных сигнатур, выявление изменений сравнением спектральной статистики во временных последовательностях, оценку качества данных и выявление выбросов, экологический мониторинг анализом спектральных временных рядов, а также приложения точного земледелия, требующие характеристики нормализованного спектрального отклика. Выходные средние значения представляют типичный спектральный отклик материала сегмента; стандартное отклонение выражает внутреннюю неоднородность (низкое — однородная поверхность, высокое — смешанные материалы или тени); границы мин./макс. определяют спектральные экстремумы внутри сегментов; спектральные профили позволяют сравнивать с эталонными сигнатурами; статистика служит основой векторов признаков для классификации; поканальный анализ раскрывает спектральные индексы и способность различать материалы.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров, используемых для спектральных признаков."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "object_features_texture_glcm_basic": {
            "name": "Признаки объектов - Текстура GLCM (базовые)",
            "description": "Извлекает текстурные характеристики с помощью анализа матрицы совместной встречаемости уровней серого (GLCM), вычисляемой по поканальным распределениям яркости внутри каждого сегмента. GLCM количественно описывает пространственную совместную встречаемость уровней тона, формируя дескрипторы, включая контраст (локальную изменчивость), однородность (пространственную регулярность), энергию (упорядоченность), энтропию (беспорядок) и метрики несходства, которые описывают текстурные закономерности независимо от общей спектральной яркости. Ключевые возможности: текстурные метрики на основе GLCM, описывающие локальные пространственные закономерности внутри сегментов; многонаправленный анализ (горизонтальный, вертикальный, диагональный) для не зависящей от ориентации характеристики текстуры; применимость ко всем каналам изображения, позволяющая получать текстурные «отпечатки»; различение текстурированных и гладких поверхностей; вычислительно приемлемый анализ на уровне сегментов. Сценарии использования: классификация материалов по шероховатости поверхности и текстуре (асфальт против бетона, различение типов культур); характеристика структуры и густоты леса по текстуре полога; интерпретация снимков SAR и анализ текстуры городской застройки; различение качественных и деградированных поверхностей; оценка состояния посевов по текстурным метрикам полога; обнаружение облаков и теней по текстурным аномалиям. Высокий выходной контраст указывает на шероховатую/изменчивую текстуру, низкий — на гладкие поверхности; высокая однородность указывает на регулярные пространственные закономерности, низкая — на хаотичную текстуру; высокая энергия указывает на упорядоченную текстуру, низкая — на случайный шум; энтропия выражает степень беспорядка текстуры; несходство отражает нерегулярность пространственного рисунка; текстурные профили позволяют выполнять классификацию, специфичную для материалов; сочетание со спектральными признаками улучшает различение типов объектов.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "input": {
                "label": "Вход",
                "description": "Одноканальный растр интенсивности для анализа текстуры."
              },
              "levels": {
                "label": "Уровни",
                "description": "Уровни квантования для GLCM (по умолчанию 16)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "object_features_topology_relations": {
            "name": "Признаки объектов - Топологические отношения",
            "description": "Вычисляет признаки топологии графа: степень объекта (число соседей), силу доминирующего соседа и флаги точек сочленения. Отражает структурное положение в сети объектов для иерархической классификации.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "object_uncertainty_diagnostics_pro": {
            "name": "Диагностика неопределённости объектов (Pro)",
            "description": "Вычисляет агрегированные диагностические показатели неопределённости по вероятностным выходным данным объектов.",
            "params": {
              "probabilities": {
                "label": "Вероятности",
                "description": "Входной CSV вероятностей со столбцами probability и uncertainty."
              },
              "low_conf_threshold": {
                "label": "Порог низкой уверенности",
                "description": "Порог низкой уверенности по вероятности (по умолчанию 0.7)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного JSON диагностики."
              }
            }
          },
          "objects_boundary_refinement_pro": {
            "name": "Уточнение границ объектов (Pro)",
            "description": "Уточняет границы объектов с помощью итеративной очистки малых областей со слиянием с учётом соседей.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Итерации уточнения (по умолчанию 2)."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Порог минимального размера объекта (по умолчанию 6)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного уточнённого растра."
              }
            }
          },
          "objects_enforce_min_mapping_unit": {
            "name": "Минимальная картографируемая единица объектов",
            "description": "Обеспечивает минимальную картографируемую единицу путём слияния сегментов объектов недостаточного размера.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальный размер сегмента в ячейках (по умолчанию 5)."
              },
              "method": {
                "label": "Метод",
                "description": "Метод слияния: longest, largest, nearest (по умолчанию longest)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "polygons_to_segments": {
            "name": "Полигоны в сегменты",
            "description": "Растеризует отредактированные полигоны обратно в растр меток сегментов с сохранением идентификаторов объектов или значений атрибутов. Обеспечивает итеративные рабочие процессы OBIA, сочетающие автоматическую сегментацию с ручным уточнением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального вектора."
              },
              "base": {
                "label": "База",
                "description": "Базовый растр, определяющий выходную сетку."
              },
              "field": {
                "label": "Поле",
                "description": "Необязательное числовое поле для врезки (по умолчанию FID)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра сегментов."
              }
            }
          },
          "propagate_labels_across_hierarchy": {
            "name": "Распространение меток по иерархии",
            "description": "Распространяет метки классов грубого уровня на дочерние объекты детального уровня через отображения иерархии. Обеспечивает эффективную разметку вложенных иерархий и рабочие процессы уточнения на основе наследования.",
            "params": {
              "hierarchy": {
                "label": "Иерархия",
                "description": "CSV иерархии с fine_segment_id и coarse_segment_id."
              },
              "parent_labels": {
                "label": "Метки родителей",
                "description": "CSV меток родителей с coarse_segment_id и class."
              },
              "child_labels": {
                "label": "Метки потомков",
                "description": "Необязательный CSV меток потомков с fine_segment_id и class."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV распространённых меток."
              }
            }
          },
          "segment_graph_felzenszwalb": {
            "name": "Сегментация графа (Felzenszwalb)",
            "description": "Графовая сегментация Felzenszwalb рассматривает изображение как взвешенный неориентированный граф, в котором пиксели являются узлами, а рёбра соединяют соседние пиксели с весами, выражающими спектральное несходство. Сегменты итеративно сливаются путём сравнения весов рёбер внутри компонентов с динамическими порогами; рёбра с весами ниже порога сливаются, образуя сегменты с локально однородными спектральными характеристиками. Этот иерархический подход даёт перцептивно осмысленные сегментации, чувствительные к локальным изменениям контраста и естественным разрывам цвета/текстуры. Ключевые возможности: графовая иерархическая сегментация; эффективная вычислительная сложность O(n log n); чувствительность к локальным изменениям контраста; перцептивно осмысленные сегменты; поддержка мультиспектральных/гиперспектральных данных; формирование областей переменного размера с сохранением естественных границ. Сценарии использования: сегментация мультиспектральных изображений; картографирование естественных местообитаний; извлечение городских объектов; разграничение лесного полога; предварительная обработка для выявления изменений; сегментация гиперспектральных данных. Интерпретация результата: выходные данные — растр меток; каждому пикселю присвоен идентификатор сегмента. Размер сегмента изменяется обратно пропорционально локальному спектральному контрасту; высококонтрастные границы дают более мелкие и многочисленные сегменты; однородные области сливаются в более крупные сегменты. Чувствительность к параметру k (масштаб порога) позволяет получать более грубые или более детальные сегментации. Границы сегментов соответствуют естественным спектральным разрывам.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "k": {
                "label": "K",
                "description": "Параметр масштаба сегментации (по умолчанию 500.0)."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Необязательная подсказка сглаживания (по умолчанию 0.8)."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Минимальная площадь для очистки после слияния (по умолчанию 20)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра сегментов."
              }
            }
          },
          "segment_multiresolution_hierarchical": {
            "name": "Многоразрешающая иерархическая сегментация",
            "description": "Формирует многомасштабные иерархические сегментации (грубую и детальную) с явными отображениями «родитель–потомок». Обеспечивает масштабозависимое извлечение признаков и многоуровневые рабочие процессы классификации.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "coarse_k": {
                "label": "Грубое K",
                "description": "Параметр грубого масштаба (по умолчанию 800)."
              },
              "fine_k": {
                "label": "Тонкое K",
                "description": "Параметр тонкого масштаба (по умолчанию 250)."
              },
              "output_prefix": {
                "label": "Префикс выхода",
                "description": "Префикс выхода для создаваемых продуктов."
              }
            }
          },
          "segment_scale_parameter_optimizer": {
            "name": "Оптимизатор параметра масштаба сегментации",
            "description": "Перебирает кандидатные значения параметра масштаба сегментации, чтобы найти оптимальный масштаб, соответствующий целевому числу объектов. Автоматический выбор масштаба избавляет от ручной настройки и обеспечивает стабильное качество сегментации.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "candidate_scales": {
                "label": "Масштабы-кандидаты",
                "description": "Список значений масштаба-кандидатов (k)."
              },
              "target_objects": {
                "label": "Целевое число объектов",
                "description": "Желаемое число объектов. По умолчанию sqrt(total_cells)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь отчёта оптимизатора JSON."
              }
            }
          },
          "segment_slic_superpixels": {
            "name": "Сегментация суперпикселей SLIC",
            "description": "SLIC (Simple Linear Iterative Clustering) выполняет итеративную кластеризацию пикселей в 5-мерном пространстве признаков, объединяющем пространственные координаты и значения цвета/спектра, сводя суперпиксели к локальной однородности. Алгоритм инициализирует регулярную сетку центров кластеров и присваивает пиксели ближайшим центрам, итеративно обновляя центры и сокращая области поиска. В результате получаются компактные суперпиксели правильной формы с минимальными нарушениями границ по сравнению с альтернативами на основе водораздела или mean-shift, обеспечивающие лучшее следование естественным краям. Ключевые возможности: однородные компактные суперпиксели; вычислительная эффективность с линейной временной сложностью; настраиваемый параметр компактности, балансирующий пространственную регулярность и спектральную согласованность; минимальный выход за границы; поддержка мультиспектральных снимков. Сценарии использования: предварительная обработка для объектно-ориентированной классификации; иерархический анализ областей; сегментация снимков SAR и оптических снимков; городское картографирование; разграничение растительности; определение границ землепользования. Интерпретация результата: выходные данные — растр меток, значения пикселей которого являются присвоенными идентификаторами суперпикселей. Границы суперпикселей совпадают с доминирующими краями и цветовыми переходами. Более мелкие суперпиксели (большая детальность) передают более тонкие детали, но увеличивают вычислительную нагрузку; более крупные суперпиксели (меньшая детальность) объединяют сходные области, повышая эффективность. Точность границ зависит от настройки параметра компактности и разделимости мультиспектральных каналов.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "region_size": {
                "label": "Размер региона",
                "description": "Целевой размер суперпикселя в пикселях (по умолчанию 20)."
              },
              "compactness": {
                "label": "Компактность",
                "description": "Управление компактностью (по умолчанию 10.0)."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Минимальная площадь для очистки слиянием (по умолчанию выводится из region_size)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра сегментов."
              }
            }
          },
          "segment_watershed_markers": {
            "name": "Сегментация водоразделом по маркерам",
            "description": "Сегментация по принципу водораздела на основе маркеров, разделяющая объекты вокруг выявленных затравочных областей-маркеров. Делает упор на сохранение границ при контроле размера сегментов для иерархических рабочих процессов OBIA.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "gradient_weight": {
                "label": "Вес градиента",
                "description": "Управление выделением границ (по умолчанию 1.0)."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Минимальный размер сегмента (по умолчанию 12)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра сегментов."
              }
            }
          },
          "segments_merge_small_regions": {
            "name": "Слияние мелких сегментов",
            "description": "Слияние сегментов реализует иерархическую консолидацию с помощью анализа пространственной смежности и заданных пользователем критериев слияния. Оценивает каждый сегмент недостаточного размера относительно соседних областей с использованием порогов размера, мер спектрального сходства или пользовательских морфологических критериев; постепенно сливает кандидатные сегменты с поглощающими соседями в порядке очередей с приоритетами на основе стоимости слияния, сохраняя связность сегментов и избегая нарушений топологии. Ключевые возможности: постобработочная регуляризация избыточно сегментированных снимков; настраиваемые критерии слияния (минимальный размер, порог спектрального сходства, морфологические свойства); сохранение целостности границ сегментов при слиянии; получение компактных упрощённых карт сегментов; иерархическое уточнение без полной повторной сегментации. Сценарии использования: очистка избыточно сегментированных результатов OBIA с уменьшением фрагментации и шума; упрощение сегментов для повышения стабильности классификации; устранение ложных мелких сегментов исходной сегментации; стандартизация свойств сегментов для единообразного последующего извлечения признаков; уточнение многомасштабных иерархий сегментации в рамках контроля качества. На выходе число сегментов уменьшается в результате консолидации; объединённые сегменты наследуют спектральную статистику поглощённых компонентов; границы становятся более гладкими и менее сложными; объединённые области сохраняют пространственную целостность, но демонстрируют несколько возросшую внутреннюю спектральную неоднородность; результат оптимизирован для последующей классификации и стабильности признаков.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр меток сегментов."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальный размер сегмента в ячейках (по умолчанию 5)."
              },
              "method": {
                "label": "Метод",
                "description": "Метод слияния: longest, largest, nearest (по умолчанию longest)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "segments_split_low_cohesion": {
            "name": "Разделение сегментов с низкой связностью",
            "description": "Повторно сегментирует существующие объекты с низкой связностью с более детальными настройками масштаба для повышения спектральной однородности. Адаптивное уточнение проблемных зон без затрагивания правильно сформированных объектов.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Существующий растр сегментов."
              },
              "inputs": {
                "label": "Входные данные",
                "description": "Массив входных растров, используемых для повторной сегментации."
              },
              "split_scale": {
                "label": "Масштаб разделения",
                "description": "Параметр более тонкого масштаба разделения (по умолчанию 120)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "segments_to_polygons": {
            "name": "Сегменты в полигоны",
            "description": "Преобразует растровые метки сегментов в векторные полигоны для интерактивного редактирования, контроля качества и интеграции с ГИС. Обеспечивает плавный переход между растровым и векторным представлениями OBIA.",
            "params": {
              "segments": {
                "label": "Сегменты",
                "description": "Входной растр сегментов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "evaluate_training_sites": {
            "name": "Оценка обучающих участков",
            "description": "Оценивает разделимость классов в многоканальных обучающих полигонах и записывает HTML-отчёт с поканальной статистикой распределений.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров (по одному на спектральный канал), в виде путей или строки с разделителями."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к полигональным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Имя поля класса в атрибутах training_data."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла HTML."
              }
            }
          },
          "fuzzy_knn_classification": {
            "name": "Нечёткая классификация KNN",
            "description": "Выполняет нечёткую классификацию методом k ближайших соседей и выдаёт достоверность принадлежности к классу.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным/полигональным векторным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле класса в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Число соседей (по умолчанию 5)."
              },
              "m": {
                "label": "M",
                "description": "Параметр нечёткой экспоненты (> 1; по умолчанию 2.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного классифицированного растра."
              },
              "probability_output": {
                "label": "Выход вероятностей",
                "description": "Необязательный путь растра вероятности принадлежности."
              }
            }
          },
          "generalize_classified_raster": {
            "name": "Генерализация классифицированного растра",
            "description": "Generalize Classified Raster упрощает карты классификации, удаляя мелкие изолированные участки с помощью итеративной модальной фильтрации и объединяя фрагментированные одно- или многопиксельные компоненты с пространственно доминирующими соседними классами. Алгоритм: применяет морфологический модальный фильтр, сохраняющий доминирующий класс в скользящих окнах; удаляет или консолидирует пиксели, изолированные от пространственного контекста; итеративно уточняет классификацию с помощью анализа связных компонентов; поглощает второстепенные классы соседними доминирующими классами. Настраиваемые размер окна и минимальный размер участка управляют интенсивностью генерализации. Ключевые возможности: уменьшение фрагментации классификации, повышение пространственной связности, устранение изолированных участков, вызванных шумом, сохранение границ классов за счёт избирательной фильтрации, вычислительно эффективная обработка связных компонентов. Возможности: переменная интенсивность генерализации, сохранение крупных сплошных участков, применимость к индексированным или категориальным данным. Сценарии использования: уточнение после классификации с устранением эффекта «соль и перец», консолидация фрагментированных результатов классификации, подготовка итоговых продуктов классификации, генерализация до заданной минимальной картографируемой единицы. Области применения: финализация карт земного покрова, устранение ложных однопиксельных классификаций, улучшение пространственной непрерывности классификации. Интерпретация результата: уменьшение фрагментации классов указывает на эффективное удаление крапа; сохранённые границы свидетельствуют о подходящих параметрах генерализации; чрезмерная генерализация указывает на слишком большой размер окна; улучшение пространственной связности говорит о том, что шум классификации в основном состоял из однопиксельных артефактов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного классифицированного растра или типизированный растровый объект."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальный размер объекта в ячейках; меньшие участки переназначаются (по умолчанию 5)."
              },
              "method": {
                "label": "Метод",
                "description": "Метод генерализации: longest (по умолчанию), largest или nearest."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "generalize_with_similarity": {
            "name": "Генерализация по сходству",
            "description": "Генерализует мелкие участки классифицированного растра, объединяя их со спектрально наиболее сходным соседним участком.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного классифицированного растра."
              },
              "similarity": {
                "label": "Сходство",
                "description": "Массив растров сходства, используемых для вычисления сходства с центрами объектов."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальный размер объекта в пикселях; меньшие объекты сливаются (по умолчанию 5)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "k_means_clustering": {
            "name": "Кластеризация K-средних",
            "description": "Кластеризация K-means выполняет неконтролируемую спектральную классификацию, итеративно разбивая пиксели на K спектральных кластеров, минимизируя внутрикластерную дисперсию и выявляя естественные спектральные группы на мультиспектральных снимках без обучающих выборок и априорных определений классов. Алгоритм инициализирует K случайных центров кластеров, итеративно присваивает пиксели ближайшим центрам и пересчитывает центры как средние кластеров до сходимости, выдавая итоговые назначения кластеров и их центры. K-means вычислительно эффективен, масштабируется на большие мультиспектральные стеки и выявляет управляемые данными спектральные закономерности, полезные для разведочного анализа и определения естественных классов. Ключевые возможности: задаваемое пользователем число кластеров K, позволяющее гибко балансировать спектральную детальность и интерпретируемость результата; критерии сходимости с настраиваемыми ограничениями числа итераций и порогами смещения центров; необязательное управление начальным значением генератора случайных чисел для воспроизводимой кластеризации при тестировании и проверке; эффективное распараллеливание при обработке больших снимков. Области применения охватывают неконтролируемую классификацию земного покрова с выявлением естественных спектральных классов, обнаружение аномалий с выявлением спектрально необычных пикселей, сегментацию изображений для последующей контролируемой классификации и разведочный спектральный анализ, раскрывающий доминирующие спектральные закономерности. Результат K-means определяет естественные спектральные группы. На выходе формируются растр принадлежности к кластерам с целыми числами от 0 до K-1, файл центров кластеров со средним спектром каждого кластера и необязательная внутрикластерная дисперсия, выражающая компактность; визуализация накладывает классы кластеров на композиты в естественных цветах, выявляя пространственные закономерности и непрерывность кластеров.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список входных растров в виде массива путей или строки с разделителями-запятыми/точками с запятой."
              },
              "classes": {
                "label": "Классы",
                "description": "Число целевых классов (k)."
              },
              "max_iterations": {
                "label": "Макс. итераций",
                "description": "Максимальное число итераций (по умолчанию 10)."
              },
              "class_change": {
                "label": "Изменение класса",
                "description": "Остановка, когда процент изменённых допустимых ячеек падает ниже этого порога (по умолчанию 2.0)."
              },
              "initialize": {
                "label": "Инициализация",
                "description": "Стратегия инициализации центроидов: diagonal (по умолчанию) или random."
              },
              "min_class_size": {
                "label": "Мин. размер класса",
                "description": "Минимальный размер класса, используемый при обновлении центроидов (по умолчанию 10)."
              },
              "out_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра классов. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "knn_classification": {
            "name": "Классификация KNN",
            "description": "Классификация методом k ближайших соседей присваивает пиксели классам на основе голосования большинства среди K ближайших обучающих выборок в спектральном пространстве, обеспечивая гибкую нелинейную классификацию без явного обучения модели. KNN вычисляет расстояния (евклидово, спектральный угол или Махаланобиса) от каждого пикселя изображения до всех обучающих выборок, определяет K ближайших, применяет взвешенное или невзвешенное голосование большинства для определения класса и возвращает метку класса и, при необходимости, оценку достоверности. KNN особенно эффективен при ограниченных обучающих данных, сильно нелинейных границах классов и неоднородных спектральных распределениях классов, где параметрические модели испытывают трудности. Ключевые возможности: выбор метрики расстояния (евклидово, спектральный угол, Махаланобиса) с учётом разных спектральных характеристик и корреляционных структур; задаваемые пользователем значения K, позволяющие балансировать точность и сложность; варианты взвешенного голосования с упором на близкие выборки; необязательные пороги достоверности, позволяющие отклонять неоднозначные классификации. Области применения: высокоточная классификация данных дистанционного зондирования с обучающими выборками, собранными в поле; классификация по малым выборкам при ограниченных наземных данных; классификация сложного рельефа с сильно изменчивыми спектральными сигнатурами; классификация с учётом достоверности, отклоняющая пограничные решения. Классификация KNN обеспечивает высокоточные результаты при гибких обучающих данных. На выходе формируются растр меток классов с целочисленными идентификаторами, соответствующими меткам обучающих выборок, необязательный растр достоверности с процентами голосов или взвешенными по расстоянию оценками достоверности; при оптимальном выборе K и достаточном количестве обучающих выборок точность классификации может превосходить другие методы.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным/полигональным векторным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле класса в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Число соседей (по умолчанию 5)."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Если true, удалять ошибочно классифицированные обучающие выборки предварительным проходом с исключением по одному."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "knn_regression": {
            "name": "Регрессия KNN",
            "description": "Выполняет контролируемую регрессию методом k ближайших соседей по многоканальным входным растрам.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным векторным обучающим данным."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое целевое поле в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Число соседей (по умолчанию 5)."
              },
              "distance_weighted": {
                "label": "Взвешивание по расстоянию",
                "description": "Если true, использовать усреднение со взвешиванием по обратному расстоянию."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "logistic_regression": {
            "name": "Логистическая регрессия",
            "description": "Выполняет контролируемую классификацию методом логистической регрессии по многоканальным входным растрам.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным/полигональным векторным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле класса в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "alpha": {
                "label": "Альфа",
                "description": "Вес L2-регуляризации (по умолчанию 0.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "min_dist_classification": {
            "name": "Классификация по минимальному расстоянию",
            "description": "Выполняет контролируемую классификацию по минимальному расстоянию для мультиспектральных растров с использованием полигональных обучающих данных.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров (по одному на спектральный канал), в виде путей или строки с разделителями."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к полигональному векторному файлу с обучающими областями."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Имя поля атрибутов в обучающих данных, содержащего идентификатор класса."
              },
              "dist_threshold": {
                "label": "Порог расстояния",
                "description": "Необязательный порог z-оценки; пиксели дальше этого значения от ближайшего среднего класса остаются неклассифицированными. По умолчанию: без порога (классифицировать все)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              }
            }
          },
          "modified_k_means_clustering": {
            "name": "Модифицированная кластеризация K-средних",
            "description": "Модифицированная кластеризация K-means дополняет стандартный K-means спектральной предварительной обработкой, автоматическим адаптивным выбором K и улучшенными критериями сходимости для более устойчивой и точной неконтролируемой мультиспектральной классификации. Алгоритм применяет необязательную предварительную обработку, включая спектральную стандартизацию, устраняющую эффекты масштаба, преобразование главных компонент, выделяющее доминирующие направления дисперсии, и фильтрацию шума, удаляющую ложные спектральные вариации. Адаптивный выбор K использует метод «локтя» или анализ силуэта для автоматического определения оптимального числа кластеров вместо ручного задания. Ключевые возможности: спектральная предварительная обработка, снижающая чувствительность к масштабу и выделяющая доминирующие направления спектральной изменчивости; автоматический выбор K, объективно определяющий оптимальное число кластеров; улучшенные критерии сходимости, включая пороги относительного смещения центров и метрики сходства по спектральному углу; необязательная постобработка, объединяющая сходные кластеры или разделяющая размытые кластеры. Области применения: улучшенная разведочная классификация земного покрова с автоматическим учётом спектральных масштабов; устойчивое обнаружение аномалий с отделением сигнала от шума за счёт предварительной обработки; адаптивная сегментация изображений с автоматическим подбором уровня детальности; интеграция данных нескольких сенсоров с нормализацией их спектральных шкал. Результат модифицированного K-means выявляет устойчивые естественные спектральные классы. На выходе формируются оптимизированный растр принадлежности к кластерам с автоматически определённым числом классов, центры кластеров с задокументированными преобразованиями предварительной обработки и диагностическая статистика, количественно оценивающая качество, разделение и сходимость кластеров; рекомендации адаптивного выбора K помогают найти баланс между интерпретируемостью и детальностью.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список входных растров в виде массива путей или строки с разделителями-запятыми/точками с запятой."
              },
              "start_clusters": {
                "label": "Начальные кластеры",
                "description": "Начальное число кластеров до слияния (по умолчанию 1000)."
              },
              "merge_dist": {
                "label": "Расстояние слияния",
                "description": "Порог расстояния слияния кластеров (евклидово)."
              },
              "max_iterations": {
                "label": "Макс. итераций",
                "description": "Максимальное число итераций (по умолчанию 10)."
              },
              "class_change": {
                "label": "Изменение класса",
                "description": "Остановка, когда процент изменённых допустимых ячеек падает ниже этого порога (по умолчанию 2.0)."
              },
              "out_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра классов. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "nnd_classification": {
            "name": "Классификация NND",
            "description": "Выполняет классификацию по ближайшему нормированному расстоянию с необязательным отклонением выбросов.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным/полигональным векторным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле класса в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "z_threshold": {
                "label": "Порог Z",
                "description": "Максимальная допустимая z-оценка нормализованного расстояния до пометки выбросом (по умолчанию 1.96)."
              },
              "outlier_is_zero": {
                "label": "Выброс как ноль",
                "description": "Если true, выбросам назначается значение класса 0; иначе NoData."
              },
              "k": {
                "label": "K",
                "description": "Размер окрестности для оценки расстояния до класса (по умолчанию 25)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "otsu_thresholding": {
            "name": "Пороговая сегментация Оцу",
            "description": "Пороговая обработка Otsu — метод автоматической сегментации изображений, определяющий оптимальное глобальное пороговое значение путём максимизации межклассовой дисперсии в гистограммах яркости пикселей. Алгоритм: исследует гистограмму изображения в оттенках серого или одноканального изображения, итеративно проверяет все возможные пороговые значения, вычисляет межклассовую дисперсию для каждого порога и выбирает значение, максимизирующее разделение дисперсии между классами переднего плана и фона. Непараметрический метод, не требующий ручного задания порога. Ключевые возможности: полностью автоматическое определение порога, устойчивость к изменениям освещённости, быстрые вычисления благодаря подходу на основе гистограммы, отсутствие внешних параметров, единый глобальный порог. Возможности: бинарная сегментация, оптимизация для унимодальных и бимодальных гистограмм, работа с изображениями узкого динамического диапазона или высокой контрастности. Сценарии использования: автоматическая сегментация изображений без вмешательства пользователя, бинаризация документов, выделение водных объектов, обнаружение облаков на спутниковых снимках, картографирование льда/снега. Области применения: предварительная обработка для выявления изменений, простая классификация земного покрова, создание водных масок, предварительная сегментация перед расширенной классификацией. Интерпретация результата: пиксели ниже порога относятся к одному классу, выше — к другому; бимодальность гистограммы указывает на качество разделения; плохо разделённые гистограммы указывают на непригодность для бинарной классификации; статистические меры, такие как межклассовая дисперсия и однородность, характеризуют качество сегментации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "parallelepiped_classification": {
            "name": "Классификация параллелепипедом",
            "description": "Выполняет контролируемую классификацию методом параллелепипедов для мультиспектральных растров с использованием полигональных обучающих данных.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров (по одному на спектральный канал), в виде путей или строки с разделителями."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к полигональному векторному файлу с обучающими областями."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Имя поля атрибутов в обучающих данных, содержащего идентификатор класса."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              }
            }
          },
          "random_forest_classification": {
            "name": "Классификация случайным лесом",
            "description": "Классификация методом случайного леса (Random Forest) присваивает метки с помощью ансамбля деревьев решений, обученных на бутстрэп-выборках со случайными подмножествами признаков. Каждое дерево растёт независимо без отсечения, улавливая сложные нелинейные связи и взаимодействия признаков. Классификация агрегирует голоса обычно 100–1000 деревьев; итоговый класс определяется голосованием большинства. Бутстрэп-обучение и случайный выбор признаков снижают переобучение, позволяя улавливать многомерные закономерности. Важность признаков можно вычислить по изменению ошибки out-of-bag, определяя диагностические спектральные каналы или производные признаки, наиболее значимые для классификации. Ключевые возможности: ранжирование важности переменных с определением ключевых признаков классификации; попиксельная достоверность классификации на основе консенсуса голосов деревьев ансамбля; автоматическая обработка многомерных гиперспектральных данных; устойчивость к спектральным выбросам и шуму; распараллеливаемые обучение и прогнозирование. Инструмент эффективно решает многоклассовые задачи с несбалансированными обучающими наборами. Области применения: классификация земного покрова по мультиспектральным и гиперспектральным данным, выявление изменений с определением спектральных переходов между картами, классификация типов культур по многовременным спутниковым снимкам, классификация городских материалов с различением типов зданий и покрытий, обнаружение аномалий с выявлением спектральных выбросов. Случайные леса стабильно обеспечивают высокую точность в задачах дистанционного зондирования при сравнительно небольшом объёме обучающих данных. Интерпретация результата: число голосов характеризует достоверность классификации; единогласное или уверенное большинство голосов (>80%) указывает на надёжные классификации, тогда как малый перевес говорит о неоднозначности смешанных пикселей. Ранжирование важности признаков определяет спектральные каналы или производные индексы, наиболее диагностичные для классификации. Оценки ошибки out-of-bag характеризуют обобщающую способность без отложенной проверочной выборки. Взаимодействия признаков неявны; высокая точность при определённых сочетаниях каналов указывает на нелинейные спектральные связи.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным/полигональным векторным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле класса в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев в лесу (по умолчанию 200)."
              },
              "min_samples_leaf": {
                "label": "Мин. выборок в листе",
                "description": "Минимальное число выборок, требуемое в листовом узле (по умолчанию 1)."
              },
              "min_samples_split": {
                "label": "Мин. выборок для разделения",
                "description": "Минимальное число выборок, требуемое для разделения внутреннего узла (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "random_forest_regression": {
            "name": "Регрессия случайным лесом",
            "description": "Выполняет контролируемую регрессию методом случайного леса по многоканальным входным растрам.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным векторным обучающим данным."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое целевое поле в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев в лесу (по умолчанию 200)."
              },
              "min_samples_leaf": {
                "label": "Мин. выборок в листе",
                "description": "Минимальное число выборок, требуемое в листовом узле (по умолчанию 1)."
              },
              "min_samples_split": {
                "label": "Мин. выборок для разделения",
                "description": "Минимальное число выборок, требуемое для разделения внутреннего узла (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "svm_classification": {
            "name": "Классификация SVM",
            "description": "Классификация методом опорных векторов (SVM) применяет алгоритмы машинного обучения Support Vector Machine к мультиспектральным данным дистанционного зондирования, разделяя обучающие классы оптимальным расположением гиперплоскости в многомерном спектральном пространстве признаков. Алгоритм: преобразует спектральные векторы признаков в многомерное пространство с помощью ядерных функций (линейной, RBF, полиномиальной), находит гиперплоскость с максимальным зазором, разделяющую обучающие классы, и классифицирует новые пиксели по их положению относительно гиперплоскости; параметры допуска и выбор ядра управляют обобщающей способностью. Эффективно справляется с нелинейным разделением классов. Ключевые возможности: устойчивость к многомерным спектральным данным, отличная обобщающая способность при ограниченном числе обучающих выборок, гибкость ядер для разнообразных спектральных распределений, оценки вероятности/достоверности. Возможности: многоклассовая классификация, допуск мягкого зазора, автоматическая балансировка весов классов. Сценарии использования: детальная классификация земель при скудных обучающих данных, интеграция спектрально-пространственных признаков, выявление изменений, точное земледелие, городское картографирование. Области применения: классификация гиперспектральных изображений, картографирование сложных экосистем, разграничение типов культур, классификация инфраструктуры. Интерпретация результата: принадлежность к классу указывает предсказанную категорию, а пространственная связность отражает качество классификации; оценки вероятности количественно выражают достоверность на уровне пикселей; закономерности ошибочной классификации указывают на недостатки обучающих данных или проблемы спектрального перекрытия.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным/полигональным векторным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле класса в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "kernel": {
                "label": "Ядро",
                "description": "Тип ядра: linear (по умолчанию) или rbf."
              },
              "c": {
                "label": "C",
                "description": "Параметр регуляризации SVM (по умолчанию 1.0)."
              },
              "gamma": {
                "label": "Гамма",
                "description": "Гамма ядра RBF; по умолчанию 1 / число признаков."
              },
              "epoch": {
                "label": "Эпоха",
                "description": "Число эпох обучения (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "svm_regression": {
            "name": "Регрессия SVM",
            "description": "Выполняет контролируемую регрессию методом опорных векторов по многоканальным входным растрам.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным векторным обучающим данным."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое целевое поле в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "kernel": {
                "label": "Ядро",
                "description": "Тип ядра: linear (по умолчанию) или rbf."
              },
              "c": {
                "label": "C",
                "description": "Параметр регуляризации SVM (по умолчанию 1.0)."
              },
              "gamma": {
                "label": "Гамма",
                "description": "Гамма ядра RBF; по умолчанию 1 / число признаков."
              },
              "eps": {
                "label": "Eps",
                "description": "Ширина эпсилон-нечувствительной функции потерь (по умолчанию 0.1)."
              },
              "tol": {
                "label": "Допуск",
                "description": "Допуск оптимизатора (по умолчанию 1e-3)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "change_vector_analysis": {
            "name": "Анализ вектора изменений",
            "description": "Выполняет анализ вектора изменений для двухдатных мультиспектральных наборов данных и возвращает растры величины и направления.",
            "params": {
              "date1": {
                "label": "Дата 1",
                "description": "Список растров более ранней даты в виде массива путей или строки с разделителями-запятыми/точками с запятой."
              },
              "date2": {
                "label": "Дата 2",
                "description": "Список растров более поздней даты в виде массива путей или строки с разделителями-запятыми/точками с запятой."
              },
              "magnitude_output": {
                "label": "Выход магнитуды",
                "description": "Необязательный путь выхода для растра магнитуды вектора."
              },
              "direction_output": {
                "label": "Выход направления",
                "description": "Необязательный путь выхода для растра кодов направления."
              }
            }
          },
          "image_difference_change_detection": {
            "name": "Выявление изменений по разности изображений",
            "description": "Выявление изменений методом разности изображений определяет изменения земного покрова, вычисляя попиксельные мультиспектральные разности между взаимно совмещёнными многовременными спутниковыми съёмками и выделяя области, где спектральные сигнатуры изменились настолько, что превышают статистическую фоновую изменчивость. Алгоритм совмещает изображения на общей сетке пикселей, вычисляет разности в выбранных каналах или вегетационных индексах (например, разность NDVI), применяет статистическую пороговую обработку с использованием средней абсолютной разности и доверительных интервалов для отделения изменений от шума и выдаёт бинарные маски изменений или непрерывные растры величины разности. Разность изображений вычислительно проста, интерпретируема и эффективна для обнаружения крупных изменений растительности, городской застройки или водных объектов. Ключевые возможности: гибкий выбор каналов для целенаправленного выявления изменений в определённых спектральных диапазонах; статистическая пороговая обработка с автоматическими или ручными уровнями доверия; необязательная предварительная обработка (нормализация, вычисление индексов), улучшающая отношение сигнал/шум изменений; быстрая обработка, позволяющая выявлять изменения в крупном масштабе. Области применения: картографирование обезлесения и мониторинг утраты лесов, отслеживание расширения городов по мультиспектральным спутниковым временным рядам, картографирование наводнений до и после события по данным SAR или оптическим данным, выявление изменений в сельском хозяйстве с отслеживанием смены культур. Результат разности изображений выделяет области изменений. На выходе формируются растр маски изменений (бинарный: изменение/нет изменения) с настраиваемыми порогами, непрерывный растр величины разности, выражающий интенсивность изменений, и необязательный растр классов изменений, различающий тип изменения (увеличение, уменьшение); временное агрегирование позволяет отслеживать изменения на протяжении многолетних периодов.",
            "params": {
              "t1_inputs": {
                "label": "Входы T1",
                "description": "Массив путей растров даты 1."
              },
              "t2_inputs": {
                "label": "Входы T2",
                "description": "Массив путей растров даты 2; должен совпадать по длине и порядку с t1_inputs."
              },
              "mode": {
                "label": "Режим",
                "description": "Режим разности: magnitude (по умолчанию) или signed."
              },
              "threshold_sigma": {
                "label": "Порог сигмы",
                "description": "Необязательный порог сигмы для создания бинарной маски изменений."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с t1_inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра для разностного изображения."
              },
              "output_absolute": {
                "label": "Выход абсолютных значений",
                "description": "Необязательный путь выходного растра для абсолютной разности со знаком (|mean(t2-t1)|)."
              },
              "output_signed": {
                "label": "Выход со знаком",
                "description": "Необязательный путь выходного растра для разности со знаком mean(t2-t1)."
              },
              "output_mask": {
                "label": "Выходная маска",
                "description": "Необязательный путь выходного растра для пороговой бинарной маски изменений."
              }
            }
          },
          "pca_based_change_detection": {
            "name": "Выявление изменений на основе PCA",
            "description": "Выявление изменений методом главных компонент определяет изменения земного покрова, вычисляя главные компоненты по многовременным объединённым в стек спектральным данным, где первые компоненты отражают общие закономерности во времени, а последующие выделяют временные изменения. Алгоритм объединяет в стек многовременные мультиспектральные данные (совмещённые на общей сетке), вычисляет PCA, преобразуя их в некоррелированные ортогональные спектрально-временные компоненты, интерпретирует последующие главные компоненты как чувствительные к изменениям и применяет статистическую пороговую обработку к нагрузкам/оценкам компонент для выявления изменений. Выявление на основе PCA особенно эффективно, когда сигналы изменений спектрально слабы, поскольку PCA максимизирует дисперсию и отделяет устойчивые во времени спектральные закономерности (первые компоненты) от временной изменчивости (последующие компоненты). Ключевые возможности: объединение многодатных данных с учётом переменного числа изображений и требований к совмещению; автоматическая максимизация дисперсии с выделением важных спектрально-временных закономерностей; многомерная статистика, улучшающая различение изменений по сравнению с одномерной разностью; необязательная пространственная фильтрация, снижающая пиксельный шум. Области применения: обнаружение слабого стресса растительности до его визуального проявления, мультиспектральное выявление городских изменений с отслеживанием застройки на протяжении десятилетий, оценка последствий стихийных бедствий посредством быстрого картографирования ущерба, экологический мониторинг с выявлением переходов состояния экосистем. Результат выявления на основе PCA различает временные закономерности. На выходе формируются изображения главных компонент с интерпретируемыми спектрально-временными нагрузками, растр вероятности изменений, полученный из оценок последующих компонент, и необязательная классификация изменений, различающая типы изменений; пространственные закономерности компонент позволяют выполнять визуальное распознавание, дополняющее статистическое выявление.",
            "params": {
              "t1_inputs": {
                "label": "Входы T1",
                "description": "Массив путей растров даты 1."
              },
              "t2_inputs": {
                "label": "Входы T2",
                "description": "Массив путей растров даты 2; должен совпадать по длине и порядку с t1_inputs."
              },
              "component": {
                "label": "Компонента",
                "description": "Индекс главной компоненты для вывода, начиная с 1 (по умолчанию 1)."
              },
              "standardized": {
                "label": "Стандартизировано",
                "description": "Если true, использовать PCA по корреляционной матрице для векторов изменений (по умолчанию false)."
              },
              "threshold_sigma": {
                "label": "Порог сигмы",
                "description": "Необязательный порог сигмы по абсолютной оценке PC для выхода бинарной маски."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с t1_inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра для абсолютной оценки выбранной PC."
              },
              "output_mask": {
                "label": "Выходная маска",
                "description": "Необязательный путь выходного растра для пороговой бинарной маски (0/1)."
              },
              "output_report": {
                "label": "Выходной отчёт",
                "description": "Необязательный путь выходного отчёта JSON для собственных значений, объяснённой дисперсии и нагрузок компонент."
              }
            }
          },
          "post_classification_change": {
            "name": "Постклассификационные изменения",
            "description": "Выявление изменений после классификации количественно оценивает переходы земного покрова/землепользования (LULC) путём прямого сравнения независимо классифицированных карт за разные периоды времени. Попиксельное сравнение классов выявляет переходы с указанием классов «из» и «в». Матрицы перекрёстной табуляции (матрицы ошибок) количественно выражают частоты переходов, показывая доминирующие пути изменений. Метод требует согласованных схем классификации для всех дат; точность зависит от качества классификации на каждом временном шаге. Ключевые возможности: прямое картографирование переходов между классами; независимость отдельных классификаций; возможность комбинировать разнородные сенсоры; количественная оценка частот переходов; выявление очагов изменений. Сценарии использования: мониторинг обезлесения; картографирование роста городов; отслеживание сельскохозяйственного землепользования; выявление утраты водно-болотных угодий; оценка фрагментации местообитаний. Интерпретация результата: матрицы переходов показывают значения без изменений на диагонали и частоты переходов вне диагонали. Карты изменений выделяют изменившиеся пиксели; вывод с кодированием переходов кодирует как исходный, так и целевой класс, облегчая интерпретацию. Высокая точность требует качественных классификаций; ошибки классификации на любой из дат переходят в ошибки выявления изменений. Агрегирование переходов выявляет доминирующие закономерности (например, лес→сельхозугодья, луг→застройка). Субпиксельные переходы не могут быть обнаружены методом сравнения после классификации; мелкомасштабные изменения могут быть пропущены.",
            "params": {
              "t1_classified": {
                "label": "Классификация T1",
                "description": "Путь классифицированного растра даты 1."
              },
              "t2_classified": {
                "label": "Классификация T2",
                "description": "Путь классифицированного растра даты 2."
              },
              "transition_scale": {
                "label": "Масштаб переходов",
                "description": "Масштабный коэффициент кодирования переходов (по умолчанию 1000): code = class1 * scale + class2."
              },
              "t1_class_remap": {
                "label": "Переназначение классов T1",
                "description": "Необязательная таблица переназначения классов даты 1 в виде объекта {\"old\": new, ...}."
              },
              "t2_class_remap": {
                "label": "Переназначение классов T2",
                "description": "Необязательная таблица переназначения классов даты 2 в виде объекта {\"old\": new, ...}."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать t2_classified в CRS t1_classified при необходимости."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра с кодами переходов."
              }
            }
          },
          "write_function_memory_insertion": {
            "name": "Вставка функции памяти записи",
            "description": "Создаёт упакованный RGB-композит для визуализации изменений по двум или трём одноканальным датам.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Одноканальный растр первой даты."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Одноканальный растр второй даты."
              },
              "input3": {
                "label": "Вход 3",
                "description": "Необязательный одноканальный растр третьей даты; если не указан, для синего канала используется input2."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "brdf_normalization": {
            "name": "Нормализация BRDF",
            "description": "Нормализация BRDF для одной сцены с помощью C-коррекции или метода Minnaert с использованием геометрии уклона/экспозиции из DEM.",
            "params": {
              "input_raster": {
                "label": "Входной растр",
                "description": "Входной растр отражения для нормализации (один канал или многоканальный стек)."
              },
              "input_dem": {
                "label": "Входная DEM",
                "description": "Растр DEM, совмещённый с входом (та же сетка или будет передискретизирован для соответствия)."
              },
              "solar_zenith_deg": {
                "label": "Зенитный угол Солнца (град)",
                "description": "Зенитный угол Солнца в градусах на момент съёмки."
              },
              "solar_azimuth_deg": {
                "label": "Азимут Солнца (град)",
                "description": "Азимут Солнца в градусах (по часовой стрелке от севера) на момент съёмки."
              },
              "method": {
                "label": "Метод",
                "description": "Метод коррекции: c_correction (по умолчанию) или minnaert."
              },
              "minnaert_k": {
                "label": "Константа Миннарта K",
                "description": "Коэффициент Миннарта k в [0,1] (по умолчанию 0.5). Используется только при method=minnaert."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Вертикальное преувеличение для вычисления уклона/экспозиции DEM (по умолчанию 1.0)."
              },
              "output_prefix": {
                "label": "Префикс выхода",
                "description": "Префикс для выходных файлов (по умолчанию brdf_normalized)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выхода для нормализованного растра (переопределяет output_prefix в режиме одного выхода)."
              }
            }
          },
          "correct_vignetting": {
            "name": "Коррекция виньетирования",
            "description": "Коррекция виньетирования объектива устраняет радиометрические артефакты, вызванные внеосевыми оптическими свойствами объектива, из-за которых края изображения получают меньше света, чем его центр, что создаёт искусственные градиенты яркости, не зависящие от изменений отражательной способности поверхности. Коррекция виньетирования применяет пространственно изменяющиеся мультипликативные коэффициенты, вычисленные по моделям профиля виньетирования (гауссовой формулировке или закону косинуса в четвёртой степени), откалиброванным под характеристики сенсора, восстанавливая равномерный радиометрический отклик по всему полю зрения изображения. Этот этап предварительной обработки критически важен для мультиспектрального и гиперспектрального дистанционного зондирования, где виньетирование искажало бы спектральный анализ и вносило систематические ошибки в процессы классификации и выявления изменений. Ключевые возможности: автоматическая оценка профиля виньетирования по статистике изображения или по заданным пользователем параметрам калибровки; пространственно изменяющиеся коэффициенты коррекции, применяемые попиксельно без артефактов интерполяции; необязательное маскирование перекорректированных периферийных пикселей, предотвращающее усиление шумных краёв; поканальная коррекция с учётом различного виньетирования в спектральных каналах. Области применения: предварительная обработка для алгоритмов спектральной классификации, чувствительных к радиометрической согласованности; подготовка мозаик, где границы виньетирования вызывают видимые разрывы; точное радиометрическое сравнение в пределах кадра; гиперспектральный анализ, требующий равномерного отклика на освещение. Снимки с коррекцией виньетирования имеют равномерную яркость по всему полю зрения. На выходе затемнение краёв устранено, а радиометрический отклик равномерен от центра изображения до краёв; периферийные пикселы при сильной коррекции могут иметь повышенный шум; скорректированные снимки органично встраиваются в процессы мультиспектрального анализа без радиометрических артефактов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входное растровое изображение."
              },
              "pp": {
                "label": "Главная точка",
                "description": "Путь точечного вектора (или типизированный векторный объект), содержащего главную точку."
              },
              "focal_length": {
                "label": "Фокусное расстояние",
                "description": "Фокусное расстояние камеры в мм (по умолчанию 304.8)."
              },
              "image_width": {
                "label": "Ширина изображения",
                "description": "Расстояние между левым и правым краями изображения в мм (по умолчанию 228.6)."
              },
              "n": {
                "label": "N",
                "description": "Показатель степени n косинусной модели (по умолчанию 4.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "dark_object_subtraction": {
            "name": "Вычитание тёмного объекта",
            "description": "Вычитание тёмного объекта (DOS) — простой, но эффективный эвристический метод удаления атмосферной дымки, не требующий вспомогательных метеорологических данных или сложных моделей переноса излучения. Метод основан на принципе, что нулевая отражательная способность должна давать нулевой сигнал отражения (без учёта рэлеевского рассеяния); любой сигнал, наблюдаемый от оптически чёрных поверхностей (глубокой воды, густой лесной тени, городского асфальта), приписывается атмосферной радиации пути, вызванной рассеянием на аэрозолях. Инструмент находит минимальное цифровое значение в каждом канале по всему изображению, интерпретирует его как атмосферную дымку и вычитает его из всех пикселей как постоянное смещение для канала; более сложные варианты (DOS2, DOS3, DOS4) учитывают рэлеевское рассеяние и переменную аэрозольную оптическую толщину с помощью вегетационных индексов или кластеризации тёмных пикселей. Ключевые возможности: анализ гистограммы для выделения тёмных объектов и отделения зависящей от сцены дымки от истинной нулевой отражательной способности; необязательное маскирование известных объектов с высокой отражательной способностью (застройка, снег, облака), которые исказили бы определение тёмных объектов; поканальная коррекция дымки; быстрые вычисления, подходящие для обработки в реальном времени или в крупном масштабе. Сценарии использования: быстрые оценки отражательной способности для предварительного просмотра, мониторинг растительности и качества воды, где абсолютная калибровка менее важна, чем относительные изменения, оперативное картографирование при ликвидации последствий бедствий и архивные данные, для которых точная информация об аэрозолях недоступна. Входные данные включают отражательную способность на верхней границе атмосферы или откалиброванную яркость, необязательные маски земного покрова для исключения ярких объектов и метаданные сцены. На выходе формируются скорректированная от дымки отражательная способность, поканальные оценки атмосферной радиации пути и флаги качества, указывающие достоверность определения тёмных объектов (например, мало тёмных пикселей, сцена с преобладанием застройки). Хотя DOS груб по сравнению с моделями переноса излучения, он остаётся практичным для многовременного анализа и глобального картографирования, когда сложные атмосферные данные недоступны.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входной стек растров (один или несколько растров)."
              },
              "percentile": {
                "label": "Перцентиль",
                "description": "Перцентиль тёмного объекта по каналам (по умолчанию 1.0)."
              },
              "clamp_non_negative": {
                "label": "Ограничить неотрицательными",
                "description": "Если true, ограничивать скорректированные значения ниже нуля нулём (по умолчанию true)."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать входы в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              },
              "output_diagnostic_offsets": {
                "label": "Выход диагностических смещений",
                "description": "Необязательный путь выходного растра для диагностики смещений тёмного объекта по каналам."
              }
            }
          },
          "dn_to_toa_reflectance": {
            "name": "DN в отражательную способность TOA",
            "description": "Преобразование цифровых значений в отражательную способность на верхней границе атмосферы переводит исходные цифровые значения сенсора в физически осмысленные значения спектральной отражательной способности, применяя поканальные коэффициенты радиометрической калибровки, полученные из метаданных спутника. Преобразование включает радиометрическое масштабирование, коррекцию по внеатмосферной спектральной солнечной облучённости, компенсацию зенитного угла Солнца и необязательную нормализацию по расстоянию Земля–Солнце, давая значения отражательной способности, непосредственно сопоставимые между сенсорами, моментами съёмки и географическими местоположениями. Отражательная способность на верхней границе атмосферы представляет долю падающей солнечной энергии, отражённой объектами земной поверхности, на уровне сенсора до учёта атмосферных эффектов и служит базовой величиной для количественного анализа данных дистанционного зондирования. Ключевые возможности: применение поканальных коэффициентов калибровки с полным разбором метаданных стандартных спутниковых продуктов; автоматический расчёт геометрии Солнца по времени и месту съёмки; необязательная коррекция расстояния Земля–Солнце для учёта сезонной изменчивости; гибкая поддержка нескольких типов сенсоров со стандартизированными форматами коэффициентов. Области применения охватывают количественное выявление изменений в согласованных физических единицах, абсолютное радиометрическое сравнение многовременных съёмок и разных сенсоров, расчёт спектральных вегетационных индексов, требующий точной отражательной способности, и межсенсорную валидацию при работе со спутниковыми группировками. Отражательная способность TOA обеспечивает строгие процессы анализа и научно обоснованные результаты. Выходные значения отражательной способности лежат в диапазоне 0–1 (иногда выражаются как 0–10000 для целочисленной точности) и представляют безразмерные доли; в метаданные встраиваются использованные коэффициенты калибровки и параметры геометрии сенсора; отрицательные значения указывают на проблемы качества данных, требующие маскирования перед анализом.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входной стек растров DN (один или несколько растров)."
              },
              "reflectance_mult": {
                "label": "Множитель отражения",
                "description": "Мультипликативные коэффициенты по каналам, скаляр или массив размером по inputs."
              },
              "reflectance_add": {
                "label": "Смещение отражения",
                "description": "Аддитивные коэффициенты по каналам, скаляр или массив размером по inputs (по умолчанию 0)."
              },
              "sensor_bundle_root": {
                "label": "Корень пакета сенсора",
                "description": "Необязательный корень пакета Landsat/Sentinel-2 для автоматического вывода коэффициентов, когда явные коэффициенты не указаны."
              },
              "sun_elevation_deg": {
                "label": "Высота Солнца (град)",
                "description": "Необязательный угол высоты Солнца в градусах для косинусной коррекции. Автоматически выводится из метаданных пакета при наличии."
              },
              "apply_solar_correction": {
                "label": "Применить солнечную коррекцию",
                "description": "Если true (по умолчанию), делить на sin(sun_elevation)."
              },
              "clamp_unit_interval": {
                "label": "Ограничить единичным интервалом",
                "description": "Если true (по умолчанию), ограничивать выходы диапазоном [0, 1]."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать входы в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "terrain_corrected_optical_analytics": {
            "name": "Оптическая аналитика с коррекцией рельефа",
            "description": "Топографическая C-коррекция мультиспектральных оптических каналов с использованием взаимно совмещённой DEM. Выдаёт стек отражательной способности поверхности, коэффициент коррекции, маску облаков/теней и оценку достоверности качества.",
            "params": {
              "input_dem": {
                "label": "Входная DEM",
                "description": "Растр DEM, совмещённый с оптическими каналами."
              },
              "bundle_root": {
                "label": "Корень пакета",
                "description": "Необязательный корневой каталог пакета оптического сенсора (сейчас Sentinel-2 SAFE, Landsat или DIMAP SPOT/Pleiades) для автоматического определения требуемых каналов, QA при наличии и солнечных метаданных, когда явные входы не указаны."
              },
              "input_red": {
                "label": "Входной красный канал",
                "description": "Растр красного канала (необязателен, если указан bundle_root)."
              },
              "input_nir": {
                "label": "Входной NIR-канал",
                "description": "Растр канала NIR (необязателен, если указан bundle_root)."
              },
              "input_green": {
                "label": "Входной зелёный канал",
                "description": "Растр зелёного канала (необязательно)."
              },
              "input_blue": {
                "label": "Входной синий канал",
                "description": "Растр синего канала (необязательно). Автоматически определяется из метаданных пакета, если указан bundle_root."
              },
              "solar_mode": {
                "label": "Солнечный режим",
                "description": "Режим определения солнечных углов: auto, manual, metadata, datetime_location."
              },
              "solar_zenith_deg": {
                "label": "Зенитный угол Солнца (град)",
                "description": "Зенитный угол Солнца в градусах (обязателен в режиме manual)."
              },
              "solar_azimuth_deg": {
                "label": "Азимут Солнца (град)",
                "description": "Азимут Солнца в градусах (по часовой стрелке от севера, обязателен в режиме manual)."
              },
              "acquisition_datetime_utc": {
                "label": "Дата и время съёмки (UTC)",
                "description": "Метка времени съёмки в формате RFC3339 UTC для режима datetime_location."
              },
              "latitude": {
                "label": "Широта",
                "description": "Необязательная широта для режима datetime_location."
              },
              "longitude": {
                "label": "Долгота",
                "description": "Необязательная долгота для режима datetime_location."
              },
              "profile": {
                "label": "Профиль",
                "description": "Профиль обработки: conservative, balanced, fast."
              },
              "cloud_threshold": {
                "label": "Порог облаков",
                "description": "Необязательный порог облаков в единицах исходного канала. Определяется автоматически, если не указан."
              },
              "shadow_threshold": {
                "label": "Порог теней",
                "description": "Необязательный порог теней облаков в единицах исходного канала. Определяется автоматически, если не указан."
              },
              "qa_mask": {
                "label": "Маска QA",
                "description": "Необязательный путь растра маски QA."
              },
              "qa_mask_format": {
                "label": "Формат маски QA",
                "description": "Кодировка маски QA: auto, landsat_qa_pixel, sentinel2_scl, sentinel2_qa60, binary."
              },
              "mask_strategy": {
                "label": "Стратегия маскирования",
                "description": "Стратегия маскирования: auto, qa_only, heuristic_only, qa_plus_heuristic."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Вертикальное преувеличение для уклона/экспозиции."
              },
              "output_prefix": {
                "label": "Префикс выхода",
                "description": "Префикс для всех выходных артефактов."
              }
            }
          },
          "land_surface_temperature_single_channel": {
            "name": "Температура поверхности (одноканальный метод)",
            "description": "Восстановление температуры земной поверхности по одному тепловому инфракрасному каналу оценивает радиационную температуру поверхностного слоя путём обращения уравнения переноса излучения. Цифровые значения сенсора преобразуются в спектральную яркость с помощью специфичных для сенсора коэффициентов калибровки; яркость обращается в яркостную температуру через функцию Планка с использованием тепловых констант канала; яркостная температура преобразуется в физическую LST с помощью эмпирических поправок на излучательную способность. Излучательная способность выводится из вегетационных индексов или задаётся напрямую, корректируя зависящие от материала вариации тепловой излучательной способности. Ключевые возможности: требуется один тепловой канал; простая радиометрическая обработка; быстрые вычисления; не нужны несколько каналов; оценка излучательной способности по вегетационному индексу; прямой вывод физической температуры. Сценарии использования: картографирование городских островов тепла; мониторинг засушливого стресса; выявление геотермальных объектов; отслеживание тепловых сигнатур лесных пожаров; управление водными ресурсами в сельском хозяйстве. Интерпретация результата: выходные данные — радиационная температура поверхностного слоя в кельвинах (или в градусах Цельсия после преобразования). Одноканальное восстановление не может полностью устранить влияние атмосферного водяного пара; остаточное атмосферное смещение обычно составляет 2-5 K. Ошибки излучательной способности переходят напрямую: ошибка излучательной способности ±0.05 ≈ ошибка температуры ±1-2 K. Излучательная способность на основе растительности меняется с NDVI; голая почва имеет более низкую излучательную способность, чем растительность. Временные ряды LST выявляют тенденции нагрева/охлаждения; аномалии LST > фон ± 5K указывают на тепловые объекты.",
            "params": {
              "thermal_input": {
                "label": "Тепловой вход",
                "description": "Путь теплового растра (по умолчанию DN или яркостная температура, если input_is_brightness_temp=true)."
              },
              "input_is_brightness_temp": {
                "label": "Вход — яркостная температура",
                "description": "Если true, thermal_input уже является яркостной температурой в кельвинах (по умолчанию false)."
              },
              "emissivity_input": {
                "label": "Вход излучательной способности",
                "description": "Необязательный путь растра излучательной способности, выровненного с thermal_input."
              },
              "emissivity_constant": {
                "label": "Константа излучательной способности",
                "description": "Резервная излучательная способность, когда emissivity_input не указан (по умолчанию 0.98)."
              },
              "sensor_bundle_root": {
                "label": "Корень пакета сенсора",
                "description": "Необязательный корень пакета Landsat для вывода тепловой радиояркости и констант Планка."
              },
              "thermal_band_number": {
                "label": "Номер теплового канала",
                "description": "Номер теплового канала для поиска в метаданных (по умолчанию 10)."
              },
              "radiance_mult": {
                "label": "Множитель радиояркости",
                "description": "Мультипликативный коэффициент тепловой радиояркости для преобразования DN->радиояркость."
              },
              "radiance_add": {
                "label": "Смещение радиояркости",
                "description": "Аддитивный коэффициент тепловой радиояркости для преобразования DN->радиояркость."
              },
              "k1_constant": {
                "label": "Константа K1",
                "description": "Тепловая константа Планка K1."
              },
              "k2_constant": {
                "label": "Константа K2",
                "description": "Тепловая константа Планка K2."
              },
              "wavelength_um": {
                "label": "Длина волны (мкм)",
                "description": "Эффективная тепловая длина волны в микрометрах (по умолчанию выводится по thermal_band_number)."
              },
              "output_units": {
                "label": "Выходные единицы",
                "description": "Выходные единицы: celsius (по умолчанию) или kelvin."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать emissivity_input в CRS thermal_input при необходимости."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "land_surface_temperature_split_window": {
            "name": "Температура поверхности (метод расщеплённого окна)",
            "description": "Восстановление LST методом расщеплённого окна использует два тепловых инфракрасных канала для одновременной оценки температуры и излучательной способности поверхности путём обращения уравнения переноса излучения. Различие атмосферного поглощения между двумя каналами (обычно в области 10-12 мкм) позволяет корректировать влияние атмосферного водяного пара, повышая точность по сравнению с одноканальными методами. Яркостные температуры обоих каналов обращаются с параметризацией излучательной способности на основе доли растительности или с заданными пользователем сетками излучательной способности. Ключевые возможности: требуются два тепловых канала; атмосферная коррекция за счёт дифференциального поглощения; одновременное восстановление температуры и излучательной способности; опубликованные алгоритмы для стандартных сенсоров; лучшая атмосферная компенсация по сравнению с одноканальными методами. Сценарии использования: картографирование городских островов тепла; выявление сельскохозяйственной засухи; выявление геотермальных объектов; исследования взаимодействия суши и атмосферы; обнаружение вулканических/тепловых аномалий. Интерпретация результата: выходные данные — радиационная температура поверхности с улучшенной атмосферной коррекцией. Восстановление методом расщеплённого окна снижает смещение из-за атмосферного водяного пара до <1-2 K по сравнению с ошибками 2-5 K одноканальных методов. Компромисс между температурой и излучательной способностью сохраняется: области с высоким вегетационным индексом имеют низкую излучательную способность, что требует внимательной интерпретации. Неоднородные поверхности (смесь растительности и почвы) показывают промежуточные значения. Временная согласованность повышает надёжность выявления изменений; тренды LST > ±3K указывают на значительные тепловые изменения.",
            "params": {
              "thermal1_input": {
                "label": "Тепловой вход 1",
                "description": "Путь первого теплового растра (например, Landsat B10)."
              },
              "thermal2_input": {
                "label": "Тепловой вход 2",
                "description": "Путь второго теплового растра (например, Landsat B11)."
              },
              "input_is_brightness_temp": {
                "label": "Вход — яркостная температура",
                "description": "Если true, тепловые входы уже являются яркостными температурами в кельвинах (по умолчанию false)."
              },
              "emissivity_mean_input": {
                "label": "Вход средней излучательной способности",
                "description": "Необязательный путь растра средней излучательной способности."
              },
              "emissivity_delta_input": {
                "label": "Вход разности излучательной способности",
                "description": "Необязательный путь растра разности излучательной способности (epsilon1 - epsilon2)."
              },
              "emissivity_mean_constant": {
                "label": "Константа средней излучательной способности",
                "description": "Резервная константа средней излучательной способности при отсутствии emissivity_mean_input (по умолчанию 0.98)."
              },
              "emissivity_delta_constant": {
                "label": "Константа разности излучательной способности",
                "description": "Резервная константа разности излучательной способности при отсутствии emissivity_delta_input (по умолчанию 0.0)."
              },
              "sensor_bundle_root": {
                "label": "Корень пакета сенсора",
                "description": "Необязательный корень пакета Landsat для вывода тепловой радиояркости и констант Планка."
              },
              "thermal_band1_number": {
                "label": "Номер теплового канала 1",
                "description": "Номер канала для поиска метаданных thermal1_input (по умолчанию 10)."
              },
              "thermal_band2_number": {
                "label": "Номер теплового канала 2",
                "description": "Номер канала для поиска метаданных thermal2_input (по умолчанию 11)."
              },
              "radiance1_mult": {
                "label": "Множитель радиояркости 1",
                "description": "Мультипликативный коэффициент радиояркости канала 1."
              },
              "radiance1_add": {
                "label": "Смещение радиояркости 1",
                "description": "Аддитивный коэффициент радиояркости канала 1."
              },
              "k1_1": {
                "label": "K1 1",
                "description": "Константа Планка K1 канала 1."
              },
              "k2_1": {
                "label": "K2 1",
                "description": "Константа Планка K2 канала 1."
              },
              "radiance2_mult": {
                "label": "Множитель радиояркости 2",
                "description": "Мультипликативный коэффициент радиояркости канала 2."
              },
              "radiance2_add": {
                "label": "Смещение радиояркости 2",
                "description": "Аддитивный коэффициент радиояркости канала 2."
              },
              "k1_2": {
                "label": "K1 2",
                "description": "Константа Планка K1 канала 2."
              },
              "k2_2": {
                "label": "K2 2",
                "description": "Константа Планка K2 канала 2."
              },
              "coeff_a0": {
                "label": "Коэффициент A0",
                "description": "Коэффициент расщеплённого окна a0 (по умолчанию 0.0)."
              },
              "coeff_a1": {
                "label": "Коэффициент A1",
                "description": "Коэффициент расщеплённого окна a1 для члена T1 (по умолчанию 1.0)."
              },
              "coeff_a2": {
                "label": "Коэффициент A2",
                "description": "Коэффициент расщеплённого окна a2 для члена (T1-T2) (по умолчанию 0.0)."
              },
              "coeff_a3": {
                "label": "Коэффициент A3",
                "description": "Коэффициент расщеплённого окна a3 для члена (T1-T2)^2 (по умолчанию 0.0)."
              },
              "coeff_a4": {
                "label": "Коэффициент A4",
                "description": "Коэффициент расщеплённого окна a4 для члена (1-emissivity_mean) (по умолчанию 0.0)."
              },
              "coeff_a5": {
                "label": "Коэффициент A5",
                "description": "Коэффициент расщеплённого окна a5 для члена emissivity_delta (по умолчанию 0.0)."
              },
              "output_units": {
                "label": "Выходные единицы",
                "description": "Выходные единицы: celsius (по умолчанию) или kelvin."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать дополнительные растры в соответствие с CRS thermal1_input при необходимости."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "ndvi_based_emissivity": {
            "name": "Излучательная способность на основе NDVI",
            "description": "Оценка излучательной способности земной поверхности на основе NDVI выводит широкополосную тепловую излучательную способность из доли растительности, вычисленной по NDVI, что позволяет вносить поправки переноса теплового излучения при восстановлении температуры земной поверхности по спутниковым данным теплового инфракрасного диапазона. Алгоритм вычисляет NDVI по отражательной способности в красном и ближнем инфракрасном диапазонах, преобразует NDVI в долю растительности, а затем применяет эмпирические зависимости между долей растительности и излучательной способностью, подтверждённые полевыми измерениями и моделированием переноса излучения. Растительность существенно влияет на тепловую излучательную способность: чем больше растительности, тем ближе излучательная способность к ~0.99, тогда как излучательная способность голой почвы составляет ~0.90-0.98 в зависимости от состава почвы и шероховатости поверхности. Ключевые возможности: автоматический расчёт доли растительности по NDVI без полевой калибровки; стандартные эмпирические зависимости, основанные на физической теории переноса излучения; необязательный анализ чувствительности для исследования вариаций излучательной способности; прямая совместимость со спутниковыми данными теплового инфракрасного диапазона. Области применения: восстановление температуры земной поверхности по тепловым спутниковым данным, требующее точных поправок на излучательную способность (Landsat, MODIS, Sentinel-3); анализ городских островов тепла с поправкой на изменчивую растительность; тепловое моделирование в задачах водных ресурсов и сельского хозяйства; климатические приложения, требующие согласованных глобальных тепловых наборов данных. Излучательная способность на основе NDVI обеспечивает точную тепловую коррекцию. На выходе формируются растр излучательной способности (0-1), пригодный для коррекции переноса теплового излучения, промежуточный продукт доли растительности для интерпретации и метаданные, документирующие эмпирические зависимости и принятые свойства почвы/поверхности; значения излучательной способности помогают оценить неопределённость тепловой коррекции и пригодность для конкретных приложений.",
            "params": {
              "red_input": {
                "label": "Красный вход",
                "description": "Путь растра красного канала."
              },
              "nir_input": {
                "label": "NIR-вход",
                "description": "Путь растра канала NIR."
              },
              "ndvi_soil": {
                "label": "NDVI почвы",
                "description": "Порог NDVI для доли открытой почвы (по умолчанию 0.2)."
              },
              "ndvi_vegetation": {
                "label": "NDVI растительности",
                "description": "Порог NDVI для доли полной растительности (по умолчанию 0.5)."
              },
              "emissivity_soil": {
                "label": "Излучательная способность почвы",
                "description": "Принимаемая излучательная способность почвы (по умолчанию 0.97)."
              },
              "emissivity_vegetation": {
                "label": "Излучательная способность растительности",
                "description": "Принимаемая излучательная способность растительности (по умолчанию 0.99)."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать nir_input в CRS red_input при необходимости."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "continuum_removal": {
            "name": "Удаление континуума",
            "description": "Удаление континуума нормализует мультиспектральные спектры, оценивая верхнюю выпуклую оболочку (континуум), огибающую спектр, и деля значение каждого канала на соответствующее значение континуума. Устраняет общий спектральный наклон и вариации яркости, улучшая визуализацию признаков поглощения (полос, глубин). Глубины и положения полос поглощения стандартизируются, что позволяет идентифицировать минералы/материалы по спектральным библиотекам. Линия континуума вычисляется алгоритмом выпуклой оболочки, соединяющим локальные максимумы по спектральному диапазону. Ключевые возможности: удаление спектрального континуума; усиление признаков поглощения; нормализация вариаций яркости; сопоставление со спектральными библиотеками; стандартизация формы спектра. Сценарии использования: идентификация минералов; классификация материалов; спектральный анализ растительности; обнаружение спектральных аномалий; картографирование признаков поглощения. Интерпретация результата: спектры с удалённым континуумом показывают признаки поглощения (значения <1.0), указывающие на специфичные для материала полосы. Глубины поглощения указывают силу признака; неглубокие признаки (<0.2) указывают на второстепенные компоненты; глубокие признаки (>0.5) — на доминирующие полосы поглощения. Положения признаков по длине волны позволяют идентифицировать материалы по эталонным библиотекам. Плоские спектры с удалённым континуумом (около 1.0) указывают на спектрально нейтральные материалы.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входной стек растров (один растр на канал)."
              },
              "wavelengths": {
                "label": "Длины волн",
                "description": "Необязательный строго возрастающий массив длин волн, соответствующий длине inputs."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного многоканального растра."
              }
            }
          },
          "linear_spectral_unmixing": {
            "name": "Линейное спектральное разделение",
            "description": "Линейное спектральное разложение представляет мультиспектральный вектор каждого пикселя как неотрицательную линейную комбинацию спектров эндмемберов, представляющих сигнатуры чистых материалов. Оптимизация методом неотрицательных наименьших квадратов решает задачу min ||y - Ax||² при условии x ≥ 0, где y — спектр пикселя, A содержит сигнатуры эндмемберов, а x — доли содержания. Накладывается ограничение суммы, равной единице, чтобы значения долей представляли физические пропорции. Эндмемберы получаются из обучающих данных, библиотечных баз данных или извлекаются алгоритмами извлечения эндмемберов. Ключевые возможности: субпиксельная оценка материалов; физическая интерпретация долей содержания; поддержка нескольких эндмемберов; вывод, ограниченный допустимым диапазоном [0,1]; выявление изменений материалов. Сценарии использования: картографирование долей земного покрова; оценка минерального состава; инвентаризация городских материалов; доли растительности/почвы/непроницаемых поверхностей; классификация на основе спектральных библиотек. Интерпретация результата: выходные карты долей показывают попиксельные доли материалов, в сумме равные 1.0. Доли <0.1 указывают на второстепенные компоненты; доли >0.7 — на доминирующие материалы. Остаточная ошибка характеризует качество разложения; малые остатки указывают на хорошее спектральное соответствие; большие остатки — на несоответствие эндмемберов или сложность пикселя.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входной стек растров (один растр на канал)."
              },
              "endmembers": {
                "label": "Эндмемберы",
                "description": "Сигнатуры эндмемберов в виде массива объектов {name, values} или числовых массивов."
              },
              "sum_to_one": {
                "label": "Сумма равна единице",
                "description": "Если true (по умолчанию), нормализовать неотрицательные доли так, чтобы их сумма равнялась единице."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число итераций проецируемого градиента (по умолчанию 80)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Размер шага проецируемого градиента (по умолчанию 0.05)."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного многоканального растра долей."
              },
              "output_residual": {
                "label": "Выход остатков",
                "description": "Необязательный путь выходного растра RMS остатков."
              }
            }
          },
          "minimum_noise_fraction": {
            "name": "Минимальная доля шума",
            "description": "Преобразование минимальной доли шума (MNF) обрабатывает гиперспектральные данные в два этапа: оценка ковариации шума, затем отбеливание шума и анализ главных компонент. Отбеливание шума устраняет корреляцию шума между каналами; PCA в отбеленном пространстве определяет направления с преобладанием сигнала. Выходные компоненты упорядочены по отношению сигнал/шум: первые компоненты представляют сигнал, последующие — шум. Позволяет снижать шум путём отбрасывания компонент без артефактов обычного сглаживания. Ключевые возможности: отделение сигнала от шума; концентрация шума в последних компонентах; выбор компонент для фильтрации шума; сохранение спектральной точности; снижение размерности. Сценарии использования: подавление шума на гиперспектральных изображениях; снижение размерности для классификации; усиление сигнала; характеристика шума; оценка качества изображения. Интерпретация результата: первые 1-3 компоненты MNF обычно содержат 70-90% сигнала; последующие компоненты становятся всё более шумными. Отбрасывание компонент (сохранение первых N компонент) удаляет шум, сохраняя существенную спектральную информацию. Изображения компонент MNF позволяют визуально оценить шум; стандартное отклонение последних компонент указывает на уровень шума.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входной стек растров (один растр на канал)."
              },
              "num_components": {
                "label": "Число компонент",
                "description": "Число выходных компонент MNF (по умолчанию: все каналы)."
              },
              "noise_mode": {
                "label": "Режим шума",
                "description": "Режим оценки шума: difference_x (по умолчанию) или difference_y."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного многоканального растра компонент MNF."
              },
              "output_inverse": {
                "label": "Обратный выход",
                "description": "Необязательный путь восстановленного многоканального растра по сохранённым компонентам MNF."
              }
            }
          },
          "spectral_angle_mapper": {
            "name": "Спектральный угловой картограф",
            "description": "Картирование спектрального угла (SAM) классифицирует пиксели, вычисляя спектральные углы между спектром каждого пикселя и спектрами эталонной библиотеки и присваивая пиксели библиотечному спектру с минимальным углом, что соответствует максимальному спектральному сходству независимо от интенсивности освещения. SAM рассматривает каждый пиксель и эталонный спектр как векторы в N-мерном спектральном пространстве, вычисляя углы между векторами с помощью скалярного произведения и обратного косинуса. Такая классификация на основе спектрального угла инвариантна к эффектам освещения и рельефа, которые масштабируют общую яркость, но сохраняют форму спектра, что делает её устойчивой для сложного рельефа и меняющихся условий съёмки. Ключевые возможности: автоматическое определение порога спектрального угла для вероятностной оценки достоверности классификации; импорт эталонной библиотеки с поддержкой пользовательских спектральных сигнатур из полевых образцов или спектральных библиотек; инвариантность к освещению, обеспечивающая учёт переменного освещения при сохранении спектрального различения; быстрые вычисления, позволяющие классифицировать большие изображения в реальном времени. Типичные области применения: идентификация материалов и геологическое картографирование с использованием спектральных библиотек USGS, классификация видов растительности с объединением мультиспектральных спутниковых данных и полевых спектров, поиск полезных ископаемых по данным гиперспектральной аэросъёмки и оценка точности путём сравнения спектров изображения с эталонными сигнатурами, собранными на местности. Результат SAM позволяет уверенно идентифицировать материалы по сигнатурам формы спектра. Вывод классификации — одноканальное изображение с целочисленными метками классов, соответствующими записям библиотеки; растр достоверности при необходимости содержит минимальные спектральные углы для каждого пикселя, позволяя выполнять фильтрацию по порогу; результат обеспечивает прямую идентификацию материалов и фильтрацию по достоверности.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входной стек растров (один растр на канал)."
              },
              "endmembers": {
                "label": "Эндмемберы",
                "description": "Сигнатуры эндмемберов в виде массива объектов {name, values} или числовых массивов."
              },
              "threshold_angle_deg": {
                "label": "Пороговый угол (град)",
                "description": "Необязательный максимальный допустимый спектральный угол в градусах; несопоставленные пиксели получают класс 0."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра классов."
              },
              "output_angle": {
                "label": "Выход угла",
                "description": "Необязательный путь выходного растра минимального спектрального угла (градусы)."
              }
            }
          },
          "spectral_library_matching": {
            "name": "Сопоставление со спектральной библиотекой",
            "description": "Сопоставление со спектральной библиотекой выполняет классификацию, сравнивая спектры пикселей изображения со спектрами эталонной библиотеки с использованием нескольких метрик сходства, включая спектральный угол (угол между векторами спектров), евклидово расстояние (разность величин) и спектральную информационную дивергенцию. Алгоритм принимает предоставленную пользователем эталонную спектральную библиотеку с известными спектрами материалов/классов, вычисляет метрики сходства между каждым пикселем изображения и записями библиотеки, находит наилучшим образом совпадающий библиотечный спектр (минимальный угол, минимальное расстояние или минимальная дивергенция) и выдаёт метки классов с необязательными оценками достоверности/сходства. Сопоставление с библиотекой позволяет идентифицировать материалы без полевых обучающих выборок, используя эталонные спектры USGS, полевых обследований или лабораторной спектроскопии. Ключевые возможности: несколько метрик сходства, позволяющих выбирать метрику под конкретные спектральные характеристики и распределения классов; гибкость импорта с поддержкой различных форматов спектральных библиотек; необязательная количественная оценка достоверности/неопределённости; прямой вывод идентифицируемых материалов. Области применения: геологическое картографирование минералогии с использованием спектральной библиотеки USGS, классификация растительности с использованием эталонных спектральных библиотек растений, идентификация строительных материалов в городских районах и анализ данных гиперспектральной аэросъёмки. Сопоставление со спектральной библиотекой обеспечивает автоматическую идентификацию материалов. На выходе формируются классифицированная карта с идентификаторами записей библиотеки в качестве меток классов, растр сходства/достоверности, выражающий качество совпадения, и необязательный полный стек спектральных углов/расстояний для каждой записи библиотеки, позволяющий выполнять фильтрацию по порогу; метаданные документируют источник эталонной библиотеки и использованную метрику сходства.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входной стек растров (один растр на канал)."
              },
              "library": {
                "label": "Библиотека",
                "description": "Записи спектральной библиотеки в виде массива объектов {name, values} или числовых массивов."
              },
              "library_csv": {
                "label": "CSV библиотеки",
                "description": "Необязательный путь CSV спектральной библиотеки (строки name,b1,b2,... или b1,b2,...). Используется, если library не указана."
              },
              "metric": {
                "label": "Метрика",
                "description": "Метрика сопоставления: sam (по умолчанию), euclidean или sid."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра классов."
              },
              "output_score": {
                "label": "Выход оценки",
                "description": "Необязательный путь выходного растра оценки лучшего совпадения (угол или расстояние)."
              }
            }
          },
          "canny_edge_detection": {
            "name": "Детектор границ Canny",
            "description": "Применяет многоэтапное выделение краёв Canny (размытие Гаусса → градиент Sobel → подавление немаксимумов → двойной порог → гистерезис).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра (одноканальный или упакованный RGB)."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Стандартное отклонение гауссова сглаживающего ядра в пикселях. По умолчанию: 0.5."
              },
              "low_threshold": {
                "label": "Нижний порог",
                "description": "Нижний порог гистерезиса (доля 0–1 от максимального градиента). По умолчанию: 0.05."
              },
              "high_threshold": {
                "label": "Верхний порог",
                "description": "Верхний порог гистерезиса (доля 0–1 от максимального градиента). По умолчанию: 0.15."
              },
              "add_back": {
                "label": "Добавить обратно",
                "description": "Если true, пиксели границ обнуляются в исходном изображении вместо создания бинарной карты границ. По умолчанию: false."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              }
            }
          },
          "corner_detection": {
            "name": "Обнаружение углов",
            "description": "Выявляет угловые шаблоны на бинарных растрах с помощью шаблонов hit-and-miss.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "laplacian_filter": {
            "name": "Фильтр Лапласа",
            "description": "Фильтр Лапласа вычисляет вторую пространственную производную яркости изображения, обеспечивая мощное выделение краёв за счёт изотропного (во всех направлениях) измерения градиента. Реализация применяет фиксированное ядро, аппроксимирующее оператор Лапласа (сумму вторых производных по направлениям x и y), и улавливает изменения яркости независимо от ориентации края. В отличие от направленных фильтров, этот подход одинаково обрабатывает все направления краёв, что делает его идеальным для выявления объектов, требующего независимости от ориентации. Математическая основа — дискретная аппроксимация: ∇²I ≈ I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4·I(x,y). Ключевые возможности: обнаружение переходов через ноль (истинные края находятся там, где выходное значение пересекает ноль), нечувствительность к направлению края и одинаковое обнаружение переходов от светлого к тёмному и от тёмного к светлому. Фильтрация Лапласа особенно эффективна в геологическом картографировании, где границы структур проявляются как переходы через ноль, при разграничении границ растительности, извлечении дорожной сети со снимков высокого разрешения и обнаружении контуров зданий. Интерпретация результата основана на понимании смены знака: сильные положительные значения указывают на локальные тёмные минимумы, отрицательные — на локальные светлые максимумы, а переходы через ноль отмечают истинные края. Типичный диапазон выходных значений для 8-битных исходных снимков — от -1000 до +1000 в зависимости от локального контраста. Большая величина выходного значения указывает на резкие, чётко выраженные края; малая — на плавные переходы. Обнаружение переходов через ноль требует тщательного выбора порога. Учтите, что оператор Лапласа чувствителен к шуму (усиливает высокочастотный шум), поэтому перед его применением обычно рекомендуется предварительная фильтрация гауссовым сглаживанием.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "variant": {
                "label": "Вариант",
                "description": "Вариант ядра: 3x3(1), 3x3(2), 3x3(3), 3x3(4), 5x5(1), 5x5(2)."
              },
              "clip_amount": {
                "label": "Величина обрезки",
                "description": "Необязательный симметричный процент обрезки хвостов (0-40)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "laplacian_of_gaussians_filter": {
            "name": "Фильтр лапласиана гауссиана",
            "description": "Выполняет усиление краёв методом лапласиана гауссиана (LoG), сочетающим гауссово сглаживание с выделением краёв оператором Лапласа. Вычислительно аппроксимируется разностью гауссианов (DoG). Сначала сглаживает изображение (снижает шум), затем применяет оператор Лапласа (выделяет края). Классический метод многомасштабного выделения краёв. Обнаружение переходов через ноль на выходе LoG определяет точное положение краёв. LoG — стандартный метод выделения краёв в масштабном пространстве: гауссиан удаляет шум, лапласиан усиливает края. Параметр sigma управляет масштабом выделяемых краёв: малое значение sigma выделяет тонкие края, большое — широкие. Для эффективности LoG аппроксимируется DoG. Несколько значений sigma позволяют выполнять многомасштабное выделение краёв (выявлять объекты разного масштаба). Применение: (1) устойчивое выделение краёв (стойкое к шуму), (2) многомасштабное выделение краёв (с несколькими значениями sigma), (3) локализация краёв по переходам через ноль, (4) предварительная обработка для сегментации, (5) обнаружение пятен (blob) по переходам через ноль LoG. Рабочий процесс: применить LoG→найти переходы через ноль→проследить края→векторизация или дальнейшая обработка.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Гауссова сигма, используемая ядром LoG (0.5-20.0, по умолчанию 0.75)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "prewitt_filter": {
            "name": "Фильтр Prewitt",
            "description": "Оператор Prewitt выполняет выделение краёв на основе градиента аналогично Sobel, используя альтернативные веса ядер, оптимизированные для иных характеристик шума. Реализация использует два ядра свёртки 3×3, вычисляющих производные по направлениям x и y с равномерным взвешиванием центральной и соседних строк/столбцов, в отличие от смещённого к центру подхода Sobel. Величина градиента объединяет направленные компоненты по формуле √(Gx² + Gy²), обеспечивая равномерный отклик по направлениям. Математическая основа — дискретные аппроксимации дифференцирования, одинаково взвешивающие все участвующие пиксели, а не выделяющие центральные. Ключевые возможности: несколько иной отклик на шум по сравнению с Sobel (иногда лучший на очень зашумлённых снимках); точное разложение на величину и направление, позволяющее выполнять сложный анализ краёв; вычислительная эффективность, требующая лишь стандартных операций свёртки; доказанная эффективность на радарных, оптических и тепловых снимках. Фильтрация Prewitt особенно эффективна при анализе снимков SAR, где равномерное взвешивание лучше, чем Sobel, снижает артефакты спекл-шума, при обнаружении тепловых аномалий с выделением линейных объектов и при мультиспектральном извлечении краёв, требующем не зависящей от направления обработки. Интерпретация результата аналогична Sobel: величина указывает силу края (чем выше, тем резче), направление, вычисляемое через atan2(Gy, Gx), даёт ориентацию края в радианах. Типичный диапазон величины для 8-битных входных данных — 0-256; величины более 80 обычно указывают на значимые края. Значения направления лежат в диапазоне от -π до +π; 0 радиан соответствует чисто горизонтальным краям, ±π/2 — чисто вертикальным. Равномерное взвешивание ядра обычно даёт несколько более гладкий отклик градиента, чем Sobel, что может быть лучше для разреженных или мелких объектов на снимках. Применяйте дополнительную медианную фильтрацию для снижения ложных срабатываний, вызванных шумом. Сочетайте направленный вывод с выбором порога для связывания краёв и извлечения границ — процессов, критически важных для конвейеров сегментации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "clip_tails": {
                "label": "Обрезать хвосты",
                "description": "Необязательный симметричный процент обрезки хвостов (0-40)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "roberts_cross_filter": {
            "name": "Фильтр Roberts Cross",
            "description": "Фильтр Roberts Cross — один из самых ранних операторов выделения краёв, использующий простой, но эффективный шаблон диагонального крестового ядра 2×2 для вычисления градиентов изображения с минимальными вычислительными затратами. Оператор использует две ортогональные матрицы 2×2, повёрнутые на 45° относительно горизонтально-вертикального расположения, образуя крестообразные маски свёртки, которые выделяют края с акцентом на углы и диагональные переходы. Фильтр применяет отдельные ядра для градиентов X и Y, вычисляя величину через сумму абсолютных значений или евклидову норму. Ключевые возможности: исключительная вычислительная эффективность благодаря малому размеру ядра 2×2, минимальные требования к памяти и быстрая обработка больших растровых наборов данных. Roberts Cross особенно эффективен для обнаружения мелкомасштабных объектов и резких переходов на снимках высокого разрешения. Основные сценарии использования: быстрое выделение краёв в критичных по времени приложениях, обработка видеопотоков в реальном времени, предварительное обнаружение границ перед применением более сложных алгоритмов и среды с ограниченными ресурсами. Области применения охватывают предварительную обработку аэросъёмки, оценку качества спутниковых снимков, извлечение признаков для конвейеров машинного обучения и мобильные ГИС-реализации. Результат показывает положение краёв в виде пикселей с большой величиной там, где в окрестности 2×2 происходят спектральные изменения. Фоновые области обычно имеют значения, близкие к нулю; края выглядят как яркие линейные объекты, обозначающие границы между различными классами земного покрова. Результат по своей природе разрежен и содержит края только там, где градиенты превышают пороги вычислительной точности. Для мультиспектральных изображений применяйте фильтр к каждому каналу отдельно или сначала вычислите нормализованный разностный индекс. После применения Roberts часто выполняется утончение краёв для подготовки результата к процессам векторизации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "clip_amount": {
                "label": "Величина обрезки",
                "description": "Необязательный симметричный процент обрезки хвостов (0-50)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "sobel_filter": {
            "name": "Фильтр Sobel",
            "description": "Оператор Sobel выделяет края путём оценки направленного градиента по направлениям x (горизонтальному) и y (вертикальному), объединяя ортогональные ядра производных в единое представление величины. Реализация независимо применяет два ядра свёртки 3×3 (одно выделяет горизонтальные края, другое — вертикальные), затем объединяет результаты по евклидовой норме: magnitude = √(Gx² + Gy²). Такой раздельный подход снижает вычислительные затраты при сохранении точности выделения краёв. Математическая основа — дискретные аппроксимации градиентов изображения, при этом веса ядра смещены к центральным пикселям для повышения устойчивости к шуму. Ключевые возможности: измерение направленного градиента, позволяющее определять ориентацию краёв; сравнительно низкие вычислительные затраты; доказанная эффективность на спутниковых снимках и аэроснимках; минимальная настройка параметров. Фильтрация Sobel широко применяется при расчёте уклона и экспозиции рельефа, извлечении границ объектов в процессах обнаружения объектов, выделении речной сети по данным DEM и картографировании инфраструктуры (дорог, зданий, линий электропередачи) по снимкам высокого разрешения. Интерпретация результата: величина указывает силу края (более высокие значения — более резкие переходы), а направленные компоненты (Gx, Gy) позволяют анализировать ориентацию. Типичные величины градиента для 8-битных снимков — 0-256; значения более 100 обычно указывают на значимые края. Отношение Gx/Gy даёт информацию об ориентации края: отношение, близкое к 1, указывает на края под 45 градусов, отношение >>1 — на горизонтальные объекты, отношение <<1 — на вертикальные объекты. Ложные срабатывания часто возникают в зашумлённых областях; медианная фильтрация или морфологические операции эффективно снижают количество ложных обнаружений. Сочетайте с пороговой обработкой для получения бинарных масок краёв, пригодных для конвейеров сегментации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "variant": {
                "label": "Вариант",
                "description": "Вариант размера ядра: 3x3 (по умолчанию) или 5x5."
              },
              "clip_tails": {
                "label": "Обрезать хвосты",
                "description": "Необязательный симметричный процент обрезки хвостов (0-40)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "balance_contrast_enhancement": {
            "name": "Сбалансированное усиление контраста",
            "description": "Уменьшает цветовой сдвиг упакованного RGB-изображения с помощью поканальных параболических растяжений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "band_mean": {
                "label": "Среднее канала",
                "description": "Желаемая средняя яркость выхода для каждого канала (по умолчанию 100.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "create_colour_composite": {
            "name": "Создание цветового композита",
            "description": "Создаёт упакованный цветной RGB-композит из растров красного, зелёного, синего каналов и необязательного растра непрозрачности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "red": {
                "label": "Красный",
                "description": "Путь растра красного канала или типизированный растровый объект."
              },
              "green": {
                "label": "Зелёный",
                "description": "Путь растра зелёного канала или типизированный растровый объект."
              },
              "blue": {
                "label": "Синий",
                "description": "Путь растра синего канала или типизированный растровый объект."
              },
              "opacity": {
                "label": "Непрозрачность",
                "description": "Необязательный путь растра непрозрачности или типизированный растровый объект."
              },
              "enhance": {
                "label": "Улучшение",
                "description": "Применить сбалансированное усиление контраста после компоновки (по умолчанию true)."
              },
              "treat_zeros_as_nodata": {
                "label": "Считать нули NoData",
                "description": "Считать нулевые значения во входах RGB NoData/фоном (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "direct_decorrelation_stretch": {
            "name": "Прямое декорреляционное растяжение",
            "description": "Повышает насыщенность цвета упакованного RGB-изображения, уменьшая ахроматическую составляющую и линейно растягивая каналы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "achromatic_factor": {
                "label": "Ахроматический фактор",
                "description": "Коэффициент уменьшения серой компоненты от 0 до 1 (по умолчанию 0.5)."
              },
              "clip_percent": {
                "label": "Процент обрезки",
                "description": "Процент обрезки хвостов для линейного масштабирования после растяжения (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "false_colour_composite": {
            "name": "Композит в ложных цветах",
            "description": "Создаёт растр композита в псевдоцветах (NIR/Red/Green) из пакета данных поддерживаемого оптического сенсора.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Выход",
                "description": "Выход"
              }
            }
          },
          "gamma_correction": {
            "name": "Гамма-коррекция",
            "description": "Гамма-коррекция применяет нелинейную регулировку яркости с помощью степенного преобразования для оптимизации контраста изображения, точности отображения и перцептивного распределения яркости. Математическое преобразование имеет вид I_corrected = I^(1/γ), где γ (гамма) — задаваемый пользователем показатель степени, управляющий направлением и величиной регулировки яркости. Значения γ > 1 затемняют изображения (компенсация яркого дисплея), а γ < 1 осветляют их (компенсация тёмного дисплея). Реализация работает независимо для каждого пикселя или спектрального канала, сохраняя пространственные связи и изменяя масштаб яркости. Ключевые возможности: сохранение структуры изображения при перераспределении тоновых значений; вычислительная эффективность, требующая лишь таблиц подстановки; применимость к любым радиометрическим данным, включая 16/32-битные снимки; обратимость, позволяющая выполнить обратную коррекцию. Гамма-коррекция незаменима при подготовке спутниковых снимков к визуальному дешифрированию с компенсацией характеристик сенсора, нормализации яркости ортофото между маршрутами съёмки или типами сенсоров, улучшении тепловых снимков для повышения видимости объектов и предварительной обработке мультиспектральных данных для конвейеров машинного обучения, где нормализация входных данных улучшает сходимость. Интерпретация результата: скорректированные значения следуют степенному закону — средние тона изменяются относительно сильнее всего, а крайние значения сжимаются меньше. Для 8-битных входных данных (0-255) типичная гамма 0.4-0.6 значительно осветляет изображения; гамма 1.4-1.6 существенно затемняет. Формы гистограмм изменяются предсказуемо: для гистограмм со скосом влево (тёмные изображения) полезно γ < 1, а для гистограмм со скосом вправо (яркие изображения) — γ > 1. Проверяйте скорректированный результат с помощью визуализации гистограммы и визуального осмотра. Соблюдайте единообразие для коллекций изображений, требующих одинаковой предварительной обработки. В типичном рабочем процессе гамма-коррекция выполняется перед выбором порога или классификацией, чтобы обеспечить сбалансированную видимость объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "gamma": {
                "label": "Гамма",
                "description": "Показатель гаммы в [0, 4], по умолчанию 0.5."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "gaussian_contrast_stretch": {
            "name": "Гауссово растяжение контраста",
            "description": "Растягивает контраст путём приведения к эталонному гауссову распределению.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "num_tones": {
                "label": "Число тонов",
                "description": "Число выходных тонов (по умолчанию 256)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "histogram_equalization": {
            "name": "Выравнивание гистограммы",
            "description": "Применяет выравнивание гистограммы для улучшения контраста изображения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "num_tones": {
                "label": "Число тонов",
                "description": "Число выходных тонов (по умолчанию 256)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "histogram_matching": {
            "name": "Подбор гистограммы",
            "description": "Приводит гистограмму изображения к заданной эталонной гистограмме.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "histogram": {
                "label": "Гистограмма",
                "description": "Опорная гистограмма в виде [[value, frequency], ...] или [{x, y}, ...]."
              },
              "is_cumulative": {
                "label": "Кумулятивная",
                "description": "True, если переданные значения гистограммы уже кумулятивны."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "histogram_matching_two_images": {
            "name": "Подбор гистограмм двух изображений",
            "description": "Приводит гистограмму входного изображения к гистограмме эталонного изображения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "reference": {
                "label": "Эталон",
                "description": "Путь опорного растра или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "ihs_to_rgb": {
            "name": "IHS в RGB",
            "description": "Обратное преобразование IHS в RGB переводит компоненты «интенсивность–тон–насыщенность» обратно в цветовое пространство «красный–зелёный–синий», позволяя восстановить естественные цвета из разложенных данных дистанционного зондирования. Обратные формулы работают с цилиндрическими полярными координатами, переводя угол тона, величину насыщенности и интенсивность обратно в декартовы координаты RGB с сохранением численной устойчивости и минимизацией артефактов квантования. Это преобразование является важным дополнением к операциям RGB в IHS, особенно в процессах паншарпенинга, где интенсивность заменена панхроматическими данными высокого разрешения. Ключевые возможности: точное математическое обращение прямого преобразования, обеспечивающее согласованность при двустороннем преобразовании; автоматическая обработка ахроматических пикселей с неопределённым тоном, предотвращающая распространение численных артефактов; численная устойчивость при экстремальных значениях насыщенности около нуля; вычислительная эффективность, позволяющая органично встраивать преобразование в конвейеры быстрой обработки. Обратное преобразование завершает процессы паншарпенинга, восстанавливая снимки в естественных цветах после замены интенсивности панхроматическими данными, позволяет визуализировать в цвете данные с повышенным разрешением, поддерживает спектральную реконструкцию из разложенных компонентов и проверку согласованности преобразований в процессах контроля качества. Результат IHS в RGB — трёхканальное изображение в естественных цветах с пространственным разрешением входного канала интенсивности, пригодное для непосредственной визуализации и дальнейшего анализа. Выходные каналы представляют красный, зелёный и синий каналы в стандартном порядке; если интенсивность была заменена панхроматическими данными более высокого разрешения, цвета демонстрируют повышенную пространственную детальность при сохранении спектральных характеристик исходных компонентов тона и насыщенности.",
            "params": {
              "intensity": {
                "label": "Интенсивность",
                "description": "Растр канала интенсивности (0–1)."
              },
              "hue": {
                "label": "Тон",
                "description": "Растр канала тона (0–2π радиан)."
              },
              "saturation": {
                "label": "Насыщенность",
                "description": "Растр канала насыщенности (0–1)."
              },
              "red_output": {
                "label": "Выход красного",
                "description": "Необязательный путь выхода для красного канала."
              },
              "green_output": {
                "label": "Выход зелёного",
                "description": "Необязательный путь выхода для зелёного канала."
              },
              "blue_output": {
                "label": "Выход синего",
                "description": "Необязательный путь выхода для синего канала."
              }
            }
          },
          "min_max_contrast_stretch": {
            "name": "Растяжение контраста Min-Max",
            "description": "Линейно растягивает значения между заданными пользователем минимумом и максимумом.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "min_val": {
                "label": "Мин. значение",
                "description": "Минимальное входное значение для масштабирования."
              },
              "max_val": {
                "label": "Макс. значение",
                "description": "Максимальное входное значение для масштабирования."
              },
              "num_tones": {
                "label": "Число тонов",
                "description": "Число выходных тонов (по умолчанию 256)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "mosaic": {
            "name": "Мозаика",
            "description": "Мозаика объединяет несколько перекрывающихся растров в бесшовный результат с помощью геометрического совмещения, передискретизации к общей проекции и сетке пикселей, а также сглаживания краёв для минимизации разрывов. Алгоритм совмещает растры по географическим координатам или наземным опорным точкам, передискретизирует их к целевому разрешению и охвату и применяет взвешенное смешивание (растушёвку Feather или экспоненциальное взвешивание) в областях перекрытия. Перекрывающиеся пиксели смешиваются с помощью усреднения, взвешенного по расстоянию от краёв растров, что создаёт плавные переходы при сохранении точности внутренних пикселей. В результате получаются бесшовные континентальные или глобальные растровые мозаики без краевых артефактов и радиометрических разрывов. Ключевые возможности: геометрическое совмещение нескольких растров в общей проекции; выбор метода передискретизации (билинейный, кубический, ближайший сосед); сглаживание краёв, устраняющее швы; радиометрическая нормализация, компенсирующая различия сенсоров или освещённости; поддержка тысяч входных растров. Инструмент автоматически управляет приоритетом растров, избегая пропусков благодаря интеллектуальным стратегиям заполнения. Области применения: создание континентальных мозаик спутниковых снимков из коллекций сцен, построение бесшовных цифровых моделей рельефа по нескольким маршрутам съёмки, создание композитных оптических мозаик из многовременных снимков, построение ортомозаик по съёмке с беспилотных летательных аппаратов (БПЛА) и создание базовых карт для больших территорий по перекрывающимся спутниковым сценам. Мозаика необходима для процессов континентального и глобального анализа. Интерпретация результата: выходные растры наследуют проекцию и разрешение входных данных; области смешивания содержат интерполированные значения, балансирующие входные растры. Краевые артефакты указывают на недостаточное перекрытие или плохую радиометрическую нормализацию; при оценке проверяются швы и согласованность цвета на границах мозаики. Обработка NoData на краях мозаики требует внимания к значениям заполнения и определению охвата. Оценка качества включает геометрическую проверку по наземным опорным точкам и радиометрическую оценку со сравнением значений мозаики с входными растрами.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список входных растров в виде массива путей или строки с разделителями-запятыми/точками с запятой."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "method": {
                "label": "Метод",
                "description": "Метод передискретизации: nn (по умолчанию), bilinear или cc."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "mosaic_with_feathering": {
            "name": "Мозаика с растушёвкой",
            "description": "Объединяет два растра в мозаику и выполняет растушёвку перекрывающихся ячеек с весами по расстоянию до края.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр."
              },
              "method": {
                "label": "Метод",
                "description": "Метод передискретизации: cc (по умолчанию), nn или bilinear."
              },
              "weight": {
                "label": "Вес",
                "description": "Показатель степени весов по расстоянию для растушёвки перекрытий (по умолчанию 4.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "normalized_difference_index": {
            "name": "Нормализованный разностный индекс",
            "description": "Вычисляет (band1 - band2) / (band1 + band2) для многоканального растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "band1": {
                "label": "Канал 1",
                "description": "Индекс первого канала, начиная с 1 (по умолчанию 1)."
              },
              "band2": {
                "label": "Канал 2",
                "description": "Индекс второго канала, начиная с 1 (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "panchromatic_sharpening": {
            "name": "Панхроматическое повышение резкости",
            "description": "Панхроматическое повышение резкости объединяет панхроматические снимки высокого разрешения с мультиспектральными данными более низкого разрешения методом Brovey — техникой спектрального умножения, которая повышает пространственную детальность при сохранении спектральной информации. Метод сначала передискретизирует мультиспектральные каналы до разрешения панхроматического снимка, затем вычисляет отношение интенсивности панхроматического изображения к вычисленной мультиспектральной интенсивности и соответствующим образом масштабирует каждый канал. Такой подход сохраняет спектральную точность при значительном повышении пространственного разрешения. Ключевые возможности: сохранение исходных спектральных характеристик; эффективность линейной алгебры, обеспечивающая быструю обработку больших изображений; автоматическая совместимость передискретизации со взаимно совмещёнными по каналам входными данными; автоматическая нормализация для радиометрической согласованности разнородных сенсоров. Метод широко используется для улучшения спутниковых снимков в картографических задачах, включая градостроительное планирование, сельскохозяйственный мониторинг и разведку ресурсов, где важны как спектральная, так и пространственная детальность. Панхроматическое повышение резкости создаёт улучшенный мультиспектральный результат с превосходной пространственной чёткостью, пригодный для визуального дешифрирования и детального картографирования. Выходные каналы сохраняют исходный порядок мультиспектральных каналов, но имеют разрешение панхроматического снимка, что позволяет органично встраивать их в стандартные процессы анализа изображений и ГИС. Пространственное разрешение повышается до разрешения входного панхроматического снимка, позволяя извлекать объекты в более крупном масштабе, чем исходные мультиспектральные данные.",
            "params": {
              "red": {
                "label": "Красный",
                "description": "Растр красного канала (обязателен, если не указан composite)."
              },
              "green": {
                "label": "Зелёный",
                "description": "Растр зелёного канала (обязателен, если не указан composite)."
              },
              "blue": {
                "label": "Синий",
                "description": "Растр синего канала (обязателен, если не указан composite)."
              },
              "composite": {
                "label": "Композит",
                "description": "Упакованный мультиспектральный композит RGB (взаимоисключающий с red/green/blue)."
              },
              "pan": {
                "label": "Панхроматический",
                "description": "Панхроматический канал растра."
              },
              "method": {
                "label": "Метод",
                "description": "Метод слияния: brovey (по умолчанию) или ihs."
              },
              "output_mode": {
                "label": "Режим выхода",
                "description": "Выходная кодировка: packed (по умолчанию) или bands (трёхканальный растр RGB)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "percentage_contrast_stretch": {
            "name": "Процентное растяжение контраста",
            "description": "Процентное растяжение контраста выполняет линейное усиление контраста, удаляя заданный процент крайних значений (хвостов) гистограммы перед растяжением на весь динамический диапазон. Алгоритм: удаляет нижние и верхние процентильные значения каждого канала независимо, линейно отображает оставшийся диапазон на выходной диапазон (обычно 0-255 или полную разрядность) и устраняет радиометрические экстремумы, ухудшающие контраст. Выбор процентиля (обычно 2-3%) балансирует усиление контраста и сохранение целостности данных. Ключевые возможности: автоматическое удаление радиометрических выбросов, предотвращение сжатия контраста из-за аномальных значений, применимость поканально или глобально, вычислительно эффективное линейное преобразование, обратимая операция. Возможности: обработка радиометрических артефактов, повышение видимости малозаметных объектов, учёт переменных входных диапазонов. Сценарии использования: предварительная обработка перед классификацией или слиянием, улучшение недоиспользуемого динамического диапазона, подготовка к мультиспектральному отображению, радиометрическая нормализация между сценами. Области применения: улучшение спутниковых снимков для визуального дешифрирования, предварительная обработка для обнаружения оползней по спутниковым данным, нормализация перед классификацией, восстановление архивных снимков. Интерпретация результата: улучшенные снимки демонстрируют повышенный контраст; крайние значения обрезаются; ранее скрытые малозаметные объекты становятся видимыми; значения обрезки по каналам отражают качество радиометрического распределения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Процент перцентильной обрезки (по умолчанию 1.0)."
              },
              "tail": {
                "label": "Хвост",
                "description": "Режим обрезки хвостов: both (по умолчанию), upper или lower."
              },
              "num_tones": {
                "label": "Число тонов",
                "description": "Число выходных тонов (по умолчанию 256)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "piecewise_contrast_stretch": {
            "name": "Кусочное растяжение контраста",
            "description": "Выполняет кусочно-линейное растяжение контраста с использованием заданных пользователем точек излома.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "function": {
                "label": "Функция",
                "description": "Строка выражения точек перегиба, например '(50,0.1);(120,0.6);(180,0.85)'."
              },
              "greytones": {
                "label": "Уровни серого",
                "description": "Число выходных тонов для растров не в RGB (по умолчанию 1024)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "resample": {
            "name": "Передискретизация",
            "description": "Передискретизация изображения изменяет разрешение пикселей с помощью методов интерполяции, включая ближайшего соседа (самый быстрый, с наименьшим сглаживанием), билинейную (линейная интерполяция между соседними пикселями), бикубическую (подбор кубического полинома) и кубический сплайн (гладкая непрерывная интерполяция). Передискретизация необходима для геометрического совмещения, создания мультиспектральных стеков единого разрешения по данным сенсоров с разным разрешением и интеграции вспомогательных данных разного масштаба. Каждый метод подбирает локальные ядра интерполяции по исходным значениям пикселей, вычисляет ядра в новых положениях пикселей и возвращает интерполированные значения. Метод ближайшего соседа сохраняет радиометрические значения (подходит для категориальных данных); методы более высокого порядка сглаживают края и уменьшают алиасинг, но размывают резкие границы. Ключевые возможности: выбор метода интерполяции для оптимального баланса скорости и точности; задание выходного разрешения через целевой размер пикселя или размеры растра; автоматическая обработка фоновых значений для областей вне охвата входных данных; необязательная фильтрация сглаживания, уменьшающая артефакты передискретизации. Области применения: совмещение изображений на общей сетке, гармонизация разрешения мультиспектральных стеков с разным исходным разрешением, уменьшение разрешения для сокращения объёма данных с сохранением пространственных закономерностей и увеличение разрешения для улучшения визуальной детальности при отображении. Результат передискретизации объединяет снимки с согласованным разрешением. Выходное разрешение соответствует заданию пользователя; метод интерполяции влияет на чёткость краёв (ближайший сосед сохраняет края, методы более высокого порядка сглаживают); фоновые области (вне охвата входных данных) получают настраиваемые значения заполнения; результат органично встраивается в процессы мультиспектрального анализа.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список входных растров в виде массива путей или строки с разделителями-запятыми/точками с запятой."
              },
              "base": {
                "label": "База",
                "description": "Необязательный базовый растр, определяющий выходной экстент и сетку. Имеет приоритет над cell_size."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Необязательный выходной размер ячейки, когда base не указан."
              },
              "method": {
                "label": "Метод",
                "description": "Метод передискретизации: cc (по умолчанию), nn или bilinear."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "rgb_to_ihs": {
            "name": "RGB в IHS",
            "description": "Преобразование RGB в «интенсивность–тон–насыщенность» раскладывает цветовое пространство «красный–зелёный–синий» на перцептивно значимые компоненты: интенсивность (яркость), тон (цвет) и насыщенность (чистоту цвета). Разложение использует стандартные математические формулы, переводящие координаты цвета RGB в цилиндрические полярные координаты, где интенсивность представляет яркость, тон кодирует угол цвета, а насыщенность измеряет концентрацию цвета. Это цветовое пространство особенно полезно в дистанционном зондировании, поскольку интенсивность можно заменить данными высокого разрешения, сохранив исходные цветовые характеристики благодаря обратному преобразованию. Ключевые возможности: численно устойчивая формулировка, надёжно обрабатывающая граничные случаи (ахроматические пиксели); сохранение полного динамического диапазона без обрезки и потери информации; автоматическое масштабирование каналов для согласованных результатов при разных входных диапазонах; вычислительная эффективность, подходящая для больших мультиспектральных стеков. Метод служит нескольким целям: процессам паншарпенинга, где интенсивность заменяется панхроматическими данными, улучшению цветовой визуализации, спектральной предварительной обработке для алгоритмов классификации и преобразованию цвета в оттенки серого с сохранением перцептивной информации. Преобразование RGB в IHS необходимо для методов слияния, объединяющих панхроматическое разрешение с мультиспектральной цветовой информацией. На выходе формируются три одноканальных файла, представляющих компоненты интенсивности, тона и насыщенности, которые можно независимо использовать в процессах анализа. Канал интенсивности приближённо соответствует яркости; тон принимает значения 0-360 градусов и кодирует цветовую информацию; насыщенность принимает значения 0-100 процентов и указывает на чистоту цвета.",
            "params": {
              "red": {
                "label": "Красный",
                "description": "Растр красного канала (взаимоисключающий с composite)."
              },
              "green": {
                "label": "Зелёный",
                "description": "Растр зелёного канала (взаимоисключающий с composite)."
              },
              "blue": {
                "label": "Синий",
                "description": "Растр синего канала (взаимоисключающий с composite)."
              },
              "composite": {
                "label": "Композит",
                "description": "Упакованный композитный растр RGB (взаимоисключающий с red/green/blue)."
              },
              "intensity_output": {
                "label": "Выход интенсивности",
                "description": "Необязательный путь выхода для канала интенсивности."
              },
              "hue_output": {
                "label": "Выход тона",
                "description": "Необязательный путь выхода для канала тона."
              },
              "saturation_output": {
                "label": "Выход насыщенности",
                "description": "Необязательный путь выхода для канала насыщенности."
              }
            }
          },
          "sigmoidal_contrast_stretch": {
            "name": "Сигмоидальное растяжение контраста",
            "description": "Выполняет сигмоидальное растяжение контраста с использованием коэффициента усиления и точки отсечения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "cutoff": {
                "label": "Отсечка",
                "description": "Средняя точка сигмоиды в нормализованных единицах (по умолчанию 0.0)."
              },
              "gain": {
                "label": "Усиление",
                "description": "Параметр усиления сигмоиды (по умолчанию 1.0)."
              },
              "num_tones": {
                "label": "Число тонов",
                "description": "Число выходных тонов (по умолчанию 256)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "split_colour_composite": {
            "name": "Разделение цветового композита",
            "description": "Разделяет упакованный цветной RGB-композит на три отдельных одноканальных растра, представляющих красный, зелёный и синий каналы. Алгоритм: инструмент извлекает отдельные цветовые каналы из композитного изображения, в котором значения R, G и B упакованы в один растр (обычно в стандартной 24-битной кодировке RGB или 32-битной RGBA). Разделение выполняется побитовыми операциями, выделяющими каждый 8-битный компонент канала. Ключевые возможности: сохранение исходных радиометрических значений (0–255), поддержка стандартных RGB-композитов и расширенных форматов, вывод трёх независимых геопривязанных растров. Сценарии использования: спектральный анализ, при котором отдельные каналы должны обрабатываться раздельно; создание входных наборов данных для расчёта вегетационных индексов (NDVI, EVI); подготовка данных для операций алгебры каналов; выполнение сложных цветовых преобразований, таких как преобразование RGB в IHS; извлечение отдельных каналов для процессов контролируемой или неконтролируемой классификации. Области применения: анализ изображений дистанционного зондирования, предварительная обработка спутниковых данных, подготовка к мультиспектральному анализу, конвейеры улучшения изображений. Интерпретация результата: формируются три одноканальных растра с теми же пространственным охватом, проекцией и геопривязкой, что и входной композит. Каждый выходной канал содержит 8-битные радиометрические значения (0–255), представляющие интенсивность этой цветовой составляющей по сцене. Статистика канала (мин., макс., среднее) отражает спектральные характеристики этого цветового канала; преобладающие значения указывают на доминирующий цвет по изображению. Выходные растры сразу пригодны для вычислений по каналам, спектральных индексов или дальнейших процессов многоканальной обработки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной упакованный растр RGB."
              },
              "red_output": {
                "label": "Выход красного",
                "description": "Необязательный путь выхода для красного канала."
              },
              "green_output": {
                "label": "Выход зелёного",
                "description": "Необязательный путь выхода для зелёного канала."
              },
              "blue_output": {
                "label": "Выход синего",
                "description": "Необязательный путь выхода для синего канала."
              }
            }
          },
          "standard_deviation_contrast_stretch": {
            "name": "Растяжение контраста по стандартному отклонению",
            "description": "Выполняет линейное растяжение контраста по диапазону «среднее плюс/минус множитель стандартного отклонения».",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Множитель стандартного отклонения для вычисления границ обрезки (по умолчанию 2.0)."
              },
              "num_tones": {
                "label": "Число тонов",
                "description": "Число выходных тонов (по умолчанию 256)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "true_colour_composite": {
            "name": "Композит в естественных цветах",
            "description": "Создаёт растр композита в естественных цветах (RGB) из пакета данных поддерживаемого оптического сенсора.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Выход",
                "description": "Выход"
              }
            }
          },
          "adaptive_filter": {
            "name": "Адаптивный фильтр",
            "description": "Адаптивный фильтр динамически регулирует силу фильтрации на основе локальной статистики изображения (среднего, дисперсии, эксцесса), обеспечивая контекстно-зависимое сглаживание, реагирующее на характеристики сцены. Реализация разбивает изображения на скользящие окна, вычисляет локальную статистику (определяя области с преобладанием шума и области с преобладанием объектов) и соответствующим образом выбирает параметры фильтра. Плоские области сглаживаются сильно, сложные — щадяще. Математическая основа — статистические тесты, определяющие локальный характер: области с дисперсией ниже порога сильно сглаживаются, области выше порога сохраняют детали. Ключевые возможности: автоматическая адаптация параметров (пользователь задаёт диапазоны, алгоритм выбирает значения локально), применимость к любому ядру фильтра (гауссову, медианному, морфологическому) и эффективность на оптических и радарных снимках. Адаптивная фильтрация особенно эффективна при предварительной обработке неоднородных спутниковых мозаик (разные сенсоры, условия съёмки), сглаживании облаков точек LiDAR (сохраняет края растительности в лесах, сглаживает землю на открытых участках), избирательном подавлении спекл-шума SAR с учётом как целей, так и фона, а также при многовременном объединении изображений в стек. Интерпретация результата: однородные области подвергаются интенсивной фильтрации (низкая локальная дисперсия → сильное сглаживание); сложные области фильтруются консервативно (высокая дисперсия → минимальная обработка). Радиус сглаживания динамически подстраивается для каждой области: плоские участки получают фильтрацию с большим радиусом, текстурированные — с малым радиусом или без фильтрации. Выходные значения остаются в пределах входного диапазона; для проверки адаптации изучите карту силы пространственной фильтрации. В гладких областях статистика смещается к локальным средним; сложные области остаются в основном неизменными. К типичным артефактам относятся возможное пересглаживание на границах областей (обычно применяется плавный переход) и чувствительность к соотношению шума и дисперсии. Проверяйте адаптацию, анализируя карты локальной дисперсии. Применяйте в автоматизированных конвейерах предварительной обработки разнородных данных, где единообразной фильтрации недостаточно.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Абсолютный порог z-оценки для замены средним (по умолчанию 2.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "anisotropic_diffusion_filter": {
            "name": "Фильтр анизотропной диффузии",
            "description": "Фильтрация анизотропной диффузией реализует итеративное сглаживание с сохранением краёв с помощью направленных процессов диффузии, различающих края и плоские области. Алгоритм итеративно обновляет каждый пиксель на основе взвешенных разностей с соседями, используя функцию проводимости, которая уменьшает диффузию через границы с большим градиентом и допускает сглаживание внутри однородных областей. Реализация решает дифференциальное уравнение в частных производных ∂I/∂t = div(c(|∇I|)∇I), где проводимость c(·) адаптируется к локальной величине градиента. Такой управляемый данными подход сохраняет резкие переходы, постепенно уменьшая шум в однородных областях. Ключевые возможности: истинное сохранение краёв без явных масок краёв, автоматический выбор масштаба через число итераций, эффективное подавление шума с сохранением резкости объектов и применимость к одноканальным и мультиспектральным данным. Анизотропная диффузия особенно эффективна при сглаживании облаков точек LiDAR с сохранением перегибов рельефа, подавлении шума на спутниковых снимках для выявления малозаметных геологических объектов, подавлении спекл-шума SAR с сохранением краёв радарных целей, а также для медицинских/научных изображений, где точность краёв критически важна. Интерпретация результата требует понимания того, что гладкие области постепенно гомогенизируются (значения сходятся к локальному среднему), а края становятся круче, пока не стабилизируются. Ранние итерации (t<5) дают слабое подавление шума; промежуточные итерации (t=5-20) обеспечивают существенное сглаживание; чрезмерное число итераций (t>50) грозит чрезмерным усилением границ или ложными объектами. Выходные значения остаются в диапазоне исходных данных; по мере обработки статистика смещается к региональным средним. Контролируйте дисперсию результата, чтобы оценить полноту сглаживания. Типичные метрики включают улучшение отношения сигнал/шум и индексы резкости краёв. Применяйте осторожно в многомасштабных процессах, где точность сохранения краёв напрямую влияет на точность последующей классификации или выявления изменений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число итераций диффузии (по умолчанию 10)."
              },
              "kappa": {
                "label": "Каппа",
                "description": "Параметр чувствительности к границам (по умолчанию 20.0)."
              },
              "lambda": {
                "label": "Лямбда",
                "description": "Шаг по времени в (0, 0.25], по умолчанию 0.2."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "bilateral_filter": {
            "name": "Билатеральный фильтр",
            "description": "Сохраняющее края билатеральное сглаживание с пространственным ядром и ядром интенсивности. Превосходит гауссов фильтр по сохранению деталей. Sigma_dist=радиус, sigma_int=порог сохранения краёв. Поддерживает RGB.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "sigma_dist": {
                "label": "Сигма расстояния",
                "description": "Стандартное отклонение пространственного гауссова ядра в пикселях (0.5–20.0, по умолчанию 0.75)."
              },
              "sigma_int": {
                "label": "Сигма интенсивности",
                "description": "Стандартное отклонение гауссова ядра интенсивности в единицах значений растра (по умолчанию 1.0)."
              },
              "treat_as_rgb": {
                "label": "Обрабатывать как RGB",
                "description": "Установите true, чтобы принудительно обрабатывать упакованный RGB в HSI. При false упакованный RGB всё равно может определяться автоматически по метаданным растра."
              },
              "assume_three_band_rgb": {
                "label": "Предполагать трёхканальный RGB",
                "description": "Если true (по умолчанию), трёхканальные растры uint8/uint16 могут обрабатываться как RGB в фильтрах, поддерживающих обработку интенсивности трёхканального RGB."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "closing": {
            "name": "Закрытие",
            "description": "Выполняет морфологическую операцию закрытия с прямоугольным структурирующим элементом.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина окрестности (по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота окрестности (по умолчанию равна filter_size_x)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "conservative_smoothing_filter": {
            "name": "Консервативный сглаживающий фильтр",
            "description": "Консервативное сглаживание реализует нелинейную фильтрацию, заменяя каждый пиксель средним значением сходных соседей (в пределах заданного диапазона яркости), что сохраняет края при снижении шума. Реализация просматривает окрестности, находит пиксели, яркость которых отличается от центрального не более чем на порог, и усредняет эти пиксели со сходными значениями. Математическая формулировка: F = (1/N) Σ(I_j : |I_j - I_center| < T), где T — порог сходства, а N — число сходных пикселей. Ключевые возможности: простое определение сходства на основе порога, эффективность на оптических и радарных снимках, интерпретируемость параметров (порог управляет резкостью краёв) и минимальные вычислительные затраты. Консервативное сглаживание особенно эффективно при предварительной обработке мультиспектральных спутниковых снимков (снижает шум, сохраняя спектральные границы), улучшении тепловых снимков (сглаживает радиометрический шум, сохраняя температурные разрывы), сглаживании классификации LiDAR (сохраняет границы растительности и земли) и предварительной обработке зашумлённых данных съёмки. Интерпретация результата: однородные области полностью усредняются (все соседи сходны); края фильтруются минимально (сходные пиксели есть только с той же стороны). Параметр порога управляет сохранением краёв: малый порог (строгое сходство) даёт слабое сглаживание; большой порог (нестрогое сходство) даёт сильное сглаживание с возможной потерей краёв. Выходные значения точно соответствуют значениям входных соседей (без интерполяции; результат — среднее существующих значений). Статистика смещается к локальным кластерам; неоднородные области изменяются минимально. Проверяйте эффективность порога визуально и с помощью анализа локальных гистограмм. К типичным артефактам относятся недостаточное сглаживание при слишком строгих порогах и размытие краёв при слишком нестрогих. Число итераций позволяет выполнять последовательную фильтрацию: один проход даёт мягкое сглаживание, несколько проходов усиливают эффект. Применяйте перед классификацией, когда нужно уменьшить вызванное шумом смешение категорий, сохранив резкость границ классов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 3)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 3)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "diff_of_gaussians_filter": {
            "name": "Фильтр разности гауссиан",
            "description": "Фильтрация разностью гауссианов (DoG) выделяет края и мелкие объекты путём вычитания двух размытых по Гауссу версий с разными радиусами, создавая полосовой фильтр, подчёркивающий средние пространственные частоты. Реализация вычисляет два гауссовых размытия (малого радиуса σ₁ и большого радиуса σ₂), затем вычитает их: DoG = G(σ₁) - G(σ₂). Такое нелинейное сочетание усиливает края и гребни, подавляя как мелкий шум, так и широкие тренды освещённости. Ключевые возможности: настраиваемая частотная характеристика (отношение σ₂/σ₁ управляет полосовыми характеристиками), центрированный относительно нуля результат (биполярный: положительные и отрицательные значения), применимость к выделению краёв и извлечению объектов, вычислительная эффективность за счёт повторного использования гауссианов. Разность гауссианов особенно эффективна при выявлении геологических структур (разломы и линеаменты дают сильный отклик DoG), извлечении зданий с ортофото, усилении мелкой текстуры в мозаиках данных дистанционного зондирования и в моделях обработки, вдохновлённых нейронаукой. Интерпретация результата: края дают пиковые отклики (положительные на светлой стороне, отрицательные на тёмной) с переходом через ноль точно в месте перехода. Обнаружение переходов через ноль выявляет истинные края независимо от их направления. Величина DoG указывает силу края; типичный диапазон для 8-битных входных данных — от -1000 до +1000 в зависимости от локального контраста. Отношение σ₂/σ₁ определяет центр полосы пропускания: отношение ~2 подчёркивает очень мелкие объекты; ~5 — объекты среднего размера; ~10 — более крупные объекты. Бимодальные распределения результата (пики на положительном и отрицательном краях) указывают на хорошее разделение краёв. К типичным артефактам относятся ореолы вокруг сильных краёв и возможный слабый отклик, если полоса частот не соответствует масштабу объектов. Для извлечения краёв сочетайте с пороговой обработкой по величине. Применяйте перед морфологической постобработкой для надёжного извлечения объектов с зашумлённых спутниковых снимков.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Меньшая гауссова сигма (0.25-20.0, по умолчанию 2.0)."
              },
              "sigma2": {
                "label": "Сигма 2",
                "description": "Большая гауссова сигма (0.5-20.0, по умолчанию 4.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "diversity_filter": {
            "name": "Фильтр разнообразия",
            "description": "Вычисляет разнообразие в скользящем окне как число уникальных значений/классов в окрестности. Измеряет локальную неоднородность: высокое разнообразие — разнообразный рельеф/классы, низкое — однородность. Выявляет текстуру, фрагментацию и разнообразие рисунка. Часто применяется к классифицированным или категориальным снимкам для выявления переходных/краевых зон.\n\nФильтр разнообразия создаёт метрику локальной изменчивости, не зависящую от конкретных значений. Полезен для ландшафтной экологии (разнообразие местообитаний, метрики фрагментации), оценки качества классификации (высокое разнообразие — смешанные/неопределённые области) и анализа текстуры. Применённое к данным высот, разнообразие указывает на шероховатость в масштабе окрестности. Применённое к классификации, оно выявляет смешанные/экотонные/пограничные зоны.\n\nПрименение: (1) картографирование фрагментации ландшафта (высокое разнообразие — разнородная мозаика, низкое — однородные участки), (2) оценка достоверности/неопределённости классификации (высокое разнообразие — неопределённая область), (3) анализ текстуры (картографирование неоднородности), (4) выявление краёв/границ по пикам разнообразия, (5) разнообразие местообитаний для экологического анализа (пригодность зависит от локального разнообразия).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "edge_preserving_mean_filter": {
            "name": "Сглаживающий фильтр с сохранением границ",
            "description": "Фильтр среднего с сохранением краёв выполняет избирательное усреднение пикселей, вычисляя локальные средние с исключением выбросов, которые, вероятно, представляют края или шум. Реализация сортирует пиксели окрестности, удаляет крайние значения (наименьшие и наибольшие или значения, превышающие статистический порог) и усредняет оставшиеся. Этот устойчивый подход балансирует сглаживание и сохранение резкости. Варианты включают взвешенное усреднение с акцентом на центральные пиксели и адаптивный выбор порога на основе локальной статистики. Ключевые возможности: простое управление параметрами (число исключаемых значений или порог), вычислительная эффективность за счёт сортировки небольших окрестностей, эффективное снижение шума без размытия деталей и применимость к оптическим, радарным и тепловым данным. Фильтрация средним с сохранением краёв особенно эффективна при предварительной обработке оптических спутниковых данных для расчёта вегетационных индексов (удаляет тени и облака без размытия объектов), сглаживании DEM с сохранением перегибов склонов, подавлении шума на тепловых снимках с сохранением резкости границ и подготовке ортофото к ручной оцифровке. Интерпретация результата: удалённые выбросы сосредоточены на краях и в зашумлённых областях; оставшиеся значения усредняются, создавая локальное сглаживание. Параметры исключения управляют резкостью краёв: исключение одного крайнего значения удаляет шум «соль и перец»; исключение нескольких крайних значений даёт более гладкий результат с более мягкими переходами на краях. Выходные значения остаются в пределах входного диапазона; статистика смещается к средним без выбросов. Отслеживайте разность между результатом и входными данными, чтобы определить отфильтрованные области (обычно области с высокой дисперсией). Качество сохранения краёв зависит от точности определения выбросов; визуально убедитесь, что объекты остаются резкими. К типичным артефактам относятся недостаточное сглаживание при слишком строгих порогах и чрезмерная фильтрация при слишком большом числе исключаемых значений. Число итераций позволяет выполнять последовательную фильтрацию; один проход даёт мягкое сглаживание. Применяйте перед классификацией на основе порогов, чтобы уменьшить вызванные шумом ошибки категорий при сохранении границ объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Размер квадратной окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Максимальная абсолютная разность с соседом для включения в локальное среднее (по умолчанию 15.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "emboss_filter": {
            "name": "Фильтр рельефности",
            "description": "Фильтр тиснения усиливает края за счёт направленного затенения, создавая характерный трёхмерный рельефный вид, при котором края выглядят приподнятыми или углублёнными в зависимости от имитируемого направления освещения. Фильтр применяет ядро 3×3, сочетающее выделение краёв с однонаправленным освещением, обычно имитирующим свет из верхнего левого квадранта, что создаёт выразительный визуальный контраст на границах при сохранении гладких областей. Преобразование тиснения вычитает взвешенные значения соседей в определённых направлениях, давая результат, в котором блики и тени подчёркивают топографические разрывы и разрывы объектов. Ключевые возможности: интуитивное управление направлением, позволяющее настраивать имитируемое направление света (варианты для восьми направлений), естественное включение трёхмерного восприятия, облегчающее визуальное дешифрирование, и устойчивая работа при разных условиях освещения исходных снимков. Фильтр тиснения применяется для контроля качества, интерпретационной визуализации и подчёркивания границ объектов. Сценарии использования: визуальное улучшение для геологической интерпретации, когда границы минералов становятся видимыми в виде рельефных рисунков; дешифрирование аэрофотоснимков с повышением видимости малозаметных границ; картографическое производство, где тиснёные цифровые модели рельефа дают выразительные карты рельефа; обнаружение археологических объектов, когда погребённые структуры проявляются как слабые топографические вариации. Интерпретация результата: высокие значения рассматриваются как освещённые поверхности, низкие — как тени, что создаёт перцептивную глубину, которую глаз человека естественно воспринимает как рельеф. Результат тиснения обычно требует масштабирования в диапазон визуализации 0-255; необработанный результат часто содержит отрицательные значения, представляющие затенённые области. Эффект чисто визуальный — тиснение не вычисляет истинное освещение и не создаёт производных высот. Для мультиспектральных снимков применяйте фильтр к главным компонентам или выбранным каналам в зависимости от аналитических задач. Постобработка часто включает усиление контраста или тональную компрессию для оптимизации визуального эффекта.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "direction": {
                "label": "Направление",
                "description": "Направление рельефности: n,s,e,w,ne,nw,se,sw."
              },
              "clip_amount": {
                "label": "Величина обрезки",
                "description": "Необязательный симметричный процент обрезки хвостов (0-40)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "fast_almost_gaussian_filter": {
            "name": "Быстрый почти гауссов фильтр",
            "description": "Быстрый почти гауссов фильтр обеспечивает быстрое сглаживание, аппроксимирующее гауссово, с помощью итеративной раздельной фильтрации прямоугольным (усредняющим) окном, достигая отклика размытия, близкого к гауссову, с вычислительной сложностью O(N) независимо от радиуса размытия. Реализация применяет последовательные свёртки с прямоугольным окном (каждая вычисляет локальные средние пикселей) для аппроксимации кумулятивного гауссова распределения; N итераций аппроксимируют всё более крупные гауссовы ядра. Математическая основа — центральная предельная теорема: многократная свёртка прямоугольных функций асимптотически приближается к гауссову распределению. Ключевые возможности: высокая скорость вычислений, позволяющая выполнять сглаживание большими ядрами на крупных снимках; раздельная реализация, снижающая требования к памяти; управление параметрами через число итераций (управляет радиусом размытия); эффективность для любого типа данных. Быстрая почти гауссова фильтрация особенно эффективна для быстрого построения пирамид изображений в многомасштабном анализе, просмотра спутниковых снимков в реальном времени, предварительной обработки огромных наборов данных дистанционного зондирования перед классификацией и интерактивных просмотрщиков изображений, требующих отзывчивого сглаживания. Интерпретация результата: число итераций напрямую связано с радиусом размытия: N=1 даёт минимальное сглаживание; N=3-5 — умеренное размытие; N>10 — сильное сглаживание, аппроксимирующее гауссианы с большим ядром. С ростом числа итераций выходные значения постепенно смещаются к локальному среднему; снижение дисперсии следует предсказуемым закономерностям. Значения остаются в пределах диапазона входных данных. Сравнение с истинной гауссовой фильтрацией показывает приемлемую аппроксимацию с ошибкой в пределах 2-5% для большинства приложений. Выигрыш в скорости по сравнению с истинной гауссовой фильтрацией резко возрастает при больших радиусах: в 5-20 раз быстрее для радиуса >20 пикселей. К незначительным артефактам относятся слабая волнистость вдоль краёв (артефакты прямоугольного окна, накапливающиеся при итерациях) и несколько иная обработка границ, чем у гауссова фильтра. Отслеживайте гистограммы результата на предмет мультимодальных распределений, указывающих на достаточное сглаживание. Применяйте в конвейерах предварительной обработки изображений, где скорость оправдывает незначительные ошибки аппроксимации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Приближённая гауссова сигма (рекомендуется >=1.8, по умолчанию 1.8)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "flip_image": {
            "name": "Отражение изображения",
            "description": "Отражает изображение по вертикали, по горизонтали или в обоих направлениях.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "direction": {
                "label": "Направление",
                "description": "Направление отражения: vertical (по умолчанию), horizontal или both."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "frangi_filter": {
            "name": "Фильтр Frangi",
            "description": "Выполняет многомасштабное усиление «сосудистости» Frangi для обнаружения сосудоподобных (трубчатых) структур на нескольких масштабах. Основано на анализе собственных значений матрицы Гессе. Даёт сильный отклик на линейные объекты (сосуды, дороги, реки) и слабый — на пятнообразные структуры. Многомасштабный анализ (попробуйте несколько значений sigma) автоматически обнаруживает сосуды разной ширины. Широко используется в медицинской визуализации и дистанционном зондировании для обнаружения линейных объектов. Метод Frangi использует главные кривизны (собственные значения матрицы Гессе) для классификации локальной структуры: высокое значение для линейных объектов, низкое — для плато или пятен. Многомасштабная реализация применяет метод при нескольких значениях sigma (ширины) и объединяет отклики. Отлично подходит для обнаружения дорог, рек и сосудистых сетей. Умеренные вычислительные затраты при нескольких масштабах. Хорошо интерпретируемый результат — отклик на узнаваемые объекты. Применение: (1) обнаружение дорог на спутниковых снимках, (2) извлечение речной сети/сети водотоков, (3) обнаружение линейных объектов в целом, (4) обнаружение сосудов (медицинская визуализация), (5) многомасштабное обнаружение структур.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "scales": {
                "label": "Масштабы",
                "description": "Список гауссоподобных масштабов в пикселях (по умолчанию [1.0, 2.0, 3.0])."
              },
              "beta": {
                "label": "Бета",
                "description": "Параметр бета Frangi для подавления пятен (по умолчанию 0.5)."
              },
              "c": {
                "label": "C",
                "description": "Параметр c Frangi для чувствительности к структурам (по умолчанию 15.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "gabor_filter_bank": {
            "name": "Банк фильтров Габора",
            "description": "Выполняет многоориентационную фильтрацию откликом Gabor — анализ направленной текстуры. Применяет банк фильтров Gabor с несколькими ориентациями (обычно 0°, 45°, 90°, 135°) для извлечения признаков направленной текстуры. Отклики Gabor указывают силу и ориентацию текстуры. Полезно для обнаружения направленных объектов, характеристики текстуры и анализа ориентированных рисунков. Каждая ориентация выводится отдельно. Фильтрация Gabor извлекает направленную текстуру путём свёртки с вейвлетами, специфичными для ориентации. Каждая ориентация выявляет объекты, выровненные по этому направлению. Выводит несколько каналов (по одному на ориентацию), показывающих локальное направление и силу текстуры. Отклики Gabor лежат в основе извлечения текстурных признаков и обнаружения объектов в компьютерном зрении. Банк фильтров обеспечивает всесторонний анализ направлений. Применение: (1) анализ направленной текстуры, (2) обнаружение ориентированных объектов (гребней, долин, линейных структур), (3) картографирование направленной эрозии/аккумуляции, (4) обнаружение дорог/водотоков (линейные объекты), (5) классификация на основе текстуры.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Сигма гауссовой огибающей в пикселях (по умолчанию 2.0)."
              },
              "frequency": {
                "label": "Частота",
                "description": "Пространственная частота синусоиды в циклах/пиксель (по умолчанию 0.2)."
              },
              "orientations": {
                "label": "Ориентации",
                "description": "Число ориентаций в банке фильтров (по умолчанию 6)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "gaussian_filter": {
            "name": "Гауссов фильтр",
            "description": "Математически оптимальное гауссово сглаживание с ядром, взвешенным по расстоянию. Основа многомасштабного анализа, выделения краёв и полосовой фильтрации. Параметр sigma управляет интенсивностью сглаживания; поддерживает RGB.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Гауссово стандартное отклонение в пикселях (0.5-20.0, по умолчанию 0.75)."
              },
              "treat_as_rgb": {
                "label": "Обрабатывать как RGB",
                "description": "Установите true, чтобы принудительно работать в пространстве интенсивности RGB."
              },
              "assume_three_band_rgb": {
                "label": "Предполагать трёхканальный RGB",
                "description": "Если true (по умолчанию), трёхканальные растры uint8/uint16 могут обрабатываться как RGB при отсутствии явных метаданных."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "glcm_texture": {
            "name": "Текстура GLCM",
            "description": "Анализатор текстуры на основе матрицы совместной встречаемости уровней серого (GLCM) извлекает текстурные меры статистики второго порядка, количественно описывающие пространственные связи между уровнями серого пикселей при заданных расстояниях смещения и направлениях, что позволяет выполнять сложную текстурную классификацию, различающую рисунки сельскохозяйственной растительности, структуры застройки и геологические образования. GLCM вычисляет матрицы вероятностей, показывающие, как часто пары уровней серого встречаются при фиксированных смещениях, и рассчитывает четыре канонические статистики Haralick: контраст (локальная изменчивость), корреляцию (линейная зависимость), однородность (близость к диагонали) и энергию (равномерность). Инструмент поддерживает восемь направлений смещения (0°, 45°, 90°, 135° и противоположные им), обеспечивая чувствительность к направлению текстуры — обнаружение ориентированных рисунков, таких как ряды посевов, выравнивание зданий или геологические структуры. Ключевые возможности: многонаправленный анализ, выявляющий анизотропные свойства текстуры; настройка параметра смещения для оптимизации чувствительности к масштабу; одновременное вычисление нескольких текстурных мер, снижающее затраты на обработку; присущая методу способность различать визуально малозаметные свойства поверхности. Сценарии использования охватывают точное земледелие (классификация типов культур, выявление границ полей, оценка стресса посевов), городской анализ (картографирование плотности застройки, извлечение непроницаемых поверхностей) и геологическое дистанционное зондирование (различение типов пород, распознавание структурных рисунков). Области применения: классификация земного покрова с объединением спектральных и текстурных признаков, объектно-ориентированный анализ изображений для повышения точности классификации, контроль качества с выявлением инструментальных артефактов на спутниковых снимках и выявление изменений с отделением значимых изменений от шума сенсора. Интерпретация результата требует понимания смысла каждой статистики: высокий контраст указывает на шероховатую/изменчивую текстуру; высокая корреляция — на линейные рисунки; высокая однородность — на равномерную текстуру; высокая энергия — на упорядоченные повторяющиеся рисунки. Выходные каналы можно объединять в текстурные индексы (например, однородность GLCM, делённая на контраст, выделяет однородные области). Режимы агрегирования по направлениям (mean/min/max/separate) влияют на размерность и интерпретацию результата. Типичный текстурный анализ использует несколько мер GLCM одновременно для надёжной классификации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной одноканальный растр."
              },
              "window_size": {
                "label": "Размер окна",
                "description": "Нечётный размер скользящего окна в пикселях (по умолчанию 7)."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Расстояние в пикселях для смещений пар совместной встречаемости (по умолчанию 1)."
              },
              "angles": {
                "label": "Углы",
                "description": "Углы через запятую из 0,45,90,135 (по умолчанию '0,45,90,135')."
              },
              "features": {
                "label": "Признаки",
                "description": "Признаки через запятую: contrast,dissimilarity,homogeneity,asm,energy,entropy,mean,variance,correlation."
              },
              "direction_aggregation": {
                "label": "Агрегирование направлений",
                "description": "Режим агрегирования направлений: mean (по умолчанию), min, max, range, separate."
              },
              "levels": {
                "label": "Уровни",
                "description": "Число уровней квантования (по умолчанию 32; диапазон 8-128)."
              },
              "symmetric": {
                "label": "Симметричный",
                "description": "Если true (по умолчанию), строить симметричные GLCM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра (многоканальный GeoTIFF)."
              }
            }
          },
          "guided_filter": {
            "name": "Управляемый фильтр",
            "description": "Направляемый фильтр реализует сглаживание с сохранением краёв, ограничивая результаты фильтра локально линейными связями с направляющим изображением — обычно исходным или связанным эталонным слоем. Реализация делит изображение на перекрывающиеся прямоугольные области и вычисляет параметры линейной регрессии внутри каждой области, обеспечивая гладкость результата с учётом структуры направляющего изображения. Математическая формулировка минимизирует ||Fᵢ - a·Gᵢ - b||² + ε||a||², где Fᵢ — отфильтрованный результат, Gᵢ — направляющее изображение, а (a, b) — локально линейные параметры. Ключевые возможности: гибкость (направляющее изображение может не зависеть от фильтруемого), вычислительная эффективность благодаря раздельной реализации O(N), управление параметрами, позволяющее регулировать силу сохранения краёв, и эффективность при одноканальном или мультиспектральном направлении. Направляемая фильтрация особенно эффективна в процессах слияния данных нескольких сенсоров, когда оптические данные направляют подавление шума SAR, при уточнении классификации LiDAR с использованием совпадающих по времени ортофото, удалении теней/облаков в спутниковых мозаиках с использованием временных эталонных изображений и усилении деталей в задачах регуляризации карт. Интерпретация результата: отфильтрованные области остаются локально сходными со структурой направляющего изображения, а усреднение яркости происходит внутри однородных областей. Радиус сглаживания управляет пространственным охватом (больший радиус — сильнее сглаживание); параметр регуляризации ε балансирует гладкость и точность воспроизведения структуры (больший ε — глаже, меньший ε — больше деталей). Диапазон выходных значений соответствует входному; визуальное сравнение с направляющим изображением подтверждает точность сохранения краёв. К типичным артефактам относятся пересглаживание на сильных разрывах (подбирайте подходящие параметры) и недостаточное сглаживание в областях, бедных направляющей информацией (проверяйте качество направляющего изображения). Отслеживайте взаимную корреляцию между отфильтрованным результатом и направляющим изображением для оценки качества совмещения. Применяйте целенаправленно в процессах слияния изображений, повышения резкости и реконструкции, где информация о краях из одного источника направляет фильтрацию другого.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус окна управляемого фильтра в пикселях (по умолчанию 4)."
              },
              "epsilon": {
                "label": "Эпсилон",
                "description": "Параметр регуляризации для локальной дисперсии (по умолчанию 0.01)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "high_pass_bilateral_filter": {
            "name": "Высокочастотный билатеральный фильтр",
            "description": "Вычисляет высокочастотный остаток путём вычитания билатерального сглаживания из входного растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "sigma_dist": {
                "label": "Сигма расстояния",
                "description": "Стандартное отклонение пространственного (по расстоянию) гауссова ядра в пикселях (0.5–20.0, по умолчанию 0.75)."
              },
              "sigma_int": {
                "label": "Сигма интенсивности",
                "description": "Стандартное отклонение гауссова ядра интенсивности в единицах значений растра (по умолчанию 1.0)."
              },
              "treat_as_rgb": {
                "label": "Обрабатывать как RGB",
                "description": "Установите true, чтобы принудительно фильтровать интенсивность HSI для упакованных растров RGB перед высокочастотным вычитанием."
              },
              "assume_three_band_rgb": {
                "label": "Предполагать трёхканальный RGB",
                "description": "Если true (по умолчанию) и явные цветовые метаданные отсутствуют, разрешать интерпретацию трёхканальных растров uint8/uint16 как RGB."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного файла. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "high_pass_filter": {
            "name": "Высокочастотный фильтр",
            "description": "Фильтр верхних частот выделяет высокочастотные пространственные составляющие снимков, вычитая из исходного изображения его низкочастотную (сглаженную) версию. Математически это достигается свёрткой изображения с ядром, предназначенным для усиления градиентов и подавления широких тоновых вариаций. Реализация использует прямую свёртку или обработку в частотной области в зависимости от размера ядра и размеров изображения. Фильтр усиливает края, мелкие детали текстуры и мелкомасштабные вариации, удаляя крупномасштабные тренды освещённости. Ключевые отличительные особенности: сохранение контраста краёв без граничных артефактов, избирательное ослабление частот в зависимости от радиуса ядра и прямая применимость как к снимкам в оттенках серого, так и к мультиспектральным снимкам. Фильтрация верхних частот незаменима при анализе рельефа, где необходимо усилить малозаметные топографические объекты, повышении резкости спутниковых снимков для визуального дешифрирования, выявлении мелкомасштабных геологических структур и предварительной обработке данных для классификации методами машинного обучения. Она также важна при подготовке ортофото к выявлению изменений и улучшении продуктов, полученных из LiDAR. Интерпретация результата требует понимания того, что положительные значения указывают на локальные максимумы (светлые края), а отрицательные — на локальные минимумы (тёмные края). Типичный диапазон для 8-битных снимков — ±100; результат с нулевым средним свидетельствует об успешном выделении высоких частот. К типичным артефактам относятся звон на сильных разрывах и усиленный шум, если исходные снимки зашумлены. Интерпретация масштаба зависит от радиуса ядра: малые ядра усиливают мелкую текстуру (отдельные пиксели), а большие подчёркивают объекты среднего масштаба (вариации рельефа на протяжении десятков пикселей). Отслеживайте статистику результата; чрезмерное центрирование относительно нуля указывает на возможную избыточную обработку. Применяйте совместно с результатами фильтра нижних частот для восстановления исходного изображения или в процессах многомасштабного разложения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "high_pass_median_filter": {
            "name": "Высокочастотный медианный фильтр",
            "description": "Выполняет фильтрацию верхних частот, вычитая локальную медиану из центральных значений: output = pixel - median_neighborhood. Сочетает фильтрацию верхних частот (усиливает детали) с устойчивостью медианы (удаляет шум). Результат центрирован относительно нуля (отрицательный — темнее окружения, положительный — светлее). Устойчив к выбросам по сравнению с фильтрами верхних частот на основе гауссиана. Высокочастотный остаток показывает локальные отклонения от медианного тренда. Особенно устойчив для зашумлённых данных — медиана стабильнее среднего при наличии выбросов. Результат подчёркивает мелкомасштабную изменчивость. Часто применяется к сглаженным по Гауссу версиям (создавая полосовой фильтр). Полезен для усиления текстуры и извлечения объектов с зашумлённых снимков. Применение: (1) усиление текстуры в зашумлённых данных, (2) извлечение деталей перед классификацией, (3) устойчивое обнаружение объектов, (4) предварительная обработка для сегментации на основе текстуры, (5) предварительная обработка SAR.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "sig_digits": {
                "label": "Значащие цифры",
                "description": "Значащие цифры для биннирования гистограммы (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "integral_image_transform": {
            "name": "Преобразование интегрального изображения",
            "description": "Вычисляет преобразование суммируемых площадей (интегральное изображение) для каждого канала.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "k_nearest_mean_filter": {
            "name": "Фильтр K ближайших средних",
            "description": "Выполняет сохраняющее края сглаживание средним по k ближайшим соседям: сортирует окрестность по отличию от центрального значения и усредняет k ближайших значений. Гибридный подход, сохраняющий края за счёт взвешивания по сходству. Усредняются центральный пиксель и k-1 наиболее сходных соседей. Более совершенен, чем простой k-NN (учитывает как пространственное сходство, так и сходство яркости). Вычислительно эффективен по сравнению с билатеральным фильтром. Подход k ближайших адаптивно выбирает соседей: значения пикселей, близкие к центральному, усредняются, несходные пиксели игнорируются. Параметр K управляет сглаживанием: k=1 (без сглаживания), k=n (все соседи = фильтр среднего). Обычно k=n/2 (половина окрестности). Эффективная альтернатива билатеральному фильтру — аналогичное сохранение краёв при меньших вычислительных затратах. Особенно полезен для изображений с сильными разрывами яркости. Применение: (1) сглаживание с сохранением краёв (альтернатива билатеральному), (2) быстрая предварительная обработка для классификации, (3) предварительная обработка, критичная к производительности, (4) фильтрация многоканальных изображений. Типичные параметры: k=от neighborhood_size/2 до 3/4.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 3)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 3)."
              },
              "k": {
                "label": "K",
                "description": "Число ближайших соседей для усреднения (по умолчанию 5)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "kuwahara_filter": {
            "name": "Фильтр Kuwahara",
            "description": "Фильтр Kuwahara реализует нелинейное сглаживание с сохранением краёв, разделяя окрестность каждого пикселя на четыре квадранта, вычисляя статистику в каждом квадранте и выбирая в качестве выходного значения квадрант с наименьшей дисперсией. Реализация разбивает окно (2k+1)×(2k+1) на четыре перекрывающихся подокна k×k, вычисляет среднее и дисперсию каждого квадранта и выводит среднее квадранта с минимальной дисперсией. Этот ранговый подход одновременно сглаживает однородные области и повышает резкость краёв. Ключевые возможности: истинное сохранение краёв за счёт выбора квадранта (края между квадрантами подавляют размытие результата), вычислительная простота, требующая лишь расчёта среднего и дисперсии, управление параметрами через размер квадранта k и эффективность на оптических, радарных и тепловых снимках. Фильтрация Kuwahara особенно эффективна при сглаживании DEM, полученных из LiDAR, с сохранением уступов и террас, извлечении дорожной сети со снимков высокого разрешения с сохранением резкости осевых линий, выделении контуров зданий на аэрофотоснимках и обнаружении границ нефтяных разливов на снимках SAR. Интерпретация результата: в однородных областях выводится естественно усредняющий квадрант (с наименьшей дисперсией); на краях выводится квадрант с однородной структурой, ближайшей к краю, что фактически привязывает результат к более чистой стороне. Размер квадранта k управляет сохранением деталей: k=1 (минимальное сглаживание) сохраняет тонкие края; k=3-4 обеспечивает сбалансированное сглаживание и сохранение краёв; k>5 грозит потерей деталей. Выходные значения точно совпадают со значениями входных пикселей выбранных квадрантов (без интерполяции). Отслеживайте гистограммы результата на предмет бимодальных распределений (края и однородные области чётко разделены); унимодальные распределения указывают на размытие краёв. При пересглаживании применяйте дополнительное повышение резкости. К типичным артефактам относятся направленное смещение в зависимости от расположения квадрантов и блочность вблизи слабых краёв. Используйте при предварительной обработке для сегментации, где сохранение краёв обеспечивает точное извлечение границ.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус квадранта Kuwahara в пикселях (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "lee_filter": {
            "name": "Фильтр Ли",
            "description": "Фильтр Lee выполняет подавление спекл-шума SAR на основе мультипликативной модели Lee, предполагая, что радарные отражения содержат мультипликативный шум: I = S·N, где S — сигнал, а N — мультипликативный шум. Реализация вычисляет локальные средние и дисперсии, оценивает дисперсию спекла, а затем фильтрует по формуле: F = μ + (1 - σₙ²/σ_I²)·(I - μ), где σₙ² — дисперсия спекла, а σ_I² — общая дисперсия. Этот модельный подход сохраняет объекты с высокой когерентностью, подавляя спекл. Ключевые возможности: специфичная для SAR модель шума (мультипликативная, а не гауссова), сохранение точечных целей и краёв, простая интерпретация параметров (размер окна управляет измерением когерентности) и доказанная эффективность для однополяризационных и мультиполяризационных данных SAR. Фильтрация Lee особенно эффективна при предварительной обработке SAR для сельскохозяйственного мониторинга, классификации лесов, мониторинга морской поверхности и картографирования наводнений. Интерпретация результата: области с высокой когерентностью (точечные цели, сильные края) фильтруются минимально; области с низкой когерентностью (спекл-шум, слабые границы) фильтруются сильно. Оценка дисперсии спекла влияет на результат: точная оценка требует достаточного количества однородных пикселей; заниженная дисперсия приводит к недостаточному сглаживанию, завышенная — к пересглаживанию. Размер окна управляет разрешением измерения когерентности: малые окна (3×3) сохраняют мелкие детали; большие окна (7×7) улучшают оценку дисперсии, но грозят потерей деталей. Масштаб результата соответствует входным данным; логарифмическая визуализация улучшает видимость. Типичное подавление шума даёт снижение дисперсии на 5-10 дБ в зависимости от числа некогерентных накоплений (looks). Отслеживайте гистограмму результата на предмет остаточной сигнатуры спекла; гладкие распределения указывают на достаточную фильтрацию. К артефактам относятся возможное размытие краёв в областях со слабой когерентностью и направленное смещение на линейных объектах. Применяйте целенаправленно при классификации SAR, требующей подавления спекла с сохранением целостности классификационных признаков.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Полуширина включения по интенсивности вокруг центрального значения (по умолчанию 10.0)."
              },
              "m_value": {
                "label": "Значение M",
                "description": "Минимальное число выборок в диапазоне до резервного усреднения (по умолчанию 5.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "line_detection_filter": {
            "name": "Фильтр обнаружения линий",
            "description": "Фильтр обнаружения линий — специализированный детектор краёв, предназначенный для усиления линейных объектов (дорог, рек, линий электропередачи и геологических линеаментов) в четырёх основных направлениях (горизонтальном, вертикальном и обоих диагональных) путём применения направленных ядер свёртки, оптимизированных для связности и непрерывности линий. Фильтр использует ядра 3×3, подчёркивающие линейные структуры, выровненные по каждому основному направлению, и подавляющие перпендикулярный шум и случайные вариации объектов. Направленный подход разделяет обнаружения по ориентации, позволяя последующим приложениям отличать горизонтальную инфраструктуру (трубопроводы, границы полей) от вертикальных структур (ряды деревьев, коридоры коммуникаций). Ключевые возможности: многонаправленное разложение с формированием отдельных каналов величины и направления, адаптивная настройка чувствительности к ширине и контрасту линий и исключительная эффективность для малозаметных линейных объектов в сложном рельефе. Сценарии использования охватывают картографирование инфраструктуры (дорог, железных дорог, линий электропередачи), извлечение природных объектов (водотоков, гребней, разломов) и разграничение границ землепользования. Области применения: предварительная обработка перед векторизацией для кадастровой оцифровки, извлечение транспортной сети с ортофотоснимков, картографирование геологических структур по спутниковым снимкам и распознавание образов при анализе данных дистанционного зондирования. Интерпретация результата требует понимания того, что каждая направленная составляющая показывает силу линии в соответствующей ориентации — изучите все четыре результата по основным направлениям, чтобы определить преобладающие направления объектов. Более высокие значения величины указывают на лучшую непрерывность линии; низкие значения говорят о шуме или разрывах. Результат по своей природе разрежен и выделяет только пиксели, представляющие линейные объекты; фоновые области остаются близкими к нулю. Многонаправленный вывод позволяет выполнять последующую классификацию, различающую дороги (обычно горизонтальные/вертикальные в застроенных районах) и природные линеаменты (произвольной ориентации). Объединяйте направленные составляющие для получения единой карты линий или анализируйте каждое направление отдельно для картографирования ориентированных структур.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "variant": {
                "label": "Вариант",
                "description": "Вариант направления линий: v, h, 45 или 135."
              },
              "abs_values": {
                "label": "Абсолютные значения",
                "description": "Если true, выводить абсолютные значения отклика."
              },
              "clip_tails": {
                "label": "Обрезать хвосты",
                "description": "Необязательный симметричный процент обрезки хвостов (0-40)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "line_thinning": {
            "name": "Утончение линий",
            "description": "Сводит связные бинарные объекты растра к скелетным линиям шириной в одну ячейку.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "lidar_ground_point_filter": {
            "name": "Фильтр наземных точек LiDAR",
            "description": "Отделяет рельеф от точек вне земли: классификация/фильтрация на основе уклона с использованием локальной геометрии плоскости и порогов высоты. Эффективная сегментация земли.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус поиска окрестности (по умолчанию 2.0)."
              },
              "min_neighbours": {
                "label": "Мин. соседей",
                "description": "Целевое минимальное число соседей (по умолчанию 0)."
              },
              "slope_threshold": {
                "label": "Порог уклона",
                "description": "Порог уклона в градусах (по умолчанию 45.0, макс. 88)."
              },
              "height_threshold": {
                "label": "Порог высоты",
                "description": "Минимальное вертикальное разделение для пометки как объект над рельефом (по умолчанию 1.0)."
              },
              "classify": {
                "label": "Классифицировать",
                "description": "Если true, классифицировать точки (земля=2, над рельефом=1); иначе отфильтровывать точки над рельефом."
              },
              "slope_norm": {
                "label": "Нормализация уклона",
                "description": "Если true, применять нормализацию рельефа top-hat перед проверкой уклона (по умолчанию true)."
              },
              "height_above_ground": {
                "label": "Высота над землёй",
                "description": "Если true, выводить значения z как локальную высоту над ближайшим нижним соседом."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR для режима одного входа."
              }
            }
          },
          "majority_filter": {
            "name": "Мажоритарный фильтр",
            "description": "Вычисляет моду (наиболее частое значение/класс) в скользящем окне для каждого пикселя. Нелинейный фильтр, сохраняющий категориальные границы и доминирующие закономерности. Особенно полезен для классифицированных снимков, где результат должен оставаться в пределах исходного набора классов (в отличие от фильтра среднего, создающего интерполированные значения). Незаменим для морфологической очистки результатов классификации.\n\nФильтрация по большинству — модальный эквивалент медианной фильтрации. Для категориальных данных (классифицированных снимков, земного покрова) фильтр большинства сохраняет определения классов, сглаживая шум. Для непрерывных данных он может выявлять локальные пики распределения значений. Часто за ним следует устранение классов меньшинства (очистка после классификации) для удаления артефактов классификации «соль и перец».\n\nПрименение: (1) сглаживание после классификации (удаляет мелкие ложные участки классов), (2) карта преобладающего класса по результатам нескольких классификаций, (3) очистка векторных данных (дезагрегация классов), (4) подавление шума на снимках после пороговой обработки, (5) сглаживание атрибутов в результатах сегментации. Типичный рабочий процесс: классификация→фильтр большинства→устранение меньшинства→итоговая очищенная карта.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "maximum_filter": {
            "name": "Фильтр максимума",
            "description": "Вычисляет максимальное значение в скользящем окне, выявляя локальные пики и гребни. Оператор дилатации в морфологической обработке изображений. Полезен для обнаружения пиков, гребневых линий и объектов с максимальной амплитудой. Чувствителен к единичному выбросу (одно высокое значение в окне даёт высокий результат).\n\nФильтр максимума — морфологический оператор «дилатации»: расширяет светлые области и сужает тёмные. При многократном применении (многопроходная дилатация) создаёт сглаженные пики, а изолированные объекты разрастаются, заполняя свои окрестности. В сочетании с фильтром минимума позволяет выполнять закрытие (дилатация, затем эрозия) и открытие (эрозия, затем дилатация). Незаменим для морфологического обнаружения объектов и многомасштабного анализа.\n\nПрименение: (1) морфологическая дилатация для фильтрации по размеру, (2) закрытие через дилатацию→эрозию для заполнения мелких отверстий, (3) выявление пиков/гребней на рельефе и снимках, (4) локальный верхний уровень в батиметрии/DEM, (5) многомасштабный анализ объектов (сравнение дилатации на разных масштабах). Типичный рабочий процесс: максимум→сравнение с минимумом→закрытие или открытие в зависимости от типа объекта.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "mean_filter": {
            "name": "Фильтр среднего",
            "description": "Вычисляет среднее значение в скользящем окне для каждого пикселя. Базовая операция сглаживания, снижающая локальный шум и размывающая резкие переходы. Результат представляет локальную центральную тенденцию. Широко используется для предварительной обработки, подавления шума и многомасштабного анализа.\n\nФильтрация средним — наиболее распространённая операция низкочастотного сглаживания. Сильно чувствительна к выбросам (крайние значения могут искажать результаты), поэтому для зашумлённых данных предпочтителен медианный фильтр. Вычислительно эффективна. Размер фильтра управляет степенью сглаживания: малый (3×3) сохраняет детали, большой (31×31+) создаёт сильно сглаженную поверхность. Часто применяется итеративно или на нескольких масштабах для многоразрешающего анализа.\n\nПрименение: (1) базовое подавление шума, (2) предварительная обработка перед обнаружением объектов (сглаживает ложные срабатывания), (3) многомасштабный анализ (применение при 3×3, 11×11, 31×31), (4) временное сглаживание (объединение сцен), (5) основа для других статистических операций. Для лучшего сохранения краёв сравните с медианным фильтром (нелинейный, сохраняет края).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "median_filter": {
            "name": "Медианный фильтр",
            "description": "Вычисляет медианное значение в скользящем окне для каждого пикселя, заменяя его 50-м процентилем окрестности. Устойчивый фильтр шума, сохраняющий края (нелинейный). Особенно эффективен для удаления импульсного шума («соль и перец») при сохранении резких границ. Выходные значения являются фактическими значениями пикселей окрестности (не интерполированными).\n\nМедианная фильтрация нелинейна — это ключевое преимущество перед фильтрацией средним при подавлении шума, поскольку она не создаёт новых значений и не размывает края. Большие размеры фильтра сильно сглаживают, сохраняя резкие переходы. Широко используется в дистанционном зондировании, медицинской визуализации и обработке снимков SAR. Вычислительные затраты растут с размером фильтра, но обычно он быстрее билатерального или направляемого фильтров.\n\nПрименение: (1) подавление спекл-шума на снимках SAR (особенно эффективно для фазовой когерентности), (2) удаление шума «соль и перец», (3) предварительная обработка перед выделением краёв (уменьшает ложные края), (4) сохранение границ при предварительной обработке для классификации, (5) радиометрическая коррекция выбросов. Типичный рабочий процесс: медиана→результат с усиленными краями→порог для извлечения объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "sig_digits": {
                "label": "Значащие цифры",
                "description": "Число значащих цифр для квантованной ранговой фильтрации (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "minimum_filter": {
            "name": "Фильтр минимума",
            "description": "Вычисляет минимальное значение в скользящем окне, выявляя локальные понижения и впадины. Оператор эрозии в морфологической обработке изображений. Полезен для обнаружения днищ долин, понижений и объектов с минимальной высотой. Чувствителен к единичному выбросу (одно низкое значение в окне даёт низкий результат).\n\nФильтр минимума — морфологический оператор «эрозии»: сужает светлые области и расширяет тёмные. При многократном применении (многопроходная эрозия) создаёт сглаженные долины, а изолированные объекты исчезают. В сочетании с фильтром максимума (дилатацией) позволяет выполнять операции открытия (эрозия, затем дилатация) и закрытия (дилатация, затем эрозия). Часто используется при многомасштабном разложении: сравнивайте минимум при 3×3, 11×11, 31×31 для определения масштабов объектов.\n\nПрименение: (1) морфологическая эрозия для фильтрации по размеру, (2) открытие через эрозию→дилатацию для удаления мелких шумовых объектов, (3) выявление понижений/долин на рельефе, (4) локальный нижний уровень в батиметрии/DEM, (5) многомасштабный анализ объектов (сравнение эрозии на разных масштабах). Типичный рабочий процесс: минимум→сравнение с максимумом→открытие или закрытие в зависимости от типа объекта.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "non_local_means_filter": {
            "name": "Фильтр нелокальных средних",
            "description": "Фильтрация нелокальными средними (non-local means) выполняет мощное подавление шума, усредняя сходные фрагменты, найденные по всему изображению, а не соседние пиксели, и использует самоподобие изображения для подавления шума с сохранением структур. Реализация находит фрагменты, сходные с каждым целевым фрагментом, по евклидову расстоянию в пространстве фрагментов, экспоненциально взвешивает сходные фрагменты по степени сходства и усредняет взвешенные фрагменты. Алгоритм вычисляет: Fᵢ = (1/Z) Σⱼ exp(-d(Pᵢ, Pⱼ)²/h²) · Iⱼ, где d — расстояние между фрагментами, h управляет шириной полосы, Z — нормирующий множитель. Ключевые возможности: превосходное подавление шума за счёт поиска по сходству, а не только по пространственной близости; эффективность для сложных текстур и мелких деталей; применимость к любому типу данных; доказанная эффективность на медицинских, спутниковых и фотографических изображениях. Фильтрация нелокальными средними особенно эффективна при детальном восстановлении спутниковых снимков с сохранением мелкой текстуры и структуры, усреднении многовременных стеков при подготовке к выявлению изменений, подавлении шума в очень зашумлённых данных съёмки (ультразвуковых, гиперспектральных) и улучшении снимков археологической/аэросъёмки. Интерпретация результата требует понимания того, что в каждый выходной пиксель вносят вклад сходные области всего изображения; локально несходные области дают пренебрежимо малый вклад. Размер фрагмента управляет сохранением объектов (более крупные фрагменты — более гладкие результаты, более мелкие — больше деталей); ширина полосы h управляет взвешиванием по сходству (большее h — учитывается больше фрагментов, меньшее h — строже требования к сходству). Диапазон выходных значений соответствует входному; статистика смещается к региональным средним при сохранении мелких структур. Вычислительные затраты растут с размером изображения и радиусом фрагмента; для больших снимков выполнение обычно требует значительного времени обработки. Отслеживайте ход фильтрации по PSNR или визуально. К типичным артефактам относятся пересглаживание мелких текстур (осторожно увеличивайте размер фрагмента) и недостаточное сглаживание в сильно зашумлённых областях (увеличьте ширину полосы). Применяйте целенаправленно в процессах, требующих максимального подавления шума при сохранении мелкомасштабных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окна поиска в пикселях (по умолчанию 5)."
              },
              "patch_radius": {
                "label": "Радиус фрагмента",
                "description": "Радиус фрагмента в пикселях (по умолчанию 1)."
              },
              "h": {
                "label": "H",
                "description": "Параметр силы фильтрации (по умолчанию 10.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "opening": {
            "name": "Открытие",
            "description": "Выполняет морфологическую операцию открытия с прямоугольным структурирующим элементом.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина окрестности (по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота окрестности (по умолчанию равна filter_size_x)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "olympic_filter": {
            "name": "Олимпийский фильтр",
            "description": "«Олимпийский» фильтр реализует ранговое сглаживание, удаляя из окрестности каждого пикселя одно наибольшее и одно наименьшее значение и усредняя оставшиеся пиксели. Этот устойчивый подход к фильтрации устраняет крайние выбросы (вероятно, шум или ложные значения), сохраняя центральную тенденцию. Математическая формулировка: F = (1/(N-2)) Σ(I_sorted[2:N-1]), где отсортированные значения окрестности исключают наибольшее и наименьшее. Реализация требует сортировки небольших окрестностей (вычислительно эффективно), но обеспечивает эффективное подавление шума. Ключевые возможности: простая стратегия удаления выбросов, эффективное подавление шума «соль и перец», фильтрация с учётом краёв (края часто проявляются как крайние значения) и применимость к любому типу данных. «Олимпийская» фильтрация особенно эффективна при предварительной обработке оптических спутниковых снимков (удаляет изолированные яркие пиксели облаков и тёмные тени), сглаживании DEM с уменьшением артефактов шума съёмки, подавлении шума на тепловых снимках (удаляет выбросы сенсора) и предварительной обработке радарных снимков. Интерпретация результата: симметричные распределения шума (равное число высоких и низких выбросов) фильтруются симметрично; асимметричные распределения (больше высоких или низких) дают направленную фильтрацию. Размер окрестности управляет степенью сглаживания: окно 3×3 удаляет 2 крайних значения из 9 пикселей (слабая фильтрация); большие окна фильтруют сильнее. Выходные значения остаются в пределах входного диапазона (результат — среднее фактических значений окрестности). Статистика показывает контролируемое снижение дисперсии, направленное именно на выбросы. Разностные изображения (исходное - отфильтрованное) выделяют удалённые выбросы; сосредоточенные области высоких значений указывают на эффективную изоляцию шума. К типичным артефактам относятся недостаточное сглаживание при низкой частоте выбросов и размытие краёв, если краевые пиксели постоянно оказываются крайними значениями. Несколько итераций позволяют выполнять последовательное сглаживание: один проход подавляет шум, повторные проходы усиливают сглаживание. Применяйте в процессах быстрого подавления шума, требующих простой и интерпретируемой фильтрации; особенно эффективен для шума «соль и перец» в мозаиках данных нескольких сенсоров.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "percentile_filter": {
            "name": "Перцентильный фильтр",
            "description": "Вычисляет локальный процентильный ранг высоты/значения центральной ячейки в скользящем окне (0-100%). Аналог Elevation Percentile для произвольных растровых данных. Измеряет относительное положение: output=0 указывает на локальный минимум, output=100 — на локальный максимум, output=50 — на медиану. Показывает локальное положение в распределении независимо от абсолютных значений.\n\nПроцентильная фильтрация позволяет выполнять анализ относительного положения. Полезна для послойного анализа: ячейки с высоким процентилем (>80) во всех каналах указывают на «яркие» объекты; с низким процентилем (<20) — на «тёмные». Особенно полезна при предварительной обработке для классификации — разделяет по положению в рельефе/текстуре, а не только по величине. Часто сочетается со статистическими фильтрами для многометрической характеристики.\n\nПрименение: (1) классификация по относительной яркости/темноте, (2) характеристика текстуры (высокая дисперсия процентиля — шероховато, низкая — гладко), (3) усиление локального контраста (нормализация на основе процентилей), (4) определение форм рельефа аналогично процентилю высоты, (5) многоканальный анализ текстуры (применение процентиля к каждому каналу и сравнение закономерностей).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "sig_digits": {
                "label": "Значащие цифры",
                "description": "Число значащих цифр для квантованной ранговой фильтрации (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "range_filter": {
            "name": "Фильтр размаха",
            "description": "Вычисляет размах (максимум - минимум) в скользящем окне, показывая локальный разброс значений независимо от среднего уровня. Простая метрика неоднородности: большой размах — разнообразные значения, малый — однородные значения. Проще стандартного отклонения, но во многих приложениях столь же информативна и более устойчива к форме распределения.\n\nРазмах вычислительно эффективен (требует лишь двух сравнений). Особенно полезен для обнаружения переходов/границ, где всплески размаха указывают на зоны контраста. Менее чувствителен к форме распределения, чем стандартное отклонение (стандартное отклонение подчёркивает выбросы, размах использует только экстремумы). Нормированный размах (размах/среднее) позволяет сравнивать каналы, подобно тому как коэффициент вариации позволяет сравнивать масштабы.\n\nПрименение: (1) картографирование текстуры/контраста (простая интерпретация: большой размах — шероховато/контрастно), (2) обнаружение границ по пикам размаха, (3) вычислительно эффективная альтернатива стандартному отклонению, (4) контроль качества (однородный фон — малый размах, области объектов — большой), (5) шероховатость/изменчивость в произвольных данных. Типичный рабочий процесс: вычислить размах→применить порог для выявления переходных зон→векторизовать границы с большим размахом.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "remove_spurs": {
            "name": "Удаление отростков",
            "description": "Удаляет короткие артефакты-отростки из бинарных объектов растра с помощью итеративной обрезки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "max_iterations": {
                "label": "Макс. итераций",
                "description": "Максимальное число итераций обрезки (по умолчанию 10)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "savitzky_golay_2d_filter": {
            "name": "2D-фильтр Savitzky-Golay",
            "description": "Выполняет двумерное сглаживание Savitzky-Golay — фильтр на основе подбора полинома, сохраняющий локальные полиномиальные особенности. Подбирает локальный полином по окрестности и заменяет центральное значение подобранным. Сохраняет пики/впадины лучше, чем гауссов фильтр. Полезен для зашумлённых данных, где важно сохранение объектов. Для полиномов низкого порядка размывает меньше, чем гауссов фильтр; сглаживание возрастает с порядком полинома. Фильтрация Savitzky-Golay подбирает методом наименьших квадратов локальный полином (обычно квадратичный/кубический) по окрестности. Центральное значение заменяется значением полинома. В отличие от медианного/гауссова фильтров сохраняет объекты, проявляющиеся как полиномиальные структуры (пики, впадины, гребни). Вычислительно прост, но медленнее простой свёртки. Порядок полинома управляет балансом сглаживания и сохранения. Применение: (1) сглаживание зашумлённых данных с сохранением пиковых структур, (2) обработка сеток высот (сохраняет рельеф гребней/долин), (3) сглаживание спектральных данных (сохраняет признаки поглощения), (4) предварительная обработка с сохранением объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "window_size": {
                "label": "Размер окна",
                "description": "Нечётный размер окна (по умолчанию 5). Сейчас поддерживается 5 для полинома порядка 2."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "scharr_filter": {
            "name": "Фильтр Scharr",
            "description": "Фильтр Scharr — оператор выделения краёв, улучшающий фильтр Sobel за счёт оптимизированных коэффициентов ядра, специально разработанных для уменьшения направленного смещения и обеспечения лучшей инвариантности к повороту. Оператор Scharr использует ядра свёртки 3×3 с целочисленными коэффициентами (3, 10, 3), эмпирически оптимизированными для направлений краёв 0°, 45°, 90° и 135°, и даёт более точную оценку градиента, чем традиционные фильтры Sobel, особенно для округлых объектов и повёрнутых краёв. Фильтр одновременно вычисляет горизонтальную составляющую и величину градиента, обеспечивая надёжную локализацию краёв. Ключевые преимущества: более высокая точность направленных градиентов, меньшее смещение при повороте по сравнению с Sobel и эффективное вычисление с ядром 3×3, требующее минимальных затрат памяти. Результат включает величину и необязательные направленные составляющие. Фильтр Scharr особенно эффективен в процессах извлечения объектов, обнаружения границ и контроля качества, требующих высокой точности по направлению. Сценарии использования: извлечение контуров зданий с аэроснимков, обнаружение дорожной сети, разграничение водных границ с минимальными искажениями и выявление геологических линеаментов по спутниковым данным. Фильтр показывает исключительные результаты в городском картографировании, обнаружении границ сельскохозяйственных угодий и приложениях автономной навигации. Интерпретация результата требует понимания того, что значения величины представляют силу края — более высокие значения указывают на более резкие переходы между различными спектральными классами. Направленные составляющие показывают преобладающую ориентацию краёв (горизонтальную, диагональную или вертикальную), что полезно для анализа линеаментов. Для многоканальных растров применяйте фильтр к каждому каналу отдельно или используйте вычисленный индекс. Фоновые значения выглядят тёмными, сильные края — яркими. Сравнение RMSE с эталонными краями подтверждает эффективность фильтра. Масштабируйте результат в диапазон 0-255 для стандартной визуализации или сохраняйте значения с плавающей точкой для количественного анализа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "clip_tails": {
                "label": "Обрезать хвосты",
                "description": "Необязательный симметричный процент обрезки хвостов (0-40)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "standard_deviation_filter": {
            "name": "Фильтр стандартного отклонения",
            "description": "Вычисляет стандартное отклонение в скользящем окне, измеряя локальную изменчивость/разброс значений. Высокое стандартное отклонение — разнообразные значения (шероховатость/неоднородность), низкое — однородные значения (гладкость/однородность). Выявляет закономерности текстуры, шероховатости и изменчивости. Критически важно для количественной оценки неопределённости и оценки качества.\n\nСтандартное отклонение надёжнее размаха для характеристики локальной изменчивости (не искажается единичным выбросом). Позволяет классифицировать области по текстуре: крутые склоны (высокое стандартное отклонение), пологие склоны (низкое); леса (высокое), луга (низкое). Часто нормируется (коэффициент вариации = стандартное отклонение/среднее) для сравнения данных с разными диапазонами значений. Может вычисляться по гистограмме (дисперсия = среднее квадратов - квадрат среднего).\n\nПрименение: (1) картографирование текстуры (анализ шероховатости/неоднородности), (2) количественная оценка неопределённости в зашумлённых данных, (3) оценка качества (однородный фон — низкое стандартное отклонение, насыщенные объектами области — высокое), (4) достоверность классификации (высокое стандартное отклонение — смешанные/неопределённые классы), (5) многоканальная неоднородность (объединение в стек стандартных отклонений каждого канала). Типичный рабочий процесс: вычислить стандартное отклонение на нескольких масштабах→сравнить изменения закономерностей между масштабами→определить характерные масштабы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "thicken_raster_line": {
            "name": "Утолщение растровых линий",
            "description": "Утолщает диагональные сегменты линий растра, чтобы предотвратить диагональное просачивание.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "tophat_transform": {
            "name": "Преобразование Top-hat",
            "description": "Выполняет белое или чёрное морфологическое преобразование top-hat.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина окрестности (по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота окрестности (по умолчанию равна filter_size_x)."
              },
              "variant": {
                "label": "Вариант",
                "description": "Вариант top-hat: white (по умолчанию) или black."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "total_filter": {
            "name": "Фильтр суммы",
            "description": "Вычисляет сумму значений пикселей в окрестности скользящего окна. Интегрирует локальную силу сигнала. Применение зависит от смысла данных: для количеств/плотностей сумма выявляет локальные закономерности плотности; для осадков — накопление в масштабе бассейна; для отражательной способности сумма пропорциональна локальному размеру цели.\n\nСуммирующая фильтрация интерпретируется по-разному в зависимости от предметной области. В данных о количествах/населении сумма выявляет кластеры и очаги. В данных высот сумма используется редко (у неё нет геоморфологического смысла). В спектральном анализе сумма может показывать многоканальную силу сигнала. Часто используется как промежуточный шаг (например, деление на число ячеек окрестности для вычисления среднего или сравнение с суммами соседей для выявления локальной неоднородности).\n\nПрименение: (1) обнаружение очагов в данных о количествах (высокая сумма — кластеры), (2) модели накопления по бассейнам/водосборам, (3) интеграция распределённых измерений, (4) промежуточные вычисления (сумма/N = среднее), (5) агрегирование силы сигнала в мозаиках данных нескольких сенсоров.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окна в пикселях (нечётное целое, по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окна в пикселях (нечётное целое, по умолчанию = filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "unsharp_masking": {
            "name": "Нерезкое маскирование",
            "description": "Нерезкое маскирование повышает резкость изображения, вычитая из исходного изображения его сглаженную (низкочастотную) версию, что усиливает края и мелкие детали. Математическое преобразование имеет вид I_sharp = I_original + w·(I_original - I_smooth), где w — вес повышения резкости, управляющий силой усиления. Процесс выделяет высокочастотные составляющие и усиливает их, фактически отделяя детали от широких тоновых вариаций. Ключевые возможности: гибкое управление параметрами (радиус размытия и вес позволяют управлять детальностью), вычислительная эффективность за счёт повторного использования гауссова сглаживания, интерпретируемое усиление (weight=0 даёт исходное изображение; weight=1 — чистый фильтр верхних частот; weight>1 — сильное повышение резкости) и эффективность для мультиспектральных данных. Нерезкое маскирование особенно эффективно при подготовке спутниковых снимков к ручному дешифрированию (усиливает малозаметный рельеф, растительность, инфраструктуру), улучшении продуктов, полученных из LiDAR (повышает резкость DEM, метрик растительности), улучшении качества ортофото для видимости объектов и улучшении снимков археологической/топографической съёмки. Интерпретация результата требует понимания того, что изменения резкости сосредоточены на краях; однородные области остаются неизменными. Параметр веса управляет величиной усиления: w=0.5-1.0 даёт слабое усиление; w=1.0-2.0 — умеренное повышение резкости; w>2.0 — сильный результат, возможно, с артефактами. Радиус размытия управляет масштабом объектов: меньший радиус (3-5 пикселей) усиливает мелкую текстуру; больший радиус (10-20 пикселей) — объекты среднего размера. Выходные значения могут выходить за пределы входного диапазона; обычно необходима обрезка. К артефактам относятся ореолы вокруг сильных краёв (тем заметнее, чем больше вес или радиус), усиленный шум при зашумлённом источнике и возможные ложные цвета при повышении резкости мультиспектральных данных. Проверяйте усиление с помощью разностных изображений. Применяйте избирательно в процессах визуализации; избегайте применения перед автоматическим анализом, чувствительным к изменению диапазона выходных значений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Гауссова сигма, используемая маской размытия (0.5-20.0, по умолчанию 0.75)."
              },
              "amount": {
                "label": "Величина",
                "description": "Множитель степени повышения резкости, применяемый к остатку (по умолчанию 100.0)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Минимальный абсолютный остаток для повышения резкости (по умолчанию 0.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "user_defined_weights_filter": {
            "name": "Фильтр с пользовательскими весами",
            "description": "Фильтр с пользовательскими весами обеспечивает максимальную гибкость пользовательского анализа свёрткой, принимая произвольные весовые коэффициенты для пикселей окрестности, что позволяет реализовывать специализированные операторы, предметно-ориентированные ядра и алгоритмы исследовательского уровня без изменения инструмента или специализированного программного обеспечения. Пользователи задают размеры ядра (обычно 3×3 или 5×5), назначают веса с плавающей точкой каждой позиции и при необходимости выбирают способ обработки краёв (отражение, циклический перенос, заполнение константой). Фильтр применяет пользовательское ядро ко всему растру по стандартным правилам свёртки: каждый выходной пиксель равен сумме взвешенных соседей, что позволяет реализовывать как традиционные фильтры обработки изображений, так и пользовательские аналитические ядра. Ключевые возможности: полная настраиваемость для исследовательских задач, поддержка операций улучшения и анализа, совместимость с нормированными и ненормированными ядрами и сохранение точности с плавающей точкой на всех этапах вычислений. Сценарии использования охватывают расширенную пространственную фильтрацию для специализированных спектральных индексов, реализацию экспериментальных операторов для проверки алгоритмов, пользовательские ядра анализа текстуры, взвешенное агрегирование по окрестности для многокритериального анализа и стандартизированное применение ядер к разнообразным наборам данных. Области применения: прототипирование в академических исследованиях, оценка алгоритмов в промышленности, региональная настройка конвейеров обработки и сравнительные исследования производительности. Интерпретация результата полностью зависит от заданных пользователем коэффициентов; разные ядра дают принципиально разные результаты. Нормированные ядра (сумма весов равна 1.0) сохраняют диапазоны значений, что полезно для сглаживания; ненормированные ядра (обычно с суммой, равной нулю) подчёркивают различия, что полезно для выделения краёв/производных. Пользователи должны проверить свойства ядра — знаки коэффициентов, их величину и сумму — перед применением в рабочей среде. Документирование спецификаций ядра необходимо для воспроизводимости рабочих процессов. Диапазоны выходных значений зависят от конструкции ядра; в документации следует указывать ожидаемые характеристики результата и требования к масштабированию.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "weights": {
                "label": "Веса",
                "description": "Веса 2D-ядра в виде вложенных массивов."
              },
              "kernel_center": {
                "label": "Центр ядра",
                "description": "Режим центра ядра: center, upper-left, upper-right, lower-left, lower-right."
              },
              "normalize_weights": {
                "label": "Нормализовать веса",
                "description": "Если true, нормализовать по локальной сумме активных весов."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "wiener_filter": {
            "name": "Фильтр Винера",
            "description": "Фильтр Wiener выполняет адаптивное подавление шума, минимизируя среднеквадратическую ошибку между отфильтрованным результатом и истинным сигналом, при условии известных статистических свойств сигнала и шума. Реализация оценивает локальные дисперсии сигнала и шума в скользящих окнах и вычисляет коэффициенты фильтра, балансирующие подавление шума и сохранение деталей: F = μ + (σ² - σₙ²)/σ² · (I - μ), где μ — локальное среднее, σ² — дисперсия сигнала, σₙ² — дисперсия шума. Такая управляемая данными адаптация обеспечивает соответствие силы фильтрации локальным характеристикам изображения. Ключевые возможности: автоматическая адаптация к локальной статистике (плоские области сглаживаются сильно, детализированные сохраняют структуру), доказанная эффективность на оптических снимках и снимках SAR, интерпретируемые параметры на основе предположений модели шума и вычислительная реализуемость за счёт раздельных аппроксимаций. Фильтрация Wiener особенно эффективна при предварительной обработке спутниковых снимков с пространственно изменяющимся шумом, подавлении спекл-шума SAR с сохранением точечных целей, подготовке очищенных от спекла мультиспектральных данных для картографирования растительности и подавлении шума при слиянии радарных и оптических данных. Интерпретация результата: области с высокой дисперсией (детализированные) фильтруются минимально, а области с низкой дисперсией (зашумлённые) — сильно. Оценка дисперсии шума влияет на результат: заниженная дисперсия шума приводит к недостаточному сглаживанию; завышенная — к пересглаживанию и потере деталей. Диапазоны выходных значений близки к входным; изучите разностные изображения (исходное - отфильтрованное), чтобы убедиться в подавлении шума. Пиковое отношение сигнал/шум (PSNR) и индекс структурного сходства (SSIM) количественно характеризуют эффективность фильтрации. Пороги локальной дисперсии указывают на степень воздействия обработки: области с обнаруженным отношением дисперсий > 5 фильтруются существенно; при отношениях < 1 — минимально. К типичным ошибкам относятся неточная оценка дисперсии шума (для оценки выполните анализ тёмного кадра или однородной области) и выбор размера окна, влияющий на локализацию. Применяйте перед классификацией или извлечением признаков, чтобы уменьшить вызванные шумом ошибки категорий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус локального окна Винера в пикселях (по умолчанию 2)."
              },
              "noise_variance": {
                "label": "Дисперсия шума",
                "description": "Необязательная дисперсия аддитивного шума. Если не указана, оценивается по карте локальной дисперсии."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "cloude_pottier_decomposition": {
            "name": "Декомпозиция Cloude-Pottier",
            "description": "Разложение Cloude-Pottier диагонализирует матрицу когерентности квадраполяриметрических данных SAR, извлекая собственные значения и собственные векторы, характеризующие механизмы рассеяния. Энтропия, анизотропия и средний угол альфа, вычисляемые по собственным векторам, характеризуют соответственно неупорядоченность рассеяния, доминирование механизма и тип рассеяния. Пространство параметров H-alpha позволяет классифицировать физические механизмы рассеяния независимо от вариаций амплитуды, используя поляриметрическую фазовую информацию. Ключевые возможности: разложение квадраполяриметрических данных SAR; использование фазовой информации; физически осмысленные параметры рассеяния; разделение механизмов рассеяния; устойчивость к амплитудному спеклу; классификация и интерпретация целей. Сценарии использования: распознавание целей SAR; оценка лесной биомассы; характеристика водно-болотных угодий; обнаружение судов/транспортных средств; классификация земного покрова; интерпретация поляриметрических данных SAR. Интерпретация результата: выходные данные включают энтропию (степень неупорядоченности; 0 — упорядоченное рассеяние, 1 — случайное), анизотропию (доминирование механизма, 0-1) и угол альфа (тип рассеяния: ~45° — диполь, ~30° — поверхностное, ~60° — объёмное). Диаграммы рассеяния H-alpha выявляют кластеры, указывающие на типы рассеяния. Двукратное отражение (застройка) даёт высокий угол альфа; поверхностное рассеяние (вода) — низкий; объёмное рассеяние (лес) — промежуточные значения.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Растры матрицы: diag3 [m11,m22,m33], компактный full3x3 [m11,m22,m33,m12,m13,m23] или полный построчный набор из 9 растров."
              },
              "matrix_format": {
                "label": "Формат матрицы",
                "description": "Формат входной матрицы: diag3 (по умолчанию при 3 растрах) или full3x3."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной трёхканальный растр [H, A, alpha_deg]."
              }
            }
          },
          "enhanced_lee_filter": {
            "name": "Улучшенный фильтр Ли",
            "description": "Улучшенный фильтр Lee объединяет мультипликативную модель Lee с уточнённой оценкой дисперсии и многомасштабной обработкой, обеспечивая превосходное подавление спекл-шума при сохранении мелких деталей и краёв на снимках SAR. Реализация использует локальную статистику, вычисляемую в окнах адаптивного размера, включает выделение краёв на основе лапласиана и применяет пространственно изменяющиеся параметры фильтра. Улучшенная формулировка имеет вид: F = μ + w·(I - μ), где w адаптируется к близости краёв: w→0 вблизи краёв (минимальная фильтрация), w→1 в однородных областях (сильная фильтрация). Ключевые возможности: адаптивная к краям обработка (сохранение границ), многомасштабная адаптация параметров, лучшее сохранение целей по сравнению со стандартным Lee и эффективность для сильно зашумлённых данных SAR. Улучшенная фильтрация Lee особенно эффективна для сложных сцен SAR с многочисленными объектами, при картографировании наводнений, где критически важна локализация краёв, обнаружении зданий на городских снимках SAR и многовременном анализе изменений. Интерпретация результата: сохранение краёв проявляется в ослабленной фильтрации вблизи переходов — пограничные пиксели сохраняют большую дисперсию, чем удалённые. Многомасштабная адаптация видна при анализе гистограммы, показывающей выраженные пики, соответствующие классам сцены. Диапазон выходных значений соответствует входному; сравнение со стандартным Lee показывает меньшее размытие краёв и сохранённую резкость целей. Качество выделения краёв напрямую влияет на результат: сильные края обеспечивают хорошее сохранение границ; слабые края могут вызывать пересглаживание. Статистика показывает контролируемое снижение дисперсии, балансирующее подавление шума и сохранение деталей. К типичным артефактам относятся возможная блочность при заметных многомасштабных переходах и избыточное сохранение при слишком агрессивном выделении краёв. Отслеживайте качество карты краёв, чтобы проверить поведение фильтрации. Применяйте в комплексных конвейерах анализа SAR, где необходимо сохранить множество объектов и резкость краёв; это особенно важно при предварительной обработке для машинного обучения, требующей обучающих данных с чёткими границами объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "enl": {
                "label": "ENL",
                "description": "Параметр эквивалентного числа луков для взвешивания по отношению сигм (по умолчанию 4.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "freeman_durden_decomposition": {
            "name": "Декомпозиция Freeman-Durden",
            "description": "Разложение Freeman-Durden количественно оценивает вклад механизмов рассеяния по квадраполяриметрическим данным SAR путём разложения по ортогональному базису на составляющие поверхностного отражения, двукратного отражения (застройка/двугранные отражатели) и объёмного рассеяния (растительность/случайные среды). Оптимизация методом неотрицательных наименьших квадратов ограничивает доли мощности, обеспечивая физическую реализуемость и интерпретируемость. Выходные карты мощности непосредственно связаны со свойствами местности: преобладание поверхностного рассеяния указывает на голую почву/воду, высокое двукратное отражение — на городские структуры, высокое объёмное рассеяние — на лес/растительность. Ключевые возможности: физически интерпретируемые составляющие рассеяния; характерные для типов местности сигнатуры; оптимизация с ограничениями; поддержка квадраполяриметрических данных SAR; устойчивость к спеклу; классификация с учётом типа целей. Сценарии использования: классификация городских и сельских территорий; оценка лесной биомассы; определение влажности почвы; обнаружение наводнений; мониторинг фенологии культур; картографирование земного покрова. Интерпретация результата: мощность поверхностного рассеяния указывает на зеркальное отражение от сухой поверхности/воды; мощность двукратного отражения — на искусственные сооружения/застроенные территории; мощность объёмного рассеяния — на растительность/лес. Сочетания составляющих позволяют различать земной покров: высокое объёмное + низкое двукратное отражение указывает на лес; высокое двукратное + низкое объёмное — на застройку; сбалансированные поверхностное/объёмное — на смешанную местность.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Растры матрицы: diag3 [m11,m22,m33], компактный full3x3 [m11,m22,m33,m12,m13,m23] или полный построчный набор из 9 растров."
              },
              "matrix_format": {
                "label": "Формат матрицы",
                "description": "Формат входной матрицы: diag3 (по умолчанию при 3 растрах) или full3x3."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной трёхканальный растр [surface, double_bounce, volume]."
              },
              "output_clip_mask": {
                "label": "Выходная маска обрезки",
                "description": "Необязательный выходной растр маски обрезки (1 там, где произошла нефизическая обрезка/перенормировка)."
              }
            }
          },
          "frost_filter": {
            "name": "Фильтр Frost",
            "description": "Фильтр Frost реализует подавление спекл-шума SAR с использованием модели мультипликативного шума и адаптивной локальной статистики; он разработан специально для радарных снимков, где спекл подчиняется гамма-распределению, а не гауссову шуму. Реализация вычисляет локальное среднее и дисперсию, затем применяет адаптивное мультипликативное взвешивание: F = I · exp(-variance/(2·mean²)·distance²), где distance измеряет отклонение пикселя от локального среднего. Такая формулировка уменьшает интенсивность спекла обратно пропорционально оценённой когерентности. Ключевые возможности: адаптация, специфичная для SAR (модель мультипликативного, а не аддитивного шума), сохранение точечных целей и краёв (когерентных объектов), адаптация по локальной дисперсии, позволяющая регулировать силу фильтрации, и доказанная эффективность для однополяризационных и мультиполяризационных данных SAR. Фильтрация Frost особенно эффективна при предварительной обработке снимков SAR для классификации (сельскохозяйственный мониторинг, картографирование землепользования), взвешенном по когерентности слиянии данных SAR и оптических данных, картографировании наводнений по радарным данным при облачности и в процессах выявления изменений по данным радара с синтезированной апертурой. Интерпретация результата: области с высокой дисперсией (потенциально когерентные цели) фильтруются минимально; области с низкой дисперсией (с преобладанием спекла) — сильно. Типичный диапазон выходных значений соответствует входному; для визуализации до или после фильтрации часто применяется логарифмическое масштабирование (децибелы). Отношение дисперсии к среднему напрямую управляет силой фильтра: отношение > 0.5 указывает на вероятный спекл; отношение < 0.1 — на когерентные цели. К артефактам результата относятся возможная потеря деталей при ненадёжной оценке дисперсии и направленное смещение на ориентированных объектах. Проверка по картам когерентности подтверждает сохранение краёв в зонах высокой когерентности. Отслеживайте статистику результата: среднее должно стабилизироваться по итерациям фильтрации, а дисперсия — существенно уменьшаться. Применяйте перед классификацией для повышения точности категорий. Сочетайте с морфологической постобработкой для уточнения границ объектов и удаления остаточных фрагментов спекла.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус локального окна в пикселях (по умолчанию 2)."
              },
              "damping_factor": {
                "label": "Коэффициент затухания",
                "description": "Коэффициент затухания Frost, управляющий экспоненциальным спадом (по умолчанию 2.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "gamma_map_filter": {
            "name": "Фильтр Gamma MAP",
            "description": "Фильтр Gamma Map выполняет подавление спекл-шума SAR с использованием статистической модели гамма-распределения, явно учитывая мультипликативные характеристики спекла радарного сигнала посредством параметрической адаптации. Реализация оценивает параметры локального гамма-распределения (форму α и масштаб β) по статистике изображения, затем фильтрует с помощью весовой функции, учитывающей распределение: F = I · [1 - (1-L/N)/(1 + L/N)·√(1 + N/L²)], где L — эквивалентное число некогерентных накоплений (мера когерентности), а N — оцениваемый параметр. Ключевые возможности: теоретически строгая статистика SAR (гамма-распределение — стандарт для радара), автоматическая оценка числа накоплений, требующая минимального участия пользователя, лучшее сохранение краёв по сравнению с однородными фильтрами и применимость к одно- и многовзглядовым данным SAR. Фильтрация Gamma Map особенно эффективна при подавлении шума в многовременных стеках SAR для выявления изменений по временным рядам, улучшении фазовой когерентности интерферометрического SAR (InSAR), предварительной обработке для поляриметрического разложения SAR и нормализации обратного рассеяния SAR в лесном хозяйстве. Интерпретация результата: сила фильтра адаптируется к когерентности сцены — области с высокой когерентностью (большое α) фильтруются мягко с сохранением целей; области с низкой когерентностью (малое α) фильтруются сильно с подавлением спекла. Эквивалентное число накоплений L указывает на эффективность фильтрации: L=1 (минимальная фильтрация) сохраняет все детали; L>5 даёт существенное сглаживание. Масштаб результата остаётся в единицах входных данных; логарифмическое преобразование облегчает визуализацию. Типичное снижение дисперсии результата составляет 50-80% в зависимости от характера сцены и выбранного числа накоплений. Отслеживайте гистограммы результата на предмет остаточной сигнатуры спекла; бимодальные распределения указывают на хорошее разделение компонентов сцены. К артефактам относятся возможная полосатость на ориентированных объектах или небольшая деградация текстуры при завышенном L. Проверяйте фильтрацию по наземным данным на обучающих участках. Применяйте целенаправленно при классификации поляриметрических данных SAR или фазовой фильтрации InSAR, требующих взвешенного по когерентности улучшения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус локального окна в пикселях (по умолчанию 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Эквивалентное число луков (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "h_alpha_wisart_classification": {
            "name": "Классификация H-Alpha Wishart",
            "description": "Классификация H/α/A-Wishart объединяет неконтролируемое зонирование путём разбиения пространства параметров H/α/A со статистической кластеризацией Wishart для автоматической классификации поляриметрических данных SAR на 9 физически осмысленных зон, соответствующих классам механизмов рассеяния. Алгоритм получает параметры энтропии (H), анизотропии (A) и альфа (α) из разложения Cloude-Pottier и разбивает трёхмерное пространство признаков (H,A,α) на 9 областей с фиксированными порогами: зона 1 (низкая H, α~20°) соответствует брэгговскому отражению от сухих поверхностей; зона 5 (H~0.7, α~45°) — изотропному объёмному рассеянию в лесах; зона 9 (высокая H, α~80°) — двугранному (двукратному) отражению от городских структур. Внутри каждой зоны кластеризация Wishart при необходимости уточняет классификацию, вычисляя статистические расстояния в многомерном поляриметрическом пространстве и улучшая различение сходных механизмов. Ключевые возможности: автоматическая неконтролируемая классификация без обучающих выборок; 9 физически интерпретируемых классов со стандартизированными определениями, обеспечивающими глобальную сопоставимость; необязательный двухрежимный режим работы (только пороги для скорости, пороги+Wishart для точности); встроенные метрики достоверности на основе расстояния до границ зон и правдоподобия Wishart. Инструмент принимает предварительно вычисленные изображения (H,A,α) или автоматически вызывает разложение Cloude-Pottier, если переданы исходные матрицы. Основные сценарии использования: сегментация снимков SAR и создание карт по поляриметрическим данным, неконтролируемая классификация типов земного покрова (вода, сельхозугодья, лес, застройка) непосредственно по матрицам когерентности SAR, быстрая оценка качества поляриметрических данных по распределению заполненности зон и выявление изменений, показывающее смену механизмов рассеяния как признак изменения земного покрова. Интерпретация результата: 9-классовая карта непосредственно соответствует типам местности; зоны можно объединять в более широкие категории (вода/зеркальное отражение — зоны 1-2, растительность/объёмное рассеяние — зоны 4-6, застройка/двугранное отражение — зоны 7-9). Неклассифицированные пиксели (класс 0) указывают на необычные поляриметрические сигнатуры, требующие изучения.",
            "params": {
              "h_raster": {
                "label": "Растр H",
                "description": "Входной растр энтропии (H) из декомпозиции Cloude-Pottier (диапазон 0-1)."
              },
              "alpha_raster": {
                "label": "Растр альфа",
                "description": "Входной растр альфа (α) из декомпозиции Cloude-Pottier (градусы, 0-90)."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать alpha в соответствие с H при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной растр с метками 9 классов (1-9)."
              }
            }
          },
          "kuan_filter": {
            "name": "Фильтр Kuan",
            "description": "Выполняет фильтрацию спекла Kuan для снимков SAR/радарных снимков с помощью параметрического подхода, оценивающего локальные средние и дисперсию. Адаптивное взвешивание на основе дисперсии шума и локальной дисперсии изображения. Аналогичен Lee, но с иными статистическими допущениями. Широко используемый метод оперативной обработки SAR. Баланс вычислительной эффективности и хороших результатов для разнообразных данных SAR. Фильтрация Kuan предполагает гауссову статистику с моделью мультипликативного спекла. Адаптируется к локальной дисперсии — различает изменчивость сигнала и спекл. Особенно эффективна для неоднородных снимков SAR (со смесью ярких и тёмных объектов). Приемлемые вычислительные затраты. Представляет практичный компромисс между сложностью и вычислительными затратами. Стандарт во многих системах обработки SAR. Применение: (1) оперативное подавление спекла SAR, (2) предварительная обработка SAR со смешанным обратным рассеянием, (3) предварительная обработка RadarSat/Sentinel-1, (4) рутинная обработка SAR. Типичные параметры: filter_size=от 5×7 до 7×7.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус локального окна в пикселях (по умолчанию 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Эквивалентное число луков (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "refined_lee_filter": {
            "name": "Уточнённый фильтр Ли",
            "description": "Уточнённый фильтр Lee (Refined Lee) улучшает стандартную фильтрацию Lee за счёт более точной оценки когерентности и адаптаций для сохранения краёв, используя уточнённую локальную статистику и направленный анализ для лучшего подавления спекла. Реализация расширяет модель Lee, определяя ориентацию краёв, применяя направленные окна, выровненные по границам, и вычисляя уточнённые оценки когерентности. Математически: F = μ + √(σ_p²/(σ_I²))·(I - μ) с вычислением дисперсии в направленно выровненных окнах. Это уточнение улучшает сохранение краёв при сохранении подавления спекла. Ключевые возможности: чувствительность к направлению (адаптирует направление фильтрации к структурам изображения), улучшенная оценка когерентности (использует анизотропные окна), лучшее сохранение краёв по сравнению со стандартным Lee и эффективность для сложных сцен SAR. Уточнённая фильтрация Lee особенно эффективна при выявлении изменений, требующем резких границ, подготовке карт когерентности InSAR, поляриметрической обработке SAR, где критически важно сохранение целей, и анализе SAR в лесном хозяйстве с отделением деревьев от фона. Интерпретация результата: фильтрация учитывает ориентацию краёв — горизонтальные края фильтруются по горизонтали, вертикальные — по вертикали, диагональные — по диагонали. Такая направленная адаптация минимизирует фильтрацию поперёк истинных границ. Оценки когерентности обычно точнее, чем у стандартного Lee, что уменьшает артефакты фильтрации. Диапазон выходных значений соответствует входному; направленная адаптация заметна при визуальном осмотре (края остаются резче, чем при стандартном Lee). Статистика показывает лучшее сохранение высококонтрастных областей. Направленные составляющие показывают ориентацию структур сцены; сильное направленное смещение указывает на преобладающую ориентацию объектов. Артефактов меньше, чем при стандартном Lee, особенно вблизи краёв и сложных объектов. К артефактам относятся возможная избыточная адаптация при сбое оценки направления и артефакты направленных окон на слабых границах. Отслеживайте карты когерентности, чтобы проверить точность выделения краёв. Применяйте целенаправленно при классификации SAR, где необходимо сохранить направленные структуры (например, леса, выровненные сельскохозяйственные поля).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Ширина окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Высота окрестности в пикселях (нечётное целое, по умолчанию 11)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "wisart_iterative_clustering": {
            "name": "Итеративная кластеризация Wishart",
            "description": "Итеративная кластеризация Wishart выполняет неконтролируемую классификацию поляриметрических данных SAR, итеративно уточняя центры кластеров с использованием комплексной статистической метрики расстояния Wishart, измеряющей сходство многомерных поляриметрических распределений вероятностей. Алгоритм инициализируется зонами разложения H/α (дающими 9 затравочных кластеров с известной физической интерпретацией), затем входит в цикл, подобный методу максимизации ожидания: (1) вычисление расстояния Wishart от оценённой матрицы когерентности каждого пикселя до каждого прототипа кластера; (2) переназначение пикселей ближайшему кластеру; (3) обновление прототипов кластеров усреднением матриц назначенных пикселей; (4) повторение до сходимости (доля переназначенных пикселей <convergence_threshold) или достижения max_iterations. Ключевые возможности: комплекснозначная статистическая основа, корректно учитывающая структуру поляриметрических данных, в отличие от евклидова расстояния; автоматическая инициализация по интерпретируемым зонам H/α, снижающая зависимость от случайных начальных значений; попиксельный контроль сходимости, позволяющий адаптивно задавать число итераций; необязательный ввод предварительно вычисленных (H,α) или автоматическое вычисление матриц по исходным данным когерентности; встроенная устойчивость к спеклу однократных наблюдений благодаря совместимости с многовзглядовой обработкой. Инструмент поддерживает как обычный, так и компактный форматы матриц. Основные сценарии использования: классификация поляриметрических снимков SAR с получением уточнённых карт земного покрова сверх 9-зонного разбиения H/α, итеративное уточнение исходной неконтролируемой классификации для картографии, автоматическая оценка качества поляриметрических данных по метрикам стабильности кластеров и классификация временных рядов SAR, позволяющая выявлять временные изменения путём анализа переходов между кластерами. Интерпретация результата: уточнённая карта кластеров (обычно 3-9 классов в зависимости от сходимости), показывающая хорошо разделённые группы механизмов рассеяния. История сходимости служит метрикой достоверности: быстрая ранняя сходимость указывает на устойчивое разделение классов; медленная — на неоднозначные пиксели, для которых полезен многоракурсный анализ или выявление изменений. Интеграция с зонами H/α облегчает разработку легенды: по возможности сохраняйте соответствие зонам H/α для сохранения интерпретируемости.",
            "params": {
              "h_raster": {
                "label": "Растр H",
                "description": "Входной растр энтропии (H) (диапазон 0-1)."
              },
              "alpha_raster": {
                "label": "Растр альфа",
                "description": "Входной растр альфа (α) (градусы, 0-90)."
              },
              "max_iterations": {
                "label": "Макс. итераций",
                "description": "Максимальное число итераций кластеризации (по умолчанию 10)."
              },
              "convergence_threshold": {
                "label": "Порог сходимости",
                "description": "Критерий сходимости: доля неизменившихся пикселей (по умолчанию 0.99)."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать alpha в соответствие с H при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной растр меток кластеров."
              }
            }
          },
          "yamaguchi_4component_decomposition": {
            "name": "4-компонентная декомпозиция Yamaguchi",
            "description": "4-компонентное разложение SAR Yamaguchi раскладывает данные радара с синтезированной апертурой с двойной поляризацией на физически интерпретируемые составляющие поверхностного рассеяния, двукратного (объёмного) рассеяния, спирального рассеяния и объёмного рассеяния с помощью модельного поляриметрического анализа с необязательным использованием DEM. Разложение разделяет различные механизмы обратного рассеяния посредством анализа собственных значений поляриметрических ковариационных матриц, интерпретируя составляющие как поверхностное отражение (брэгговское рассеяние), двукратное отражение от уголковых отражателей, спиральный поворот поляризации (редко) и диффузное объёмное рассеяние от растительности или шероховатой поверхности. Использование внешней DEM позволяет оценить вклад рельефа в рассеяние, улучшая отделение истинного объёмного рассеяния от топографических эффектов. Ключевые возможности: модельная физическая интерпретация, позволяющая извлекать осмысленные геофизические параметры; необязательная топографическая коррекция на основе DEM, повышающая точность составляющих на пересечённой местности; ограничения неотрицательности составляющих, предотвращающие физически невозможные результаты разложения; автоматическая обработка пропусков данных и областей наложения (layover). Области применения: оценка лесной биомассы по составляющей объёмного рассеяния, городское картографирование с использованием преобладания двукратного отражения в застроенных районах, оценка влажности почвы по поведению поверхностного рассеяния и выявление оползней/изменений по изменению отношений составляющих. Результат разложения Yamaguchi обеспечивает геофизическую интерпретацию. На выходе формируются четырёхкомпонентные изображения (мощность поверхностного, двукратного, спирального и объёмного рассеяния), метрики качества разложения, количественно выражающие точность подбора, индексы среднего типа рассеяния, облегчающие характеристику земного покрова, и необязательная диагностика когерентности/энтропии для оценки качества данных.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Растры матрицы: 6 компактных [m11,m22,m33,m12,m13,m23] или 9 построчных элементов полной комплексной матрицы 3x3."
              },
              "matrix_format": {
                "label": "Формат матрицы",
                "description": "Формат входной матрицы: full3x3 (по умолчанию) для эрмитовых матриц с вещественной/мнимой частями."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной четырёхканальный растр [surface, double_bounce, volume, helix]."
              }
            }
          },
          "ascii_to_las": {
            "name": "ASCII в LAS",
            "description": "Преобразование формата: пакетная обработка CSV→LAS. Разбирает текстовые файлы с разделителями-пробелами/запятыми/табуляциями (x,y,z,intensity,class,returns,angle,time) в LAS с метаданными EPSG.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив путей входных файлов ASCII."
              },
              "pattern": {
                "label": "Шаблон",
                "description": "Шаблон полей, например 'x,y,z,i,c,rn,nr,sa'."
              },
              "epsg_code": {
                "label": "Код EPSG",
                "description": "Код EPSG для метаданных CRS выходного LAS."
              },
              "output_directory": {
                "label": "Выходной каталог",
                "description": "Необязательный выходной каталог для создаваемых файлов LAS."
              }
            }
          },
          "las_to_ascii": {
            "name": "LAS в ASCII",
            "description": "Преобразование формата: вывод LAS→CSV. Экспортирует все атрибуты точек в текст с разделителями для импорта в электронные таблицы/базы данных или использования в скриптах.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного CSV (только в режиме одного входа)."
              }
            }
          },
          "las_to_shapefile": {
            "name": "LAS в Shapefile",
            "description": "Преобразует облака точек LAS/LAZ в векторные точечные shapefile.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора для режима одного входа."
              },
              "output_multipoint": {
                "label": "Выходной мультиточечный",
                "description": "Если true, выводит мультиточечную геометрию с одним объектом; иначе выводит один точечный объект на точку."
              }
            }
          },
          "lidar_colourize": {
            "name": "Окрашивание LiDAR",
            "description": "Назначает цвета точек по изображению: выбирает значения перекрывающегося ортофото/геопривязанного изображения в месте каждой точки и сохраняет их как RGB. Фотореалистичная визуализация облака точек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "image": {
                "label": "Изображение",
                "description": "Путь входного растрового изображения или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_join": {
            "name": "Объединение LiDAR",
            "description": "Объединяет несколько файлов LiDAR: конкатенирует облака точек с сохранением атрибутов и согласованности заголовков. Пакетная обработка по коллекциям тайлов.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив путей входных LiDAR или типизированных объектов LiDAR."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_shift": {
            "name": "Сдвиг LiDAR",
            "description": "Смещает координаты облака точек: смещения x/y/z для сдвигов датума, поправок совмещения или преобразований системы координат. Массовая корректировка координат.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "x_shift": {
                "label": "Сдвиг X",
                "description": "Сдвиг, добавляемый к координатам x."
              },
              "y_shift": {
                "label": "Сдвиг Y",
                "description": "Сдвиг, добавляемый к координатам y."
              },
              "z_shift": {
                "label": "Сдвиг Z",
                "description": "Сдвиг, добавляемый к координатам z."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_tile": {
            "name": "Разбиение LiDAR на тайлы",
            "description": "Разбивает облако точек на тайлы регулярной сетки: разделяет по охвату x/y с настраиваемыми размерами и минимальным порогом числа точек. Стандартное распространение и обработка данных.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "tile_width": {
                "label": "Ширина тайла",
                "description": "Ширина тайла в единицах x (по умолчанию 1000)."
              },
              "tile_height": {
                "label": "Высота тайла",
                "description": "Высота тайла в единицах y (по умолчанию 1000)."
              },
              "origin_x": {
                "label": "Начало X",
                "description": "Координата x начала сетки (по умолчанию 0)."
              },
              "origin_y": {
                "label": "Начало Y",
                "description": "Координата y начала сетки (по умолчанию 0)."
              },
              "min_points_in_tile": {
                "label": "Мин. точек в тайле",
                "description": "Минимальное число точек для записи тайла (по умолчанию 2)."
              },
              "output_laz_format": {
                "label": "Выходной формат LAZ",
                "description": "Если true, записывает выходы .laz; иначе .las (по умолчанию true)."
              },
              "output_directory": {
                "label": "Выходной каталог",
                "description": "Необязательный каталог для записи тайлов; по умолчанию <input_dir>/<input_stem>/."
              }
            }
          },
          "lidar_tophat_transform": {
            "name": "Преобразование Top-hat для LiDAR",
            "description": "Извлекает высоту над землёй с помощью морфологического белого top-hat: эрозия + дилатация аппроксимируют локальную землю, остаток = высота. Нормализация без классификации земли.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для эрозии и дилатации."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "recover_flightline_info": {
            "name": "Восстановление информации о маршрутах съёмки",
            "description": "Восстанавливает идентификаторы маршрутов съёмки по разрывам времени GPS: определяет границы маршрутов и записывает их в point-source-ID/user-data/RGB. Восстановление траектории полёта.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "max_time_diff": {
                "label": "Макс. разница времени",
                "description": "Максимальный разрыв времени GPS внутри маршрута съёмки до начала нового маршрута."
              },
              "pt_src_id": {
                "label": "ID источника точек",
                "description": "Если true, записывать выведенные ID маршрутов съёмки в point_source_id."
              },
              "user_data": {
                "label": "Пользовательские данные",
                "description": "Если true, записывать выведенные ID маршрутов съёмки в user_data (по модулю 256)."
              },
              "rgb": {
                "label": "RGB",
                "description": "Если true, назначать случайный цвет каждому выведенному маршруту съёмки."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "select_tiles_by_polygon": {
            "name": "Выбор тайлов по полигону",
            "description": "Пакетный выбор тайлов: копирует тайлы LAS/LAZ из каталога в выходной каталог, если точки выборки тайла пересекают границы полигона. Извлечение данных по области интереса.",
            "params": {
              "input_directory": {
                "label": "Входной каталог",
                "description": "Входной каталог с тайлами LiDAR."
              },
              "output_directory": {
                "label": "Выходной каталог",
                "description": "Выходной каталог для выбранных тайлов LiDAR."
              },
              "polygons": {
                "label": "Полигоны",
                "description": "Путь входного полигонального вектора или типизированный векторный объект."
              }
            }
          },
          "sort_lidar": {
            "name": "Сортировка LiDAR",
            "description": "Упорядочивает точки по нескольким критериям: x/y/z с размерами бинов, а также производным атрибутам. Оптимизирует пространственную связность для сжатия и обработки тайлов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "sort_criteria": {
                "label": "Критерии сортировки",
                "description": "Выражение критериев сортировки, например 'x 100, y 100, z 10, scan_angle'."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "split_lidar": {
            "name": "Разделение LiDAR",
            "description": "Разделяет точки на отдельные файлы по атрибуту: группирует по классу, source-id, временному окну, пространственному бину или числу точек. Стратификация и распространение данных.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "split_criterion": {
                "label": "Критерий разделения",
                "description": "Критерий группировки: num_pts, x, y, z, intensity, class, user_data, point_source_id, scan_angle или time."
              },
              "interval": {
                "label": "Интервал",
                "description": "Размер бина для числовых критериев; для num_pts это число точек на выходной файл."
              },
              "min_pts": {
                "label": "Мин. точек",
                "description": "Минимальное число точек для записи разделённого выходного файла (по умолчанию 5)."
              },
              "output_directory": {
                "label": "Выходной каталог",
                "description": "Необязательный каталог для разделённых выходов."
              }
            }
          },
          "classify_buildings_in_lidar": {
            "name": "Классификация зданий в LiDAR",
            "description": "Отмечает точки внутри контуров зданий: присваивает класс 6 всем точкам, пространственно находящимся в границах полигонов. Извлечение зданий на основе векторных данных.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "buildings": {
                "label": "Здания",
                "description": "Путь входного полигонального вектора контуров зданий или типизированный векторный объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "classify_lidar": {
            "name": "Классификация LiDAR",
            "description": "Автоматическая классификация точек: земля, растительность, здания по локальной геометрии (линейности, планарности) и подбору плоскостей методом RANSAC. Сегментация на основе геометрии.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности (по умолчанию 2.5)."
              },
              "grd_threshold": {
                "label": "Порог GRD",
                "description": "Высота над локальным минимумом, считающаяся землёй (по умолчанию 0.1)."
              },
              "oto_threshold": {
                "label": "Порог OTO",
                "description": "Высота над локальным минимумом, считающаяся объектом над рельефом (по умолчанию 1.0)."
              },
              "linearity_threshold": {
                "label": "Порог линейности",
                "description": "Порог линейности, используемый при финальной проверке неклассифицированных точек (по умолчанию 0.5)."
              },
              "planarity_threshold": {
                "label": "Порог планарности",
                "description": "Порог планарности, используемый при сегментации и уточнении (по умолчанию 0.85)."
              },
              "num_iter": {
                "label": "Число итераций",
                "description": "Число локальных итераций RANSAC для оценок планарности/линейности (по умолчанию 30)."
              },
              "facade_threshold": {
                "label": "Порог фасада",
                "description": "Расстояние до соседей при разметке фасадов зданий (по умолчанию 0.5)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "classify_overlap_points": {
            "name": "Классификация перекрывающихся точек",
            "description": "Выявляет перекрытия маршрутов съёмки: обнаруживает ячейки сетки с несколькими идентификаторами источника точек, помечает или удаляет точки перекрытия. Контроль качества для проверки съёмки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер ячейки сетки для анализа перекрытий."
              },
              "overlap_criterion": {
                "label": "Критерий перекрытия",
                "description": "max scan angle, not min point source id, not min time или multiple point source IDs."
              },
              "filter": {
                "label": "Фильтр",
                "description": "Если true, удалять точки перекрытия; иначе классифицировать точки перекрытия как класс 12."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "clip_lidar_to_polygon": {
            "name": "Обрезка LiDAR по полигону",
            "description": "Пространственное подмножество облака точек: сохраняет точки внутри границ полигонов. Выбор точек на основе векторных данных для извлечения исследуемой территории.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "polygons": {
                "label": "Полигоны",
                "description": "Путь входного полигонального вектора или типизированный векторный объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "erase_polygon_from_lidar": {
            "name": "Стирание полигона из LiDAR",
            "description": "Удаляет точки LiDAR, попадающие в геометрию полигонов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "polygons": {
                "label": "Полигоны",
                "description": "Путь входного полигонального вектора или типизированный векторный объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "filter_lidar": {
            "name": "Фильтрация LiDAR",
            "description": "Удаляет точки по выражению: логические условия по атрибутам (class, elevation, return_number, scan_angle, noise_flag и т. д.). Гибкий выбор точек.",
            "params": {
              "statement": {
                "label": "Выражение",
                "description": "Логическое выражение, например '!is_noise && class == 2' или 'NOT is_noise AND class == 2'."
              },
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR для режима одного входа."
              }
            }
          },
          "filter_lidar_by_percentile": {
            "name": "Фильтрация LiDAR по перцентилю",
            "description": "Выбирает точку процентильного ранга в каждой ячейке: сохраняет одну точку на блок сетки при заданном процентиле высоты. Прореживание с репрезентативной выборкой.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "percentile": {
                "label": "Перцентиль",
                "description": "Перцентиль в [0, 100] (0=наименьший, 100=наибольший)."
              },
              "block_size": {
                "label": "Размер блока",
                "description": "Размер блока сетки для локального выбора перцентиля (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "filter_lidar_by_reference_surface": {
            "name": "Фильтрация LiDAR по опорной поверхности",
            "description": "Извлекает точки относительно опорной поверхности: z<surface, z>surface или в пределах порога. Выявляет растительность над DTM или подповерхностные точки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "ref_surface": {
                "label": "Опорная поверхность",
                "description": "Путь опорного растра или типизированный растровый объект."
              },
              "query": {
                "label": "Запрос",
                "description": "Тип запроса: within, <, <=, >, >= (по умолчанию within)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Абсолютный порог расстояния по z, используемый при query=within."
              },
              "classify": {
                "label": "Классифицировать",
                "description": "Если true, классифицировать точки; иначе фильтровать и сохранять только совпадения."
              },
              "true_class_value": {
                "label": "Значение класса True",
                "description": "Значение класса, назначаемое совпадающим точкам в режиме классификации."
              },
              "false_class_value": {
                "label": "Значение класса False",
                "description": "Значение класса, назначаемое несовпадающим точкам в режиме классификации."
              },
              "preserve_classes": {
                "label": "Сохранять классы",
                "description": "Если true, сохранять классы несовпадающих точек в режиме классификации."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "filter_lidar_classes": {
            "name": "Фильтрация классов LiDAR",
            "description": "Удаляет точки по классификации: отфильтровывает ненужные классы LAS (шум, вода, здания и т. д.). Важная предварительная обработка в процессах подготовки рельефа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "filter_lidar_noise": {
            "name": "Фильтрация шума LiDAR",
            "description": "Удаляет классы шума ASPRS: отфильтровывает класс 7 (низкий шум) и класс 18 (высокий шум). Стандартная очистка облака точек для данных, соответствующих LAS 1.4.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "filter_lidar_scan_angles": {
            "name": "Фильтрация LiDAR по углам сканирования",
            "description": "Удаляет наклонные отражения LiDAR: фильтрует точки по порогу угла сканирования. Повышает вертикальную точность, удаляя отражения под скользящими углами с позиционной ошибкой.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "threshold": {
                "label": "Порог",
                "description": "Максимальный абсолютный угол сканирования (целые единицы LAS; 1 единица = 0.006°). Обязателен."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "height_above_ground": {
            "name": "Высота над землёй",
            "description": "Нормализует по геометрии облака точек: вычисляет высоту каждой точки над ближайшим более низким соседом класса земли. Локальная поверхность рельефа без растровой опоры.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "improved_ground_point_filter": {
            "name": "Улучшенный фильтр наземных точек",
            "description": "Многоэтапный конвейер фильтрации точек земли.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR."
              },
              "block_size": {
                "label": "Размер блока",
                "description": "Размер ячейки сетки в единицах xy."
              },
              "max_building_size": {
                "label": "Макс. размер здания",
                "description": "Максимальная ожидаемая ширина здания в единицах xy."
              },
              "slope_threshold": {
                "label": "Порог уклона",
                "description": "Минимальный уклон края в градусах."
              },
              "elev_threshold": {
                "label": "Порог отметки",
                "description": "Порог расстояния по высоте."
              },
              "classify": {
                "label": "Классифицировать",
                "description": "Классифицировать, а не фильтровать точки."
              },
              "preserve_classes": {
                "label": "Сохранять классы",
                "description": "Сохранять существующие классы в режиме классификации."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "individual_tree_segmentation": {
            "name": "Сегментация отдельных деревьев",
            "description": "Сегментирует точки растительности на кроны деревьев: кластеризация mean-shift с адаптивной шириной окна по локальной геометрии полога. Выделение деревьев на уровне инвентаризации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "only_use_veg": {
                "label": "Использовать только растительность",
                "description": "Если true, обрабатывать только классы растительности (по умолчанию true)."
              },
              "veg_classes": {
                "label": "Классы растительности",
                "description": "Классы растительности в виде текста через запятую или массива целых чисел (по умолчанию '3,4,5')."
              },
              "min_height": {
                "label": "Мин. высота",
                "description": "Минимальная высота точки для сегментации (по умолчанию 2.0)."
              },
              "max_height": {
                "label": "Макс. высота",
                "description": "Необязательная максимальная высота точки."
              },
              "bandwidth_min": {
                "label": "Мин. ширина полосы",
                "description": "Минимальная горизонтальная ширина полосы (по умолчанию 1.0)."
              },
              "bandwidth_max": {
                "label": "Макс. ширина полосы",
                "description": "Максимальная горизонтальная ширина полосы (по умолчанию 6.0)."
              },
              "adaptive_bandwidth": {
                "label": "Адаптивная ширина полосы",
                "description": "Оценивать горизонтальную ширину полосы для каждой затравки по локальной геометрии кроны (по умолчанию true)."
              },
              "adaptive_neighbors": {
                "label": "Адаптивные соседи",
                "description": "Число соседей для адаптивного масштаба локальной плотности (по умолчанию 24)."
              },
              "adaptive_sector_count": {
                "label": "Число адаптивных секторов",
                "description": "Число угловых секторов для оценки локального радиуса кроны (по умолчанию 8)."
              },
              "grid_acceleration": {
                "label": "Сеточное ускорение",
                "description": "Использовать сеточное приближение в стиле MeanShift++ для ускорения обновления мод (по умолчанию false)."
              },
              "grid_cell_size": {
                "label": "Размер ячейки сетки",
                "description": "Размер ячейки сетки для ускоренного обновления мод (по умолчанию 0.5)."
              },
              "grid_refine_exact": {
                "label": "Точное уточнение сетки",
                "description": "Выполнять короткое точное уточнение по соседям после сеточного ускорения (по умолчанию false)."
              },
              "grid_refine_iterations": {
                "label": "Итерации уточнения сетки",
                "description": "Предел итераций точного уточнения после сеточного обновления мод (по умолчанию 2)."
              },
              "tile_size": {
                "label": "Размер тайла",
                "description": "Необязательный размер тайла для планирования затравок; <=0 отключает тайлирование (по умолчанию 0.0)."
              },
              "tile_overlap": {
                "label": "Перекрытие тайлов",
                "description": "Ширина перекрытия тайлов для тайлового планирования затравок (по умолчанию 0.0)."
              },
              "vertical_bandwidth": {
                "label": "Вертикальная ширина полосы",
                "description": "Вертикальная ширина полосы ядра (по умолчанию 5.0)."
              },
              "max_iterations": {
                "label": "Макс. итераций",
                "description": "Максимальное число итераций сдвига среднего на затравку (по умолчанию 30)."
              },
              "convergence_tol": {
                "label": "Допуск сходимости",
                "description": "Допуск сходимости по величине сдвига (по умолчанию 0.05)."
              },
              "min_cluster_points": {
                "label": "Мин. точек кластера",
                "description": "Минимальное число точек на сохраняемый кластер дерева (по умолчанию 50)."
              },
              "mode_merge_dist": {
                "label": "Расстояние слияния мод",
                "description": "Порог расстояния для слияния сошедшихся мод (по умолчанию 0.8)."
              },
              "threads": {
                "label": "Потоки",
                "description": "Переопределение числа потоков (0 использует пул Rayon по умолчанию)."
              },
              "simd": {
                "label": "SIMD",
                "description": "Включить арифметику с поддержкой SIMD в циклах взвешивания (по умолчанию true)."
              },
              "output_id_mode": {
                "label": "Режим выходного ID",
                "description": "Кодирование ID сегмента на выходе {rgb|user_data|point_source_id|rgb+user_data|rgb+point_source_id} (по умолчанию rgb)."
              },
              "output_sidecar_csv": {
                "label": "Выходной сопутствующий CSV",
                "description": "Если true, записывать CSV point_index,segment_id рядом с выходом LiDAR."
              },
              "seed": {
                "label": "Зерно",
                "description": "Детерминированное зерно для назначения цветов (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_classify_subset": {
            "name": "Классификация подмножества LiDAR",
            "description": "Переносит классификацию: отмечает базовые точки, совпадающие с местоположениями облака-подмножества. Позволяет выполнять пространственную переклассификацию на основе вспомогательных наборов точек.",
            "params": {
              "base": {
                "label": "База",
                "description": "Путь базового LiDAR или типизированный объект LiDAR."
              },
              "subset": {
                "label": "Подмножество",
                "description": "Путь LiDAR подмножества или типизированный объект LiDAR."
              },
              "subset_class_value": {
                "label": "Значение класса подмножества",
                "description": "Значение классификации, назначаемое сопоставленным точкам подмножества (0-18)."
              },
              "nonsubset_class_value": {
                "label": "Значение класса вне подмножества",
                "description": "Необязательный класс для несовпадающих точек (0-18). Используйте 255, чтобы сохранить существующие классы."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск сопоставления 3D ближайшего соседа в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_elevation_slice": {
            "name": "Срез LiDAR по высоте",
            "description": "Извлекает точки высотного диапазона: фильтрует или переклассифицирует точки в пределах диапазона z. Выделяет определённые слои (земля, подлесок, полог) или высотные зоны.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "minz": {
                "label": "Мин. Z",
                "description": "Нижняя граница среза по высоте (по умолчанию -бесконечность)."
              },
              "maxz": {
                "label": "Макс. Z",
                "description": "Верхняя граница среза по высоте (по умолчанию +бесконечность)."
              },
              "classify": {
                "label": "Классифицировать",
                "description": "Если true, переклассифицировать точки вместо их фильтрации (по умолчанию false)."
              },
              "in_class_value": {
                "label": "Входное значение класса",
                "description": "Классификация, назначаемая точкам внутри среза при classify=true (по умолчанию 2)."
              },
              "out_class_value": {
                "label": "Выходное значение класса",
                "description": "Классификация, назначаемая точкам вне среза при classify=true (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_remove_outliers": {
            "name": "Удаление выбросов LiDAR",
            "description": "Обнаруживает точки-выбросы по локальным остаткам высоты: сравнивает точку со средним/медианой окрестности и помечает аномалии. Удаляет случайные грубые ошибки и шум.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для вычисления локальных остатков (по умолчанию 2.0)."
              },
              "elev_diff": {
                "label": "Разница высот",
                "description": "Абсолютный порог остатка высоты для обнаружения выбросов (по умолчанию 50.0)."
              },
              "use_median": {
                "label": "Использовать медиану",
                "description": "Использовать медиану вместо средней высоты окрестности."
              },
              "classify": {
                "label": "Классифицировать",
                "description": "Если true, классифицировать выбросы как класс 7/18 вместо их удаления."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_segmentation": {
            "name": "Сегментация LiDAR",
            "description": "Разбивает облако точек: подбор плоскостей RANSAC + выращивание областей создают связные компоненты. Присваивает идентификаторы сегментов, сохраняемые в RGB. Кластеризация точек на основе формы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для наращивания регионов."
              },
              "num_iterations": {
                "label": "Число итераций",
                "description": "Число итераций RANSAC для обнаружения локальных плоскостных моделей."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Число точек, выбираемых для подгонки каждой локальной модели RANSAC."
              },
              "inlier_threshold": {
                "label": "Порог инлайеров",
                "description": "Порог остатка для классификации точек как инлайеров локальной плоскости."
              },
              "acceptable_model_size": {
                "label": "Приемлемый размер модели",
                "description": "Минимальное число инлайеров для принятия локальной плоскостной модели."
              },
              "max_planar_slope": {
                "label": "Макс. уклон плоскости",
                "description": "Максимальный допустимый уклон плоскости в градусах."
              },
              "norm_diff_threshold": {
                "label": "Порог разности нормалей",
                "description": "Максимальная угловая разность (градусы) между соседними нормалями плоскостей при наращивании."
              },
              "max_z_diff": {
                "label": "Макс. разница Z",
                "description": "Максимальная разность Z, допустимая при наращивании сегмента."
              },
              "classes": {
                "label": "Классы",
                "description": "Если true, не пересекать границы классов при наращивании сегментов."
              },
              "ground": {
                "label": "Земля",
                "description": "Если true, назначает class=2 наибольшему сегменту и class=1 остальным сегментированным точкам."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_segmentation_based_filter": {
            "name": "Фильтр LiDAR на основе сегментации",
            "description": "Фильтрация земли с помощью сегментации низкого рельефа: выращивает связные компоненты от локально плоских областей, отделяя рельеф от растительности. Надёжное отделение земли.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для наращивания связных компонент."
              },
              "norm_diff_threshold": {
                "label": "Порог разности нормалей",
                "description": "Параметр совместимости для устаревших проверок угла нормалей."
              },
              "max_z_diff": {
                "label": "Макс. разница Z",
                "description": "Максимальная разность высот для связного наращивания."
              },
              "classify_points": {
                "label": "Классифицировать точки",
                "description": "Если true, классифицировать точки вместо фильтрации."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "modify_lidar": {
            "name": "Изменение LiDAR",
            "description": "Обновляет атрибуты точек с помощью присваиваний: z=z+offset, class=reclassify_expr, intensity=scale_factor. Гибкие преобразования на уровне точек.",
            "params": {
              "statement": {
                "label": "Выражение",
                "description": "Одно или несколько выражений присваивания через точку с запятой, например 'z = z + 1; class = if(z > 5, 2, class)'."
              },
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR для режима одного входа."
              }
            }
          },
          "normalize_lidar": {
            "name": "Нормализация LiDAR",
            "description": "Преобразует абсолютные высоты LiDAR в высоту над землёй: вычитает DTM (растровую DEM) из значений z точек. Создаёт нормализованное облако точек для структурного анализа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "dtm": {
                "label": "DTM",
                "description": "Путь входного растра DTM или типизированный растровый объект."
              },
              "no_negatives": {
                "label": "Без отрицательных",
                "description": "Ограничивать отрицательные нормализованные высоты нулём."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "remove_duplicates": {
            "name": "Удаление дубликатов",
            "description": "Удаляет дубликаты в облаке точек: удаляет точки с одинаковыми x/y (при необходимости и z). Учитывает перекрытия нескольких сканирований и повышает эффективность обработки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "include_z": {
                "label": "Включать Z",
                "description": "Если true, обнаружение дубликатов учитывает z; иначе используются только x/y."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "flightline_overlap": {
            "name": "Перекрытие маршрутов съёмки",
            "description": "Выявляет перекрытия съёмки: подсчитывает число различных идентификаторов источника точек в каждой ячейке. Визуализация перекрытий на сетке для оценки покрытия маршрутами съёмки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение сетки для подсчёта различных маршрутов съёмки в ячейке."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_block_maximum": {
            "name": "Блочный максимум LiDAR",
            "description": "Растр по максимальному атрибуту LiDAR: значение ячейки = наибольшее отражение точки (высота, интенсивность, класс и т. д.). Создание DSM, извлечение верхней границы полога, статистика импульсов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Атрибут точки (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_block_minimum": {
            "name": "Блочный минимум LiDAR",
            "description": "Растр по минимальному атрибуту LiDAR: значение ячейки = наименьшее отражение точки (высота, интенсивность, класс). Создание DEM, извлечение поверхности земли, определение базового уровня рельефа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Атрибут точки (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_construct_vector_tin": {
            "name": "Построение векторной TIN из LiDAR",
            "description": "Строит 3D-сетку: триангуляция Делоне по отфильтрованным точкам с выводом в виде векторного полигонального слоя. Представление поверхности и топографический анализ.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора; в пакетном режиме каждый вход записывает соседний _tin.shp."
              },
              "returns": {
                "label": "Отражения",
                "description": "Фильтр отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Необязательные значения классов для исключения."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальная допустимая высота точки."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальная допустимая высота точки."
              },
              "max_triangle_edge_length": {
                "label": "Макс. длина ребра треугольника",
                "description": "Необязательная максимальная допустимая длина ребра треугольника."
              }
            }
          },
          "lidar_contour": {
            "name": "Изолинии из LiDAR",
            "description": "Извлекает векторные линии изолиний: построение изолиний на основе TIN с интерполяцией по высоте, интенсивности, времени. Настраиваемые интервалы и фильтрация по длине рёбер.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется пакетный режим по файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (.shp/.geojson). В пакетном режиме каждый вход записывает соседний .shp."
              },
              "interval": {
                "label": "Интервал",
                "description": "Интервал изолиний (должен быть > 0)."
              },
              "base_contour": {
                "label": "Базовая изолиния",
                "description": "Значение смещения базовой изолинии."
              },
              "smooth": {
                "label": "Сглаживание",
                "description": "Параметр сглаживания для совместимости (принимается для единообразия вызова)."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Одно из elevation, intensity, scan_angle, time или user_data."
              },
              "returns": {
                "label": "Отражения",
                "description": "Фильтр отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Необязательные значения классов для исключения."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальная допустимая высота точки."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальная допустимая высота точки."
              },
              "max_triangle_edge_length": {
                "label": "Макс. длина ребра треугольника",
                "description": "Необязательная максимальная длина ребра треугольника; более длинные треугольники пропускаются."
              }
            }
          },
          "lidar_digital_surface_model": {
            "name": "Цифровая модель поверхности из LiDAR",
            "description": "Создаёт DSM по отражениям от верхней поверхности LiDAR с помощью TIN: использует локальные кандидаты наивысших точек в пределах радиуса, затем триангуляцию. Представление полога растительности и верхних границ объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для выбора кандидатов верхней поверхности."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "max_triangle_edge_length": {
                "label": "Макс. длина ребра треугольника",
                "description": "Необязательная максимальная длина ребра треугольника для подавления граней с длинными рёбрами."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_hex_bin": {
            "name": "Гексагональное биннирование LiDAR",
            "description": "Агрегирует точки в шестиугольники: сетка бинов со сводками по ячейкам (число, среднее z, интенсивность). Равномерная выборка и статистическое разбиение на бины.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина шестиугольника (расстояние между противоположными сторонами)."
              },
              "orientation": {
                "label": "Ориентация",
                "description": "Ориентация сетки: h (вершиной вверх) или v (плоской стороной вверх)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора."
              }
            }
          },
          "lidar_hillshade": {
            "name": "Отмывка рельефа из LiDAR",
            "description": "Отображает поверхность LiDAR с отмывкой рельефа: вычисляет нормали поверхности для каждой точки по локальной подобранной плоскости, затем затеняет по углу освещения. Сохраняет результат в RGB для 3D-визуализации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для оценки локальных нормалей. Значения <= 0 используют оценочный номинальный шаг."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут освещения в градусах."
              },
              "altitude": {
                "label": "Высота над горизонтом",
                "description": "Высота освещения в градусах."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_idw_interpolation": {
            "name": "Интерполяция IDW из LiDAR",
            "description": "Построение сетки LiDAR со взвешиванием по расстоянию: значение ячейки определяется взвешенным средним окружающих точек (степень обратного расстояния). Гладкие поверхности, управление через параметр показателя степени.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "weight": {
                "label": "Вес",
                "description": "Показатель степени IDW."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности; <=0 переключает в режим k ближайших."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Атрибут точки для интерполяции (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Минимальное число точек для резервного режима k ближайших."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_nearest_neighbour_gridding": {
            "name": "Построение сетки LiDAR методом ближайшего соседа",
            "description": "Быстрое построение сетки LiDAR: значение ячейки берётся от ближайшей точки в пределах радиуса поиска. Минимальное смещение интерполяции, эффективно для облаков точек высокой плотности. Быстрое создание DSM/DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Максимальное расстояние до ближайшего соседа; ячейки дальше становятся NoData."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Атрибут точки для интерполяции (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_radial_basis_function_interpolation": {
            "name": "Интерполяция LiDAR радиальными базисными функциями",
            "description": "Гладкая поверхность LiDAR с помощью RBF: радиальные базисные функции передают локальную кривизну и микрорельеф. Высококачественное построение сетки с непрерывными производными на границах.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "num_points": {
                "label": "Число точек",
                "description": "Минимальное число соседей для локальной интерполяции."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности; <=0 использует только режим k ближайших."
              },
              "func_type": {
                "label": "Тип функции",
                "description": "Тип базиса RBF (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Порядок полинома",
                "description": "Порядок полиномиального тренда для локальной коррекции (none, constant, quadratic)."
              },
              "weight": {
                "label": "Вес",
                "description": "Параметр формы/показатель базиса в зависимости от func_type."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Атрибут точки для интерполяции (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_sibson_interpolation": {
            "name": "Интерполяция LiDAR методом Сибсона",
            "description": "Построение сетки LiDAR методом естественного соседа: интерполяция на основе Voronoi с весами естественных соседей. Гладкие, естественно выглядящие поверхности без артефактов уклона в местах точек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Атрибут точки для интерполяции (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_thin": {
            "name": "Прореживание LiDAR",
            "description": "Прореживает облако точек: сохраняет ≤1 точки на ячейку сетки по стратегии first/last/lowest/highest/nearest. Сокращает объём хранения, сохраняя покрытие и сложность рельефа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер ячейки сетки для прореживания (по умолчанию 1.0)."
              },
              "method": {
                "label": "Метод",
                "description": "Метод выбора точки в ячейке: first, last, lowest, highest, nearest (по умолчанию first)."
              },
              "save_filtered": {
                "label": "Сохранить отфильтрованные",
                "description": "Если true, также записывает отфильтрованные точки и возвращает их локатор в outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Отфильтрованный выход",
                "description": "Необязательный путь выхода для отфильтрованных точек (режим одного входа)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_thin_high_density": {
            "name": "Прореживание LiDAR высокой плотности",
            "description": "Адаптивное прореживание по плотности: уменьшает число точек в зонах избыточной плотности, сохраняя разреженные области. Выравнивает выборку при неравномерном перекрытии маршрутов съёмки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "density": {
                "label": "Плотность",
                "description": "Целевой порог плотности точек в точках на квадратную единицу."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение сетки для биннирования по x/y и z (по умолчанию 1.0)."
              },
              "save_filtered": {
                "label": "Сохранить отфильтрованные",
                "description": "Если true, записывает отфильтрованные точки и возвращает outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Отфильтрованный выход",
                "description": "Необязательный путь выхода для отфильтрованных точек в режиме одного входа."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_tile_footprint": {
            "name": "Контур тайла LiDAR",
            "description": "Создаёт контуры охвата: выровненные по осям ограничивающие прямоугольники или выпуклые оболочки для каждого облака точек. Вывод векторных полигонов для пространственного индексирования и каталога данных.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется по всем файлам LiDAR в текущем каталоге."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора для контуров."
              },
              "output_hulls": {
                "label": "Выход оболочек",
                "description": "Если true, записывает контуры в виде выпуклых оболочек; иначе записывает ограничивающие прямоугольники по осям."
              }
            }
          },
          "lidar_tin_gridding": {
            "name": "Построение сетки LiDAR по TIN",
            "description": "Точная интерполяция LiDAR с помощью TIN: строит триангуляцию Делоне по точкам и интерполирует значения ячеек по плоскостям треугольников. Учитывает высоты точек, отлично подходит для неравномерного покрытия.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "max_triangle_edge_length": {
                "label": "Макс. длина ребра треугольника",
                "description": "Необязательная максимальная длина ребра треугольника для подавления граней с длинными рёбрами."
              },
              "interpolation_parameter": {
                "label": "Параметр интерполяции",
                "description": "Атрибут точки для интерполяции (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              },
              "triangulation_backend": {
                "label": "Бэкенд триангуляции",
                "description": "Выбор бэкенда триангуляции: auto, delaunator или wbtopology."
              },
              "triangulation_auto_threshold": {
                "label": "Автопорог триангуляции",
                "description": "При backend=auto переключаться на wbtopology при этом числе выборок (по умолчанию отключено; задайте явно для включения)."
              },
              "triangulation_epsilon": {
                "label": "Эпсилон триангуляции",
                "description": "Эпсилон, используемый бэкендом wbtopology при обработке дубликатов (по умолчанию 1e-12)."
              },
              "triangulation_thin_cell_size": {
                "label": "Размер ячейки прореживания триангуляции",
                "description": "Необязательный размер ячейки предварительного прореживания выборок триангуляции; значения > 0 включают прореживание, 0 отключает."
              },
              "triangulation_thin_method": {
                "label": "Метод прореживания триангуляции",
                "description": "Метод репрезентативной точки для прореживания: nearest_center, min_value или max_value."
              }
            }
          },
          "colourize_based_on_class": {
            "name": "Окрашивание по классу",
            "description": "Окрашивает точки по классу: стандартные цвета ASPRS (зелёный — растительность, коричневый — земля, серый — здания и т. д.). Смешивает с интенсивностью для контраста. Визуализация классификации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "intensity_blending_amount": {
                "label": "Степень смешивания интенсивности",
                "description": "Процент смешивания [0,100] между цветом класса и интенсивностью."
              },
              "clr_str": {
                "label": "Строка цвета",
                "description": "Необязательные переопределения цветов классов, например '2:(184,167,108);5:#9ab86c'."
              },
              "use_unique_clrs_for_buildings": {
                "label": "Уникальные цвета для зданий",
                "description": "Если true, назначает уникальные цвета связным кластерам зданий."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для раскраски кластеров зданий."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "colourize_based_on_point_returns": {
            "name": "Окрашивание по отражениям точек",
            "description": "Окрашивает точки по порядку отражения: первые/промежуточные/последние отражения получают разные цвета. Визуализация структуры многократных отражений импульса для проверки обработки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "intensity_blending_amount": {
                "label": "Степень смешивания интенсивности",
                "description": "Процент смешивания [0,100] между цветом отражения и интенсивностью."
              },
              "only_ret_colour": {
                "label": "Цвет единственного отражения",
                "description": "Цвет для точек единственного отражения."
              },
              "first_ret_colour": {
                "label": "Цвет первого отражения",
                "description": "Цвет для точек первого отражения в многократных импульсах."
              },
              "intermediate_ret_colour": {
                "label": "Цвет промежуточного отражения",
                "description": "Цвет для точек промежуточных отражений."
              },
              "last_ret_colour": {
                "label": "Цвет последнего отражения",
                "description": "Цвет для точек последнего отражения в многократных импульсах."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "find_flightline_edge_points": {
            "name": "Поиск краевых точек маршрутов съёмки",
            "description": "Фильтрует краевые точки маршрутов: извлекает только точки на границах полос съёмки. Контроль качества перекрытия полос и краевых эффектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "individual_tree_detection": {
            "name": "Обнаружение отдельных деревьев",
            "description": "Определяет вершины деревьев: локальные максимумы в отфильтрованном по высоте облаке точек с адаптивным радиусом поиска. Возвращает векторный точечный shapefile потенциальных местоположений стволов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "min_search_radius": {
                "label": "Мин. радиус поиска",
                "description": "Минимальный радиус поиска в единицах карты (по умолчанию 1.0)."
              },
              "min_height": {
                "label": "Мин. высота",
                "description": "Минимальная высота для учёта точек (по умолчанию 0.0)."
              },
              "max_search_radius": {
                "label": "Макс. радиус поиска",
                "description": "Максимальный радиус поиска; если не задан, используется min_search_radius."
              },
              "max_height": {
                "label": "Макс. высота",
                "description": "Максимальная высота; если не задана, используется min_height."
              },
              "only_use_veg": {
                "label": "Использовать только растительность",
                "description": "Если true, обрабатывать только классы растительности (по умолчанию true)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного shapefile."
              }
            }
          },
          "lidar_eigenvalue_features": {
            "name": "Признаки собственных значений LiDAR",
            "description": "Выводит признаки PCA: собственные значения/векторы по окрестностям. Дескрипторы формы (планарность, линейность, дисперсия высот) для анализа облака точек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "num_neighbours": {
                "label": "Число соседей",
                "description": "Необязательный целевой размер окрестности (без учёта самой точки)."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Необязательный максимальный радиус поиска для сбора окрестности."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного .eigen в режиме одного входа."
              }
            }
          },
          "lidar_histogram": {
            "name": "Гистограмма LiDAR",
            "description": "Вычисляет распределение атрибута: гистограмма частот высоты, интенсивности, угла сканирования, класса. Обрезка по процентилям для подавления выбросов. Визуализация в HTML.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного HTML для отчёта гистограммы."
              },
              "parameter": {
                "label": "Параметр",
                "description": "Одно из elevation, intensity, scan angle, class или time."
              },
              "clip_percent": {
                "label": "Процент обрезки",
                "description": "Величина перцентильной обрезки в [0,50] для нижнего/верхнего хвостов."
              }
            }
          },
          "lidar_info": {
            "name": "Информация о LiDAR",
            "description": "Создаёт сводный отчёт метаданных: число точек, охват, диапазон интенсивности, гистограмма классов, распределение отражений. Вывод HTML/текст для документирования данных.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта (.html/.txt)."
              },
              "show_point_density": {
                "label": "Показать плотность точек",
                "description": "Если true, включает приближённые метрики плотности точек по ограничивающему прямоугольнику."
              },
              "show_vlrs": {
                "label": "Показать VLR",
                "description": "Флаг совместимости; зарезервирован для будущего подробного вывода метаданных."
              },
              "show_geokeys": {
                "label": "Показать геоключи",
                "description": "Флаг совместимости; зарезервирован для будущего подробного вывода ключей CRS."
              }
            }
          },
          "lidar_kappa": {
            "name": "Каппа LiDAR",
            "description": "Вычисляет отчёт о согласии каппа между двумя классифицированными облаками LiDAR и записывает растр согласия классов.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь классификационного LiDAR или типизированный объект LiDAR."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь эталонного LiDAR или типизированный объект LiDAR."
              },
              "report": {
                "label": "Отчёт",
                "description": "Путь выходного отчёта HTML."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение сетки для пространственного вывода согласия классов."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              },
              "output_class_accuracy": {
                "label": "Выход точности по классам",
                "description": "Флаг совместимости, сохранённый для единообразия с устаревшей версией; растр согласия создаётся всегда."
              }
            }
          },
          "lidar_point_density": {
            "name": "Плотность точек LiDAR",
            "description": "Картографирует интенсивность выборки LiDAR: число точек на единицу площади (количество в пределах радиуса для каждой ячейки). Оценка качества данных, анализ покрытия, визуализация схемы съёмки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Размер выходной ячейки."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для подсчёта точек."
              },
              "returns_included": {
                "label": "Включаемые отражения",
                "description": "Режим фильтрации отражений: all, first или last."
              },
              "excluded_classes": {
                "label": "Исключённые классы",
                "description": "Исключаемые классы (массив или строка с разделителями-запятыми)."
              },
              "min_elev": {
                "label": "Мин. отметка",
                "description": "Минимальный порог высоты для фильтрации включаемых точек."
              },
              "max_elev": {
                "label": "Макс. отметка",
                "description": "Максимальный порог высоты для фильтрации включаемых точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "lidar_point_return_analysis": {
            "name": "Анализ отражений точек LiDAR",
            "description": "Инструмент контроля качества: проверяет корректность последовательности отражений (согласованность multi/first/last). Формирует отчёт + классифицированный результат с отметкой аномалий отражений. Проверка целостности данных.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "create_output": {
                "label": "Создать выход",
                "description": "Если true, записывает классифицированный выход контроля качества LiDAR."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR, используемый при create_output=true."
              },
              "report": {
                "label": "Отчёт",
                "description": "Необязательный путь выходного текстового отчёта."
              }
            }
          },
          "lidar_point_stats": {
            "name": "Статистика точек LiDAR",
            "description": "Создаёт статистические растровые сетки: число точек, число импульсов, среднее число точек на импульс, диапазон z/интенсивности, преобладающий класс в ячейке. Анализ с несколькими выходами.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Необязательный путь входного LiDAR или типизированный объект LiDAR. Если не указан, выполняется в пакетном режиме по файлам LiDAR в текущем каталоге."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение выходной сетки."
              },
              "num_points": {
                "label": "Число точек",
                "description": "Создать растр числа точек."
              },
              "num_pulses": {
                "label": "Число импульсов",
                "description": "Создать растр числа импульсов ранних отражений."
              },
              "avg_points_per_pulse": {
                "label": "Среднее точек на импульс",
                "description": "Создать растр среднего числа точек на импульс."
              },
              "z_range": {
                "label": "Диапазон Z",
                "description": "Создать растр диапазона высот."
              },
              "intensity_range": {
                "label": "Диапазон интенсивности",
                "description": "Создать растр диапазона интенсивности."
              },
              "predominant_class": {
                "label": "Преобладающий класс",
                "description": "Создать растр преобладающего класса."
              },
              "output_directory": {
                "label": "Выходной каталог",
                "description": "Необязательный выходной каталог для создаваемых растров."
              }
            }
          },
          "lidar_ransac_planes": {
            "name": "Плоскости LiDAR методом RANSAC",
            "description": "Определяет локально планарные точки LiDAR с помощью подбора плоскостей RANSAC по окрестностям.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для локальной подгонки плоскости."
              },
              "num_iterations": {
                "label": "Число итераций",
                "description": "Число итераций RANSAC на точку."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Число выбираемых соседних точек на итерацию RANSAC."
              },
              "inlier_threshold": {
                "label": "Порог инлайеров",
                "description": "Максимальный остаток точка-плоскость для инлайеров."
              },
              "acceptable_model_size": {
                "label": "Приемлемый размер модели",
                "description": "Минимальное число точек-инлайеров для плоскостной модели."
              },
              "max_planar_slope": {
                "label": "Макс. уклон плоскости",
                "description": "Максимальный допустимый уклон плоскости в градусах."
              },
              "classify": {
                "label": "Классифицировать",
                "description": "Если true, классифицировать плоскостные и неплоскостные точки вместо фильтрации."
              },
              "only_last_returns": {
                "label": "Только последние отражения",
                "description": "Если true, использовать при подгонке модели только поздние отражения."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "lidar_rooftop_analysis": {
            "name": "Анализ крыш по LiDAR",
            "description": "Определяет планарные сегменты крыш внутри контуров зданий и выводит полигоны сегментов с атрибутами крыш.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути входных LiDAR или типизированные объекты LiDAR."
              },
              "building_footprints": {
                "label": "Контуры зданий",
                "description": "Полигональный слой контуров зданий."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для локального анализа крыш."
              },
              "inlier_threshold": {
                "label": "Порог инлайеров",
                "description": "Максимальный остаток для локальной плоскостной поддержки."
              },
              "acceptable_model_size": {
                "label": "Приемлемый размер модели",
                "description": "Минимальный размер сегмента."
              },
              "max_planar_slope": {
                "label": "Макс. уклон плоскости",
                "description": "Максимальный уклон граней крыш в градусах."
              },
              "norm_diff_threshold": {
                "label": "Порог разности нормалей",
                "description": "Максимальная угловая разность между соседними нормалями в градусах."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут освещения для подсветки граней в стиле отмывки."
              },
              "altitude": {
                "label": "Высота над горизонтом",
                "description": "Высота освещения для подсветки граней в стиле отмывки."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора."
              }
            }
          },
          "normal_vectors": {
            "name": "Векторы нормалей",
            "description": "Вычисляет нормали поверхности для каждой точки: PCA локальной окрестности оценивает ориентацию плоскости. Нормали сохраняются в записях точек и в RGB для визуализации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного LiDAR или типизированный объект LiDAR."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности для локальной подгонки плоскости. Значения <= 0 используют оценочный номинальный шаг."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR."
              }
            }
          },
          "snap_events_to_routes": {
            "name": "Привязка событий к маршрутам",
            "description": "Привязывает точки событий к линиям маршрутов и выдаёт диагностику меры/смещения на маршруте.",
            "params": {
              "routes": {
                "label": "Маршруты",
                "description": "Входной слой линий маршрутов."
              },
              "events": {
                "label": "События",
                "description": "Входной слой точечных событий."
              },
              "max_offset_distance": {
                "label": "Макс. расстояние смещения",
                "description": "Необязательное максимальное расстояние смещения от маршрута в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора привязанных точечных событий."
              }
            }
          },
          "locate_points_along_routes": {
            "name": "Локализация точек вдоль маршрутов",
            "description": "Определяет положение точечных объектов вдоль линий маршрутов и записывает атрибуты меры маршрута.",
            "params": {
              "routes": {
                "label": "Маршруты",
                "description": "Входной слой линий маршрутов."
              },
              "points": {
                "label": "Точки",
                "description": "Входной точечный слой для локализации вдоль маршрутов."
              },
              "max_offset_distance": {
                "label": "Макс. расстояние смещения",
                "description": "Необязательное максимальное расстояние смещения точки от маршрута."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "points_along_lines": {
            "name": "Точки вдоль линий",
            "description": "Создаёт точечные объекты с регулярным шагом вдоль входных полилиний для мониторинга инфраструктуры, экологического опробования и пространственного анализа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линий."
              },
              "spacing": {
                "label": "Шаг",
                "description": "Расстояние между точками."
              },
              "include_end": {
                "label": "Включать конец",
                "description": "Включать конечные точки линий (по умолчанию true)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "route_calibrate": {
            "name": "Калибровка маршрута",
            "description": "Калибрует начальные/конечные меры маршрута по контрольным точкам с известными мерами.",
            "params": {
              "routes": {
                "label": "Маршруты",
                "description": "Входной слой линий маршрутов."
              },
              "control_points": {
                "label": "Опорные точки",
                "description": "Входной слой опорных точек."
              },
              "control_measure_field": {
                "label": "Поле опорной меры",
                "description": "Поле опорных точек с известными значениями меры."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Необязательное поле идентификатора маршрута в маршрутах. По умолчанию FID объекта."
              },
              "control_route_id_field": {
                "label": "Поле ID опорного маршрута",
                "description": "Необязательное поле идентификатора маршрута в опорных точках. По умолчанию FID объекта."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Выходное поле начальной меры маршрута (по умолчанию from_measure)."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Выходное поле конечной меры маршрута (по умолчанию to_measure)."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Максимальное расстояние смещения опорной точки от геометрии маршрута (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой калиброванных маршрутов."
              }
            }
          },
          "route_event_lines_from_layer": {
            "name": "Линейные события маршрута из слоя",
            "description": "Создаёт линейные события маршрута из векторного слоя событий с использованием мер from/to.",
            "params": {
              "routes": {
                "label": "Маршруты",
                "description": "Входной слой линий маршрутов."
              },
              "events": {
                "label": "События",
                "description": "Входной векторный слой событий."
              },
              "event_route_field": {
                "label": "Поле маршрута события",
                "description": "Поле слоя событий с идентификаторами маршрутов."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Поле слоя событий с начальными мерами."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Поле слоя событий с конечными мерами."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Необязательное поле слоя маршрутов с идентификаторами маршрутов. По умолчанию FID объекта."
              },
              "write_event_fid": {
                "label": "Записывать FID события",
                "description": "Записывать EVENT_FID для сохранения исходных ID объектов событий (по умолчанию true)."
              },
              "write_event_xy": {
                "label": "Записывать XY события",
                "description": "Записывать атрибуты X/Y исходной геометрии событий (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора."
              }
            }
          },
          "route_event_lines_from_table": {
            "name": "Линейные события маршрута из таблицы",
            "description": "Создаёт линейные события маршрута из CSV-таблицы событий и слоя маршрутов с использованием мер from/to.",
            "params": {
              "routes": {
                "label": "Маршруты",
                "description": "Входной слой линий маршрутов."
              },
              "events": {
                "label": "События",
                "description": "Путь входной таблицы событий CSV."
              },
              "event_route_field": {
                "label": "Поле маршрута события",
                "description": "Поле CSV с идентификаторами маршрутов."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Поле CSV с начальными мерами."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Поле CSV с конечными мерами."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Необязательное поле слоя маршрутов с идентификаторами маршрутов. По умолчанию FID объекта."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора."
              }
            }
          },
          "route_event_merge": {
            "name": "Слияние событий маршрута",
            "description": "Объединяет смежные совместимые события маршрута.",
            "params": {
              "events": {
                "label": "События",
                "description": "Входной слой событий с интервалами маршрутов."
              },
              "event_route_field": {
                "label": "Поле маршрута события",
                "description": "Поле идентификатора маршрута слоя событий."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Поле начала интервала слоя событий."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Поле конца интервала слоя событий."
              },
              "group_fields": {
                "label": "Поля группировки",
                "description": "Необязательные поля через запятую для проверки совместимости при слиянии. По умолчанию все поля, кроме мер."
              },
              "gap_tolerance": {
                "label": "Допуск разрыва",
                "description": "Максимальный разрыв, допустимый при слиянии смежных (по умолчанию 0.0)."
              },
              "conflict_mode": {
                "label": "Режим конфликтов",
                "description": "Режим обработки перекрытий: error|skip (по умолчанию error)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой слитых событий."
              }
            }
          },
          "route_event_overlay": {
            "name": "Оверлей событий маршрута",
            "description": "Выполняет наложение двух слоёв событий маршрута по перекрытию интервалов.",
            "params": {
              "primary_events": {
                "label": "Основные события",
                "description": "Основной слой событий."
              },
              "overlay_events": {
                "label": "Накладываемые события",
                "description": "Накладываемый слой событий."
              },
              "primary_route_field": {
                "label": "Поле маршрута основных",
                "description": "Поле идентификатора маршрута основного слоя."
              },
              "primary_from_measure_field": {
                "label": "Поле начальной меры основных",
                "description": "Поле начала интервала основного слоя."
              },
              "primary_to_measure_field": {
                "label": "Поле конечной меры основных",
                "description": "Поле конца интервала основного слоя."
              },
              "overlay_route_field": {
                "label": "Поле маршрута накладываемых",
                "description": "Поле идентификатора маршрута накладываемого слоя."
              },
              "overlay_from_measure_field": {
                "label": "Поле начальной меры накладываемых",
                "description": "Поле начала интервала накладываемого слоя."
              },
              "overlay_to_measure_field": {
                "label": "Поле конечной меры накладываемых",
                "description": "Поле конца интервала накладываемого слоя."
              },
              "min_overlap_length": {
                "label": "Мин. длина перекрытия",
                "description": "Минимальная длина перекрытия для сохранения (по умолчанию 0.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой оверлея."
              }
            }
          },
          "route_event_points_from_layer": {
            "name": "Точечные события маршрута из слоя",
            "description": "Создаёт точечные события маршрута из векторного слоя событий и слоя маршрутов.",
            "params": {
              "routes": {
                "label": "Маршруты",
                "description": "Входной слой линий маршрутов."
              },
              "events": {
                "label": "События",
                "description": "Входной векторный слой событий."
              },
              "event_route_field": {
                "label": "Поле маршрута события",
                "description": "Поле слоя событий с идентификаторами маршрутов."
              },
              "measure_field": {
                "label": "Поле меры",
                "description": "Поле слоя событий с мерами точечных событий."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Необязательное поле слоя маршрутов с идентификаторами маршрутов. По умолчанию FID объекта."
              },
              "write_event_fid": {
                "label": "Записывать FID события",
                "description": "Записывать EVENT_FID для сохранения исходных ID объектов событий (по умолчанию true)."
              },
              "write_event_xy": {
                "label": "Записывать XY события",
                "description": "Записывать атрибуты X/Y исходной геометрии событий (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "route_event_points_from_table": {
            "name": "Точечные события маршрута из таблицы",
            "description": "Создаёт точечные события маршрута из CSV-таблицы событий и слоя маршрутов.",
            "params": {
              "routes": {
                "label": "Маршруты",
                "description": "Входной слой линий маршрутов."
              },
              "events": {
                "label": "События",
                "description": "Путь входной таблицы событий CSV."
              },
              "event_route_field": {
                "label": "Поле маршрута события",
                "description": "Поле CSV с идентификаторами маршрутов."
              },
              "measure_field": {
                "label": "Поле меры",
                "description": "Поле CSV с мерами точечных событий."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Необязательное поле слоя маршрутов с идентификаторами маршрутов. По умолчанию FID объекта."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "route_event_split": {
            "name": "Разделение событий маршрута",
            "description": "Разделяет события маршрута по граничным мерам каждого маршрута.",
            "params": {
              "events": {
                "label": "События",
                "description": "Входной слой событий с интервалами маршрутов."
              },
              "boundaries": {
                "label": "Границы",
                "description": "Входной слой границ с точками разрыва мер маршрутов."
              },
              "event_route_field": {
                "label": "Поле маршрута события",
                "description": "Поле идентификатора маршрута слоя событий."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Поле начала интервала слоя событий."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Поле конца интервала слоя событий."
              },
              "boundary_route_field": {
                "label": "Поле маршрута границ",
                "description": "Поле идентификатора маршрута слоя границ."
              },
              "boundary_measure_field": {
                "label": "Поле меры границ",
                "description": "Поле меры слоя границ."
              },
              "min_segment_length": {
                "label": "Мин. длина сегмента",
                "description": "Необязательная минимальная длина сегмента разделения для сохранения (по умолчанию 0.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой разделённых событий."
              }
            }
          },
          "route_measure_qa": {
            "name": "Контроль качества измерений маршрута",
            "description": "Диагностирует разрывы мер событий маршрута, перекрытия, немонотонные последовательности и повторяющиеся меры.",
            "params": {
              "events": {
                "label": "События",
                "description": "Входной слой событий с интервалами маршрутов."
              },
              "route_field": {
                "label": "Поле маршрута",
                "description": "Поле идентификатора маршрута."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Поле начала интервала."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Поле конца интервала."
              },
              "gap_tolerance": {
                "label": "Допуск разрыва",
                "description": "Допуск разрыва (по умолчанию 0.0)."
              },
              "overlap_tolerance": {
                "label": "Допуск перекрытия",
                "description": "Допуск перекрытия (по умолчанию 0.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой диагностики контроля качества."
              }
            }
          },
          "route_recalibrate": {
            "name": "Перекалибровка маршрута",
            "description": "Перекалибровывает отредактированные меры маршрута по эталонному слою маршрутов с сохранением непрерывности мер маршрута.",
            "params": {
              "original_routes": {
                "label": "Исходные маршруты",
                "description": "Опорные маршруты с ранее откалиброванными мерами."
              },
              "edited_routes": {
                "label": "Отредактированные маршруты",
                "description": "Отредактированные маршруты для перекалибровки."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Необязательное общее поле идентификатора маршрута. По умолчанию FID объекта."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Имя поля начальной меры (по умолчанию from_measure)."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Имя поля конечной меры (по умолчанию to_measure)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой перекалиброванных маршрутов."
              }
            }
          },
          "build_network_topology": {
            "name": "Построение топологии сети",
            "description": "Строит топологическую линейную сеть с узлами и стабильными выходными рёбрами и узлами.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки при обнаружении и разделении пересечений."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора топологически узловых рёбер."
              },
              "nodes_output": {
                "label": "Выход узлов",
                "description": "Необязательный путь выходного вектора узлов."
              }
            }
          },
          "closest_facility_network": {
            "name": "Ближайший объект обслуживания в сети",
            "description": "Находит маршрут минимальной стоимости по сети от каждой точки инцидента до ближайшей достижимой точки объекта обслуживания.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "incidents": {
                "label": "Инциденты",
                "description": "Точечный слой инцидентов/спроса."
              },
              "facilities": {
                "label": "Объекты обслуживания",
                "description": "Точечный слой объектов обслуживания/предложения."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек инцидентов/объектов до ближайшего узла сети."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением по направлению оцифровки (true/1/yes означает только от первой ко второй вершине)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля (покрытие, несопоставленные рёбра, использование резерва)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора маршрутов к ближайшему объекту обслуживания."
              }
            }
          },
          "generate_network_nodes": {
            "name": "Создание узлов сети",
            "description": "Создаёт узлы сети и диагностику узлов по топологии линий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора узлов."
              }
            }
          },
          "k_shortest_paths_network": {
            "name": "K кратчайших путей в сети",
            "description": "Находит k кратчайших простых путей между начальными и конечными координатами по линейной сети.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "start_x": {
                "label": "Начало X",
                "description": "Координата x начала."
              },
              "start_y": {
                "label": "Начало Y",
                "description": "Координата y начала."
              },
              "end_x": {
                "label": "Конец X",
                "description": "Координата x конца."
              },
              "end_y": {
                "label": "Конец Y",
                "description": "Координата y конца."
              },
              "k": {
                "label": "K",
                "description": "Число возвращаемых кратчайших путей."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от координат начала/конца до ближайшего узла сети."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением по направлению оцифровки (true/1/yes означает только от первой ко второй вершине)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля (покрытие, несопоставленные рёбра, использование резерва)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора."
              }
            }
          },
          "location_allocation_network": {
            "name": "Размещение и распределение в сети",
            "description": "Выбирает k объектов обслуживания и распределяет точки спроса по стоимости в сети с жадным или точным решением, необязательными вместимостями и ограничениями обязательных/запрещённых кандидатов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "demand_points": {
                "label": "Точки спроса",
                "description": "Точечный слой спроса для распределения."
              },
              "facilities": {
                "label": "Объекты обслуживания",
                "description": "Точечный слой объектов обслуживания-кандидатов."
              },
              "facility_count": {
                "label": "Число объектов обслуживания",
                "description": "Число выбираемых объектов обслуживания (k)."
              },
              "solver_mode": {
                "label": "Режим решателя",
                "description": "Режим решателя: auto, greedy или exact (exact предназначен для небольших задач)."
              },
              "demand_weight_field": {
                "label": "Поле веса спроса",
                "description": "Необязательное числовое поле веса спроса в demand_points (по умолчанию weight=1)."
              },
              "facility_capacity_field": {
                "label": "Поле вместимости объекта",
                "description": "Необязательное числовое поле вместимости в facilities; вместимость расходуется значениями demand_weight_field."
              },
              "required_facility_field": {
                "label": "Поле обязательного объекта",
                "description": "Необязательное логическое поле объектов, помечающее кандидатов, которые должны быть выбраны."
              },
              "forbidden_facility_field": {
                "label": "Поле запрещённого объекта",
                "description": "Необязательное логическое поле объектов, помечающее кандидатов, которые не должны быть выбраны."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек спроса/объектов до ближайшего узла сети."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением по направлению оцифровки (true/1/yes означает только от первой ко второй вершине)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля (покрытие, несопоставленные рёбра, использование резерва)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора распределённых маршрутов."
              }
            }
          },
          "map_matching_v1": {
            "name": "Сопоставление с картой V1",
            "description": "Привязывает точки траектории к линейной сети и восстанавливает предполагаемый маршрут с диагностикой.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "trajectory_points": {
                "label": "Точки траектории",
                "description": "Входной точечный слой траектории."
              },
              "timestamp_field": {
                "label": "Поле метки времени",
                "description": "Поле траектории для упорядочения по времени."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Необязательный радиус поиска кандидатов вокруг каждой точки траектории."
              },
              "candidate_k": {
                "label": "K кандидатов",
                "description": "Необязательное число ближайших кандидатов, сохраняемых для каждой точки."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние привязки точек траектории к узлам сети."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "matched_points_output": {
                "label": "Выход сопоставленных точек",
                "description": "Необязательный путь выходного вектора для диагностики по точкам."
              },
              "match_report": {
                "label": "Отчёт о сопоставлении",
                "description": "Необязательный путь выходного JSON для сводной диагностики."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора для выведенного маршрута."
              }
            }
          },
          "multimodal_od_cost_matrix": {
            "name": "Мультимодальная матрица стоимости OD",
            "description": "Вычисляет пакетные мультимодальные стоимости OD и сводки по видам транспорта между наборами точек отправления и назначения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников."
              },
              "destinations": {
                "label": "Назначения",
                "description": "Точечный слой назначений."
              },
              "mode_field": {
                "label": "Поле режима",
                "description": "Поле атрибута линий, определяющее режим передвижения для каждого сегмента."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек источников/назначений до ближайшего узла сети."
              },
              "default_mode_speed": {
                "label": "Скорость режима по умолчанию",
                "description": "Скорость режима по умолчанию в единицах координат на единицу времени (по умолчанию: 1)."
              },
              "mode_speed_overrides": {
                "label": "Переопределения скорости режимов",
                "description": "Необязательные переопределения mode:speed через запятую (например: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Разрешённые режимы",
                "description": "Необязательный список разрешённых режимов через запятую для включения в маршрутизацию."
              },
              "transfer_penalty": {
                "label": "Штраф за пересадку",
                "description": "Необязательный аддитивный штраф, применяемый при каждой смене режима на маршруте."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля при прямом временном входе."
              },
              "scenario_bundle_csv": {
                "label": "CSV пакета сценариев",
                "description": "Необязательный CSV с перечнем именованных временных сценариев для сравнительного многосценарного вывода OD."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "multimodal_routes_from_od": {
            "name": "Мультимодальные маршруты из OD",
            "description": "Строит геометрии маршрутов для мультимодальных пар точек отправления–назначения со сводками по видам транспорта для каждого маршрута.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников."
              },
              "destinations": {
                "label": "Назначения",
                "description": "Точечный слой назначений."
              },
              "mode_field": {
                "label": "Поле режима",
                "description": "Поле атрибута линий, определяющее режим передвижения для каждого сегмента."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек источников/назначений до ближайшего узла сети."
              },
              "default_mode_speed": {
                "label": "Скорость режима по умолчанию",
                "description": "Скорость режима по умолчанию в единицах координат на единицу времени (по умолчанию: 1)."
              },
              "mode_speed_overrides": {
                "label": "Переопределения скорости режимов",
                "description": "Необязательные переопределения mode:speed через запятую (например: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Разрешённые режимы",
                "description": "Необязательный список разрешённых режимов через запятую для включения в маршрутизацию."
              },
              "transfer_penalty": {
                "label": "Штраф за пересадку",
                "description": "Необязательный аддитивный штраф, применяемый при каждой смене режима на маршруте."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля при прямом временном входе."
              },
              "scenario_bundle_csv": {
                "label": "CSV пакета сценариев",
                "description": "Необязательный CSV с перечнем именованных временных сценариев для сравнительного многосценарного вывода маршрутов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора маршрутов."
              }
            }
          },
          "multimodal_shortest_path": {
            "name": "Мультимодальный кратчайший путь",
            "description": "Находит кратчайший путь по линейной сети с учётом видов транспорта и настраиваемыми штрафами за пересадки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "start_x": {
                "label": "Начало X",
                "description": "Координата x начала."
              },
              "start_y": {
                "label": "Начало Y",
                "description": "Координата y начала."
              },
              "end_x": {
                "label": "Конец X",
                "description": "Координата x конца."
              },
              "end_y": {
                "label": "Конец Y",
                "description": "Координата y конца."
              },
              "mode_field": {
                "label": "Поле режима",
                "description": "Поле атрибута линий, определяющее режим передвижения для каждого сегмента."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от координат начала/конца до ближайшего узла сети."
              },
              "default_mode_speed": {
                "label": "Скорость режима по умолчанию",
                "description": "Скорость режима по умолчанию в единицах координат на единицу времени (по умолчанию: 1)."
              },
              "mode_speed_overrides": {
                "label": "Переопределения скорости режимов",
                "description": "Необязательные переопределения mode:speed через запятую (например: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Разрешённые режимы",
                "description": "Необязательный список разрешённых режимов через запятую для включения в маршрутизацию."
              },
              "transfer_penalty": {
                "label": "Штраф за пересадку",
                "description": "Необязательный аддитивный штраф, применяемый при каждой смене режима на маршруте."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора."
              }
            }
          },
          "network_accessibility_metrics": {
            "name": "Метрики доступности сети",
            "description": "Вычисляет индексы доступности для точек отправления на основе достижимости пунктов назначения с необязательными порогами сопротивления и функциями затухания.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников."
              },
              "destinations": {
                "label": "Назначения",
                "description": "Точечный слой назначений."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек источников/назначений до ближайшего узла сети."
              },
              "impedance_cutoff": {
                "label": "Отсечка импеданса",
                "description": "Необязательный порог максимального расстояния для подсчёта достижимых назначений (по умолчанию: бесконечность)."
              },
              "decay_function": {
                "label": "Функция затухания",
                "description": "Необязательная функция затухания: none (по умолчанию), linear или exponential для доступности, взвешенной по расстоянию."
              },
              "decay_parameter": {
                "label": "Параметр затухания",
                "description": "Необязательный параметр затухания (lambda для exponential, скорость для linear)."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "parallel_execution": {
                "label": "Параллельное выполнение",
                "description": "Если true (по умолчанию), оценивать источники параллельно для ускорения вычисления доступности."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (источники с метриками доступности)."
              }
            }
          },
          "network_centrality_metrics": {
            "name": "Метрики центральности сети",
            "description": "Вычисляет базовые метрики центральности узлов сети: степень, близость и посредничество.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из построения графа (true/1/yes блокирует)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "network_connected_components": {
            "name": "Связные компоненты сети",
            "description": "Присваивает идентификатор связного компонента каждому линейному объекту сети.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора."
              }
            }
          },
          "network_node_degree": {
            "name": "Степень узлов сети",
            "description": "Извлекает узлы сети из линейных объектов и вычисляет степень и тип узлов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "network_od_cost_matrix": {
            "name": "Матрица стоимости OD сети",
            "description": "Вычисляет стоимости кратчайших путей между пунктами отправления и назначения по линейной сети и записывает матрицу в CSV.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников."
              },
              "destinations": {
                "label": "Назначения",
                "description": "Точечный слой назначений."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек источников/назначений до ближайшего узла сети."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля (покрытие, несопоставленные рёбра, использование резерва)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "network_routes_from_od": {
            "name": "Маршруты сети из OD",
            "description": "Строит геометрии маршрутов для пар точек отправления–назначения по линейной сети.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников."
              },
              "destinations": {
                "label": "Назначения",
                "description": "Точечный слой назначений."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек источников/назначений до ближайшего узла сети."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля (покрытие, несопоставленные рёбра, использование резерва)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора маршрутов."
              }
            }
          },
          "network_service_area": {
            "name": "Зона обслуживания сети",
            "description": "Вычисляет узлы сети, достижимые из точек отправления в пределах максимальной стоимости в сети.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников."
              },
              "max_cost": {
                "label": "Макс. стоимость",
                "description": "Максимальная достижимая стоимость пути."
              },
              "ring_costs": {
                "label": "Стоимости колец",
                "description": "Необязательные пороги колец через запятую для многокольцевых выходов (например: 5,10,15)."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек источников до ближайшего узла сети."
              },
              "output_mode": {
                "label": "Режим выхода",
                "description": "Режим выхода: nodes (по умолчанию), edges для достижимых сегментов рёбер, обрезанных по стоимости, или polygons для изохроноподобных полигонов по каждому источнику из огибающих достижимых рёбер."
              },
              "polygon_merge_origins": {
                "label": "Объединять полигоны источников",
                "description": "Если true и output_mode='polygons', объединять перекрывающиеся полигоны источников в слитое покрытие для каждого кольца вместо вывода одного полигона на источник."
              },
              "mode_field": {
                "label": "Поле режима",
                "description": "Необязательное поле атрибута линий, определяющее режим передвижения для каждого сегмента; включает стоимости зон обслуживания с учётом режима."
              },
              "default_mode_speed": {
                "label": "Скорость режима по умолчанию",
                "description": "Скорость режима по умолчанию в единицах координат на единицу времени при указанном mode_field (по умолчанию: 1)."
              },
              "mode_speed_overrides": {
                "label": "Переопределения скорости режимов",
                "description": "Необязательные переопределения mode:speed через запятую (например: walk:1.4,drive:12)."
              },
              "allowed_modes": {
                "label": "Разрешённые режимы",
                "description": "Необязательный список разрешённых режимов через запятую при указанном mode_field."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля (покрытие, несопоставленные рёбра, использование резерва)."
              },
              "snapped_origins_output": {
                "label": "Выход привязанных источников",
                "description": "Необязательный путь выходного вектора для внутренних привязанных якорных точек источников, используемых для запуска обхода."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора зон обслуживания."
              }
            }
          },
          "network_topology_audit": {
            "name": "Аудит топологии сети",
            "description": "Проверяет линейную сеть на топологические аномалии — несвязные компоненты, тупики и аномалии степени, — приводящие к сбоям маршрутизации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее односторонние рёбра (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные рёбра для исключения из анализа."
              },
              "report": {
                "label": "Отчёт",
                "description": "Необязательный путь выходного JSON для сводного отчёта аудита."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора для диагностики по узлам."
              }
            }
          },
          "od_sensitivity_analysis": {
            "name": "Анализ чувствительности OD",
            "description": "Вычисляет стоимости кратчайших путей OD с возмущениями сопротивления и выдаёт статистику чувствительности с помощью выборки Монте-Карло.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников."
              },
              "destinations": {
                "label": "Назначения",
                "description": "Точечный слой назначений."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Обязательное числовое поле линий, используемое как множитель импеданса для анализа возмущений."
              },
              "impedance_disturbance_range": {
                "label": "Диапазон возмущения импеданса",
                "description": "Диапазон возмущения стоимости в виде 'min_factor,max_factor' (например, '0.8,1.2' для вариации ±20%)."
              },
              "monte_carlo_samples": {
                "label": "Выборки Монте-Карло",
                "description": "Число выборок Монте-Карло для анализа возмущений (по умолчанию 1, макс. 100)."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от точек источников/назначений до ближайшего узла сети."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра."
              },
              "node_cost_points": {
                "label": "Точки стоимости узлов",
                "description": "Необязательный точечный слой, задающий стоимость входа в каждый узел (например, задержка на перекрёстке)."
              },
              "node_cost_field": {
                "label": "Поле стоимости узла",
                "description": "Числовое поле в node_cost_points с неотрицательными стоимостями узлов."
              },
              "node_cost_snap_distance": {
                "label": "Расстояние привязки стоимости узлов",
                "description": "Необязательное максимальное расстояние от каждой точки стоимости узла до узла сети для назначения."
              },
              "parallel_execution": {
                "label": "Параллельное выполнение",
                "description": "Если true (по умолчанию), оценивает поиски от источников параллельно для базового и возмущённых прогонов OD."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV с парами OD и статистикой чувствительности."
              }
            }
          },
          "shortest_path_network": {
            "name": "Кратчайший путь в сети",
            "description": "Находит кратчайший путь между начальными и конечными координатами по линейной сети.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линейной сети."
              },
              "start_x": {
                "label": "Начало X",
                "description": "Координата x начала."
              },
              "start_y": {
                "label": "Начало Y",
                "description": "Координата y начала."
              },
              "end_x": {
                "label": "Конец X",
                "description": "Координата x конца."
              },
              "end_y": {
                "label": "Конец Y",
                "description": "Координата y конца."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки узлов для построения графа."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние от координат начала/конца до ближайшего узла сети."
              },
              "edge_cost_field": {
                "label": "Поле стоимости ребра",
                "description": "Необязательное числовое поле линий, используемое как множитель импеданса для длины сегмента."
              },
              "one_way_field": {
                "label": "Поле одностороннего движения",
                "description": "Необязательное поле линий, помечающее рёбра с односторонним движением (поддерживает FT/TF/B и устаревшие логические значения)."
              },
              "blocked_field": {
                "label": "Поле блокировки",
                "description": "Необязательное поле линий, помечающее заблокированные/закрытые рёбра для исключения из маршрутизации (true/1/yes блокирует)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный точечный слой барьеров; ближайшие узлы сети блокируются для прохода."
              },
              "barrier_snap_distance": {
                "label": "Расстояние привязки барьеров",
                "description": "Необязательное максимальное расстояние от каждой точки барьера до узла сети для блокировки."
              },
              "turn_penalty": {
                "label": "Штраф за поворот",
                "description": "Необязательная аддитивная стоимость, применяемая к непрямым поворотам в узлах сети."
              },
              "u_turn_penalty": {
                "label": "Штраф за разворот",
                "description": "Необязательная аддитивная стоимость, применяемая к разворотам."
              },
              "forbid_u_turns": {
                "label": "Запретить развороты",
                "description": "Если true, запретить развороты."
              },
              "forbid_left_turns": {
                "label": "Запретить левые повороты",
                "description": "Если true, запретить левые повороты."
              },
              "forbid_right_turns": {
                "label": "Запретить правые повороты",
                "description": "Если true, запретить правые повороты."
              },
              "turn_restrictions_csv": {
                "label": "CSV ограничений поворотов",
                "description": "Необязательный CSV поворотных переходов со столбцами prev_x,prev_y,node_x,node_y,next_x,next_y. Необязательные столбцы: forbidden (по умолчанию true, если столбец turn_cost не указан) и turn_cost (или penalty/cost/extra_cost) для аддитивной стоимости каждого поворота."
              },
              "temporal_cost_profile": {
                "label": "Временной профиль стоимости",
                "description": "Необязательный CSV, задающий зависящие от времени стоимости рёбер (столбцы: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Поле ID временного ребра",
                "description": "Необязательное поле сети для сопоставления значений edge_id из temporal_cost_profile (по умолчанию EDGE_ID)."
              },
              "departure_time": {
                "label": "Время отправления",
                "description": "Необязательное время отправления в формате RFC3339 для поиска во временном профиле."
              },
              "temporal_mode": {
                "label": "Временной режим",
                "description": "Необязательный режим интерпретации времени: multiplier или absolute."
              },
              "temporal_fallback": {
                "label": "Временной резерв",
                "description": "Необязательный резервный вариант при отсутствии временной строки: static_cost или error."
              },
              "temporal_profile_report": {
                "label": "Отчёт временного профиля",
                "description": "Необязательный путь выходного JSON для диагностики временного профиля (покрытие, несопоставленные рёбра, использование резерва)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора."
              }
            }
          },
          "split_lines_at_intersections": {
            "name": "Разделение линий на пересечениях",
            "description": "Разделяет линейную сеть во всех местах пересечения сегментов, включая самопересечения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линий для разделения на пересечениях."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для операций разделения; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора разделённых линий."
              }
            }
          },
          "snap_points_to_network": {
            "name": "Привязка точек к сети",
            "description": "Привязывает входные точечные объекты к ближайшему местоположению вдоль линейного слоя сети.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный слой для привязки."
              },
              "network": {
                "label": "Сеть",
                "description": "Входной слой линий сети."
              },
              "max_snap_distance": {
                "label": "Макс. расстояние привязки",
                "description": "Необязательное максимальное расстояние привязки в единицах карты."
              },
              "keep_unsnapped": {
                "label": "Сохранять непривязанные",
                "description": "Если true (по умолчанию), сохраняет точки, которые не удалось привязать в пределах допуска."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора привязанных точек."
              }
            }
          },
          "transfer_attributes": {
            "name": "Перенос атрибутов",
            "description": "Переносит атрибуты источника на целевые объекты с использованием пространственного предиката.",
            "params": {
              "target": {
                "label": "Цель",
                "description": "Целевой слой, получающий перенесённые атрибуты."
              },
              "source": {
                "label": "Источник",
                "description": "Исходный слой, предоставляющий атрибуты."
              },
              "predicate": {
                "label": "Предикат",
                "description": "Пространственный предикат: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния при predicate=within_distance."
              },
              "strategy": {
                "label": "Стратегия",
                "description": "Стратегия переноса: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Префикс",
                "description": "Префикс для перенесённых исходных полей (по умолчанию SRC_)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "travelling_salesman_problem": {
            "name": "Задача коммивояжёра",
            "description": "Находит приближённые решения задачи коммивояжёра (TSP) с помощью эвристики 2-opt. По заданному набору точек определяет кратчайший маршрут, соединяющий все точки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "duration": {
                "label": "Длительность",
                "description": "Максимальная длительность оптимизации в секундах."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной полилинии."
              }
            }
          },
          "vehicle_routing_cvrp": {
            "name": "Маршрутизация транспорта CVRP",
            "description": "Строит маршруты доставки из нескольких депо с ограничениями вместимости, управлением разнородным парком, режимами целевой функции и необязательной локальной оптимизацией.",
            "params": {
              "network": {
                "label": "Сеть",
                "description": "Входной слой линейной сети (проверяется для единообразия контракта)."
              },
              "depot_points": {
                "label": "Точки депо",
                "description": "Точечный слой депо; каждая точка может предоставлять одно или несколько транспортных средств."
              },
              "stop_points": {
                "label": "Точки остановок",
                "description": "Точечный слой остановок доставки."
              },
              "demand_field": {
                "label": "Поле спроса",
                "description": "Числовое поле спроса в stop_points (по умолчанию: demand)."
              },
              "priority_field": {
                "label": "Поле приоритета",
                "description": "Необязательное поле приоритета остановки со значениями вроде required/high/normal/low или числовыми рангами."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Поле разрешённых профилей транспорта",
                "description": "Необязательное поле остановки с перечнем совместимых профилей транспорта (через запятую/точку с запятой/вертикальную черту)."
              },
              "allowed_route_classes_field": {
                "label": "Поле разрешённых классов маршрутов",
                "description": "Необязательный псевдоним allowed_vehicle_profiles_field для правил совместимости классов маршрутов."
              },
              "depot_id_field": {
                "label": "Поле ID депо",
                "description": "Необязательное поле ID депо, используемое в выходах маршрутов/назначений."
              },
              "vehicle_count_field": {
                "label": "Поле числа транспортных средств",
                "description": "Необязательное поле депо для числа транспортных средств, создаваемых в каждом депо."
              },
              "vehicle_capacity_field": {
                "label": "Поле вместимости транспорта",
                "description": "Необязательное поле депо, переопределяющее vehicle_capacity для шаблона депо/транспорта."
              },
              "vehicle_fixed_cost_field": {
                "label": "Поле фиксированной стоимости транспорта",
                "description": "Необязательное поле депо, переопределяющее vehicle_fixed_cost для шаблона депо/транспорта."
              },
              "travel_speed_field": {
                "label": "Поле скорости движения",
                "description": "Необязательное поле депо, переопределяющее travel_speed для шаблона депо/транспорта."
              },
              "max_route_distance_field": {
                "label": "Поле макс. расстояния маршрута",
                "description": "Необязательное поле депо, переопределяющее max_route_distance для шаблона депо/транспорта."
              },
              "max_route_time_field": {
                "label": "Поле макс. времени маршрута",
                "description": "Необязательное поле депо, переопределяющее max_route_time для шаблона депо/транспорта."
              },
              "vehicle_profile_field": {
                "label": "Поле профиля транспорта",
                "description": "Необязательное поле депо, задающее токен профиля/категории транспорта для совместимости с остановками."
              },
              "vehicle_route_class_field": {
                "label": "Поле класса маршрута транспорта",
                "description": "Необязательный псевдоним vehicle_profile_field для правил совместимости классов маршрутов."
              },
              "vehicle_capacity": {
                "label": "Вместимость транспорта",
                "description": "Вместимость каждого транспортного средства (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Фиксированная стоимость транспорта",
                "description": "Необязательная фиксированная стоимость за каждое отправленное транспортное средство/маршрут (по умолчанию: 0)."
              },
              "max_vehicles": {
                "label": "Макс. транспортных средств",
                "description": "Необязательное максимальное число транспортных средств/маршрутов для построения."
              },
              "max_route_distance": {
                "label": "Макс. расстояние маршрута",
                "description": "Необязательное максимальное расстояние поездки на маршрут, включая возврат в депо."
              },
              "travel_speed": {
                "label": "Скорость движения",
                "description": "Скорость движения в единицах координат на единицу времени (по умолчанию: 1)."
              },
              "max_route_time": {
                "label": "Макс. время маршрута",
                "description": "Необязательная максимальная длительность маршрута в единицах времени модели, включая возврат в депо."
              },
              "max_stops_per_vehicle": {
                "label": "Макс. остановок на транспорт",
                "description": "Необязательное максимальное число остановок, назначаемых каждому маршруту транспорта."
              },
              "objective_mode": {
                "label": "Режим целевой функции",
                "description": "Целевая функция построения маршрутов: minimize_distance, minimize_vehicles или minimize_cost."
              },
              "apply_local_optimization": {
                "label": "Применить локальную оптимизацию",
                "description": "Если true, применяет детерминированный проход локального улучшения 2-opt к каждому построенному маршруту (по умолчанию: true)."
              },
              "apply_simulated_annealing": {
                "label": "Применить имитацию отжига",
                "description": "Если true, применяет проход уточнения имитацией отжига с заданным зерном для каждого маршрута после жадной/локальной оптимизации (по умолчанию: false)."
              },
              "sa_iterations": {
                "label": "Итерации SA",
                "description": "Максимальное число итераций имитации отжига на маршрут при apply_simulated_annealing=true (по умолчанию: 1500)."
              },
              "sa_initial_temperature": {
                "label": "Начальная температура SA",
                "description": "Начальная температура имитации отжига (> 0, по умолчанию: 1.0)."
              },
              "sa_cooling_rate": {
                "label": "Скорость охлаждения SA",
                "description": "Множитель охлаждения имитации отжига в (0, 1); по умолчанию 0.995."
              },
              "sa_seed": {
                "label": "Зерно SA",
                "description": "Необязательное детерминированное зерно случайных чисел для имитации отжига (по умолчанию: 42)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора маршрутов."
              },
              "assignment_output": {
                "label": "Выход назначений",
                "description": "Необязательный точечный выход назначений остановок с диагностикой порядка посещения/загрузки."
              }
            }
          },
          "vehicle_routing_pickup_delivery": {
            "name": "Маршрутизация транспорта с подбором и доставкой",
            "description": "Строит парные маршруты забора и доставки с ограничениями очерёдности и вместимости, используя детерминированное базовое решение методом ближайшего соседа.",
            "params": {
              "network": {
                "label": "Сеть",
                "description": "Входной слой линейной сети (проверяется для единообразия контракта)."
              },
              "depot_points": {
                "label": "Точки депо",
                "description": "Точечный слой депо; в этой базовой реализации первая точка используется как активное депо."
              },
              "stop_points": {
                "label": "Точки остановок",
                "description": "Точечный слой остановок с парными записями подбора и доставки."
              },
              "request_id_field": {
                "label": "Поле ID запроса",
                "description": "Поле идентификатора запроса в stop_points для объединения записей подбора и доставки в пары (по умолчанию: request_id)."
              },
              "stop_type_field": {
                "label": "Поле типа остановки",
                "description": "Поле типа остановки в stop_points с метками pickup/delivery (по умолчанию: stop_type)."
              },
              "demand_field": {
                "label": "Поле спроса",
                "description": "Числовое поле спроса в stop_points; спрос подбора загружается, спрос доставки игнорируется (по умолчанию: demand)."
              },
              "vehicle_capacity": {
                "label": "Вместимость транспорта",
                "description": "Вместимость каждого транспортного средства (> 0)."
              },
              "max_vehicles": {
                "label": "Макс. транспортных средств",
                "description": "Необязательное максимальное число транспортных средств/маршрутов для построения."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора маршрутов."
              },
              "assignment_output": {
                "label": "Выход назначений",
                "description": "Необязательный точечный выход назначений остановок с диагностикой запросов и очерёдности."
              }
            }
          },
          "vehicle_routing_vrptw": {
            "name": "Маршрутизация транспорта VRPTW",
            "description": "Строит маршруты VRPTW из нескольких депо с ограничениями вместимости, настройками разнородного парка, окнами перерывов и управлением режимом целевой функции.",
            "params": {
              "network": {
                "label": "Сеть",
                "description": "Входной слой линейной сети (проверяется для единообразия контракта)."
              },
              "depot_points": {
                "label": "Точки депо",
                "description": "Точечный слой депо; каждая точка может предоставлять одно или несколько транспортных средств."
              },
              "stop_points": {
                "label": "Точки остановок",
                "description": "Точечный слой остановок доставки с полями спроса и временных окон."
              },
              "demand_field": {
                "label": "Поле спроса",
                "description": "Числовое поле спроса в stop_points (по умолчанию: demand)."
              },
              "priority_field": {
                "label": "Поле приоритета",
                "description": "Необязательное поле приоритета остановки со значениями вроде required/high/normal/low или числовыми рангами."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Поле разрешённых профилей транспорта",
                "description": "Необязательное поле остановки с перечнем совместимых профилей транспорта (через запятую/точку с запятой/вертикальную черту)."
              },
              "allowed_route_classes_field": {
                "label": "Поле разрешённых классов маршрутов",
                "description": "Необязательный псевдоним allowed_vehicle_profiles_field для правил совместимости классов маршрутов."
              },
              "tw_start_field": {
                "label": "Поле начала временного окна",
                "description": "Числовое поле начала временного окна в stop_points (по умолчанию: tw_start)."
              },
              "tw_end_field": {
                "label": "Поле конца временного окна",
                "description": "Числовое поле конца временного окна в stop_points (по умолчанию: tw_end)."
              },
              "service_time_field": {
                "label": "Поле времени обслуживания",
                "description": "Числовое поле времени обслуживания остановки в stop_points (по умолчанию: service_time)."
              },
              "depot_id_field": {
                "label": "Поле ID депо",
                "description": "Необязательное поле ID депо, используемое в выходах маршрутов/назначений."
              },
              "vehicle_count_field": {
                "label": "Поле числа транспортных средств",
                "description": "Необязательное поле депо для числа транспортных средств, создаваемых в каждом депо."
              },
              "vehicle_capacity_field": {
                "label": "Поле вместимости транспорта",
                "description": "Необязательное поле депо, переопределяющее vehicle_capacity для шаблона депо/транспорта."
              },
              "vehicle_fixed_cost_field": {
                "label": "Поле фиксированной стоимости транспорта",
                "description": "Необязательное поле депо, переопределяющее vehicle_fixed_cost для шаблона депо/транспорта."
              },
              "travel_speed_field": {
                "label": "Поле скорости движения",
                "description": "Необязательное поле депо, переопределяющее travel_speed для шаблона депо/транспорта."
              },
              "max_route_distance_field": {
                "label": "Поле макс. расстояния маршрута",
                "description": "Необязательное поле депо, переопределяющее max_route_distance для шаблона депо/транспорта."
              },
              "max_route_time_field": {
                "label": "Поле макс. времени маршрута",
                "description": "Необязательное поле депо, переопределяющее max_route_time для шаблона депо/транспорта."
              },
              "vehicle_profile_field": {
                "label": "Поле профиля транспорта",
                "description": "Необязательное поле депо, задающее токен профиля/категории транспорта для совместимости с остановками."
              },
              "vehicle_route_class_field": {
                "label": "Поле класса маршрута транспорта",
                "description": "Необязательный псевдоним vehicle_profile_field для правил совместимости классов маршрутов."
              },
              "depot_close_time_field": {
                "label": "Поле времени закрытия депо",
                "description": "Необязательное поле депо, переопределяющее depot_close_time для шаблона депо/транспорта."
              },
              "break_start_field": {
                "label": "Поле начала перерыва",
                "description": "Необязательное поле депо, переопределяющее break_start_time для шаблона депо/транспорта."
              },
              "break_end_field": {
                "label": "Поле конца перерыва",
                "description": "Необязательное поле депо, переопределяющее break_end_time для шаблона депо/транспорта."
              },
              "break_duration_field": {
                "label": "Поле длительности перерыва",
                "description": "Необязательное поле депо, переопределяющее break_duration для шаблона депо/транспорта."
              },
              "vehicle_capacity": {
                "label": "Вместимость транспорта",
                "description": "Вместимость каждого транспортного средства (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Фиксированная стоимость транспорта",
                "description": "Необязательная фиксированная стоимость за каждое отправленное транспортное средство/маршрут (по умолчанию: 0)."
              },
              "start_time": {
                "label": "Время начала",
                "description": "Время начала маршрута в единицах времени модели (по умолчанию: 0)."
              },
              "travel_speed": {
                "label": "Скорость движения",
                "description": "Скорость движения в единицах координат на единицу времени (по умолчанию: 1)."
              },
              "enforce_time_windows": {
                "label": "Соблюдать временные окна",
                "description": "Если true, для назначения допустимы только остановки с опозданием <= allowed_lateness (по умолчанию: false)."
              },
              "allowed_lateness": {
                "label": "Допустимое опоздание",
                "description": "Максимальное допустимое опоздание при enforce_time_windows=true (по умолчанию: 0)."
              },
              "depot_close_time": {
                "label": "Время закрытия депо",
                "description": "Необязательное жёсткое время закрытия, к которому каждый маршрут должен вернуться в депо."
              },
              "break_start_time": {
                "label": "Время начала перерыва",
                "description": "Необязательное глобальное время начала окна перерыва для всех транспортных средств."
              },
              "break_end_time": {
                "label": "Время конца перерыва",
                "description": "Необязательное глобальное время конца окна перерыва для всех транспортных средств."
              },
              "break_duration": {
                "label": "Длительность перерыва",
                "description": "Необязательная глобальная длительность перерыва, применяемая один раз на маршрут при пересечении окна перерыва."
              },
              "use_priority_scoring": {
                "label": "Использовать оценку приоритета",
                "description": "Если true, ранжирует допустимых кандидатов по прогнозируемому опозданию/запасу времени перед расстоянием поездки; если false, использует базовый метод ближайшего соседа (по умолчанию: true)."
              },
              "max_vehicles": {
                "label": "Макс. транспортных средств",
                "description": "Необязательное максимальное число транспортных средств/маршрутов для построения."
              },
              "max_route_distance": {
                "label": "Макс. расстояние маршрута",
                "description": "Необязательное максимальное расстояние поездки по маршруту, включая возврат в депо."
              },
              "max_route_time": {
                "label": "Макс. время маршрута",
                "description": "Необязательная максимальная длительность маршрута в единицах времени модели, включая возврат в депо."
              },
              "max_stops_per_vehicle": {
                "label": "Макс. остановок на транспорт",
                "description": "Необязательное максимальное число остановок, назначаемых каждому маршруту транспорта."
              },
              "objective_mode": {
                "label": "Режим целевой функции",
                "description": "Целевая функция построения маршрутов: minimize_lateness, minimize_distance, minimize_vehicles или minimize_cost."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора маршрутов."
              },
              "assignment_output": {
                "label": "Выход назначений",
                "description": "Необязательный точечный выход назначений остановок с диагностикой временных окон."
              }
            }
          },
          "clip": {
            "name": "Обрезка",
            "description": "Обрезает входные полигоны по границам полигонов наложения с помощью топологического пересечения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "difference": {
            "name": "Разность",
            "description": "Удаляет области полигонов наложения из входных полигонов с помощью топологической разности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "dissolve": {
            "name": "Слияние",
            "description": "Удаляет общие границы полигонов глобально или по полю атрибута слияния.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "dissolve_field": {
                "label": "Поле слияния",
                "description": "Необязательное поле атрибута для слияния полигонов внутри групп; если не указано, сливаются все полигоны."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки при топологических операциях."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "erase": {
            "name": "Стирание",
            "description": "Стирает области полигонов наложения из входных полигонов с сохранением входных атрибутов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "identity": {
            "name": "Тождество",
            "description": "Сохраняет все входные объекты; части, перекрывающиеся со слоем тождества, также получают его атрибуты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "intersect": {
            "name": "Пересечение",
            "description": "Пересекает входные полигоны и полигоны наложения с помощью топологического наложения и отслеживает идентификаторы исходных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "line_intersections": {
            "name": "Пересечения линий",
            "description": "Находит точки пересечения линий между входным слоем и слоем наложения и добавляет идентификаторы родительских объектов с объединёнными атрибутами.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный или полигональный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый линейный или полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для геометрических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "line_polygon_clip": {
            "name": "Обрезка линий полигоном",
            "description": "Обрезает линейные объекты по внутренней области полигонов и выводит обрезанные сегменты линий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линий."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Полигональный слой обрезки."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "near": {
            "name": "Ближайший",
            "description": "Добавляет атрибуты NEAR_FID и NEAR_DIST, определяющие ближайшие объекты и расстояния до них, с использованием пространственного индексирования.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "near": {
                "label": "Ближайший",
                "description": "Векторный слой ближайших объектов."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Необязательное максимальное расстояние поиска."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "select_by_location": {
            "name": "Выбор по местоположению",
            "description": "Фильтрует целевые объекты по пространственным предикатам (intersects, within, contains, touches, overlaps и т. д.) относительно объектов запроса.",
            "params": {
              "target": {
                "label": "Цель",
                "description": "Целевой слой объектов для фильтрации."
              },
              "query": {
                "label": "Запрос",
                "description": "Слой объектов запроса."
              },
              "predicate": {
                "label": "Предикат",
                "description": "Пространственный предикат: intersects, within, contains, touches, crosses, overlaps, disjoint, within_distance."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния для предиката within_distance."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "spatial_join": {
            "name": "Пространственное соединение",
            "description": "Переносит атрибуты объектов присоединяемого слоя на целевые объекты с использованием пространственных предикатов; поддерживает стратегии агрегирования (count, sum, mean, min, max) при нескольких совпадениях.",
            "params": {
              "target": {
                "label": "Цель",
                "description": "Целевой слой, получающий присоединённые атрибуты."
              },
              "join": {
                "label": "Соединение",
                "description": "Присоединяемый слой, предоставляющий атрибуты."
              },
              "predicate": {
                "label": "Предикат",
                "description": "Пространственный предикат: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния для предиката within_distance."
              },
              "strategy": {
                "label": "Стратегия",
                "description": "Стратегия соединения: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Префикс",
                "description": "Префикс для имён присоединённых полей (по умолчанию JOIN_)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "symmetrical_difference": {
            "name": "Симметрическая разность",
            "description": "Вычисляет неперекрывающиеся области полигонов по входному слою и слою наложения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "union": {
            "name": "Объединение",
            "description": "Объединяет полигоны входного слоя и слоя наложения в единое полигональное покрытие.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "update": {
            "name": "Обновление",
            "description": "Заменяет входные объекты объектами обновления там, где они перекрываются; входные объекты вне слоя обновления сохраняются.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Накладываемый полигональный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для топологических операций; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "centroid_vector": {
            "name": "Центроид (вектор)",
            "description": "Вычисляет географический центр (среднюю координату центра масс) для каждого векторного объекта, создавая точечный слой для размещения подписей, кластеризации и пространственного анализа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "concave_hull": {
            "name": "Вогнутая оболочка",
            "description": "Создаёт полигоны вогнутой оболочки вокруг координат входных объектов с помощью алгоритма concaveman.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "concavity": {
                "label": "Вогнутость",
                "description": "Коэффициент вогнутости (по умолчанию 2.0). Большие значения дают менее вогнутую оболочку, близкую к выпуклой. Меньшие значения допускают более тесные вогнутости."
              },
              "max_edge_length": {
                "label": "Макс. длина ребра",
                "description": "Порог длины: рёбра оболочки короче этого значения далее не уточняются. По умолчанию без ограничения (бесконечность)."
              },
              "epsilon": {
                "label": "Эпсилон",
                "description": "Эпсилон робастности (по умолчанию 1e-9)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "densify_features": {
            "name": "Уплотнение объектов",
            "description": "Добавляет вершины вдоль линий и границ полигонов с заданным шагом.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "spacing": {
                "label": "Шаг",
                "description": "Максимальное расстояние между соседними вершинами."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "eliminate_coincident_points": {
            "name": "Удаление совпадающих точек",
            "description": "Удаляет совпадающие или почти совпадающие точки в пределах допуска расстояния.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "tolerance_dist": {
                "label": "Расстояние допуска",
                "description": "Порог расстояния для признания точек совпадающими."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "extend_vector_lines": {
            "name": "Продление векторных линий",
            "description": "Удлиняет конечные точки полилиний на заданное расстояние в начале, в конце или с обеих сторон.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный векторный слой."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Расстояние продления концов полилиний."
              },
              "extend_direction": {
                "label": "Направление продления",
                "description": "Направление продления концов: both, start или end."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "merge_line_segments": {
            "name": "Слияние сегментов линий",
            "description": "Объединяет связные сегменты линий, сходящиеся в неразветвлённых конечных точках.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный векторный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки концов для сопоставления концов линий; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "minimum_bounding_box": {
            "name": "Минимальный ограничивающий прямоугольник",
            "description": "Вычисляет ориентированные минимальные ограничивающие прямоугольники вокруг отдельных объектов или всего слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "min_criteria": {
                "label": "Мин. критерии",
                "description": "Критерий минимизации: area, perimeter, length или width. По умолчанию area."
              },
              "individual_feature_hulls": {
                "label": "Оболочки отдельных объектов",
                "description": "Если true, выводит один прямоугольник на объект; иначе один прямоугольник на весь слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "minimum_bounding_circle": {
            "name": "Минимальная ограничивающая окружность",
            "description": "Вычисляет минимальные описанные окружности вокруг отдельных объектов или всего слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "individual_feature_hulls": {
                "label": "Оболочки отдельных объектов",
                "description": "Если true, выводит одну окружность на объект; иначе одну окружность на весь слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "minimum_bounding_envelope": {
            "name": "Минимальный ограничивающий экстент",
            "description": "Вычисляет выровненные по осям минимальные ограничивающие охваты вокруг отдельных объектов или всего слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "individual_feature_hulls": {
                "label": "Оболочки отдельных объектов",
                "description": "Если true, выводит один экстент на объект; иначе один экстент на весь слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "minimum_convex_hull": {
            "name": "Минимальная выпуклая оболочка",
            "description": "Создаёт полигоны выпуклой оболочки вокруг отдельных объектов или всего входного слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "individual_feature_hulls": {
                "label": "Оболочки отдельных объектов",
                "description": "Если true, выводит одну оболочку на входной объект; иначе одну оболочку на весь слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "polygonize": {
            "name": "Полигонизация",
            "description": "Создаёт полигоны по входным линиям, включая пересекающиеся/открытые сегменты, если из них могут быть образованы замкнутые грани.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Входные линейные векторные слои в виде массива или строки с разделителями-точками с запятой/запятыми. Если не указаны, используется input."
              },
              "input": {
                "label": "Вход",
                "description": "Необязательный путь одного входного линейного векторного слоя."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для полигонизации; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "representative_point_vector": {
            "name": "Репрезентативная точка (вектор)",
            "description": "Создаёт внутреннюю точку, гарантированно лежащую внутри или на каждой геометрии, методом полюса недоступности; идеально подходит для размещения подписей в вогнутых полигонах.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "simplify_features": {
            "name": "Упрощение объектов",
            "description": "Уменьшает сложность геометрии с помощью алгоритма Douglas-Peucker для минимизации размера файла, удаления шума GPS и оптимизации производительности отрисовки при сохранении формы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск упрощения в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "smooth_vectors": {
            "name": "Сглаживание векторов",
            "description": "Сглаживает геометрию полилиний или полигонов фильтрацией скользящим средним для уменьшения шума оцифровки и дрожания GPS-треков.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный или полигональный векторный слой."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Нечётный размер окна скользящего среднего (>= 3). Чётные значения увеличиваются до следующего нечётного."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "snap_endnodes": {
            "name": "Привязка конечных узлов",
            "description": "Привязывает близко расположенные конечные точки полилиний к общему местоположению в пределах допуска.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный векторный слой."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Допуск привязки концов в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора привязанных полилиний."
              }
            }
          },
          "split_vector_lines": {
            "name": "Разделение векторных линий",
            "description": "Разделяет каждый объект полилинии на сегменты не длиннее заданной максимальной длины.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный векторный слой."
              },
              "segment_length": {
                "label": "Длина сегмента",
                "description": "Максимальная длина сегмента в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полилинейного вектора."
              }
            }
          },
          "split_with_lines": {
            "name": "Разделение линиями",
            "description": "Разделяет входные полилинии по точкам пересечения с линиями разделяющего слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой линий для разделения."
              },
              "split": {
                "label": "Разделение",
                "description": "Слой разделяющих линий для создания точек разрыва."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Необязательный допуск привязки для операций разделения; по умолчанию машинный эпсилон."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "compactness_ratio": {
            "name": "Коэффициент компактности",
            "description": "Вычисляет коэффициент компактности (площадь / периметр) для полигональных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор с добавленным полем компактности."
              }
            }
          },
          "deviation_from_regional_direction": {
            "name": "Отклонение от регионального направления",
            "description": "Вычисляет отклонение направления полигона от взвешенной региональной средней ориентации и добавляет DEV_DIR.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "elongation_threshold": {
                "label": "Порог вытянутости",
                "description": "Минимальная вытянутость для включения полигонов в оценку регионального направления; по умолчанию 0.75."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "elongation_ratio": {
            "name": "Коэффициент вытянутости",
            "description": "Вычисляет коэффициент вытянутости (короткая ось / длинная ось ограничивающего прямоугольника) для полигональных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор с добавленным полем вытянутости."
              }
            }
          },
          "hole_proportion": {
            "name": "Доля отверстий",
            "description": "Вычисляет отношение площади отверстий полигона к площади оболочки и добавляет HOLE_PROP.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "linearity_index": {
            "name": "Индекс линейности",
            "description": "Вычисляет индекс линейности (коэффициент детерминации регрессии r-squared) для полигональных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор с добавленным полем линейности."
              }
            }
          },
          "narrowness_index_vector": {
            "name": "Индекс узости (вектор)",
            "description": "Вычисляет индекс узости (периметр / sqrt(площадь)) для полигональных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор с добавленным полем узости."
              }
            }
          },
          "patch_orientation": {
            "name": "Ориентация участка",
            "description": "Вычисляет ориентацию полигона (в градусах от севера) с помощью регрессии по приведённой главной оси и добавляет ORIENT.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "perimeter_area_ratio": {
            "name": "Отношение периметра к площади",
            "description": "Вычисляет отношение периметра к площади полигона и добавляет P_A_RATIO.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "polygon_area": {
            "name": "Площадь полигона",
            "description": "Вычисляет площадь полигона и добавляет поле атрибута AREA.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "polygon_long_axis": {
            "name": "Длинная ось полигона",
            "description": "Отображает длинную ось минимального ограничивающего прямоугольника каждого полигонального объекта в виде линий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полилинейного вектора."
              }
            }
          },
          "polygon_perimeter": {
            "name": "Периметр полигона",
            "description": "Вычисляет периметр полигона и добавляет поле атрибута PERIMETER.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "polygon_short_axis": {
            "name": "Короткая ось полигона",
            "description": "Отображает короткую ось минимального ограничивающего прямоугольника каждого полигонального объекта в виде линий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полилинейного вектора."
              }
            }
          },
          "related_circumscribing_circle": {
            "name": "Отношение к описанной окружности",
            "description": "Вычисляет 1 - (площадь полигона / площадь наименьшей описанной окружности) и добавляет RC_CIRCLE.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "shape_complexity_index_vector": {
            "name": "Индекс сложности формы (вектор)",
            "description": "Вычисляет индекс сложности формы векторных полигональных объектов с использованием нормированного форм-фактора.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор с добавленным полем индекса сложности."
              }
            }
          },
          "global_morans_i": {
            "name": "Глобальный индекс Морана I",
            "description": "Вычисляет глобальный индекс Морана I для проверки пространственной автокорреляции: группируются ли сходные значения в пространстве. Важная основа геостатистического анализа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле атрибута для анализа."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим окрестности: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Значение k для режима k_nearest."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния для режима distance_band."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Применять стандартизацию весов по строкам (по умолчанию true)."
              },
              "inference": {
                "label": "Вывод",
                "description": "Режим вывода: asymptotic или permutation (по умолчанию: asymptotic)."
              },
              "num_simulations": {
                "label": "Число симуляций",
                "description": "Число перестановок для перестановочного теста (по умолчанию: 999)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Зерно случайных чисел для воспроизводимого перестановочного теста."
              },
              "island_policy": {
                "label": "Политика островов",
                "description": "Обработка островов: drop_with_warning, keep_zero_weight, error."
              },
              "output_json": {
                "label": "Выходной JSON",
                "description": "Необязательный путь выходного отчёта JSON."
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              },
              "output_csv": {
                "label": "Выходной CSV",
                "description": "Необязательный путь выходной сводки CSV."
              },
              "output_distribution": {
                "label": "Выход распределения",
                "description": "Необязательный путь для сохранения распределения перестановок в JSON."
              }
            }
          },
          "getis_ord_gi_star": {
            "name": "Getis-Ord Gi*",
            "description": "Вычисляет z-оценки Getis-Ord Gi/Gi* для выявления локальных горячих/холодных точек. Прямая мера концентрации высоких/низких значений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле атрибута для анализа."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим окрестности: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Значение k для режима k_nearest."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния для режима distance_band."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Применять стандартизацию весов по строкам (по умолчанию true)."
              },
              "variant": {
                "label": "Вариант",
                "description": "Вариант: gi или gi_star (по умолчанию gi_star)."
              },
              "inference": {
                "label": "Вывод",
                "description": "Режим вывода: asymptotic или permutation (по умолчанию: asymptotic)."
              },
              "num_simulations": {
                "label": "Число симуляций",
                "description": "Число перестановок для перестановочного теста (по умолчанию: 999)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Зерно случайных чисел для воспроизводимого перестановочного теста."
              },
              "island_policy": {
                "label": "Политика островов",
                "description": "Обработка островов: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Альфа",
                "description": "Порог значимости в [0, 1]; по умолчанию 0.05."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора с полями GI."
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              }
            }
          },
          "local_morans_i_lisa": {
            "name": "Локальный индекс Морана I (LISA)",
            "description": "Вычисляет локальный индекс Морана I для каждого объекта для выявления локальных пространственных кластеров и выбросов с проверкой статистической значимости.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле атрибута для анализа."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим окрестности: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Значение k для режима k_nearest."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния для режима distance_band."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Применять стандартизацию весов по строкам (по умолчанию true)."
              },
              "inference": {
                "label": "Вывод",
                "description": "Режим вывода: asymptotic или permutation (по умолчанию: asymptotic)."
              },
              "num_simulations": {
                "label": "Число симуляций",
                "description": "Число перестановок для перестановочного теста (по умолчанию: 999)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Зерно случайных чисел для воспроизводимого перестановочного теста."
              },
              "island_policy": {
                "label": "Политика островов",
                "description": "Обработка островов: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Альфа",
                "description": "Порог значимости в [0, 1]; по умолчанию 0.05."
              },
              "fdr_correction": {
                "label": "Коррекция FDR",
                "description": "Применять коррекцию FDR-BH (по умолчанию true для перестановок)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора с полями LISA."
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              }
            }
          },
          "nearest_neighbour_index": {
            "name": "Индекс ближайшего соседа",
            "description": "Вычисляет индекс ближайшего соседа Clark-Evans для проверки полной пространственной случайности. Выявляет кластеризацию или рассеянность.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "study_area_mode": {
                "label": "Режим области исследования",
                "description": "Режим области исследования: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Полигон области исследования",
                "description": "Полигональный слой, используемый при study_area_mode=polygon_layer."
              },
              "output_json": {
                "label": "Выходной JSON",
                "description": "Необязательный путь выходного отчёта JSON."
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              },
              "output_csv": {
                "label": "Выходной CSV",
                "description": "Необязательный путь выходной сводки CSV."
              }
            }
          },
          "quadrat_count_test": {
            "name": "Тест подсчёта квадратов",
            "description": "Выполняет тест хи-квадрат на случайность точечного распределения по количествам в квадратах. Проверяет кластеризацию или рассеянность.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "grid_mode": {
                "label": "Режим сетки",
                "description": "Режим сетки: rows_cols или cell_size."
              },
              "rows": {
                "label": "Строки",
                "description": "Число строк при grid_mode=rows_cols."
              },
              "cols": {
                "label": "Столбцы",
                "description": "Число столбцов при grid_mode=rows_cols."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки при grid_mode=cell_size."
              },
              "study_area_mode": {
                "label": "Режим области исследования",
                "description": "Режим области исследования: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Полигон области исследования",
                "description": "Полигональный слой, используемый при study_area_mode=polygon_layer."
              },
              "output_grid": {
                "label": "Выходная сетка",
                "description": "Необязательный путь выходной полигональной сетки квадратов."
              },
              "output_json": {
                "label": "Выходной JSON",
                "description": "Необязательный путь выходного отчёта JSON."
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь выходного отчёта HTML."
              },
              "output_csv": {
                "label": "Выходной CSV",
                "description": "Необязательный путь выходной сводки CSV."
              }
            }
          },
          "spatial_lag_regression": {
            "name": "Регрессия с пространственным лагом",
            "description": "Оценивает пространственную авторегрессионную модель, учитывающую эндогенные эффекты перетока, когда зависимая переменная зависит от пространственных соседей.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "response_field": {
                "label": "Поле отклика",
                "description": "Переменная отклика (зависимая)."
              },
              "predictor_fields": {
                "label": "Поля предикторов",
                "description": "Имена полей предикторов через запятую."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим пространственной окрестности."
              },
              "k": {
                "label": "K",
                "description": "Значение k для k_nearest."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Стандартизировать веса по строкам."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой."
              }
            }
          },
          "spatial_error_regression": {
            "name": "Регрессия с пространственной ошибкой",
            "description": "Оценивает модель пространственной ошибки, учитывающую экзогенную пространственную зависимость в остатках из-за пропущенных переменных или ошибок измерения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "response_field": {
                "label": "Поле отклика",
                "description": "Переменная отклика."
              },
              "predictor_fields": {
                "label": "Поля предикторов",
                "description": "Поля предикторов через запятую."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим пространственной окрестности."
              },
              "k": {
                "label": "K",
                "description": "k для k_nearest."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Стандартизировать веса по строкам."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой."
              }
            }
          },
          "geographically_weighted_regression": {
            "name": "Географически взвешенная регрессия",
            "description": "Локальная линейная регрессия с весами ядра, убывающими с расстоянием (GWR): коэффициенты для каждого объекта, локальный R², остатки и прогнозы, а также глобальная диагностика AICc / R²; фиксированная или адаптивная ширина окна, при необходимости оптимизируемая по AICc.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов (точки или другие геометрии через их репрезентативную точку)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "y_field": {
                "label": "Поле Y",
                "description": "Зависимое числовое поле (отклик)."
              },
              "x_fields": {
                "label": "Поля X",
                "description": "Объясняющие числовые поля через запятую."
              },
              "kernel": {
                "label": "Ядро",
                "description": "Ядро затухания по расстоянию: gaussian (по умолчанию) или bisquare."
              },
              "bandwidth_type": {
                "label": "Тип ширины полосы",
                "description": "adaptive (по умолчанию; ширина полосы = k ближайших соседей) или fixed (ширина полосы = расстояние)."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Ширина полосы: число соседей для adaptive или расстояние для fixed. Не указывайте, чтобы выбрать её минимизацией AICc."
              }
            }
          },
          "ripleys_k_test": {
            "name": "Тест K-функции Рипли",
            "description": "Вычисляет многомасштабную статистику кластеризации K Рипли. Выявляет зависящую от масштаба кластеризацию/рассеянность в диапазонах расстояний.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние анализа."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Размер шага расстояния."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор со статистикой K."
              }
            }
          },
          "envelope_test": {
            "name": "Тест огибающей",
            "description": "Выполняет тест огибающих Монте-Карло, сравнивая наблюдаемое распределение с нулевым распределением CSR. Определяет значимость кластеризации/рассеянности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "num_simulations": {
                "label": "Число симуляций",
                "description": "Число симуляций Монте-Карло."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние анализа."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор с границами огибающей."
              }
            }
          },
          "point_process_residuals": {
            "name": "Остатки точечного процесса",
            "description": "Вычисляет остатки подобранной модели пуассоновского точечного процесса для диагностики. Выявляет неучтённую моделью пространственную структуру.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "intensity_field": {
                "label": "Поле интенсивности",
                "description": "Поле подобранной интенсивности."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной вектор с остатками."
              }
            }
          },
          "ripleys_k_function": {
            "name": "K-функция Рипли",
            "description": "Вычисляет K(t) и L(t) для характеристики закономерностей пространственной кластеризации.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный векторный слой."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Порог максимального расстояния."
              },
              "num_distances": {
                "label": "Число расстояний",
                "description": "Число шагов расстояния."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной CSV."
              }
            }
          },
          "point_pattern_envelope": {
            "name": "Огибающая точечного паттерна",
            "description": "Формирует огибающие критической полосы для проверки гипотез относительно CSR.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный векторный слой."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние."
              },
              "num_distances": {
                "label": "Число расстояний",
                "description": "Бины расстояний."
              },
              "num_simulations": {
                "label": "Число симуляций",
                "description": "Повторы Монте-Карло."
              },
              "alpha": {
                "label": "Альфа",
                "description": "Уровень значимости."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной CSV."
              }
            }
          },
          "inhomogeneous_baseline": {
            "name": "Неоднородная базовая интенсивность",
            "description": "Оценивает поверхность интенсивности и вычисляет K-функцию с поправкой на интенсивность.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный векторный слой."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние."
              },
              "num_distances": {
                "label": "Число расстояний",
                "description": "Бины расстояний."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Ширина полосы KDE (автовыбор, если не указана)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной CSV."
              }
            }
          },
          "hotspot_vs_process": {
            "name": "Горячие точки и процесс",
            "description": "Сравнивает закономерности горячих точек с интенсивностью лежащего в основе точечного процесса.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный векторный слой."
              },
              "hotspot_field": {
                "label": "Поле горячих точек",
                "description": "Поле классификации горячих точек."
              },
              "intensity_field": {
                "label": "Поле интенсивности",
                "description": "Поле интенсивности."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной CSV."
              }
            }
          },
          "point_process_residuals_comparison": {
            "name": "Сравнение остатков точечных процессов",
            "description": "Вычисляет диагностику остатков для проверки адекватности модели.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный векторный слой."
              },
              "observed_field": {
                "label": "Поле наблюдений",
                "description": "Поле наблюдаемых значений."
              },
              "predicted_field": {
                "label": "Поле предсказания",
                "description": "Поле предсказанных значений."
              },
              "residual_type": {
                "label": "Тип остатков",
                "description": "Тип остатков."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной CSV."
              }
            }
          },
          "construct_vector_tin": {
            "name": "Построение векторной TIN",
            "description": "Строит нерегулярную треугольную сеть (TIN) по входному набору точек с помощью триангуляции Делоне.",
            "params": {
              "input_points": {
                "label": "Входные точки",
                "description": "Входной точечный или мультиточечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное имя поля высот вершин (числовое поле)."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Если true, использовать значения Z геометрии для высот треугольников."
              },
              "max_triangle_edge_length": {
                "label": "Макс. длина ребра треугольника",
                "description": "Максимальная допустимая длина ребра треугольника (отфильтровывает длинные рёбра). Используйте 0 или отрицательное значение для снятия ограничения."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный векторный слой (TIN)."
              }
            }
          },
          "contours_from_points": {
            "name": "Изолинии из точек",
            "description": "Создаёт полилинии изолиний по высотам точек с использованием TIN Делоне.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного точечного или мультиточечного вектора."
              },
              "base": {
                "label": "База",
                "description": "Высота базовой изолинии (по умолчанию 0.0)."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Числовое поле атрибута со значениями высот (игнорируется при use_z_values=true)."
              },
              "interval": {
                "label": "Интервал",
                "description": "Значение интервала изолиний (по умолчанию 10.0)."
              },
              "max_triangle_edge_length": {
                "label": "Макс. длина ребра треугольника",
                "description": "Максимальная длина ребра треугольника для включения в построение изолиний (единицы карты)."
              },
              "smooth": {
                "label": "Сглаживание",
                "description": "Размер сглаживающего фильтра (нечётное целое, по умолчанию 9)."
              },
              "use_z_values": {
                "label": "Использовать значения Z",
                "description": "Использовать значения Z геометрии как высоты (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "contours_from_raster": {
            "name": "Изолинии из растра",
            "description": "Создаёт полилинии изолиний по растровой модели поверхности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра поверхности или типизированный растровый объект."
              },
              "base": {
                "label": "База",
                "description": "Высота базовой изолинии (по умолчанию 0.0)."
              },
              "interval": {
                "label": "Интервал",
                "description": "Значение интервала изолиний (по умолчанию 10.0)."
              },
              "smooth": {
                "label": "Сглаживание",
                "description": "Размер сглаживающего фильтра (нечётное целое, по умолчанию 9)."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Минимальный угол отклонения линии в градусах для упрощения (по умолчанию 10.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "extract_nodes": {
            "name": "Извлечение узлов",
            "description": "Преобразует вершины полилиний и полигонов в точечные объекты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный или полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "extract_raster_values_at_points": {
            "name": "Извлечение значений растра в точках",
            "description": "Выбирает значения одного или нескольких растров в местоположениях точек и записывает их в атрибуты точек.",
            "params": {
              "rasters": {
                "label": "Растры",
                "description": "Пути входных растров в виде массива или строки с разделителями."
              },
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "find_lowest_or_highest_points": {
            "name": "Поиск самых низких или высоких точек",
            "description": "Находит ячейки растра с наименьшими и/или наибольшими значениями и выводит их местоположения в виде точек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Тип выхода: lowest, highest или both."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора."
              }
            }
          },
          "hexagonal_grid_from_raster_base": {
            "name": "Гексагональная сетка по базовому растру",
            "description": "Создаёт гексагональную полигональную сетку с настраиваемой шириной и ориентацией, обеспечивая несмещённое разбиение для тепловых карт и агрегирования.",
            "params": {
              "base": {
                "label": "База",
                "description": "Базовый растр, управляющий экстентом сетки."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина шестиугольника в единицах карты."
              },
              "orientation": {
                "label": "Ориентация",
                "description": "Ориентация шестиугольников: horizontal или vertical."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "hexagonal_grid_from_vector_base": {
            "name": "Гексагональная сетка по базовому вектору",
            "description": "Создаёт гексагональную полигональную сетку, выровненную по охвату векторного слоя, для несмещённого пространственного агрегирования и визуализации плотности.",
            "params": {
              "base": {
                "label": "База",
                "description": "Базовый векторный слой, управляющий экстентом сетки."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина шестиугольника в единицах карты."
              },
              "orientation": {
                "label": "Ориентация",
                "description": "Ориентация шестиугольников: horizontal или vertical."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "layer_footprint_raster": {
            "name": "Контур слоя (растр)",
            "description": "Создаёт полигон охвата, представляющий полный экстент входного растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "layer_footprint_vector": {
            "name": "Контур слоя (вектор)",
            "description": "Создаёт полигон охвата, представляющий полный ограничивающий экстент входного векторного слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "medoid": {
            "name": "Медоид",
            "description": "Вычисляет точки-медоиды для векторных геометрий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора медоида."
              }
            }
          },
          "random_points_in_polygon": {
            "name": "Случайные точки в полигоне",
            "description": "Генерирует случайные точки, равномерно распределённые внутри входных полигональных геометрий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой."
              },
              "num_points": {
                "label": "Число точек",
                "description": "Число создаваемых случайных точек."
              },
              "seed": {
                "label": "Зерно",
                "description": "Необязательное зерно генератора случайных чисел для воспроизводимости."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "rectangular_grid_from_raster_base": {
            "name": "Прямоугольная сетка по базовому растру",
            "description": "Создаёт прямоугольную полигональную сетку, покрывающую охват растра.",
            "params": {
              "base": {
                "label": "База",
                "description": "Базовый растр, управляющий экстентом сетки."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина ячейки сетки в единицах карты."
              },
              "height": {
                "label": "Высота",
                "description": "Высота ячейки сетки в единицах карты."
              },
              "x_origin": {
                "label": "Начало X",
                "description": "Необязательное начало x для выравнивания сетки."
              },
              "y_origin": {
                "label": "Начало Y",
                "description": "Необязательное начало y для выравнивания сетки."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "rectangular_grid_from_vector_base": {
            "name": "Прямоугольная сетка по базовому вектору",
            "description": "Создаёт прямоугольную полигональную сетку, покрывающую ограничивающий охват векторного слоя.",
            "params": {
              "base": {
                "label": "База",
                "description": "Базовый векторный слой, управляющий экстентом сетки."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина ячейки сетки в единицах карты."
              },
              "height": {
                "label": "Высота",
                "description": "Высота ячейки сетки в единицах карты."
              },
              "x_origin": {
                "label": "Начало X",
                "description": "Необязательное начало x для выравнивания сетки."
              },
              "y_origin": {
                "label": "Начало Y",
                "description": "Необязательное начало y для выравнивания сетки."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора."
              }
            }
          },
          "vector_hex_binning": {
            "name": "Векторное гексагональное биннирование",
            "description": "Агрегирует точечные объекты в гексагональные бины, подсчитывая число точек в каждой гексагональной ячейке.",
            "params": {
              "vector_points": {
                "label": "Векторные точки",
                "description": "Входной точечный или мультиточечный векторный слой."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина шестиугольника (расстояние между противоположными сторонами)."
              },
              "orientation": {
                "label": "Ориентация",
                "description": "Ориентация шестиугольников: h для горизонтальной (вершиной вверх) или v для вертикальной (плоской стороной вверх)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой шестиугольников с подсчётами."
              }
            }
          },
          "voronoi_diagram": {
            "name": "Диаграмма Вороного",
            "description": "Создаёт полигоны Voronoi (Тиссена) по входным местоположениям точек.",
            "params": {
              "input_points": {
                "label": "Входные точки",
                "description": "Входной точечный или мультиточечный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора полигонов Вороного."
              }
            }
          },
          "add_field": {
            "name": "Добавление поля",
            "description": "Добавляет новое поле атрибута с необязательным значением по умолчанию.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Имя нового поля."
              },
              "field_type": {
                "label": "Тип поля",
                "description": "Тип поля: integer, float, text, boolean."
              },
              "default": {
                "label": "По умолчанию",
                "description": "Необязательное значение по умолчанию."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "add_geometry_attributes": {
            "name": "Добавление атрибутов геометрии",
            "description": "Автоматически вычисляет геометрические свойства (площадь, длину, периметр, центроид) и добавляет их как новые поля; поддерживает как плоские, так и геодезические измерения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "measurement_mode": {
                "label": "Режим измерения",
                "description": "Метод измерения: auto (по умолчанию), planar или geodesic."
              },
              "area": {
                "label": "Площадь",
                "description": "Включать поле площади (AREA_M2 для геодезического, AREA_MAP2 для плоского)."
              },
              "length": {
                "label": "Длина",
                "description": "Включать поле длины (LENGTH_M для геодезического, LENGTH_MAP для плоского)."
              },
              "perimeter": {
                "label": "Периметр",
                "description": "Включать поле периметра (PERIM_M для геодезического, PERIM_MAP для плоского)."
              },
              "centroid": {
                "label": "Центроид",
                "description": "Включать поля X/Y центроида (по умолчанию true)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "attribute_correlation": {
            "name": "Корреляция атрибутов",
            "description": "Выполняет корреляционный анализ Пирсона для числовых полей атрибутов вектора.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "attribute_histogram": {
            "name": "Гистограмма атрибута",
            "description": "Создаёт гистограмму значений числового поля в таблице атрибутов вектора.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "field": {
                "label": "Поле",
                "description": "Имя числового поля атрибута."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "attribute_scattergram": {
            "name": "Диаграмма рассеяния атрибутов",
            "description": "Вычисляет сводную статистику диаграммы рассеяния для двух числовых полей вектора.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "fieldx": {
                "label": "Поле X",
                "description": "Имя числового поля оси x."
              },
              "fieldy": {
                "label": "Поле Y",
                "description": "Имя числового поля оси y."
              },
              "trendline": {
                "label": "Линия тренда",
                "description": "Включать сводку по линии тренда (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "delete_field": {
            "name": "Удаление поля",
            "description": "Удаляет одно или несколько полей атрибутов из векторного слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "fields": {
                "label": "Поля",
                "description": "Имена удаляемых полей через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "extract_by_attribute": {
            "name": "Извлечение по атрибуту",
            "description": "Извлекает векторные объекты, удовлетворяющие атрибутивному выражению.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "statement": {
                "label": "Выражение",
                "description": "Логическое выражение, вычисляемое по полям атрибутов; принимает псевдонимы AND/OR/NOT/XOR в стиле SQL."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "field_calculator": {
            "name": "Калькулятор полей",
            "description": "Вычисляет значение поля по выражению с использованием атрибутов объектов и переменных геометрии; поддерживает SQL-подобные конструкции CASE, CAST, проверки на null и обёртки UPDATE ... SET ... [WHERE ...].",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Имя выходного поля."
              },
              "field_type": {
                "label": "Тип поля",
                "description": "Тип выходного поля: float, integer, text."
              },
              "expression": {
                "label": "Выражение",
                "description": "Выражение, вычисляемое для каждого объекта. Поддерживает CASE в стиле SQL, CAST(... AS type), IS NULL/IS NOT NULL и обёртки UPDATE ... SET FIELD = ... [WHERE ...]."
              },
              "overwrite": {
                "label": "Перезаписать",
                "description": "Перезаписывать существующее поле при наличии (по умолчанию true)."
              },
              "preview_rows": {
                "label": "Строки предпросмотра",
                "description": "Необязательное число строк предпросмотра, возвращаемых в результате. При > 0 выход может быть опущен для оценки только предпросмотра."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. Необязателен при preview_rows > 0."
              }
            }
          },
          "filter_vector_features_by_area": {
            "name": "Фильтрация векторных объектов по площади",
            "description": "Отфильтровывает полигональные объекты с площадью ниже минимального порога.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "threshold": {
                "label": "Порог",
                "description": "Минимальная площадь полигона для сохранения, в квадратных единицах координат слоя."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "list_unique_values": {
            "name": "Список уникальных значений",
            "description": "Перечисляет уникальные значения и их частоты в поле атрибута вектора.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "field": {
                "label": "Поле",
                "description": "Имя поля атрибута."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного CSV."
              }
            }
          },
          "rename_field": {
            "name": "Переименование поля",
            "description": "Переименовывает поле атрибута в векторном слое.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Имя существующего поля."
              },
              "new_field": {
                "label": "Новое поле",
                "description": "Имя поля замены."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "download_osm_vector": {
            "name": "Загрузка векторных данных OSM",
            "description": "Загружает объекты OpenStreetMap из Overpass API для ограничивающего прямоугольника и записывает результат в виде векторного слоя.",
            "params": {
              "west": {
                "label": "Запад",
                "description": "Долгота западной границы (EPSG:4326)."
              },
              "south": {
                "label": "Юг",
                "description": "Широта южной границы (EPSG:4326)."
              },
              "east": {
                "label": "Восток",
                "description": "Долгота восточной границы (EPSG:4326)."
              },
              "north": {
                "label": "Север",
                "description": "Широта северной границы (EPSG:4326)."
              },
              "input_extent_epsg": {
                "label": "EPSG входного экстента",
                "description": "Код EPSG для входного экстента запад/юг/восток/север (по умолчанию 4326)."
              },
              "filter_preset": {
                "label": "Предустановка фильтра",
                "description": "Предустановка классов объектов: all, roads, buildings, water, landuse, trails, parks, rail, amenities, boundaries, transit, poi (по умолчанию all)."
              },
              "include_tags": {
                "label": "Включать теги",
                "description": "Список фильтра ключей тегов через точку с запятой, например amenity;shop."
              },
              "include_key_values": {
                "label": "Включать значения ключей",
                "description": "Список фильтра key=value через точку с запятой, например amenity=school;building=yes."
              },
              "filter_key": {
                "label": "Ключ фильтра",
                "description": "Устаревший одиночный фильтр по ключу тега (устарел; используйте include_tags)."
              },
              "filter_key_value": {
                "label": "Значение ключа фильтра",
                "description": "Устаревший одиночный фильтр key=value (устарел; используйте include_key_values)."
              },
              "include_points": {
                "label": "Включать точки",
                "description": "Включать объекты узлов OSM с тегами как геометрии Point (по умолчанию true)."
              },
              "include_lines": {
                "label": "Включать линии",
                "description": "Включать объекты путей OSM как геометрии LineString (по умолчанию true)."
              },
              "include_polygons": {
                "label": "Включать полигоны",
                "description": "Включать замкнутые пути OSM с тегами площадей как геометрии Polygon (по умолчанию true)."
              },
              "clip_to_extent": {
                "label": "Обрезать по экстенту",
                "description": "Обрезать выходные геометрии по экстенту запроса (по умолчанию true)."
              },
              "split_output_by_geometry": {
                "label": "Разделять выход по геометрии",
                "description": "Записывать отдельные выходы по типам геометрии (<output>_points|lines|polygons.ext)."
              },
              "output_epsg": {
                "label": "Выходной EPSG",
                "description": "Перепроецировать выход в этот код EPSG; не указывайте, чтобы оставить EPSG:4326."
              },
              "overpass_profile": {
                "label": "Профиль Overpass",
                "description": "Профиль конечной точки Overpass: main, kumi, fr или custom (по умолчанию main)."
              },
              "overpass_url": {
                "label": "URL Overpass",
                "description": "URL конечной точки Overpass API (по умолчанию https://overpass-api.de/api/interpreter)."
              },
              "timeout_seconds": {
                "label": "Тайм-аут (с)",
                "description": "Тайм-аут запроса в секундах (по умолчанию 25)."
              },
              "max_elements": {
                "label": "Макс. элементов",
                "description": "Максимальное число возвращаемых элементов Overpass до выдачи ошибки (по умолчанию 50 000)."
              },
              "chunk_large_aoi": {
                "label": "Разбивать большую AOI",
                "description": "Автоматически разбивать большие AOI на несколько запросов Overpass (по умолчанию true)."
              },
              "chunk_max_area_deg2": {
                "label": "Макс. площадь части (град²)",
                "description": "Максимальная площадь части в квадратных градусах при разбиении (по умолчанию 4.0)."
              },
              "max_chunk_count": {
                "label": "Макс. число частей",
                "description": "Жёсткий предел числа частей при разбиении больших AOI (по умолчанию 64)."
              },
              "chunk_parallel_requests": {
                "label": "Параллельные запросы частей",
                "description": "Максимальное число параллельных запросов частей для больших AOI (по умолчанию 1 = последовательно)."
              },
              "cache_dir": {
                "label": "Каталог кэша",
                "description": "Необязательный каталог для кэширования ответов Overpass JSON по хэшу конечной точки+запроса."
              },
              "cache_ttl_hours": {
                "label": "TTL кэша (ч)",
                "description": "Время жизни кэша в часах (по умолчанию 24; 0 означает без проверки истечения)."
              },
              "provenance_output": {
                "label": "Выход происхождения",
                "description": "Необязательный путь JSON для записи сопутствующих метаданных запроса/происхождения."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора; если не указан, используется временный выход."
              }
            }
          },
          "assign_projection_lidar": {
            "name": "Назначение проекции LiDAR",
            "description": "Назначает систему координат облаку точек LiDAR без перепроецирования его точек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного файла LiDAR (LAS/LAZ/COPC или дескриптор в памяти)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG назначаемой CRS, например 4326 (WGS84) или 3857 (Web Mercator). Координаты не преобразуются."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного LiDAR. Если не указан, результат хранится в памяти."
              }
            }
          },
          "assign_projection_raster": {
            "name": "Назначение проекции растру",
            "description": "Назначает систему координат растру без трансформации его ячеек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла (или дескриптор в памяти)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG назначаемой CRS, например 4326 (WGS84) или 3857 (Web Mercator). Координаты не преобразуются."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              }
            }
          },
          "assign_projection_vector": {
            "name": "Назначение проекции вектору",
            "description": "Назначает систему координат векторному слою без перепроецирования его геометрий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG назначаемой CRS, например 4326 (WGS84) или 3857 (Web Mercator). Координаты не преобразуются."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              }
            }
          },
          "georeference_raster_from_control_points": {
            "name": "Геопривязка растра по опорным точкам",
            "description": "Подбирает преобразование по опорным точкам (GCP) и трансформирует растр в геопривязанный результат.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "control_points": {
                "label": "Опорные точки",
                "description": "Путь CSV опорных точек с pixel_x,pixel_y,map_x,map_y (и допустимыми псевдонимами)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Целевой код EPSG."
              },
              "transform_type": {
                "label": "Тип трансформации",
                "description": "Тип трансформации: affine, projective, polynomial или thin_plate_spline."
              },
              "transform_order": {
                "label": "Порядок трансформации",
                "description": "Порядок полинома при transform_type=polynomial."
              },
              "resample": {
                "label": "Передискретизация",
                "description": "Метод передискретизации; по умолчанию bilinear."
              },
              "allow_auto_downgrade": {
                "label": "Разрешить автопонижение",
                "description": "Разрешить автоматическое понижение до более простой трансформации при малом числе GCP."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного геопривязанного растра."
              },
              "report": {
                "label": "Отчёт",
                "description": "Путь выходного отчёта JSON."
              }
            }
          },
          "reproject_lidar": {
            "name": "Перепроецирование LiDAR",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Вход"
              },
              "dst_epsg": {
                "label": "Целевой EPSG",
                "description": "Целевой EPSG"
              },
              "output": {
                "label": "Выход",
                "description": "Выход"
              },
              "use_3d_transform": {
                "label": "Использовать 3D-трансформацию",
                "description": "Использовать 3D-трансформацию"
              },
              "failure_policy": {
                "label": "Политика при сбое",
                "description": "Политика при сбое"
              },
              "coordinate_epoch": {
                "label": "Эпоха координат",
                "description": "Эпоха координат"
              },
              "source_reference_epoch": {
                "label": "Эпоха исходной системы",
                "description": "Эпоха исходной системы"
              },
              "target_reference_epoch": {
                "label": "Эпоха целевой системы",
                "description": "Эпоха целевой системы"
              },
              "operation_code": {
                "label": "Код операции",
                "description": "Код операции"
              },
              "prefer_official_operation": {
                "label": "Предпочитать официальную операцию",
                "description": "Предпочитать официальную операцию"
              },
              "epoch_policy": {
                "label": "Политика эпох",
                "description": "Политика эпох"
              }
            }
          },
          "reproject_raster": {
            "name": "Перепроецирование растра",
            "description": "Перепроецирует (трансформирует) растр в целевую систему координат EPSG.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла. Должен содержать исходную CRS (EPSG или WKT)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG назначения, например 3857 (Web Mercator) или 4326 (WGS84)."
              },
              "method": {
                "label": "Метод",
                "description": "Метод передискретизации: nearest (по умолчанию), bilinear, cubic, lanczos, average, min, max, mode, median."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              }
            }
          },
          "reproject_vector": {
            "name": "Перепроецирование вектора",
            "description": "Перепроецирует векторные геометрии в целевую проекцию EPSG с сохранением топологии и атрибутов, обеспечивая интеграцию данных из нескольких источников.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG назначения."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "orthorectification": {
            "name": "Ортотрансформирование",
            "description": "Геометрическая коррекция исходных снимков на основе DEM с использованием модели камеры RPC. Устраняет смещения из-за рельефа для получения геопривязанного ортоизображения.",
            "params": {
              "input_raster": {
                "label": "Входной растр",
                "description": "Путь входного необработанного (нескорректированного) растра изображения. Метаданные RPC должны быть встроены в файл или присутствовать в соседнем файле .RPB."
              },
              "input_dem": {
                "label": "Входная DEM",
                "description": "Растр DEM для получения высоты рельефа для каждого выходного пикселя. Должен покрывать весь экстент сцены. Если не в географических координатах, инструмент перепроецирует по необходимости."
              },
              "output_epsg": {
                "label": "Выходной EPSG",
                "description": "Код EPSG выходной системы координат (по умолчанию 4326 географическая; укажите проецированную CRS вроде 32617 для зоны UTM 17N)."
              },
              "output_resolution": {
                "label": "Выходное разрешение",
                "description": "Выходное разрешение пикселя в единицах выходной CRS (например, градусы для географической, метры для проецированной). По умолчанию приблизительный GSD входного изображения."
              },
              "resample_method": {
                "label": "Метод передискретизации",
                "description": "Метод передискретизации выхода: nearest, bilinear (по умолчанию), cubic."
              },
              "nodata_value": {
                "label": "Значение NoData",
                "description": "Значение NoData, назначаемое пикселям без допустимого исходного покрытия (по умолчанию как у входа)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра ортоизображения."
              }
            }
          },
          "average_flowpath_slope": {
            "name": "Средний уклон пути стока",
            "description": "Вычисляет средний уклон путей стока, проходящих через каждую ячейку DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM без понижений."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "average_upslope_flowpath_length": {
            "name": "Средняя длина пути стока вверх по склону",
            "description": "Вычисляет среднюю длину путей стока вверх по склону, проходящих через каждую ячейку DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM без понижений."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "d8_flow_accum": {
            "name": "Аккумуляция стока D8",
            "description": "Вычисляет аккумуляцию стока D8 по DEM или растру указателя D8.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр DEM или указателя D8"
              },
              "clip": {
                "label": "Обрезка",
                "description": "Максимум отображения обрезки (принимается для совместимости)"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Использовать кодировку указателей ESRI для входных указателей"
              },
              "input_is_pointer": {
                "label": "Вход является указателем",
                "description": "Считать вход растром указателя D8"
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Логарифмическое преобразование выхода"
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Тип выхода: cells, ca или sca"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "d8_mass_flux": {
            "name": "Массовый поток D8",
            "description": "Выполняет аккумуляцию массового потока на основе D8 с использованием растров нагрузки, эффективности и поглощения.",
            "params": {
              "absorption": {
                "label": "Поглощение",
                "description": "Растр поячеечных потерь массы в единицах нагрузки."
              },
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM без понижений для вывода направлений стока D8."
              },
              "efficiency": {
                "label": "Эффективность",
                "description": "Растр значений эффективности переноса, в `[0, 1]` или в процентах."
              },
              "loading": {
                "label": "Нагрузка",
                "description": "Растр начальных значений нагрузки массы."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "d8_pointer": {
            "name": "Указатель D8",
            "description": "Направление стока по наибольшему уклону к одному из 8 соседей (N/NE/E/SE/S/SW/W/NW). Основа гидрологического анализа D8 и выделения водосборов.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Использовать кодировку указателей ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "dinf_flow_accum": {
            "name": "Аккумуляция стока D-infinity",
            "description": "Вычисляет аккумуляцию стока D-Infinity по DEM или растру указателя D-Infinity.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр DEM или указателя D-Infinity"
              },
              "clip": {
                "label": "Обрезка",
                "description": "Максимум отображения обрезки (принимается для совместимости)"
              },
              "convergence_threshold": {
                "label": "Порог сходимости",
                "description": "Порог, выше которого сток не рассеивается"
              },
              "input_is_pointer": {
                "label": "Вход является указателем",
                "description": "Считать вход растром указателя D-Infinity"
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Логарифмическое преобразование выхода"
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Тип выхода: cells, ca или sca"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "dinf_mass_flux": {
            "name": "Массовый поток D-infinity",
            "description": "Выполняет аккумуляцию массового потока D-Infinity с использованием растров нагрузки, эффективности и поглощения.",
            "params": {
              "absorption": {
                "label": "Поглощение",
                "description": "Входной растр поглощения в единицах нагрузки."
              },
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "efficiency": {
                "label": "Эффективность",
                "description": "Входной растр эффективности (значения `0-1` или проценты)."
              },
              "loading": {
                "label": "Нагрузка",
                "description": "Входной растр нагрузки."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "dinf_pointer": {
            "name": "Указатель D-infinity",
            "description": "Непрерывные направления стока (0-2π радиан), устраняющие диагональное смещение D8. Лучше подходит для моделирования переноса наносов и расходящегося стока.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "downslope_flowpath_length": {
            "name": "Длина пути стока вниз по склону",
            "description": "Вычисляет длину пути стока вниз по склону от каждой ячейки до выхода по растру указателя D8.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8"
              },
              "watersheds": {
                "label": "Водосборы",
                "description": "Необязательный растр водосборов"
              },
              "weights": {
                "label": "Веса",
                "description": "Необязательный растр поячеечного взвешивания расстояний"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Использовать кодировку указателей ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "fd8_flow_accum": {
            "name": "Аккумуляция стока FD8",
            "description": "Вычисляет аккумуляцию стока FD8 по DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "clip": {
                "label": "Обрезка",
                "description": "Максимум отображения обрезки (принимается для совместимости)"
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Показатель степени взвешивания уклона"
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Логарифмическое преобразование выхода"
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Тип выхода: cells, ca или sca"
              },
              "threshold": {
                "label": "Порог",
                "description": "Порог"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "fd8_pointer": {
            "name": "Указатель FD8",
            "description": "Дробное распределение стока между несколькими соседями вниз по склону с весами по градиенту. Лучше D8 для дисперсионных, диффузионных процессов и сохранения массы.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "flow_accum_full_workflow": {
            "name": "Полный рабочий процесс аккумуляции стока",
            "description": "Выполняет полный рабочий процесс аккумуляции стока без расхождения и возвращает DEM с прорывом, указатель направления стока и аккумуляцию.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Если true, обрезать максимум отображения аккумуляции (поведение для совместимости)."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, кодировать выход направления стока в стиле указателей Esri."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Если true, логарифмически преобразовывать значения аккумуляции."
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Одно из `\"cells\"`, `\"ca\"`, `\"sca\"` (по умолчанию)."
              },
              "breached_dem_output": {
                "label": "Выход DEM с прорывами",
                "description": "Необязательный путь выхода для растра DEM без понижений."
              },
              "flow_dir_output": {
                "label": "Выход направления стока",
                "description": "Необязательный путь выхода для растра направления стока."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода для растра аккумуляции стока."
              },
              "output_pointer": {
                "label": "Выходной указатель",
                "description": "Необязательный путь выхода для указателя направления стока D8 (псевдоним flow_dir_output; в кодировке ESRI при заданном esri_pntr)"
              }
            }
          },
          "flow_length_diff": {
            "name": "Разность длин стока",
            "description": "Вычисляет локальные максимальные абсолютные разности длины пути вниз по склону по растру указателя D8.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8."
              },
              "weights": {
                "label": "Веса",
                "description": "Веса"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, интерпретировать значения указателей в кодировке ESRI D8."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "max_upslope_flowpath_length": {
            "name": "Максимальная длина пути стока вверх по склону",
            "description": "Вычисляет максимальную длину путей стока вверх по склону, проходящих через каждую ячейку DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM без понижений."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "max_upslope_value": {
            "name": "Максимальное значение вверх по склону",
            "description": "Распространяет максимальное значение вверх по склону вдоль путей стока D8 по DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "values": {
                "label": "Значения",
                "description": "Входной растр значений"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "mdinf_flow_accum": {
            "name": "Аккумуляция стока MD-infinity",
            "description": "Аккумуляция многонаправленного стока со взвешиванием по уклону (показатель 1.1). Балансирует реалистичность рассеяния и выделение сосредоточенного основного стока. Выход: ячейки, CA или SCA.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Флаг совместимости, принимаемый API."
              },
              "convergence_threshold": {
                "label": "Порог сходимости",
                "description": "Порог, выше которого сток не рассеивается"
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Показатель степени взвешивания уклона (по умолчанию `1.1`)."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Логарифмическое преобразование выхода"
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Одно из `\"cells\"`, `\"ca\"`, `\"sca\"` (по умолчанию)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "minimal_dispersion_flow_algorithm": {
            "name": "Алгоритм стока с минимальной дисперсией",
            "description": "Создаёт растры направления стока и аккумуляции стока MDFA по DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "clip": {
                "label": "Обрезка",
                "description": "Флаг совместимости, принимаемый API."
              },
              "debug_stats": {
                "label": "Отладочная статистика",
                "description": "Выводить однострочную диагностику MDFA (подсчёты и сырой максимум)"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, кодировать выход направления стока в стиле указателей Esri."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Если true, логарифмически преобразовывать значения аккумуляции."
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Одно из `\"cells\"`, `\"ca\"`, `\"sca\"` (по умолчанию)."
              },
              "path_corrected_direction_preference": {
                "label": "Предпочтение скорректированного направления пути",
                "description": "Параметр предпочтения `p` в `[0, 1]`; `1.0` — полностью без рассеивания."
              },
              "flow_dir_output": {
                "label": "Выход направления стока",
                "description": "Необязательный путь выхода для растра направления стока."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода для растра аккумуляции стока."
              }
            }
          },
          "num_inflowing_neighbours": {
            "name": "Число притекающих соседей",
            "description": "Подсчитывает число соседей D8 с входящим стоком для каждой ячейки DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "qin_flow_accumulation": {
            "name": "Аккумуляция стока Qin",
            "description": "Вычисляет аккумуляцию стока Qin MFD по DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Флаг совместимости, принимаемый API."
              },
              "convergence_threshold": {
                "label": "Порог сходимости",
                "description": "Порог, выше которого сток не рассеивается"
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Параметр показателя верхней границы (по умолчанию `10.0`)."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Логарифмическое преобразование выхода"
              },
              "max_slope": {
                "label": "Макс. уклон",
                "description": "Уклон верхней границы в градусах, используемый функцией динамического показателя (по умолчанию `45.0`)."
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Одно из `\"cells\"`, `\"ca\"`, `\"sca\"` (по умолчанию)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "quinn_flow_accumulation": {
            "name": "Аккумуляция стока Quinn",
            "description": "Вычисляет аккумуляцию стока Quinn MFD по DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "clip": {
                "label": "Обрезка",
                "description": "Флаг совместимости, принимаемый API."
              },
              "convergence_threshold": {
                "label": "Порог сходимости",
                "description": "Порог, выше которого сток не рассеивается"
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Параметр показателя степени (по умолчанию `1.1`)."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Логарифмическое преобразование выхода"
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Одно из `\"cells\"`, `\"ca\"`, `\"sca\"` (по умолчанию)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "rho8_flow_accum": {
            "name": "Аккумуляция стока Rho8",
            "description": "Вычисляет аккумуляцию стока Rho8 по DEM или растру указателя Rho8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "clip": {
                "label": "Обрезка",
                "description": "Максимум отображения обрезки (принимается для совместимости)"
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Логарифмическое преобразование выхода"
              },
              "out_type": {
                "label": "Тип выхода",
                "description": "Тип выхода: cells, ca или sca"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "rho8_pointer": {
            "name": "Указатель Rho8",
            "description": "Стохастическое однонаправленное направление стока со взвешиванием по уклону. Запускайте многократно для ансамблевого анализа, уменьшающего артефакты канализации D8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "trace_downslope_flowpaths": {
            "name": "Трассировка путей стока вниз по склону",
            "description": "Отмечает пути стока D8, начинающиеся от затравочных точек, до отсутствия стока или края сетки.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8."
              },
              "seed_points": {
                "label": "Начальные точки",
                "description": "Входной точечный вектор затравочных местоположений."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, интерпретировать указатели D8 в кодировке ESRI."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, фон равен `0`; иначе фон — NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "breach_depressions_least_cost": {
            "name": "Прорыв понижений по наименьшей стоимости",
            "description": "Прорывает понижения в DEM с помощью ограниченного поиска пути наименьшей стоимости.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "fill_deps": {
                "label": "Заполнять понижения",
                "description": "Если true, заполнять неразрешённые понижения после прорыва."
              },
              "flat_increment": {
                "label": "Приращение на плоских участках",
                "description": "Необязательное монотонное приращение декремента."
              },
              "max_cost": {
                "label": "Макс. стоимость",
                "description": "Максимальная допустимая стоимость прорыва."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска в ячейках."
              },
              "minimize_dist": {
                "label": "Минимизировать расстояние",
                "description": "Если true, взвешивать стоимости прорыва по расстоянию."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "breach_single_cell_pits": {
            "name": "Прорыв одноячеечных ям",
            "description": "Прорывает одноячеечные ямы в DEM, прорезая каналы шириной в одну ячейку.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат возвращается в памяти, когда это поддерживается."
              }
            }
          },
          "burn_streams": {
            "name": "Врезка водотоков",
            "description": "Врезает сеть водотоков в DEM, понижая высоты ячеек водотоков.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входной вектор водотоков."
              },
              "decrement_value": {
                "label": "Значение декремента",
                "description": "Декремент высоты, применяемый к ячейкам водотоков (по умолчанию 5.0)."
              },
              "gradient_distance": {
                "label": "Расстояние градиента",
                "description": "Расстояние градиента в ячейках сетки (0 = только плоский декремент; по умолчанию 5)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной DEM с врезкой."
              }
            }
          },
          "burn_streams_at_roads": {
            "name": "Врезка водотоков у дорог",
            "description": "Понижает высоты водотоков вблизи пересечений водотоков с дорогами для прорыва дорожных насыпей в DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "roads": {
                "label": "Дороги",
                "description": "Векторный слой дорог."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Векторный слой водотоков."
              },
              "method": {
                "label": "Метод",
                "description": "Метод"
              },
              "road_width": {
                "label": "Ширина дороги",
                "description": "Максимальная ширина насыпи в единицах карты для задания участка врезки вдоль водотока."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "depth_in_sink": {
            "name": "Глубина в стоке",
            "description": "Измеряет глубину, на которую каждая ячейка DEM лежит ниже поверхности с заполненными понижениями.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, назначать `0.0` ячейкам вне стоков; иначе назначать NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "fill_burn": {
            "name": "Заполнение и врезка",
            "description": "Выполняет гидрологическое принуждение DEM путём врезки водотоков с последующим заполнением понижений.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входной векторный слой водотоков."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "fill_depressions": {
            "name": "Заполнение понижений",
            "description": "Заполняет понижения в DEM по стратегии priority-flood с разрешением плоских участков Garbrecht-Martz по умолчанию и необязательным устаревшим разрешением плоских участков по естественным путям.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "fix_flats": {
                "label": "Исправлять плоские участки",
                "description": "Если true, накладывать небольшой градиент на заполненные плоские участки."
              },
              "flat_increment": {
                "label": "Приращение на плоских участках",
                "description": "Приращение на плоских участках (по умолчанию `0.0001`)."
              },
              "flat_resolution": {
                "label": "Разрешение плоских участков",
                "description": "Режим разрешения плоских участков. Одно из `\"garbrecht_martz\"` или `\"natural\"`."
              },
              "max_depth": {
                "label": "Макс. глубина",
                "description": "Максимальная допустимая глубина заполнения."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "fill_depressions_planchon_and_darboux": {
            "name": "Заполнение понижений (Planchon и Darboux)",
            "description": "Заполняет понижения в DEM с интерфейсом, совместимым с Planchon-Darboux.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "fix_flats": {
                "label": "Исправлять плоские участки",
                "description": "Если true, накладывать небольшой градиент на заполненные плоские участки."
              },
              "flat_increment": {
                "label": "Приращение на плоских участках",
                "description": "Приращение на плоских участках (по умолчанию `0.0001`)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "fill_depressions_wang_and_liu": {
            "name": "Заполнение понижений (Wang и Liu)",
            "description": "Заполняет понижения в DEM с интерфейсом, совместимым с Wang-Liu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "fix_flats": {
                "label": "Исправлять плоские участки",
                "description": "Если true, накладывать небольшой градиент на заполненные плоские участки."
              },
              "flat_increment": {
                "label": "Приращение на плоских участках",
                "description": "Приращение на плоских участках (по умолчанию `0.0001`)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "fill_pits": {
            "name": "Заполнение ям",
            "description": "Заполняет одноячеечные ямы в DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат возвращается в памяти, когда это поддерживается."
              }
            }
          },
          "flatten_lakes": {
            "name": "Выравнивание озёр",
            "description": "Выравнивает высоты озёр по минимальной высоте периметра каждого полигона.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "lakes": {
                "label": "Озёра",
                "description": "Входной полигональный вектор объектов озёр."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "impoundment_size_index": {
            "name": "Индекс размера водохранилища",
            "description": "Вычисляет метрики водохранилища: среднюю/максимальную глубину, объём, площадь и высоту плотины.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "max_dam_length": {
                "label": "Макс. длина плотины",
                "description": "Максимальная длина плотины в единицах карты."
              },
              "output_area": {
                "label": "Выход площади",
                "description": "Включать растр площади затопления в выходной кортеж."
              },
              "output_height": {
                "label": "Выход высоты",
                "description": "Включать растр высоты плотины в выходной кортеж."
              },
              "output_max": {
                "label": "Выход максимума",
                "description": "Включать растр максимальной глубины затопления в выходной кортеж."
              },
              "output_mean": {
                "label": "Выход среднего",
                "description": "Включать растр средней глубины затопления в выходной кортеж."
              },
              "output_volume": {
                "label": "Выход объёма",
                "description": "Включать растр объёма затопления в выходной кортеж."
              },
              "out_area": {
                "label": "Выход площади",
                "description": "Необязательный путь выхода для растра площади"
              },
              "out_dam_height": {
                "label": "Выход высоты плотины",
                "description": "Необязательный путь выхода для растра высоты плотины"
              },
              "out_max": {
                "label": "Выход максимума",
                "description": "Необязательный путь выхода для растра максимальной глубины"
              },
              "out_mean": {
                "label": "Выход среднего",
                "description": "Необязательный путь выхода для растра средней глубины"
              },
              "out_volume": {
                "label": "Выход объёма",
                "description": "Необязательный путь выхода для растра объёма"
              }
            }
          },
          "insert_dams": {
            "name": "Вставка плотин",
            "description": "Добавляет локальные насыпи плотин в заданных точках с выбором гребня на основе профиля.",
            "params": {
              "dam_points": {
                "label": "Точки плотин",
                "description": "Входной точечный вектор местоположений плотин."
              },
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "dam_length": {
                "label": "Длина плотины",
                "description": "Максимальная длина плотины в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "raise_walls": {
            "name": "Поднятие стенок",
            "description": "Поднимает высоты DEM вдоль векторов стен и при необходимости прорывает выбранные пересечения.",
            "params": {
              "breach_lines": {
                "label": "Линии прорыва",
                "description": "Необязательный вектор, задающий места прорыва."
              },
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "walls": {
                "label": "Стенки",
                "description": "Входной линейный или полигональный вектор, задающий сегменты стенок."
              },
              "wall_height": {
                "label": "Высота стенки",
                "description": "Приращение высоты, применяемое к ячейкам стенок."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "sink": {
            "name": "Сток",
            "description": "Определяет ячейки, принадлежащие топографическим понижениям в DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, назначать `0.0` ячейкам вне стоков; иначе назначать NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "stochastic_depression_analysis": {
            "name": "Стохастический анализ понижений",
            "description": "Выполняет возмущения DEM методом Монте-Карло и оценивает вероятность принадлежности к понижению.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число итераций Монте-Карло."
              },
              "range": {
                "label": "Размах",
                "description": "Диапазон автокорреляции ошибки в единицах карты."
              },
              "rmse": {
                "label": "RMSE",
                "description": "RMSE высоты, используемая для гауссова возмущения."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "topological_breach_burn": {
            "name": "Топологический прорыв и врезка",
            "description": "Врезает водотоки в DEM, подготавливает поверхность и возвращает растры водотоков, DEM, указателя и аккумуляции.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входной вектор сети водотоков."
              },
              "snap_distance": {
                "label": "Расстояние привязки",
                "description": "Необязательное расстояние привязки водотоков, используемое при масштабировании глубины врезки."
              },
              "out_dem": {
                "label": "Выходная DEM",
                "description": "Необязательный путь выхода для врезанной/подготовленной DEM."
              },
              "out_dir": {
                "label": "Выход направления",
                "description": "Необязательный путь выхода для растра указателя D8."
              },
              "out_fa": {
                "label": "Выход аккумуляции стока",
                "description": "Необязательный путь выхода для растра аккумуляции стока."
              },
              "out_streams": {
                "label": "Выход водотоков",
                "description": "Необязательный путь выхода для растеризованных водотоков."
              }
            }
          },
          "upslope_depression_storage": {
            "name": "Ёмкость понижений вверх по склону",
            "description": "Картографирует среднюю глубину накопления в понижениях вверх по склону путём маршрутизации глубины понижений по подготовленной DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "basins": {
            "name": "Бассейны",
            "description": "Выделяет все бассейны стока D8, дренирующиеся к краям области допустимых данных.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, интерпретировать значения указателей в кодировке ESRI D8."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "flood_order": {
            "name": "Порядок затопления",
            "description": "Выводит последовательный порядок priority-flood для каждой ячейки DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "hillslopes": {
            "name": "Склоны",
            "description": "Определяет участки склонов, дренирующиеся к каждому звену водотока, разделяя области левого и правого берега.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя D8."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Растр сети водотоков, где ячейки водотоков имеют значение > 0 и не NoData."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Флаг кодировки указателей ESRI."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "isobasins": {
            "name": "Изобассейны",
            "description": "Делит ландшафт на водосборы примерно равного размера (изобассейны) на основе целевого порога площади.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной гидрологически подготовленный растр DEM."
              },
              "target_size": {
                "label": "Целевой размер",
                "description": "Целевая площадь изобассейна в числе ячеек сетки (положительное целое или дробное)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "jenson_snap_pour_points": {
            "name": "Привязка точек стока (Jenson)",
            "description": "Привязывает каждую точку стока к ближайшей ячейке водотока в пределах расстояния поиска с сохранением всех входных атрибутов.",
            "params": {
              "pour_pts": {
                "label": "Точки стока",
                "description": "Входной векторный файл точек стока (точечные или мультиточечные геометрии)."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входной растр сети водотоков, где ячейки водотоков имеют значение > 0 и не NoData."
              },
              "snap_dist": {
                "label": "Расстояние привязки",
                "description": "Максимальный радиус поиска в единицах карты. По умолчанию одна ширина ячейки, если не указан или равен нулю."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выхода для векторного файла привязанных точек стока (обязателен; по умолчанию `snapped_pour_points.geojson` в рабочем каталоге, если не передан обёртке)."
              }
            }
          },
          "longest_flowpath": {
            "name": "Самый длинный путь стока",
            "description": "Выделяет линии наибольшего пути стока для каждого бассейна в растре бассейнов.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM"
              },
              "basins": {
                "label": "Бассейны",
                "description": "Входной растр бассейнов"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора"
              }
            }
          },
          "max_branch_length": {
            "name": "Максимальная длина ветви",
            "description": "Вычисляет максимальную длину ветвления между соседними путями стока D8; полезно для выделения водоразделов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Применять натуральный логарифм к положительным выходам."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "snap_pour_points": {
            "name": "Привязка точек стока",
            "description": "Привязывает точки стока к ячейке с наибольшей аккумуляцией стока в пределах расстояния поиска.",
            "params": {
              "flow_accum": {
                "label": "Аккумуляция стока",
                "description": "Входной растр аккумуляции стока."
              },
              "pour_pts": {
                "label": "Точки стока",
                "description": "Входной векторный файл точек стока (точечные или мультиточечные геометрии)."
              },
              "snap_dist": {
                "label": "Расстояние привязки",
                "description": "Максимальный радиус поиска в единицах карты. По умолчанию одна ширина ячейки, если не указан или равен нулю."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выхода для векторного файла привязанных точек стока (обязателен; по умолчанию `snapped_pour_points.geojson` в рабочем каталоге, если не передан обёртке)."
              }
            }
          },
          "subbasins": {
            "name": "Суббассейны",
            "description": "Определяет площадь водосбора каждого звена водотока (подбассейны) в сети водотоков D8.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя D8, созданный `d8_pointer`."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Растр сети водотоков, где ячейки водотоков имеют значение > 0 и не NoData."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, интерпретировать значения указателей в кодировке ESRI. По умолчанию `False`."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "unnest_basins": {
            "name": "Развёртывание бассейнов",
            "description": "Создаёт отдельный растр бассейнов для каждого уровня вложенности точек стока по сетке указателя D8.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8"
              },
              "pour_points": {
                "label": "Точки стока",
                "description": "Входной вектор точек стока"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Интерпретировать указатели в стиле ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный базовый путь выхода для нумерованных растров"
              }
            }
          },
          "watershed": {
            "name": "Водосбор",
            "description": "Выделяет водосборы по указателю D8 и векторным точкам стока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8."
              },
              "pour_pts": {
                "label": "Точки стока",
                "description": "Входной векторный файл точек стока (точечные или мультиточечные геометрии)."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, интерпретировать значения указателей в кодировке ESRI D8."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "watershed_from_raster_pour_points": {
            "name": "Водосбор по растровым точкам стока",
            "description": "Выделяет водосборы по указателю D8 и растру идентификаторов выходов (точек стока).",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8."
              },
              "pour_points": {
                "label": "Точки стока",
                "description": "Растр точек стока; ненулевые значения ячеек не NoData становятся ID устьев."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Если true, интерпретировать значения указателей в кодировке ESRI D8."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "depth_to_water": {
            "name": "Глубина до воды",
            "description": "Вычисляет картографическую глубину до воды с помощью аккумуляции наименьшей стоимости от объектов-источников водотоков/озёр.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "stream_raster": {
                "label": "Растр водотоков",
                "description": "Растр водотоков"
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "distance_to_outlet": {
            "name": "Расстояние до устья",
            "description": "Вычисляет расстояние вниз по течению до выхода для каждой ячейки водотока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "downslope_distance_to_stream": {
            "name": "Расстояние до водотока вниз по склону",
            "description": "Вычисляет расстояние вниз по склону от каждой ячейки DEM до ближайшего водотока вдоль путей стока.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM без понижений."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входной растр водотоков; ячейки водотоков — значения `> 0` и не NoData."
              },
              "dinf": {
                "label": "D-infinity",
                "description": "Если true, использовать маршрутизацию D-infinity; иначе используется маршрутизация D8."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "downslope_index": {
            "name": "Индекс нисходящего склона",
            "description": "Вычисляет индекс вниз по склону Hjerdt et al. (2004) с использованием направлений стока D8.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output_type": {
                "label": "Тип выхода",
                "description": "Выходная метрика: tangent, degrees, radians, distance (по умолчанию tangent)."
              },
              "vertical_drop": {
                "label": "Перепад высот",
                "description": "Порог вертикального перепада d для обхода вниз по склону."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "edge_contamination": {
            "name": "Краевое загрязнение",
            "description": "Определяет ячейки DEM, площадь вверх по склону которых выходит за край DEM для распространённых схем маршрутизации стока.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM без понижений."
              },
              "flow_type": {
                "label": "Тип стока",
                "description": "Метод маршрутизации: одно из `\"d8\"`, `\"mfd\"`/`\"fd8\"` или `\"dinf\"`."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования. Значения `<= 0` считаются `1.0`."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "elev_relative_to_watershed_min_max": {
            "name": "Высота относительно мин./макс. водосбора",
            "description": "Вычисляет относительное высотное положение ячейки DEM внутри каждого водосбора в процентах.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "watersheds": {
                "label": "Водосборы",
                "description": "Путь растра ID водосборов или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "elevation_above_stream": {
            "name": "Высота над водотоком",
            "description": "Вычисляет превышение над ближайшим водотоком, измеренное вдоль путей стока вниз по склону.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM без понижений."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входной растр водотоков; ячейки водотоков — значения `> 0` и не NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "elevation_above_stream_euclidean": {
            "name": "Высота над водотоком (евклидова)",
            "description": "Вычисляет превышение над ближайшим водотоком по прямолинейной (евклидовой) близости.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входной растр водотоков; ячейки водотоков — значения `> 0` и не NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "find_noflow_cells": {
            "name": "Поиск ячеек без стока",
            "description": "Находит ячейки DEM, не имеющие более низкого соседа D8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "interior_only": {
                "label": "Только внутренние",
                "description": "Если true, помечает только истинные внутренние ячейки без стока (исключая устья на границе растра и рядом с NoData)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "find_parallel_flow": {
            "name": "Поиск параллельного стока",
            "description": "Определяет ячейки водотоков с параллельными направлениями стока D8.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Входной растр указателя D8."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "hydrologic_connectivity": {
            "name": "Гидрологическая связность",
            "description": "Вычисляет индексы связности DUL и UDSA по DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "convergence_threshold": {
                "label": "Порог сходимости",
                "description": "Необязательный порог инициации водотока в аккумулирующих ячейках."
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Параметр совместимости для управления рассеиванием."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования."
              },
              "output1": {
                "label": "Выход 1",
                "description": "Необязательный путь выхода для растра DUL."
              },
              "output2": {
                "label": "Выход 2",
                "description": "Необязательный путь выхода для растра UDSA."
              }
            }
          },
          "relative_stream_power_index": {
            "name": "Индекс относительной мощности потока",
            "description": "Вычисляет индекс относительной мощности потока по удельной площади водосбора и уклону.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Путь растра удельной площади водосбора или типизированный растровый объект."
              },
              "slope": {
                "label": "Уклон",
                "description": "Растр уклона в градусах."
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Показатель степени удельной площади водосбора p (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "sediment_transport_index": {
            "name": "Индекс транспорта наносов",
            "description": "Вычисляет индекс транспорта наносов (фактор LS) по удельной площади водосбора и уклону.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Путь растра удельной площади водосбора или типизированный растровый объект."
              },
              "slope": {
                "label": "Уклон",
                "description": "Растр уклона в градусах."
              },
              "sca_exponent": {
                "label": "Показатель степени SCA",
                "description": "Показатель степени удельной площади водосбора n (по умолчанию 0.4)."
              },
              "slope_exponent": {
                "label": "Показатель степени уклона",
                "description": "Показатель степени уклона m (по умолчанию 1.3)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "wetness_index": {
            "name": "Индекс влажности",
            "description": "Вычисляет топографический индекс влажности ln(SCA / tan(slope)).",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Путь растра удельной площади водосбора или типизированный растровый объект."
              },
              "slope": {
                "label": "Уклон",
                "description": "Растр уклона в градусах."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "extract_streams": {
            "name": "Извлечение водотоков",
            "description": "Извлекает водотоки на основе порога аккумуляции стока.",
            "params": {
              "flow_accumulation": {
                "label": "Аккумуляция стока",
                "description": "Входной растр аккумуляции стока."
              },
              "threshold": {
                "label": "Порог",
                "description": "Минимальное значение аккумуляции, требуемое для принадлежности к руслу водотока."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, фон вне водотоков равен 0 вместо NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра водотоков."
              }
            }
          },
          "extract_valleys": {
            "name": "Извлечение долин",
            "description": "Извлекает долины из DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Размер фильтра"
              },
              "line_thin": {
                "label": "Утончение линий",
                "description": "Утончение линий"
              },
              "variant": {
                "label": "Вариант",
                "description": "Вариант"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "prune_vector_streams": {
            "name": "Обрезка векторных водотоков",
            "description": "Прореживает векторную сеть водотоков на основе магнитуды Шрива.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM для определения направления стока"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Входная векторная сеть водотоков"
              },
              "max_ridge_cutting_height": {
                "label": "Макс. высота прорезания гребней",
                "description": "Максимальный допустимый подъём высоты при соединении нижележащих звеньев"
              },
              "snap_distance": {
                "label": "Расстояние привязки",
                "description": "Максимальное расстояние привязки для связности концов"
              },
              "threshold": {
                "label": "Порог",
                "description": "Минимальная магнитуда Шрива для сохранения"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора"
              }
            }
          },
          "raster_streams_to_vector": {
            "name": "Растровые водотоки в вектор",
            "description": "Преобразует растровую сеть водотоков в векторную.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams_raster": {
                "label": "Растр водотоков",
                "description": "Растр водотоков"
              },
              "all_vertices": {
                "label": "Все вершины",
                "description": "Все вершины"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "rasterize_streams": {
            "name": "Растеризация водотоков",
            "description": "Растеризует векторную сеть водотоков.",
            "params": {
              "input_vector": {
                "label": "Входной вектор",
                "description": "Входной вектор"
              },
              "reference_raster": {
                "label": "Опорный растр",
                "description": "Опорный растр"
              },
              "use_feature_id": {
                "label": "Использовать ID объекта",
                "description": "Использовать ID объекта"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "remove_short_streams": {
            "name": "Удаление коротких водотоков",
            "description": "Удаляет звенья водотоков короче минимальной длины.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "min_length": {
                "label": "Мин. длина",
                "description": "Мин. длина"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "repair_stream_vector_topology": {
            "name": "Исправление топологии векторных водотоков",
            "description": "Исправляет топологию векторной сети водотоков.",
            "params": {
              "input_vector": {
                "label": "Входной вектор",
                "description": "Входной вектор"
              },
              "snap": {
                "label": "Привязка",
                "description": "Привязка"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "river_centerlines": {
            "name": "Осевые линии рек",
            "description": "Извлекает осевые линии рек из растра воды с использованием медиальной оси.",
            "params": {
              "raster": {
                "label": "Растр",
                "description": "Бинарный растр вода/не вода"
              },
              "min_length": {
                "label": "Мин. длина",
                "description": "Минимальная длина осевой линии в ячейках растра"
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус поиска (в ячейках) для соединения близлежащих концов"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора осевых линий"
              }
            }
          },
          "farthest_channel_head": {
            "name": "Самый дальний исток",
            "description": "Вычисляет расстояние до наиболее удалённого истока русла.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "find_main_stem": {
            "name": "Поиск главного русла",
            "description": "Определяет главное русло сети водотоков.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "length_of_upstream_channels": {
            "name": "Длина вышележащих русел",
            "description": "Вычисляет общую длину русел выше по течению.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "long_profile": {
            "name": "Продольный профиль",
            "description": "Создаёт продольный профиль водотока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams_raster": {
                "label": "Растр водотоков",
                "description": "Растр водотоков"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "long_profile_from_points": {
            "name": "Продольный профиль из точек",
            "description": "Создаёт продольный профиль по векторным точкам.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "points": {
                "label": "Точки",
                "description": "Точки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "hack_stream_order": {
            "name": "Порядок водотоков по Хаку",
            "description": "Присваивает ячейкам водотоков порядок по Хаку.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Растр водотоков"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Использовать указатель в стиле ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Назначать фону ноль"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "horton_ratios": {
            "name": "Коэффициенты Хортона",
            "description": "Вычисляет коэффициенты Хортона: бифуркации, длины, площади водосбора и уклона.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "streams_raster": {
                "label": "Растр водотоков",
                "description": "Бинарный растр водотоков (положительное = водоток)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного текстового отчёта (необязательно)."
              }
            }
          },
          "horton_stream_order": {
            "name": "Порядок водотоков по Хортону",
            "description": "Присваивает ячейкам водотоков порядок по Хортону.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Растр водотоков"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Использовать указатель в стиле ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Назначать фону ноль"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "shreve_stream_magnitude": {
            "name": "Магнитуда водотоков по Шриву",
            "description": "Вычисляет магнитуду водотоков по Шриву.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Растр водотоков"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Использовать указатель в стиле ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Назначать фону ноль"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "strahler_order_basins": {
            "name": "Бассейны по порядку Стралера",
            "description": "Выделяет бассейны водосборов, помеченные порядком Хортона-Стралера дренирующего их звена водотока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя D8."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Растр сети водотоков, где ячейки водотоков имеют значение > 0 и не NoData."
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Флаг кодировки указателей ESRI."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "strahler_stream_order": {
            "name": "Порядок водотоков по Стралеру",
            "description": "Присваивает ячейкам водотоков порядок по Стралеру.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Растр водотоков (положительные значения = ячейки водотоков)"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Использовать значения указателей в стиле ESRI (по умолчанию: Whitebox)"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Назначать фону ноль вместо NoData"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "stream_link_class": {
            "name": "Класс звена водотока",
            "description": "Классифицирует звенья водотоков как внутренние, внешние или истоковые.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "stream_link_identifier": {
            "name": "Идентификатор звена водотока",
            "description": "Присваивает уникальный идентификатор каждому звену водотока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "stream_link_length": {
            "name": "Длина звена водотока",
            "description": "Вычисляет общую длину каждого звена водотока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "linkid": {
                "label": "ID звена",
                "description": "ID звена"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "stream_link_slope": {
            "name": "Уклон звена водотока",
            "description": "Вычисляет средний уклон каждого звена водотока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "linkid": {
                "label": "ID звена",
                "description": "ID звена"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "stream_slope_continuous": {
            "name": "Непрерывный уклон водотока",
            "description": "Вычисляет значение уклона для каждой ячейки водотока.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "topological_stream_order": {
            "name": "Топологический порядок водотоков",
            "description": "Присваивает топологический порядок водотоков на основе числа звеньев.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "tributary_identifier": {
            "name": "Идентификатор притока",
            "description": "Присваивает уникальный идентификатор каждому притоку.",
            "params": {
              "d8_pntr": {
                "label": "Указатель D8",
                "description": "Растр указателя стока D8"
              },
              "streams": {
                "label": "Водотоки",
                "description": "Водотоки"
              },
              "esri_pntr": {
                "label": "Указатель ESRI",
                "description": "Указатель ESRI"
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Нулевой фон"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "vector_stream_network_analysis": {
            "name": "Анализ векторной сети водотоков",
            "description": "Комплексный анализ векторной сети водотоков.",
            "params": {
              "streams": {
                "label": "Водотоки",
                "description": "Входной векторный слой сети водотоков."
              },
              "dem": {
                "label": "DEM",
                "description": "Входной растр высот (DEM)."
              },
              "max_ridge_cutting_height": {
                "label": "Макс. высота прорезания гребней",
                "description": "Максимальная допустимая высота прорезания гребней."
              },
              "snap_distance": {
                "label": "Расстояние привязки",
                "description": "Допуск расстояния привязки для очистки сети."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора."
              }
            }
          },
          "add_point_coordinates_to_table": {
            "name": "Добавление координат точек в таблицу",
            "description": "Копирует точечный слой и добавляет поля атрибутов XCOORD и YCOORD.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного точечного вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "clean_vector": {
            "name": "Очистка вектора",
            "description": "Удаляет пустые и недопустимые векторные геометрии (например, линии/полигоны недостаточного размера), сохраняя допустимые объекты и атрибуты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "csv_points_to_vector": {
            "name": "Точки CSV в вектор",
            "description": "Импортирует записи точек из CSV-файла в точечный векторный слой.",
            "params": {
              "input_file": {
                "label": "Входной файл",
                "description": "Путь входного файла CSV."
              },
              "x_field_num": {
                "label": "Номер поля X",
                "description": "Индекс поля координаты X, начиная с нуля. По умолчанию 0."
              },
              "y_field_num": {
                "label": "Номер поля Y",
                "description": "Индекс поля координаты Y, начиная с нуля. По умолчанию 1."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Необязательный код EPSG выходной CRS."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "export_table_to_csv": {
            "name": "Экспорт таблицы в CSV",
            "description": "Экспортирует таблицу атрибутов вектора в CSV-файл.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "output_csv_file": {
                "label": "Выходной файл CSV",
                "description": "Путь выходного файла CSV."
              },
              "headers": {
                "label": "Заголовки",
                "description": "Включать строку заголовков в выход. По умолчанию true."
              }
            }
          },
          "join_tables": {
            "name": "Соединение таблиц",
            "description": "Присоединяет атрибуты из внешней векторной таблицы к основной векторной таблице по ключевым полям.",
            "params": {
              "primary_vector": {
                "label": "Основной вектор",
                "description": "Путь основного вектора, получающего присоединённые поля."
              },
              "primary_key_field": {
                "label": "Поле первичного ключа",
                "description": "Поле первичного ключа в основном векторе."
              },
              "foreign_vector": {
                "label": "Внешний вектор",
                "description": "Путь внешнего вектора с исходными полями."
              },
              "foreign_key_field": {
                "label": "Поле внешнего ключа",
                "description": "Поле внешнего ключа во внешнем векторе."
              },
              "import_field": {
                "label": "Импортируемое поле",
                "description": "Необязательное одиночное импортируемое поле; по умолчанию все поля, кроме ключей и FID."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. По умолчанию производный путь GeoJSON рядом с основным входом."
              }
            }
          },
          "merge_table_with_csv": {
            "name": "Слияние таблицы с CSV",
            "description": "Объединяет атрибуты из CSV-таблицы с таблицей атрибутов вектора по ключевым полям.",
            "params": {
              "primary_vector": {
                "label": "Основной вектор",
                "description": "Путь основного вектора, получающего объединённые поля."
              },
              "primary_key_field": {
                "label": "Поле первичного ключа",
                "description": "Поле первичного ключа в основном векторе."
              },
              "foreign_csv_filename": {
                "label": "Имя файла внешнего CSV",
                "description": "Файл CSV с внешней таблицей."
              },
              "foreign_key_field": {
                "label": "Поле внешнего ключа",
                "description": "Имя поля внешнего ключа в заголовке CSV."
              },
              "import_field": {
                "label": "Импортируемое поле",
                "description": "Необязательное одиночное импортируемое поле CSV; по умолчанию все поля, кроме ключевых."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. По умолчанию производный путь GeoJSON рядом с основным входом."
              }
            }
          },
          "merge_vectors": {
            "name": "Слияние векторов",
            "description": "Объединяет два или более входных вектора одного типа геометрии в один выходной вектор.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив путей входных векторов (требуется не менее двух)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "reinitialize_attribute_table": {
            "name": "Переинициализация таблицы атрибутов",
            "description": "Создаёт копию векторного слоя только с заново сгенерированным атрибутом FID.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. Если не указан, перезаписывает входной путь."
              }
            }
          },
          "vector_summary_statistics": {
            "name": "Сводная статистика вектора",
            "description": "Вычисляет количество, сумму, среднее, минимум, максимум и стандартное отклонение по категориальным группам и экспортирует в CSV.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Имя поля группировки."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Имя числового поля значений."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "fix_dangling_arcs": {
            "name": "Исправление висячих дуг",
            "description": "Исправляет недотянутые и перетянутые висячие дуги в линейной сети путём привязки конечных точек линий в пределах порогового расстояния.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полилинейного вектора."
              },
              "snap": {
                "label": "Привязка",
                "description": "Порог расстояния привязки в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "lines_to_polygons": {
            "name": "Линии в полигоны",
            "description": "Преобразует объекты полилиний в полигональные объекты, рассматривая первую часть как внешнее кольцо, а последующие — как отверстия.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полилинейного вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "multipart_to_singlepart": {
            "name": "Составные в простые",
            "description": "Преобразует вектор, содержащий составные объекты, в вектор только с однокомпонентными объектами.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора (полилиния, полигон или мультиточка)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. По умолчанию GeoJSON с меткой времени рядом с входом."
              },
              "exclude_holes": {
                "label": "Исключать отверстия",
                "description": "Если true, отверстия полигонов остаются прикреплёнными к охватывающему внешнему кольцу (по умолчанию: false)."
              }
            }
          },
          "polygons_to_lines": {
            "name": "Полигоны в линии",
            "description": "Преобразует полигональные и мультиполигональные объекты в линии, прослеживающие их границы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "remove_polygon_holes": {
            "name": "Удаление отверстий полигонов",
            "description": "Удаляет внутренние кольца из полигональных объектов с сохранением атрибутов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "singlepart_to_multipart": {
            "name": "Простые в составные",
            "description": "Объединяет однокомпонентные объекты в составные, группируя по необязательному категориальному полю.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. По умолчанию GeoJSON с меткой времени рядом с входом."
              },
              "field": {
                "label": "Поле",
                "description": "Необязательное имя поля атрибута для группировки объектов. Если не указано, все объекты сливаются в одну геометрию."
              }
            }
          },
          "topology_rule_autofix": {
            "name": "Автоисправление правил топологии",
            "description": "Автоматически применяет безопасные проверяемые исправления нарушений топологии, обнаруженных topology_rule_validate: привязку конечных точек между объектами, привязку/проецирование висячих конечных точек и проецирование точек на линии. Для polygon_must_not_have_gaps автоматического исправления нет, и оно отображается как ноль изменений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "rule_set": {
                "label": "Набор правил",
                "description": "Конфигурация правил в виде массива/объекта JSON, строки CSV или пути к файлу. Правила с автоматическими исправлениями: line_endpoints_must_snap_within_tolerance, line_must_not_have_dangles, point_must_be_covered_by_line. polygon_must_not_have_gaps принимается, но никогда не вносит изменений."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Допуск для операций привязки в единицах координат. По умолчанию 0.01."
              },
              "dry_run": {
                "label": "Пробный запуск",
                "description": "Если true (ПО УМОЛЧАНИЮ), только предпросмотр: отчёт об изменениях выдаётся, но выход не записывается. Передайте false, чтобы применить исправления."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора для исправленных объектов. Если не указан, создаётся рядом с входом."
              },
              "change_report": {
                "label": "Отчёт об изменениях",
                "description": "Необязательный путь отчёта аудита изменений JSON."
              }
            }
          },
          "topology_rule_validate": {
            "name": "Проверка правил топологии",
            "description": "Проверяет векторную топологию по набору правил (самопересечение, перекрытие, разрывы, висячие концы, покрытие точками, привязка конечных точек) и выдаёт нарушения на уровне объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "rule_set": {
                "label": "Набор правил",
                "description": "Конфигурация правил в виде массива/объекта JSON, строки CSV или пути к файлу. По умолчанию все 6 правил MVP. Поддерживаются: 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": "Допуск привязки",
                "description": "Допуск для правила line_endpoints_must_snap_within_tolerance в единицах координат. По умолчанию 1.0."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора для нарушений. Если не указан, создаётся рядом с входом."
              },
              "report": {
                "label": "Отчёт",
                "description": "Необязательный путь сводного отчёта JSON."
              }
            }
          },
          "topology_validation_report": {
            "name": "Отчёт о проверке топологии",
            "description": "Проверяет векторный слой на проблемы топологии и записывает отчёт в CSV по каждому объекту.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV."
              }
            }
          },
          "convert_nodata_to_zero": {
            "name": "Преобразование NoData в ноль",
            "description": "Заменяет ячейки NoData растра на 0, оставляя допустимые ячейки без изменений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "modify_nodata_value": {
            "name": "Изменение значения NoData",
            "description": "Изменяет значение NoData растра и перезаписывает существующие ячейки NoData новым значением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "new_value": {
                "label": "Новое значение",
                "description": "Новое значение NoData. По умолчанию -32768.0."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "new_raster_from_base_raster": {
            "name": "Новый растр по базовому растру",
            "description": "Создаёт новый растр с охватом, размерами и системой координат базового растра.",
            "params": {
              "base": {
                "label": "База",
                "description": "Путь базового растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, возвращает растр в памяти."
              },
              "out_val": {
                "label": "Выходное значение",
                "description": "Необязательное значение заполнения. По умолчанию NoData растра."
              },
              "data_type": {
                "label": "Тип данных",
                "description": "Необязательный тип данных: 'float', 'double' или 'integer'."
              }
            }
          },
          "new_raster_from_base_vector": {
            "name": "Новый растр по базовому вектору",
            "description": "Создаёт новый растр по охвату базового вектора и размеру ячейки, заполненный необязательным значением.",
            "params": {
              "base": {
                "label": "База",
                "description": "Путь базового вектора."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходной сетки (> 0)."
              },
              "out_val": {
                "label": "Выходное значение",
                "description": "Необязательное значение заполнения. По умолчанию NoData (-32768)."
              },
              "data_type": {
                "label": "Тип данных",
                "description": "Необязательное ключевое слово типа данных выхода: integer, float или double."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "raster_to_vector_lines": {
            "name": "Растр в векторные линии",
            "description": "Преобразует ненулевые линейные ячейки растра со значениями, отличными от NoData, в векторные объекты полилиний.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра (одноканальный)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "raster_to_vector_points": {
            "name": "Растр в векторные точки",
            "description": "Преобразует ненулевые ячейки растра со значениями, отличными от NoData, в точечные объекты, расположенные в центрах ячеек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "raster_to_vector_polygons": {
            "name": "Растр в векторные полигоны",
            "description": "Преобразует ненулевые области растра со значениями, отличными от NoData, в векторные полигональные объекты с атрибутами FID и VALUE.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра (одноканальный)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора. Если не указан, путь GeoJSON создаётся рядом с входом."
              }
            }
          },
          "remove_raster_polygon_holes": {
            "name": "Удаление отверстий растровых полигонов",
            "description": "Удаляет внутренние фоновые отверстия (области 0 или NoData, окружённые передним планом) из растровых полигонов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра (одноканальный)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Необязательный максимальный размер удаляемого отверстия в ячейках. 0 означает все замкнутые отверстия."
              },
              "use_diagonals": {
                "label": "Использовать диагонали",
                "description": "Использовать 8-соседнюю связность для группировки и связности краёв."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "set_nodata_value": {
            "name": "Установка значения NoData",
            "description": "Устанавливает значение NoData растра и сопоставляет существующие ячейки NoData с заданным фоновым значением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "back_value": {
                "label": "Фоновое значение",
                "description": "Фоновое значение, назначаемое как NoData. По умолчанию 0.0."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, возвращает растр в памяти."
              }
            }
          },
          "vector_lines_to_raster": {
            "name": "Векторные линии в растр",
            "description": "Растеризует линейные и полигональные граничные геометрии в растровую сетку.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора (линии или полигоны)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, выход остаётся в памяти."
              },
              "field": {
                "label": "Поле",
                "description": "Необязательное имя числового поля для врезки. По умолчанию FID."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, инициализировать фон выхода нулём вместо NoData."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base не указан. Если не указан и base не задан, автоматический размер ячейки = макс. экстент / 500."
              },
              "base": {
                "label": "База",
                "description": "Необязательный путь базового растра, определяющего выходную сетку и экстент."
              }
            }
          },
          "vector_points_to_raster": {
            "name": "Векторные точки в растр",
            "description": "Растеризует точечные или мультиточечные векторы в сетку с использованием выбранной операции присваивания.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного вектора (точки/мультиточки)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат в памяти."
              },
              "field": {
                "label": "Поле",
                "description": "Необязательное числовое поле для значений растра. По умолчанию FID."
              },
              "assign": {
                "label": "Назначить",
                "description": "Операция назначения: last, first, min, max, sum, num, mean."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, инициализирует фон нулём; иначе NoData."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки. Обязателен, когда base не указан."
              },
              "base": {
                "label": "База",
                "description": "Необязательный путь базового растра для определения экстента/сетки."
              }
            }
          },
          "vector_polygons_to_raster": {
            "name": "Векторные полигоны в растр",
            "description": "Растеризует полигональные векторы в сетку с поддержкой значений записи, задаваемых атрибутами.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального вектора."
              },
              "field": {
                "label": "Поле",
                "description": "Необязательное имя числового поля для значений врезки (по умолчанию FID)."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, инициализирует фон выхода нулём вместо NoData."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base не указан."
              },
              "base": {
                "label": "База",
                "description": "Необязательный путь базового растра, определяющего выходную сетку и экстент."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, выход остаётся в памяти."
              }
            }
          },
          "local_morans_i_lisa_raster": {
            "name": "Локальный индекс Морана I (LISA) для растра",
            "description": "Выполняет кластерный анализ LISA по точкам и выводит категориальный растр (HH/LL/HL/LH/NS). Обеспечивает интеграцию на основе растров.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой с точками наблюдений."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле атрибута для анализа."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим окрестности: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Значение k для режима k_nearest (по умолчанию 8)."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния для режима distance_band."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Применять стандартизацию весов по строкам (по умолчанию true)."
              },
              "island_policy": {
                "label": "Политика островов",
                "description": "Обработка островов: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Альфа",
                "description": "Порог значимости в [0, 1]; по умолчанию 0.05."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходного растра (необязательно; вычисляется автоматически из экстента)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра (классификация: 0=NS, 1=HH, 2=LL, 3=HL, 4=LH)."
              }
            }
          },
          "getis_ord_gi_star_raster": {
            "name": "Getis-Ord Gi* для растра",
            "description": "Вычисляет классификацию горячих/холодных точек Gi* по точкам и выводит растр (-1=холодная, 0=NS, 1=горячая). Для анализа на основе горячих точек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой с точками наблюдений."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле атрибута для анализа."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим окрестности: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Значение k для режима k_nearest (по умолчанию 8)."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния для режима distance_band."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Применять стандартизацию весов по строкам (по умолчанию true)."
              },
              "island_policy": {
                "label": "Политика островов",
                "description": "Обработка островов: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Альфа",
                "description": "Порог значимости в [0, 1]; по умолчанию 0.05."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходного растра (необязательно; вычисляется автоматически из экстента)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра (классификация: -1=Cold, 0=NS, 1=Hot)."
              }
            }
          },
          "ordinary_kriging": {
            "name": "Ординарный кригинг",
            "description": "Выполняет интерполяцию ординарным кригингом для оценки значений в незакартированных ячейках сетки на основе выборки точечных измерений. Ординарный кригинг — геостатистический метод, использующий структуру пространственной автокорреляции для получения как прогнозов, так и связанной с ними дисперсии кригинга (неопределённости прогноза). Инструмент автоматически оценивает эмпирическую вариограмму по входным точечным данным и подбирает теоретическую модель вариограммы (сферическую, экспоненциальную или гауссову), описывающую пространственную зависимость.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле атрибута со значениями для интерполяции."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах карты (обязателен без base_raster)."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "local_kriging": {
            "name": "Локальный кригинг",
            "description": "Выполняет интерполяцию локальным ординарным кригингом по k ближайшим соседям, обеспечивая эффективную пространственную оценку для больших наборов данных. Для наборов данных с тысячами точек этот подход вычислительно практичнее глобального ординарного кригинга.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле атрибута со значениями для интерполяции."
              },
              "k_neighbors": {
                "label": "K соседей",
                "description": "Число используемых ближайших соседей; по умолчанию 10."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах карты (обязателен без base_raster)."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "simple_kriging": {
            "name": "Простой кригинг",
            "description": "Выполняет интерполяцию простым кригингом, когда среднее пространственного поля известно заранее. Метод уменьшает дисперсию кригинга и даёт более стабильные прогнозы, если среднее надёжно известно из внешней информации.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле атрибута со значениями для интерполяции."
              },
              "known_mean": {
                "label": "Известное среднее",
                "description": "Известное среднее пространственного поля."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах карты (обязателен без base_raster)."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "universal_kriging": {
            "name": "Универсальный кригинг",
            "description": "Выполняет интерполяцию универсальным кригингом, когда пространственное явление имеет систематический тренд или дрейф. Сочетает кригинг с оценкой полиномиальной поверхности тренда.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле атрибута со значениями для интерполяции."
              },
              "trend_order": {
                "label": "Порядок тренда",
                "description": "Порядок полиномиального тренда (1=линейный, 2=квадратичный); по умолчанию 1."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах карты (обязателен без base_raster)."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "spacetime_kriging": {
            "name": "Пространственно-временной кригинг",
            "description": "Выполняет пространственно-временную интерполяцию кригингом для совместного моделирования пространственной и временной изменчивости точечных измерений. Идеально подходит для пространственно распределённых данных временных рядов.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле атрибута со значениями для интерполяции."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Временное поле атрибута со значениями времени."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах карты (обязателен без base_raster)."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "spatial_lag_regression_raster": {
            "name": "Регрессия с пространственным лагом для растра",
            "description": "Оценивает модель SAR и выводит поверхность подобранных значений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "response_field": {
                "label": "Поле отклика",
                "description": "Переменная отклика."
              },
              "predictor_fields": {
                "label": "Поля предикторов",
                "description": "Поля предикторов."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим окрестности."
              },
              "k": {
                "label": "K",
                "description": "k для k_nearest."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Стандартизировать веса по строкам."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр."
              }
            }
          },
          "spatial_error_regression_raster": {
            "name": "Регрессия с пространственной ошибкой для растра",
            "description": "Оценивает модель SEM и выводит поверхность подобранных значений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "response_field": {
                "label": "Поле отклика",
                "description": "Переменная отклика."
              },
              "predictor_fields": {
                "label": "Поля предикторов",
                "description": "Поля предикторов."
              },
              "weights_mode": {
                "label": "Режим весов",
                "description": "Режим окрестности."
              },
              "k": {
                "label": "K",
                "description": "k для k_nearest."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Порог расстояния."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Стандартизировать веса по строкам."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр."
              }
            }
          },
          "geographically_weighted_regression_raster": {
            "name": "Географически взвешенная регрессия для растра",
            "description": "Оценивает GWR и выводит растровые поверхности локальных коэффициентов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "response_field": {
                "label": "Поле отклика",
                "description": "Переменная отклика."
              },
              "predictor_fields": {
                "label": "Поля предикторов",
                "description": "Поля предикторов."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Ширина полосы ядра."
              },
              "kernel": {
                "label": "Ядро",
                "description": "Тип ядра."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходного растра."
              },
              "output_prefix": {
                "label": "Префикс выхода",
                "description": "Префикс выходного растра."
              }
            }
          },
          "inhomogeneous_intensity_raster": {
            "name": "Растр неоднородной интенсивности",
            "description": "Вычисляет поверхность ядерной оценки плотности (KDE), визуализирующую пространственную интенсивность точек. Выявляет горячие и холодные точки сверх простой плотности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Ширина полосы ядра."
              },
              "kernel": {
                "label": "Ядро",
                "description": "Тип ядра."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр интенсивности."
              }
            }
          },
          "add": {
            "name": "Сложение",
            "description": "Складывает два растра поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "average_overlay": {
            "name": "Оверлей среднего",
            "description": "Вычисляет поячеечное среднее по стеку растров, игнорируя NoData, если только все входные значения не равны NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "bool_and": {
            "name": "Логическое И",
            "description": "Вычисляет логическое И двух растров поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "bool_not": {
            "name": "Логическое НЕ",
            "description": "Вычисляет логическое НЕ для каждой ячейки растра, выводя 1 для ячеек с нулевым значением и 0 в остальных случаях.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "bool_or": {
            "name": "Логическое ИЛИ",
            "description": "Вычисляет логическое ИЛИ двух растров поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "bool_xor": {
            "name": "Логическое исключающее ИЛИ",
            "description": "Вычисляет логическое исключающее ИЛИ (XOR) двух растров поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "count_if": {
            "name": "Подсчёт по условию",
            "description": "Подсчитывает число входных растров, значение ячейки которых равно значению сравнения.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison_value": {
                "label": "Значение сравнения",
                "description": "Значение сравнения для подсчёта в стеке растров."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "divide": {
            "name": "Деление",
            "description": "Делит первый растр на второй поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "highest_position": {
            "name": "Позиция наибольшего",
            "description": "Возвращает отсчитываемый от нуля индекс растра в стеке, содержащего наибольшее значение в каждой ячейке.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "lowest_position": {
            "name": "Позиция наименьшего",
            "description": "Возвращает отсчитываемый от нуля индекс растра в стеке, содержащего наименьшее значение в каждой ячейке.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "max_absolute_overlay": {
            "name": "Оверлей максимума по модулю",
            "description": "Вычисляет поячеечное максимальное абсолютное значение по стеку растров, распространяя NoData, если любая входная ячейка равна NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "max_overlay": {
            "name": "Оверлей максимума",
            "description": "Вычисляет поячеечный максимум по стеку растров, распространяя NoData, если любая входная ячейка равна NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "min_absolute_overlay": {
            "name": "Оверлей минимума по модулю",
            "description": "Вычисляет поячеечное минимальное абсолютное значение по стеку растров, распространяя NoData, если любая входная ячейка равна NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "min_overlay": {
            "name": "Оверлей минимума",
            "description": "Вычисляет поячеечный минимум по стеку растров, распространяя NoData, если любая входная ячейка равна NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "modulo": {
            "name": "Остаток от деления",
            "description": "Вычисляет остаток от деления первого растра на второй поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "multiply": {
            "name": "Умножение",
            "description": "Перемножает два растра поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "multiply_overlay": {
            "name": "Оверлей произведения",
            "description": "Вычисляет поячеечное произведение по стеку растров, распространяя NoData, если любая входная ячейка равна NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "percent_equal_to": {
            "name": "Процент равных",
            "description": "Вычисляет долю растров в стеке, значения которых равны растру сравнения в каждой ячейке.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Сравнение",
                "description": "Путь растра сравнения или растровый дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "percent_greater_than": {
            "name": "Процент больших",
            "description": "Вычисляет долю растров в стеке, значения которых больше растра сравнения в каждой ячейке.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Сравнение",
                "description": "Путь растра сравнения или растровый дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "percent_less_than": {
            "name": "Процент меньших",
            "description": "Вычисляет долю растров в стеке, значения которых меньше растра сравнения в каждой ячейке.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Сравнение",
                "description": "Путь растра сравнения или растровый дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "pick_from_list": {
            "name": "Выбор из списка",
            "description": "Выбирает поячеечные значения из стека растров с использованием растра позиций, отсчитываемых от нуля.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pos_input": {
                "label": "Вход позиций",
                "description": "Растр позиций стека, начиная с нуля."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "power": {
            "name": "Степень",
            "description": "Возводит первый растр в степень второго поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "standard_deviation_overlay": {
            "name": "Оверлей стандартного отклонения",
            "description": "Вычисляет поячеечное стандартное отклонение по стеку растров, распространяя NoData, если любая входная ячейка равна NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "subtract": {
            "name": "Вычитание",
            "description": "Вычитает второй растр из первого поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "sum_overlay": {
            "name": "Оверлей суммы",
            "description": "Вычисляет поячеечную сумму по стеку растров, распространяя NoData, если любая входная ячейка равна NoData.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров в виде массива путей или строки с разделителями-точками с запятой/запятыми."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "update_nodata_cells": {
            "name": "Обновление ячеек NoData",
            "description": "Заполняет ячейки NoData в input1 соответствующими допустимыми ячейками из input2.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Основной растр для обновления."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Вторичный растр с заменяющими значениями."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "weighted_overlay": {
            "name": "Взвешенный оверлей",
            "description": "Объединяет растры факторов с использованием нормированных весов, необязательных флагов стоимости и необязательных бинарных ограничений.",
            "params": {
              "factors": {
                "label": "Факторы",
                "description": "Входной стек растров факторов."
              },
              "weights": {
                "label": "Веса",
                "description": "Числовые веса, соответствующие каждому растру факторов."
              },
              "cost": {
                "label": "Стоимость",
                "description": "Необязательные логические флаги, указывающие факторы стоимости."
              },
              "constraints": {
                "label": "Ограничения",
                "description": "Необязательный стек растров ограничений; значения <= 0 приводят выход к нулю."
              },
              "scale_max": {
                "label": "Макс. шкалы",
                "description": "Максимальное значение шкалы после нормализации факторов."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "weighted_sum": {
            "name": "Взвешенная сумма",
            "description": "Вычисляет взвешенную сумму по стеку растров после нормирования весов так, чтобы их сумма равнялась единице.",
            "params": {
              "input_rasters": {
                "label": "Входные растры",
                "description": "Входной стек растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "weights": {
                "label": "Веса",
                "description": "Числовые веса, соответствующие каждому входному растру."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "image_correlation_neighbourhood_analysis": {
            "name": "Корреляция изображений по окрестности",
            "description": "Выполняет корреляционный анализ двух растров в скользящем окне и возвращает растры корреляции и p-значений.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь первого входного растра."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь второго входного растра."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Размер скользящего окна в ячейках (минимум 3, по умолчанию 11)."
              },
              "correlation_stat": {
                "label": "Статистика корреляции",
                "description": "Метрика корреляции: pearson, spearman или kendall (по умолчанию pearson)."
              },
              "output1": {
                "label": "Выход 1",
                "description": "Необязательный путь выхода для растра корреляции."
              },
              "output2": {
                "label": "Выход 2",
                "description": "Необязательный путь выхода для растра значимости (p-значений)."
              }
            }
          },
          "natural_neighbour_interpolation": {
            "name": "Интерполяция естественного соседа",
            "description": "Интерполирует растр по точечным выборкам с использованием истинного взвешивания по площадям естественных соседей Sibson.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "clip_to_hull": {
                "label": "Обрезать по оболочке",
                "description": "Ограничивать интерполяцию выпуклой оболочкой точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "nearest_neighbour_interpolation": {
            "name": "Интерполяция ближайшего соседа",
            "description": "Интерполирует растр по точечным выборкам, присваивая каждой ячейке значение ближайшей выборки.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Необязательное максимальное расстояние поиска в единицах карты; по умолчанию бесконечность."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "conditional_evaluation": {
            "name": "Условная оценка",
            "description": "Выполняет условное вычисление «если-то-иначе» для ячеек растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "statement": {
                "label": "Выражение",
                "description": "Условное выражение, вычисляемое для каждой ячейки."
              },
              "true": {
                "label": "Истина",
                "description": "Значение или растр/выражение, используемое при истинном условии."
              },
              "false": {
                "label": "Ложь",
                "description": "Значение или растр/выражение, используемое при ложном условии."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "reclass": {
            "name": "Переклассификация",
            "description": "Переклассифицирует значения растра с использованием диапазонов или пар точного присваивания.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "reclass_values": {
                "label": "Значения переклассификации",
                "description": "Значения переклассификации в виде строк [new, from, to_less_than] или [new, old] при assign_mode=true."
              },
              "assign_mode": {
                "label": "Режим назначения",
                "description": "Если true, использовать режим точного назначения с парами [new_value, old_value]."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "reclass_equal_interval": {
            "name": "Переклассификация равными интервалами",
            "description": "Переклассифицирует значения растра в интервалы равной ширины в пределах необязательного диапазона значений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "interval_size": {
                "label": "Размер интервала",
                "description": "Ширина бина равных интервалов."
              },
              "start_value": {
                "label": "Начальное значение",
                "description": "Необязательная нижняя граница переклассификации; по умолчанию минимум растра."
              },
              "end_value": {
                "label": "Конечное значение",
                "description": "Необязательная верхняя граница переклассификации; по умолчанию максимум растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "buffer_raster": {
            "name": "Буфер растра",
            "description": "Создаёт бинарную буферную зону вокруг ненулевых ячеек растра со значениями, отличными от NoData, в пределах заданного расстояния.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр, где ненулевые ячейки — цели буфера."
              },
              "buffer_size": {
                "label": "Размер буфера",
                "description": "Порог расстояния буфера."
              },
              "grid_cell_units": {
                "label": "Единицы ячеек сетки",
                "description": "Если true, интерпретировать buffer_size в единицах ячеек сетки вместо единиц карты."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "cost_allocation": {
            "name": "Распределение по стоимости",
            "description": "Присваивает каждую ячейку области-источнику с использованием растра обратных связей из анализа стоимостного расстояния.",
            "params": {
              "source": {
                "label": "Источник",
                "description": "Растр источников с положительными ячейками источников."
              },
              "backlink": {
                "label": "Обратная связь",
                "description": "Растр обратной связи из cost_distance."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "cost_distance": {
            "name": "Стоимостное расстояние",
            "description": "Вычисляет растры накопленной стоимости перемещения и обратных связей по поверхностям источников и стоимости.",
            "params": {
              "source": {
                "label": "Источник",
                "description": "Растр источников с положительными ячейками источников."
              },
              "cost": {
                "label": "Стоимость",
                "description": "Растр стоимости/трения."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра накопленной стоимости."
              },
              "backlink_output": {
                "label": "Выход обратной связи",
                "description": "Необязательный путь выходного растра обратной связи."
              }
            }
          },
          "cost_pathway": {
            "name": "Стоимостной путь",
            "description": "Прослеживает пути наименьшей стоимости от ячеек назначения с использованием растра обратных связей.",
            "params": {
              "destination": {
                "label": "Назначение",
                "description": "Растр назначений с положительными ячейками назначений."
              },
              "backlink": {
                "label": "Обратная связь",
                "description": "Растр обратной связи из cost_distance."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, фон выхода ноль вместо NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "euclidean_allocation": {
            "name": "Евклидово распределение",
            "description": "Присваивает каждой допустимой ячейке значение ближайшей ненулевой целевой ячейки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр с ненулевыми целевыми ячейками."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "euclidean_distance": {
            "name": "Евклидово расстояние",
            "description": "Вычисляет евклидово расстояние до ближайшей ненулевой целевой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр с ненулевыми целевыми ячейками."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "abs": {
            "name": "Модуль",
            "description": "Вычисляет абсолютное значение каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "aggregate_raster": {
            "name": "Агрегирование растра",
            "description": "Уменьшает разрешение растра, агрегируя блоки по среднему, сумме, минимуму, максимуму или размаху.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "aggregation_factor": {
                "label": "Коэффициент агрегирования",
                "description": "Размер блока в исходных ячейках."
              },
              "aggregation_type": {
                "label": "Тип агрегирования",
                "description": "Одно из mean, sum, maximum, minimum или range."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "anova": {
            "name": "ANOVA",
            "description": "Выполняет однофакторный дисперсионный анализ (ANOVA) значений растра, сгруппированных по категориям растра классов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь растра измерений."
              },
              "features": {
                "label": "Признаки",
                "description": "Путь растра классов/категорий."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "arccos": {
            "name": "Arccos",
            "description": "Вычисляет арккосинус (arccos) каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "arcosh": {
            "name": "Arcosh",
            "description": "Вычисляет обратный гиперболический косинус каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "arcsin": {
            "name": "Arcsin",
            "description": "Вычисляет арксинус (arcsin) каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "arctan": {
            "name": "Arctan",
            "description": "Вычисляет арктангенс (arctan) каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "arsinh": {
            "name": "Arsinh",
            "description": "Вычисляет обратный гиперболический синус каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "artanh": {
            "name": "Artanh",
            "description": "Вычисляет обратный гиперболический тангенс каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "atan2": {
            "name": "Atan2",
            "description": "Вычисляет четырёхквадрантный арктангенс по двум растрам поячеечно.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "block_maximum": {
            "name": "Блочный максимум",
            "description": "Растеризует точечные объекты, присваивая максимальное значение, наблюдаемое в каждой выходной ячейке.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута для растеризации; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "block_minimum": {
            "name": "Блочный минимум",
            "description": "Растеризует точечные объекты, присваивая минимальное значение, наблюдаемое в каждой выходной ячейке.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута для растеризации; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "boundary_shape_complexity": {
            "name": "Сложность формы границы",
            "description": "Вычисляет сложность формы границ участков растра с помощью метрики ветвей скелета, полученного утончением линий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр ID участков с положительными целочисленными ID."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "ceil": {
            "name": "Округление вверх",
            "description": "Округляет каждую ячейку растра вверх до ближайшего целого.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "centroid_raster": {
            "name": "Центроид (растр)",
            "description": "Вычисляет ячейку-центроид для каждого идентификатора участка с положительным значением в растре.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр участков."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "clip_raster_to_polygon": {
            "name": "Обрезка растра по полигону",
            "description": "Обрезает растр по охвату полигонов; ячейкам вне полигонов присваивается NoData.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "polygons": {
                "label": "Полигоны",
                "description": "Входной полигональный векторный слой."
              },
              "maintain_dimensions": {
                "label": "Сохранять размеры",
                "description": "Сохранять исходные размеры растра вместо обрезки по экстенту полигона."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "clump": {
            "name": "Группировка",
            "description": "Группирует смежные ячейки растра с равными значениями в уникальные идентификаторы участков.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной категориальный растр."
              },
              "diag": {
                "label": "Диагональ",
                "description": "Если true, включать диагональную связность (8 соседей); иначе использовать 4 соседа."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, считать нулевые ячейки фоном и сохранять их нулями в выходе."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "cos": {
            "name": "Cos",
            "description": "Вычисляет косинус значения каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "cosh": {
            "name": "Cosh",
            "description": "Вычисляет гиперболический косинус каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "create_plane": {
            "name": "Создание плоскости",
            "description": "Создаёт растр по уравнению плоскости с использованием геометрии базового растра.",
            "params": {
              "base": {
                "label": "База",
                "description": "Базовый растр, определяющий геометрию выхода."
              },
              "gradient": {
                "label": "Градиент",
                "description": "Градиент уклона плоскости в градусах."
              },
              "aspect": {
                "label": "Экспозиция",
                "description": "Экспозиция плоскости в градусах."
              },
              "constant": {
                "label": "Константа",
                "description": "Аддитивный постоянный член в уравнении плоскости."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "crispness_index": {
            "name": "Индекс чёткости",
            "description": "Вычисляет индекс чёткости для растра вероятности принадлежности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "cross_tabulation": {
            "name": "Кросс-табуляция",
            "description": "Выполняет перекрёстную табуляцию двух категориальных растров.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь входного растра 1."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь входного растра 2."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "cumulative_distribution": {
            "name": "Кумулятивное распределение",
            "description": "Преобразует значения растра в вероятности кумулятивного распределения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "dbscan": {
            "name": "DBSCAN",
            "description": "Выполняет неконтролируемую кластеризацию на основе плотности DBSCAN для стека входных растров.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список путей входных растров через запятую/точку с запятой или массив JSON (каналы признаков)."
              },
              "scaling_method": {
                "label": "Метод масштабирования",
                "description": "Масштабирование признаков: none (по умолчанию), normalize (диапазон 0-1) или standardize (z-оценки)."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Эпсилон: радиус поиска окрестности в пространстве признаков (по умолчанию 1.0)."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Минимальное число соседей в пределах эпсилона для основной точки (по умолчанию 5)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра меток ID кластеров."
              }
            }
          },
          "decrement": {
            "name": "Декремент",
            "description": "Вычитает значение (по умолчанию 1.0) из каждой ячейки растра со значением, отличным от NoData.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "value": {
                "label": "Значение",
                "description": "Величина, вычитаемая из каждой ячейки. По умолчанию 1.0."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "edge_proportion": {
            "name": "Доля краёв",
            "description": "Вычисляет долю краевых ячеек каждого участка и отображает её обратно на ячейки участка.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр ID участков с положительными целочисленными ID."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "equal_to": {
            "name": "Равно",
            "description": "Проверяет поячеечно, равны ли два растра.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "erase_polygon_from_raster": {
            "name": "Стирание полигона из растра",
            "description": "Присваивает ячейкам растра внутри полигонов значение NoData, сохраняя ячейки в отверстиях полигонов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "polygons": {
                "label": "Полигоны",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "exp": {
            "name": "Exp",
            "description": "Вычисляет e в степени значения каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "exp2": {
            "name": "Exp2",
            "description": "Вычисляет 2 в степени значения каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "fft_random_field": {
            "name": "Случайное поле FFT",
            "description": "Создаёт пространственно автокоррелированное случайное поле с помощью спектрального синтеза FFT.",
            "params": {
              "base_raster": {
                "label": "Базовый растр",
                "description": "Путь базового растра, используемого для геометрии сетки."
              },
              "range": {
                "label": "Размах",
                "description": "Приблизительный диапазон корреляции в единицах карты. По умолчанию: 1.0."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "filter_raster_features_by_area": {
            "name": "Фильтрация растровых объектов по площади",
            "description": "Удаляет объекты растра с целочисленными метками, размер которых меньше порога числа ячеек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр с целочисленными метками классов."
              },
              "threshold": {
                "label": "Порог",
                "description": "Минимальный размер сохраняемого объекта в ячейках."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, удалённым объектам назначается 0; иначе удалённым объектам назначается NoData."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "find_patch_edge_cells": {
            "name": "Поиск краевых ячеек участков",
            "description": "Определяет краевые ячейки для каждого положительного идентификатора участка растра; некраевым ячейкам участка присваивается ноль.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр ID участков; положительные значения считаются ячейками участков."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "floor": {
            "name": "Округление вниз",
            "description": "Округляет каждую ячейку растра вниз до ближайшего целого.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "greater_than": {
            "name": "Больше",
            "description": "Проверяет поячеечно, больше ли первый растр второго.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "heat_map": {
            "name": "Тепловая карта",
            "description": "Создаёт растр тепловой карты плотности ядра по точкам встречаемости.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле весов; по умолчанию невзвешенные вхождения."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Ширина полосы ядра в единицах карты."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "kernel_function": {
                "label": "Функция ядра",
                "description": "Тип функции ядра; по умолчанию quartic."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "idw_interpolation": {
            "name": "Интерполяция IDW",
            "description": "Интерполирует растр по точечным выборкам методом обратно взвешенных расстояний.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "weight": {
                "label": "Вес",
                "description": "Показатель степени расстояния IDW; по умолчанию 2.0."
              },
              "radius": {
                "label": "Радиус",
                "description": "Необязательный радиус окрестности в единицах карты; при <=0 используется резервный режим k ближайших соседей."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Минимальное число используемых соседей; по умолчанию 0."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "image_autocorrelation": {
            "name": "Автокорреляция изображения",
            "description": "Вычисляет индекс Морана I для одного или нескольких растровых изображений.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список путей входных растров."
              },
              "contiguity": {
                "label": "Смежность",
                "description": "Правило окрестности: rook, king/queen или bishop."
              }
            }
          },
          "image_correlation": {
            "name": "Корреляция изображений",
            "description": "Вычисляет матрицу корреляции Пирсона для двух или более растровых изображений.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список путей входных растров."
              }
            }
          },
          "image_regression": {
            "name": "Регрессия изображений",
            "description": "Выполняет двумерную линейную регрессию между двумя растрами и выводит растр остатков и отчёт.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь растра независимой переменной."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь растра зависимой переменной."
              },
              "standardize_residuals": {
                "label": "Стандартизировать остатки",
                "description": "Стандартизировать ли остатки по стандартной ошибке модели."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра остатков."
              }
            }
          },
          "increment": {
            "name": "Инкремент",
            "description": "Прибавляет значение (по умолчанию 1.0) к каждой ячейке растра со значением, отличным от NoData.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "value": {
                "label": "Значение",
                "description": "Величина, добавляемая к каждой ячейке. По умолчанию 1.0."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "inplace_add": {
            "name": "Сложение на месте",
            "description": "Выполняет операцию сложения на месте (input1 += input2).",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Входной растр для изменения."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь входного растра или числовая константа."
              }
            }
          },
          "inplace_divide": {
            "name": "Деление на месте",
            "description": "Выполняет операцию деления на месте (input1 /= input2).",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Входной растр для изменения."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь входного растра или ненулевая числовая константа."
              }
            }
          },
          "inplace_multiply": {
            "name": "Умножение на месте",
            "description": "Выполняет операцию умножения на месте (input1 *= input2).",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Входной растр для изменения."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь входного растра или числовая константа."
              }
            }
          },
          "inplace_subtract": {
            "name": "Вычитание на месте",
            "description": "Выполняет операцию вычитания на месте (input1 -= input2).",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Входной растр для изменения."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь входного растра или числовая константа."
              }
            }
          },
          "integer_division": {
            "name": "Целочисленное деление",
            "description": "Делит два растра и усекает каждый результат в сторону нуля.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "inverse_pca": {
            "name": "Обратный PCA",
            "description": "Восстанавливает исходные изображения каналов из растров компонент PCA с использованием сохранённых собственных векторов.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути растров компонент."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pca_report": {
                "label": "Отчёт PCA",
                "description": "Строка JSON-отчёта, полученная от PCA."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный базовый выходной путь."
              }
            }
          },
          "is_nodata": {
            "name": "Является NoData",
            "description": "Выводит 1 для ячеек NoData и 0 для всех допустимых ячеек.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "kappa_index": {
            "name": "Индекс каппа",
            "description": "Вычисляет каппу Коэна и метрики согласия между двумя категориальными растрами.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь входного растра классификации."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь входного эталонного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "ks_normality_test": {
            "name": "Тест нормальности KS",
            "description": "Оценивает, взяты ли значения растра из нормального распределения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Необязательный размер случайной выборки. Опустите, чтобы использовать все действительные ячейки."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "less_than": {
            "name": "Меньше",
            "description": "Проверяет поячеечно, меньше ли первый растр второго.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "list_unique_values_raster": {
            "name": "Список уникальных значений растра",
            "description": "Перечисляет уникальные допустимые категории растра и их частоты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного CSV."
              },
              "strict_parity": {
                "label": "Строгая проверка совпадения",
                "description": "Если true, возвращается полный вывод частот категорий (по умолчанию true)."
              },
              "max_values": {
                "label": "Макс. значений",
                "description": "Максимальное число уникальных значений, включаемых при strict_parity = false (по умолчанию 10000)."
              }
            }
          },
          "ln": {
            "name": "Ln",
            "description": "Вычисляет натуральный логарифм каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "log10": {
            "name": "Log10",
            "description": "Вычисляет десятичный логарифм каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "log2": {
            "name": "Log2",
            "description": "Вычисляет логарифм по основанию 2 каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "map_features": {
            "name": "Картографирование объектов",
            "description": "Картографирует дискретные возвышенные формы рельефа по растру с помощью выращивания областей в порядке убывания приоритета.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "min_feature_height": {
                "label": "Мин. высота объектов",
                "description": "Минимальное вертикальное разделение для независимых объектов."
              },
              "min_feature_size": {
                "label": "Мин. размер объектов",
                "description": "Минимальный размер объекта в ячейках."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "max": {
            "name": "Max",
            "description": "Выполняет операцию MAX для двух растров или растра и постоянного значения.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь первого растра или числовая константа."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь второго растра или числовая константа."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "min": {
            "name": "Min",
            "description": "Выполняет операцию MIN для двух растров или растра и постоянного значения.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь первого растра или числовая константа."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь второго растра или числовая константа."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "modified_shepard_interpolation": {
            "name": "Модифицированная интерполяция Шепарда",
            "description": "Интерполирует растр по точечным выборкам с использованием локально взвешенного смешивания модифицированным методом Шепарда.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "weight": {
                "label": "Вес",
                "description": "Показатель степени весов Shepard; по умолчанию 2.0."
              },
              "radius": {
                "label": "Радиус",
                "description": "Необязательный радиус окрестности в единицах карты."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Минимальное число соседей; по умолчанию 8."
              },
              "use_quadratic_basis": {
                "label": "Использовать квадратичный базис",
                "description": "Применять локальные квадратичные базисные поправки (режим совместимости с прежними версиями)."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "use_data_hull": {
                "label": "Использовать оболочку данных",
                "description": "Ограничивать интерполяцию выпуклой оболочкой точек."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "narrowness_index": {
            "name": "Индекс узости",
            "description": "Вычисляет индекс узости участка растра как отношение площади к площади наибольшей вписанной окружности на основе максимального расстояния до края.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр ID участков с положительными целочисленными ID."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "negate": {
            "name": "Отрицание",
            "description": "Меняет знак значения каждой ячейки растра со значением, отличным от NoData.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "nibble": {
            "name": "Заполнение (Nibble)",
            "description": "Заполняет фоновые области распределением по ближайшему соседу.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр для обработки инструментом Nibble."
              },
              "mask": {
                "label": "Маска",
                "description": "Бинарный растр-маска."
              },
              "use_nodata": {
                "label": "Использовать NoData",
                "description": "Считать NoData входного растра значением класса (а не фоном)."
              },
              "nibble_nodata": {
                "label": "Заполнять NoData",
                "description": "Также заполнять области NoData вне маски."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "not_equal_to": {
            "name": "Не равно",
            "description": "Проверяет поячеечно, не равны ли два растра.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "paired_sample_t_test": {
            "name": "Парный t-тест",
            "description": "Выполняет парный t-тест для двух растров по парам допустимых ячеек.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь первого входного растра."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь второго входного растра."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Необязательный размер выборки с возвращением."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "phi_coefficient": {
            "name": "Коэффициент фи",
            "description": "Выполняет оценку согласия бинарной классификации с помощью коэффициента фи.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь первого бинарного растра."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь второго бинарного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              }
            }
          },
          "principal_component_analysis": {
            "name": "Анализ главных компонент",
            "description": "Выполняет PCA для стека растров, возвращая изображения компонент и отчёт в JSON.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути входных растров (≥3)."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "num_components": {
                "label": "Число компонент",
                "description": "Число компонент. По умолчанию: все."
              },
              "standardized": {
                "label": "Стандартизировано",
                "description": "Использовать корреляционную матрицу. По умолчанию: false."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный базовый выходной путь."
              }
            }
          },
          "print_geotiff_tags": {
            "name": "Печать тегов GeoTIFF",
            "description": "Формирует текстовый отчёт с описанием тегов TIFF/GeoTIFF и ключевых метаданных для входного растра семейства GeoTIFF.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              }
            }
          },
          "quantiles": {
            "name": "Квантили",
            "description": "Преобразует значения растра в квантильные классы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "num_quantiles": {
                "label": "Число квантилей",
                "description": "Число квантилей (по умолчанию 5)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "radial_basis_function_interpolation": {
            "name": "Интерполяция радиальными базисными функциями",
            "description": "Интерполирует растр по точечным выборкам с использованием локального взвешивания по сходству радиальных базисных функций.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "approximate_mode": {
                "label": "Приближённый режим",
                "description": "Если true, используется быстрое приближённое взвешивание NG; если false, решаются локальные системы RBF (в прежнем стиле)."
              },
              "radius": {
                "label": "Радиус",
                "description": "Необязательный радиус окрестности в единицах карты."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Минимальное число используемых соседей."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "func_type": {
                "label": "Тип функции",
                "description": "Тип радиальной базисной функции (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Порядок полинома",
                "description": "Подсказка порядка полинома (none, constant, quadratic)."
              },
              "weight": {
                "label": "Вес",
                "description": "Параметр формы/показатель базиса в зависимости от func_type."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "radius_of_gyration": {
            "name": "Радиус инерции",
            "description": "Вычисляет радиус инерции каждого участка и отображает значения обратно на ячейки участка.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр ID участков с положительными целочисленными ID."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "random_field": {
            "name": "Случайное поле",
            "description": "Создаёт растр со случайными значениями стандартного нормального распределения.",
            "params": {
              "base": {
                "label": "База",
                "description": "Путь базового растра, используемого для геометрии сетки."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "random_forest_classification_fit": {
            "name": "Классификация случайным лесом - Обучение",
            "description": "Обучает модель классификации случайного леса и возвращает сериализованные байты модели.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным/полигональным векторным обучающим данным."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле класса в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "split_criterion": {
                "label": "Критерий разделения",
                "description": "Подсказка критерия разбиения дерева (сохранена для обратной совместимости)."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев в лесу (по умолчанию 200)."
              },
              "min_samples_leaf": {
                "label": "Мин. выборок в листе",
                "description": "Минимальное число выборок, требуемое в листовом узле (по умолчанию 1)."
              },
              "min_samples_split": {
                "label": "Мин. выборок для разделения",
                "description": "Минимальное число выборок, требуемое для разделения внутреннего узла (по умолчанию 2)."
              },
              "test_proportion": {
                "label": "Доля тестовой выборки",
                "description": "Аргумент для обратной совместимости; зарезервирован для будущей диагностики."
              }
            }
          },
          "random_forest_classification_predict": {
            "name": "Классификация случайным лесом - Предсказание",
            "description": "Применяет сериализованную модель классификации случайного леса к многоканальным предикторам.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "model_bytes": {
                "label": "Байты модели",
                "description": "Байты модели, созданные random_forest_classification_fit."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "random_forest_regression_fit": {
            "name": "Регрессия случайным лесом - Обучение",
            "description": "Обучает регрессионную модель случайного леса и возвращает сериализованные байты модели.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "training_data": {
                "label": "Обучающие данные",
                "description": "Путь к точечным векторным обучающим данным."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое целевое поле в атрибутах training_data."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Режим масштабирования признаков: none (по умолчанию), normalize, standardize."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев в лесу (по умолчанию 200)."
              },
              "min_samples_leaf": {
                "label": "Мин. выборок в листе",
                "description": "Минимальное число выборок, требуемое в листовом узле (по умолчанию 1)."
              },
              "min_samples_split": {
                "label": "Мин. выборок для разделения",
                "description": "Минимальное число выборок, требуемое для разделения внутреннего узла (по умолчанию 2)."
              },
              "test_proportion": {
                "label": "Доля тестовой выборки",
                "description": "Аргумент для обратной совместимости; зарезервирован для будущей диагностики."
              }
            }
          },
          "random_forest_regression_predict": {
            "name": "Регрессия случайным лесом - Предсказание",
            "description": "Применяет сериализованную регрессионную модель случайного леса к многоканальным предикторам.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Массив одноканальных входных растров."
              },
              "model_bytes": {
                "label": "Байты модели",
                "description": "Байты модели, созданные random_forest_regression_fit."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "random_sample": {
            "name": "Случайная выборка",
            "description": "Создаёт растр со случайно расположенными ячейками выборки с уникальными идентификаторами.",
            "params": {
              "base": {
                "label": "База",
                "description": "Путь базового растра, задающего геометрию сетки и маску действительных ячеек."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Число генерируемых ячеек выборки."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "raster_area": {
            "name": "Площадь растра",
            "description": "Оценивает площадь растровых полигонов каждого класса в ячейках сетки или единицах карты и записывает итоги по классу в каждую ячейку класса.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной категориальный растр."
              },
              "units": {
                "label": "Единицы",
                "description": "Единицы площади: 'map units' (по умолчанию) или 'grid cells'."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, ячейки с нулевым значением исключаются из анализа."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "raster_calculator": {
            "name": "Растровый калькулятор",
            "description": "Вычисляет математическое выражение над списком входных растров поячеечно.",
            "params": {
              "expression": {
                "label": "Выражение",
                "description": "Математическое выражение с именами растровых переменных в кавычках."
              },
              "inputs": {
                "label": "Входные данные",
                "description": "Упорядоченные пути входных растров."
              },
              "auto_reproject": {
                "label": "Автоперепроецирование",
                "description": "Если true (по умолчанию), автоматически перепроецировать растры стека в соответствие с inputs[0] при различии CRS."
              },
              "auto_reproject_method": {
                "label": "Метод автоперепроецирования",
                "description": "Необязательное переопределение метода передискретизации при перепроецировании: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "raster_cell_assignment": {
            "name": "Назначение значений ячеек растра",
            "description": "Создаёт растр на основе базового растра, присваивая каждой ячейке значения строки, столбца, x или y.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной базовый растр."
              },
              "what_to_assign": {
                "label": "Что назначать",
                "description": "Присваиваемая величина: column, row, x или y."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "raster_histogram": {
            "name": "Гистограмма растра",
            "description": "Строит гистограмму с фиксированными бинами для допустимых ячеек растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта HTML (псевдоним: output_html_file)."
              },
              "bins": {
                "label": "Бины",
                "description": "Число интервалов гистограммы (по умолчанию log2(rows*cols)+1)."
              }
            }
          },
          "raster_perimeter": {
            "name": "Периметр растра",
            "description": "Оценивает периметр растровых полигонов каждого класса с использованием таблицы подстановки со сглаживанием и записывает итоги по классу в каждую ячейку класса.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной категориальный растр."
              },
              "units": {
                "label": "Единицы",
                "description": "Единицы периметра: 'map units' (по умолчанию) или 'grid cells'."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Если true, ячейки с нулевым значением исключаются из анализа."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "raster_summary_stats": {
            "name": "Сводная статистика растра",
            "description": "Вычисляет базовую сводную статистику для допустимых ячеек растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного отчёта (.json или .csv)."
              }
            }
          },
          "reciprocal": {
            "name": "Обратная величина",
            "description": "Вычисляет обратную величину (1/x) каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "rescale_value_range": {
            "name": "Масштабирование диапазона значений",
            "description": "Линейно масштабирует значения растра в целевой диапазон.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "out_min": {
                "label": "Выходной минимум",
                "description": "Минимальное выходное значение."
              },
              "out_max": {
                "label": "Выход максимума",
                "description": "Максимальное выходное значение."
              },
              "clip_min": {
                "label": "Мин. обрезки",
                "description": "Необязательный входной минимум для отсечения перед пересчётом."
              },
              "clip_max": {
                "label": "Макс. обрезки",
                "description": "Необязательный входной максимум для отсечения перед пересчётом."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "root_mean_square_error": {
            "name": "Среднеквадратическая ошибка",
            "description": "Вычисляет RMSE и связанные статистики точности между двумя растрами.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь растра для сравнения."
              },
              "base": {
                "label": "База",
                "description": "Путь базового растра."
              }
            }
          },
          "round": {
            "name": "Округление",
            "description": "Округляет каждую ячейку растра до ближайшего целого.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "shape_complexity_index_raster": {
            "name": "Индекс сложности формы (растр)",
            "description": "Вычисляет сложность формы участка растра по частоте горизонтальных/вертикальных переходов, нормированной по протяжённости участка.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр ID участков с положительными целочисленными ID."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "sieve": {
            "name": "Просеивание",
            "description": "Удаляет мелкие изолированные участки с числом ячеек ниже порога.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной категориальный растр."
              },
              "threshold": {
                "label": "Порог",
                "description": "Минимальный размер сохраняемого участка в ячейках."
              },
              "zero_background": {
                "label": "Нулевой фон",
                "description": "Обнулять фоновые ячейки (значение 0) в выходном растре."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "sin": {
            "name": "Sin",
            "description": "Вычисляет синус значения каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "sinh": {
            "name": "Sinh",
            "description": "Вычисляет гиперболический синус каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "sqrt": {
            "name": "Sqrt",
            "description": "Вычисляет квадратный корень каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "square": {
            "name": "Квадрат",
            "description": "Возводит значение каждой ячейки растра в квадрат.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "tan": {
            "name": "Tan",
            "description": "Вычисляет тангенс значения каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "tanh": {
            "name": "Tanh",
            "description": "Вычисляет гиперболический тангенс каждой ячейки растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "tin_interpolation": {
            "name": "Интерполяция TIN",
            "description": "Интерполирует растр по точечным выборкам с помощью триангуляции Делоне и плоской интерполяции внутри каждого треугольника.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Необязательное числовое поле атрибута; по умолчанию резервный FID."
              },
              "use_z": {
                "label": "Использовать Z",
                "description": "Использовать значения Z из геометрии точек вместо атрибутов."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки, когда base_raster не указан."
              },
              "base_raster": {
                "label": "Базовый растр",
                "description": "Необязательный базовый растр, управляющий геометрией выхода."
              },
              "max_triangle_edge_length": {
                "label": "Макс. длина ребра треугольника",
                "description": "Необязательная максимально допустимая длина ребра треугольника в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "to_degrees": {
            "name": "В градусы",
            "description": "Преобразует каждую ячейку растра из радиан в градусы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "to_radians": {
            "name": "В радианы",
            "description": "Преобразует каждую ячейку растра из градусов в радианы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "trend_surface": {
            "name": "Поверхность тренда",
            "description": "Подбирает полиномиальную поверхность тренда для растра с помощью регрессии методом наименьших квадратов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "polynomial_order": {
                "label": "Порядок полинома",
                "description": "Порядок полинома 1–10. По умолчанию: 1."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "trend_surface_vector_points": {
            "name": "Поверхность тренда по векторным точкам",
            "description": "Подбирает полиномиальную поверхность тренда для векторных точечных данных с помощью регрессии методом наименьших квадратов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла точек."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки выходного растра в единицах карты."
              },
              "field_name": {
                "label": "Имя поля",
                "description": "Атрибутивное поле со значениями Z. По умолчанию: 'FID'."
              },
              "polynomial_order": {
                "label": "Порядок полинома",
                "description": "Порядок полинома 1–10. По умолчанию: 1."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "truncate": {
            "name": "Усечение",
            "description": "Усекает значение каждой ячейки растра до его целой части.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, результат хранится в памяти."
              }
            }
          },
          "turning_bands_simulation": {
            "name": "Моделирование вращающимися полосами",
            "description": "Создаёт пространственно автокоррелированное случайное поле с помощью алгоритма поворотных полос (turning bands).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь базового растра."
              },
              "range": {
                "label": "Размах",
                "description": "Радиус корреляции в единицах карты. По умолчанию: 1.0."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число направлений полос. По умолчанию: 1000."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "two_sample_ks_test": {
            "name": "Двухвыборочный тест KS",
            "description": "Выполняет двухвыборочный тест Колмогорова-Смирнова для двух распределений значений растров.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь первого входного растра."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь второго входного растра."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Необязательный размер выборки с возвращением для каждого растра."
              }
            }
          },
          "wilcoxon_signed_rank_test": {
            "name": "Тест знаковых рангов Уилкоксона",
            "description": "Выполняет знаково-ранговый тест Уилкоксона для парных разностей растров.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Путь первого входного растра."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Путь второго входного растра."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Необязательный размер выборки с возвращением."
              }
            }
          },
          "z_scores": {
            "name": "Z-оценки",
            "description": "Стандартизирует значения растра в z-оценки с использованием глобального среднего и стандартного отклонения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "zonal_statistics": {
            "name": "Зональная статистика",
            "description": "Обобщает значения растра данных в пределах зон, заданных растром объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра данных."
              },
              "features": {
                "label": "Признаки",
                "description": "Путь растра, определяющего зоны."
              },
              "stat_type": {
                "label": "Тип статистики",
                "description": "Статистика: 'mean', 'median', 'min', 'max', 'range', 'standard deviation', 'diversity', 'total'. По умолчанию: 'mean'."
              },
              "zero_is_background": {
                "label": "Ноль — фон",
                "description": "Исключать ячейки зоны 0. По умолчанию: false."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "assess_route": {
            "name": "Оценка маршрута",
            "description": "Сегментирует линии маршрутов и вычисляет метрики рельефа для каждого сегмента по DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "routes": {
                "label": "Маршруты",
                "description": "Путь входного векторного слоя полилинейных маршрутов."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус поиска видимости в ячейках сетки (по умолчанию 15, минимум 4)."
              },
              "segment_length": {
                "label": "Длина сегмента",
                "description": "Целевая длина сегмента маршрута в единицах карты (по умолчанию 100.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора."
              }
            }
          },
          "breakline_mapping": {
            "name": "Картографирование линий перегиба",
            "description": "Картографирует линии перегиба путём пороговой обработки логарифмически преобразованной искривлённости и векторизации утончённых линейных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "threshold": {
                "label": "Порог",
                "description": "Минимальный порог логарифмической кривизны, используемый для извлечения структурных линий (по умолчанию 0.8)."
              },
              "min_length": {
                "label": "Мин. длина",
                "description": "Минимальная длина выходной линии в ячейках сетки (по умолчанию 3)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного векторного слоя (по умолчанию временный .shp)."
              }
            }
          },
          "convergence_index": {
            "name": "Индекс конвергенции",
            "description": "Сходимость/расходимость стока по локальному согласованию экспозиций. Выявляет долины (сходимость) и гребни (расходимость) без полной маршрутизации стока. Эффективная альтернатива алгоритмам направления стока.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "dem_void_filling": {
            "name": "Заполнение пустот DEM",
            "description": "Заполняет пустоты DEM с использованием вторичной поверхности и интерполированных смещений высот для бесшовного слияния.",
            "params": {
              "fill": {
                "label": "Заполнение",
                "description": "Путь растра DEM-заполнителя или типизированный растровый объект для заполнения пустот."
              },
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM (с пустотами) или типизированный растровый объект."
              },
              "edge_treatment": {
                "label": "Обработка краёв",
                "description": "Обработка краёв пустот: 'dem', 'fill' или 'average' (по умолчанию 'dem')."
              },
              "mean_plane_dist": {
                "label": "Расстояние до средней плоскости",
                "description": "Расстояние в ячейках от краёв пустот, за пределами которого смещения приравниваются к глобальному среднему смещению (по умолчанию 20)."
              },
              "weight_value": {
                "label": "Значение веса",
                "description": "Показатель степени обратных расстояний при интерполяции смещений вблизи краёв (по умолчанию 2.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "deviation_from_mean_elevation": {
            "name": "Отклонение от средней высоты",
            "description": "Вычисляет локальную топографическую z-оценку с использованием локального среднего и стандартного отклонения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина фильтра в ячейках (по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота фильтра в ячейках (по умолчанию filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "difference_from_mean_elevation": {
            "name": "Разность со средней высотой",
            "description": "Вычисляет разность между каждой высотой и локальной средней высотой.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина фильтра в ячейках (по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота фильтра в ячейках (по умолчанию filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "directional_relief": {
            "name": "Направленный рельеф",
            "description": "Вычисляет направленный рельеф путём трассировки лучей по высотам в заданном азимуте.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут направления в градусах по часовой стрелке от севера."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Необязательное максимальное расстояние луча в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "elev_above_pit": {
            "name": "Высота над ямой",
            "description": "Вычисляет превышение над ближайшей ячейкой ямы вниз по склону (или стоком на краю).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "elev_above_pit_dist": {
            "name": "Высота над ямой (расстояние)",
            "description": "Псевдоним elev_above_pit для совместимости.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "elevation_percentile": {
            "name": "Перцентиль высоты",
            "description": "Локальный процентильный ранг высоты в окрестности (0-100). Выявляет долины (низкий %), гребни (высокий %) и склоны (средний %). Метрика классификации форм рельефа, не зависящая от абсолютной высоты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина фильтра в ячейках (по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота фильтра в ячейках (по умолчанию filter_size_x). Псевдоним: filtery."
              },
              "sig_digits": {
                "label": "Значащие цифры",
                "description": "Число значащих десятичных знаков, сохраняемых при группировке (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "embankment_mapping": {
            "name": "Картографирование насыпей",
            "description": "Картографирует транспортные насыпи по DEM и дорожной сети с необязательным удалением поверхности насыпей путём интерполяции. Авторы: John Lindsay и Nigel VanNieuwenhuizen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "roads_vector": {
                "label": "Вектор дорог",
                "description": "Путь входного векторного слоя дорог (полилинейная геометрия)."
              },
              "embankment_max_width": {
                "label": "Макс. ширина насыпи",
                "description": "Максимальная ширина насыпи в единицах карты (по умолчанию 60.0)."
              },
              "max_upwards_increment": {
                "label": "Макс. приращение вверх",
                "description": "Максимально допустимое локальное приращение вверх при наращивании (по умолчанию 0.05)."
              },
              "min_road_width": {
                "label": "Мин. ширина дороги",
                "description": "Минимальная картографируемая ширина дороги в единицах карты (по умолчанию 6.0)."
              },
              "remove_embankments": {
                "label": "Удалять насыпи",
                "description": "Если true, дополнительно создаётся DEM с удалёнными насыпями путём локальной интерполяции."
              },
              "search_dist": {
                "label": "Расстояние поиска",
                "description": "Расстояние смещения затравочных точек дорог в единицах карты (по умолчанию 2.5)."
              },
              "spillout_slope": {
                "label": "Уклон растекания",
                "description": "Максимальный уклон стока в градусах для переходов вверх по склону (по умолчанию 4.0)."
              },
              "typical_embankment_max_height": {
                "label": "Типичная макс. высота насыпи",
                "description": "Типичная максимальная высота насыпи в единицах высот (по умолчанию 2.0)."
              },
              "typical_embankment_width": {
                "label": "Типичная ширина насыпи",
                "description": "Типичная ширина насыпи в единицах карты (по умолчанию 30.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь маски насыпей."
              },
              "output_dem": {
                "label": "Выходная DEM",
                "description": "Необязательный выходной путь DEM с удалёнными насыпями при remove_embankments=true."
              }
            }
          },
          "exposure_towards_wind_flux": {
            "name": "Экспозиция к потоку ветра",
            "description": "Вычисляет открытость рельефа относительно преобладающего направления ветра и экранирования горизонтом с наветренной стороны.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут преобладающего ветра в градусах по часовой стрелке от севера."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска угла наветренного горизонта в единицах карты."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования для проецированных DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "feature_preserving_smoothing": {
            "name": "Сглаживание с сохранением деталей",
            "description": "Сглаживает шероховатость DEM с сохранением перегибов склонов с помощью фильтрации векторов нормалей.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Нечётный размер фильтра в ячейках (по умолчанию 11)."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число итераций сглаживания (по умолчанию 3)."
              },
              "max_elevation_diff": {
                "label": "Макс. разница высот",
                "description": "Максимально допустимое изменение по вертикали относительно исходной DEM (по умолчанию inf)."
              },
              "normal_diff_threshold": {
                "label": "Порог разности нормалей",
                "description": "Максимальная разница углов нормалей в градусах (по умолчанию 8.0)."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "feature_preserving_smoothing_multiscale": {
            "name": "Многомасштабное сглаживание с сохранением деталей",
            "description": "Сглаживает шероховатость DEM с помощью многомасштабного продолжения от грубого к детальному. На каждом масштабе заново вычисляются нормали, применяется адаптивная устойчивая диффузия поля нормалей, а высоты восстанавливаются решением экранированного уравнения Пуассона.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "smoothing_amount": {
                "label": "Степень сглаживания",
                "description": "Общая степень сглаживания в диапазоне [0,1] (по умолчанию 0.65). Более высокие значения увеличивают объём диффузии, особенно на грубых масштабах."
              },
              "edge_preservation": {
                "label": "Сохранение границ",
                "description": "Сила сохранения границ в диапазоне [0,1] (по умолчанию 0.75). Более высокие значения сильнее подавляют сглаживание через основные перегибы склонов."
              },
              "scale_levels": {
                "label": "Уровни масштаба",
                "description": "Число уровней пирамиды для сглаживания от грубого к точному (по умолчанию 3)."
              },
              "fidelity": {
                "label": "Точность воспроизведения",
                "description": "Вес соответствия данным при экранированной реконструкции Пуассона (по умолчанию 0.45). Более высокие значения удерживают результат ближе к исходной DEM."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "fetch_analysis": {
            "name": "Анализ разгона волн",
            "description": "Вычисляет расстояние с наветренной стороны до первого топографического препятствия по заданному азимуту.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут ветра в градусах по часовой стрелке от севера."
              },
              "hgt_inc": {
                "label": "Приращение высоты",
                "description": "Порог приращения высоты в m/m (по умолчанию 0.05)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "fill_missing_data": {
            "name": "Заполнение пропущенных данных",
            "description": "Заполняет пропуски NoData методом обратно взвешенных расстояний по допустимым ячейкам на краях пропусков.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра или типизированный растровый объект."
              },
              "exclude_edge_nodata": {
                "label": "Исключать краевые NoData",
                "description": "Исключать из заполнения области NoData, связанные с краем (по умолчанию false). Псевдоним: no_edges."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Радиус поиска в ячейках сетки (по умолчанию 11)."
              },
              "weight": {
                "label": "Вес",
                "description": "Показатель степени обратных расстояний (по умолчанию 2.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "find_ridges": {
            "name": "Поиск гребней",
            "description": "Определяет потенциальные ячейки гребней и вершин в DEM с необязательным утончением линий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "line_thin": {
                "label": "Утончение линий",
                "description": "Применять итеративное утончение линий (по умолчанию true)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "hillshade": {
            "name": "Отмывка рельефа",
            "description": "Направленная отмывка рельефа от одного источника света (оттенки серого 0-255). Параметры азимута и высоты управляют направлением света. Быстрая визуализация рельефа для просмотра DEM и отображения на карте.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр DEM"
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Вертикальное преувеличение, применяемое к высотам"
              },
              "altitude": {
                "label": "Высота над горизонтом",
                "description": "Высота источника освещения над горизонтом в градусах"
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут освещения в градусах по часовой стрелке от севера"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "hypsometrically_tinted_hillshade": {
            "name": "Гипсометрически тонированная отмывка",
            "description": "Создаёт отображение рельефа в швейцарском стиле, смешивая многоазимутальную отмывку с гипсометрической окраской и необязательной атмосферной дымкой.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM."
              },
              "solar_altitude": {
                "label": "Высота Солнца",
                "description": "Высота солнца в градусах [0, 90]."
              },
              "hillshade_weight": {
                "label": "Вес отмывки",
                "description": "Вес смешивания отмывки рельефа в диапазоне [0, 1]."
              },
              "brightness": {
                "label": "Яркость",
                "description": "Управление яркостью в диапазоне [0, 1]."
              },
              "atmospheric_effects": {
                "label": "Атмосферные эффекты",
                "description": "Степень атмосферной дымки в диапазоне [0, 1]."
              },
              "palette": {
                "label": "Палитра",
                "description": "Имя палитры (atlas, high_relief, arid, soft, muted, viridis, dem, grey, white и др.)."
              },
              "reverse_palette": {
                "label": "Обратить палитру",
                "description": "Обратить порядок палитры."
              },
              "full_360_mode": {
                "label": "Полный режим 360",
                "description": "Использовать 8-направленное освещение вместо 4-направленного режима."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Множитель вертикального преувеличения."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра."
              }
            }
          },
          "local_hypsometric_analysis": {
            "name": "Локальный гипсометрический анализ",
            "description": "Вычисляет минимальный локальный гипсометрический интеграл по нелинейно выбранному диапазону масштабов окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 4)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Базовый размер шага в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число оцениваемых масштабов (по умолчанию 10)."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Нелинейность шага масштаба в диапазоне [1,4] (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра локального минимума HI."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра масштаба минимума HI."
              }
            }
          },
          "low_points_on_headwater_divides": {
            "name": "Низкие точки на водоразделах верховий",
            "description": "Находит низкие точки перевалов вдоль водоразделов между соседними подбассейнами верховий.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM без понижений или типизированный растровый объект."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Путь входного растра водотоков (положительные значения обозначают ячейки русла)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного векторного слоя (по умолчанию временный .shp)."
              }
            }
          },
          "max_downslope_elev_change": {
            "name": "Макс. изменение высоты вниз по склону",
            "description": "Вычисляет максимальное падение высоты к более низким соседним ячейкам.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "max_upslope_elev_change": {
            "name": "Макс. изменение высоты вверх по склону",
            "description": "Вычисляет максимальный прирост высоты к более высоким соседним ячейкам.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "min_downslope_elev_change": {
            "name": "Мин. изменение высоты вниз по склону",
            "description": "Вычисляет минимальное неотрицательное падение высоты к соседним ячейкам.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "multidirectional_hillshade": {
            "name": "Многонаправленная отмывка рельефа",
            "description": "Многонаправленная отмывка рельефа (8+ источников света), устраняющая артефакты затенения от одного источника. Сбалансированная видимость объектов для сложного рельефа; предпочтительна для публикаций и детального анализа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр DEM"
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Вертикальное преувеличение, применяемое к высотам"
              },
              "altitude": {
                "label": "Высота над горизонтом",
                "description": "Высота источника освещения над горизонтом в градусах"
              },
              "full_360_mode": {
                "label": "Полный режим 360",
                "description": "Объединять 8 источников света по всем 360 градусам вместо 4 по умолчанию"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра"
              }
            }
          },
          "num_downslope_neighbours": {
            "name": "Число соседей вниз по склону",
            "description": "Подсчитывает число ячеек из 8 соседей, расположенных ниже каждой ячейки DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "num_upslope_neighbours": {
            "name": "Число соседей вверх по склону",
            "description": "Подсчитывает число ячеек из 8 соседей, расположенных выше каждой ячейки DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "profile": {
            "name": "Профиль",
            "description": "Создаёт HTML-график профиля высот для одного или нескольких входных объектов полилиний по значениям растра поверхности.",
            "params": {
              "lines_vector": {
                "label": "Вектор линий",
                "description": "Путь входного полилинейного вектора."
              },
              "surface": {
                "label": "Поверхность",
                "description": "Путь входного растра поверхности или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного отчёта HTML."
              }
            }
          },
          "slope_vs_aspect_plot": {
            "name": "График уклона и экспозиции",
            "description": "Создаёт HTML-график радиального анализа уклона и экспозиции для входной DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "aspect_bin_size": {
                "label": "Размер бина экспозиции",
                "description": "Размер интервала экспозиции в градусах (по умолчанию 2.0)."
              },
              "min_slope": {
                "label": "Мин. уклон",
                "description": "Игнорировать уклоны ниже этого порога в градусах (по умолчанию 0.1)."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент вертикального масштабирования значений высот."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного отчёта HTML."
              }
            }
          },
          "slope_vs_elev_plot": {
            "name": "График уклона и высоты",
            "description": "Создаёт HTML-диаграмму анализа уклона и высоты для одной или нескольких DEM.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути входных DEM в виде строки с разделителями ';' или ',' либо в виде списка."
              },
              "watershed": {
                "label": "Водосбор",
                "description": "Необязательные растры водосборов, соответствующие каждой входной DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного отчёта HTML."
              }
            }
          },
          "surface_area_ratio": {
            "name": "Отношение площади поверхности",
            "description": "Отношение площади 3D-поверхности к планиметрической площади (метод Jenness). >1.0 — пересечённый рельеф, ≈1.0 — плоский. Безразмерная метрика шероховатости, позволяющая сравнивать рельеф разных регионов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "topographic_hachures": {
            "name": "Топографическая штриховка",
            "description": "Создаёт полилинии топографической штриховки по DEM с помощью линий стока вниз и вверх по склону, начинающихся от изолиний. Для этого инструмента намеренно сохранено указание авторства исходной версии.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "base": {
                "label": "База",
                "description": "Высота базовой изолинии (по умолчанию 0.0)."
              },
              "depth": {
                "label": "Глубина",
                "description": "Глубина рекурсивного заполнения в дивергентных областях (по умолчанию 16)."
              },
              "discretization": {
                "label": "Дискретизация",
                "description": "Длина шага линии тока в единицах средней ячейки (по умолчанию 0.5)."
              },
              "distmax": {
                "label": "Макс. расстояние",
                "description": "Максимальный множитель интервала для вставки дополнительных штрихов (по умолчанию 2.0)."
              },
              "distmin": {
                "label": "Мин. расстояние",
                "description": "Минимальный множитель интервала для усечения близко расположенных штрихов (по умолчанию 0.5)."
              },
              "interval": {
                "label": "Интервал",
                "description": "Значение интервала изолиний (по умолчанию 10.0)."
              },
              "separation": {
                "label": "Разделение",
                "description": "Номинальное расстояние между затравочными точками на изолиниях в единицах средней ячейки (по умолчанию 2.0)."
              },
              "slopemin": {
                "label": "Мин. уклон",
                "description": "Минимальный угол уклона в градусах для продолжения трассировки (по умолчанию 0.5)."
              },
              "smooth": {
                "label": "Сглаживание",
                "description": "Размер фильтра сглаживания изолиний (предпочтительно нечётное целое, по умолчанию 9)."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Минимальный угол изгиба изолинии в градусах, сохраняемый при упрощении (по умолчанию 10.0)."
              },
              "turnmax": {
                "label": "Макс. поворот",
                "description": "Максимально допустимый угол поворота в градусах при трассировке штрихов (по умолчанию 45.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "map_off_terrain_objects": {
            "name": "Картографирование объектов над рельефом",
            "description": "Картографирует сегменты объектов над рельефом в DSM с помощью выращивания областей с ограничением по уклону и необязательной фильтрации по минимальному размеру объекта.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DSM или типизированный растровый объект."
              },
              "max_slope": {
                "label": "Макс. уклон",
                "description": "Максимальный соединяющий уклон в градусах [1, 90] (по умолчанию inf, ограничивается 90)."
              },
              "min_feature_size": {
                "label": "Мин. размер объектов",
                "description": "Минимальный размер сохраняемого сегмента в ячейках (по умолчанию 0). Меньшие сегменты относятся к фоновому классу 1."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "remove_off_terrain_objects": {
            "name": "Удаление объектов над рельефом",
            "description": "Удаляет крутые объекты над рельефом из DEM с помощью нормализации белым top-hat, выращивания областей с ограничением по уклону и локальной интерполяции.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Максимальная ожидаемая ширина объекта в ячейках; приводится к нечётному размеру >= 3 (по умолчанию 11)."
              },
              "slope_threshold": {
                "label": "Порог уклона",
                "description": "Минимальный уклон края объекта в градусах (по умолчанию 15.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "ridge_and_valley_vectors": {
            "name": "Векторы гребней и долин",
            "description": "Извлекает векторы осевых линий гребней и долин из DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Размер окрестности для процентиля высот."
              },
              "ep_threshold": {
                "label": "Порог EP",
                "description": "Порог процентиля высот [5, 50]."
              },
              "slope_threshold": {
                "label": "Порог уклона",
                "description": "Минимальный порог уклона в градусах."
              },
              "min_length": {
                "label": "Мин. длина",
                "description": "Минимальная длина осевой линии в ячейках."
              },
              "output_ridges": {
                "label": "Выход гребней",
                "description": "Путь выходных осевых линий хребтов."
              },
              "output_valleys": {
                "label": "Выход долин",
                "description": "Путь выходных осевых линий долин."
              }
            }
          },
          "smooth_vegetation_residual": {
            "name": "Сглаживание остаточной растительности",
            "description": "Уменьшает остаточную шероховатость полога, маскируя высокие локальные отклики DEV на малых масштабах и повторно интерполируя замаскированные высоты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна DEV в ячейках (по умолчанию 30)."
              },
              "dev_threshold": {
                "label": "Порог отклонения",
                "description": "Минимальная величина DEV для выделения ячеек шероховатости (по умолчанию 1.0)."
              },
              "scale_threshold": {
                "label": "Порог масштаба",
                "description": "Максимальный масштаб, считающийся шероховатостью (по умолчанию 5)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "average_horizon_distance": {
            "name": "Среднее расстояние до горизонта",
            "description": "Вычисляет среднее расстояние до горизонта по направлениям азимута.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM/DSM."
              },
              "az_fraction": {
                "label": "Доля азимута",
                "description": "Шаг азимута в градусах [1, 45]."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска в единицах карты."
              },
              "observer_hgt_offset": {
                "label": "Смещение высоты наблюдателя",
                "description": "Превышение наблюдателя над поверхностью рельефа."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра."
              }
            }
          },
          "horizon_angle": {
            "name": "Угол горизонта",
            "description": "Вычисляет угол горизонта (максимальный уклон) по заданному направлению азимута.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут в градусах [0, 360)."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра."
              }
            }
          },
          "horizon_area": {
            "name": "Площадь горизонта",
            "description": "Вычисляет площадь полигона горизонта (в гектарах).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM/DSM."
              },
              "az_fraction": {
                "label": "Доля азимута",
                "description": "Шаг азимута в градусах [1, 45]."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска в единицах карты."
              },
              "observer_hgt_offset": {
                "label": "Смещение высоты наблюдателя",
                "description": "Превышение наблюдателя над поверхностью рельефа."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра."
              }
            }
          },
          "openness": {
            "name": "Открытость",
            "description": "Топографическая открытость Yokoyama: метрики положительной (открытые гребни/вершины) и отрицательной (замкнутые долины) открытости. Классификация форм рельефа и анализ видимости/микроклимата.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "dist": {
                "label": "Расстояние",
                "description": "Расстояние поиска в ячейках (по умолчанию 20)."
              },
              "neg_output": {
                "label": "Отрицательный выход",
                "description": "Необязательный выходной путь для отрицательной раскрытости."
              },
              "pos_output": {
                "label": "Положительный выход",
                "description": "Необязательный выходной путь для положительной раскрытости."
              }
            }
          },
          "shadow_animation": {
            "name": "Анимация теней",
            "description": "Создаёт интерактивный HTML-просмотрщик и анимированный GIF, показывающие тени рельефа в течение дня.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM/DSM."
              },
              "date": {
                "label": "Дата",
                "description": "Дата в формате DD/MM/YYYY."
              },
              "delay": {
                "label": "Задержка",
                "description": "Задержка кадра GIF в миллисекундах."
              },
              "image_height": {
                "label": "Высота изображения",
                "description": "Высота отображаемого изображения в пикселях."
              },
              "label": {
                "label": "Подпись",
                "description": "Необязательная подпись, отображаемая в просмотрщике."
              },
              "location": {
                "label": "Местоположение",
                "description": "Строка местоположения LAT/LON/UTC_OFFSET, например 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска горизонта в единицах карты."
              },
              "palette": {
                "label": "Палитра",
                "description": "Имя гипсометрической палитры (например, soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time_interval": {
                "label": "Интервал времени",
                "description": "Интервал между кадрами в минутах [1, 60]."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного HTML."
              }
            }
          },
          "shadow_image": {
            "name": "Изображение теней",
            "description": "Создаёт растр интенсивности теней рельефа для заданных даты, времени и местоположения.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM/DSM."
              },
              "date": {
                "label": "Дата",
                "description": "Дата в формате DD/MM/YYYY."
              },
              "location": {
                "label": "Местоположение",
                "description": "Строка местоположения LAT/LON/UTC_OFFSET, например 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска горизонта в единицах карты."
              },
              "palette": {
                "label": "Палитра",
                "description": "Имя гипсометрической палитры (например, soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time": {
                "label": "Время",
                "description": "Местное время в формате HH:MM или HH:MMAM/HH:MMPM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "sky_view_factor": {
            "name": "Фактор обзора неба",
            "description": "Вычисляет долю видимого неба по DEM/DSM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM/DSM."
              },
              "az_fraction": {
                "label": "Доля азимута",
                "description": "Шаг азимута в градусах [1, 45]."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска в единицах карты."
              },
              "observer_hgt_offset": {
                "label": "Смещение высоты наблюдателя",
                "description": "Превышение наблюдателя над поверхностью рельефа."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра."
              }
            }
          },
          "skyline_analysis": {
            "name": "Анализ линии горизонта",
            "description": "Выполняет анализ линии горизонта для одной или нескольких точек наблюдения и записывает векторный след горизонта и HTML-отчёт.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM/DSM."
              },
              "points": {
                "label": "Точки",
                "description": "Путь входного точечного вектора."
              },
              "az_fraction": {
                "label": "Доля азимута",
                "description": "Шаг азимута в градусах [0.01, 45]."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска в единицах карты."
              },
              "observer_hgt_offset": {
                "label": "Смещение высоты наблюдателя",
                "description": "Превышение наблюдателя над поверхностью рельефа."
              },
              "output_as_polygons": {
                "label": "Вывод в виде полигонов",
                "description": "Записывать горизонты в виде полигонов вместо полилиний."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный путь HTML-отчёта."
              }
            }
          },
          "time_in_daylight": {
            "name": "Время под солнцем",
            "description": "Вычисляет долю светлого времени суток, в течение которой каждая ячейка освещена (не находится в тени рельефа/объектов).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM/DSM."
              },
              "az_fraction": {
                "label": "Доля азимута",
                "description": "Размер интервала азимута в градусах (0, 360)."
              },
              "end_day": {
                "label": "День окончания",
                "description": "Конечный день года (1..366)."
              },
              "end_time": {
                "label": "Время окончания",
                "description": "Время окончания HH:MM:SS или 'sunset'."
              },
              "latitude": {
                "label": "Широта",
                "description": "Необязательное переопределение широты в градусах; иначе определяется по CRS DEM."
              },
              "longitude": {
                "label": "Долгота",
                "description": "Необязательное переопределение долготы в градусах; иначе определяется по CRS DEM."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска горизонта в единицах карты."
              },
              "start_day": {
                "label": "День начала",
                "description": "Начальный день года (1..366)."
              },
              "start_time": {
                "label": "Время начала",
                "description": "Время начала HH:MM:SS или 'sunrise'."
              },
              "utc_offset": {
                "label": "Смещение UTC",
                "description": "Необязательная строка смещения UTC вида UTC+00:00; если не задана, оценивается по центральной долготе."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра."
              }
            }
          },
          "viewshed": {
            "name": "Зона видимости",
            "description": "Вычисляет число станций видимости для точечных станций по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "stations": {
                "label": "Станции",
                "description": "Входной векторный файл точек — станций наблюдения."
              },
              "height": {
                "label": "Высота",
                "description": "Высота станции наблюдения над землёй в единицах Z DEM (по умолчанию 2.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "visibility_index": {
            "name": "Индекс видимости",
            "description": "Вычисляет индекс видимости на основе рельефа по выборочным зонам видимости.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска видимости в единицах карты."
              },
              "resolution_factor": {
                "label": "Коэффициент разрешения",
                "description": "Коэффициент разрешения выборки [1, 25]."
              },
              "station_height": {
                "label": "Высота станции",
                "description": "Высота наблюдателя над землёй."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра."
              }
            }
          },
          "accumulation_curvature": {
            "name": "Аккумуляционная кривизна",
            "description": "Вычисляет аккумуляционную кривизну по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "aspect": {
            "name": "Экспозиция",
            "description": "Направление наибольшего уклона (0°=N, 90°=E, 180°=S, 270°=W). Критически важно для анализа солнечной радиации, закономерностей растительности, микроклимата и экспозиции.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "casorati_curvature": {
            "name": "Кривизна Казорати",
            "description": "Вычисляет кривизну Казорати по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "curvedness": {
            "name": "Искривлённость",
            "description": "Вычисляет дескриптор формы поверхности «искривлённость» по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "difference_curvature": {
            "name": "Разностная кривизна",
            "description": "Вычисляет разностную кривизну по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "gaussian_curvature": {
            "name": "Гауссова кривизна",
            "description": "Вычисляет гауссову (внутреннюю) кривизну (произведение главных кривизн). Указывает локальную топологию поверхности: положительная (чаша/купол), отрицательная (седловина), нулевая (цилиндрическая). Классифицирует рельеф по категориям форм: выпуклые (гребни), вогнутые (долины), седловинные (перевалы/седловины). Используется в расширенной классификации форм рельефа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений для удобства чтения (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "generating_function": {
            "name": "Порождающая функция",
            "description": "Вычисляет порождающую функцию по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "horizontal_excess_curvature": {
            "name": "Горизонтальная избыточная кривизна",
            "description": "Вычисляет горизонтальную избыточную кривизну по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "maximal_curvature": {
            "name": "Максимальная кривизна",
            "description": "Вычисляет максимальную (наибольшую главную) кривизну по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "mean_curvature": {
            "name": "Средняя кривизна",
            "description": "Вычисляет среднюю кривизну (среднее главных кривизн). Связана с полной кривизной, но подчёркивает гладкость поверхности. Значения, близкие к 0, указывают на гладкий рельеф; высокие значения — на резкие изменения кривизны. Полезна для характеристики поверхности и обнаружения линий перегиба.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений для удобства чтения (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "minimal_curvature": {
            "name": "Минимальная кривизна",
            "description": "Вычисляет минимальную (наименьшую главную) кривизну по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "plan_curvature": {
            "name": "Плановая кривизна",
            "description": "Вычисляет плановую (горизонтальную) кривизну, измеряющую сходимость/расходимость стока поперёк изолиний. Положительные значения (сходимость) указывают на концентрацию стока к центру (вогнутость); отрицательные (расходимость) — на рассеяние стока от центра (выпуклость). Выявляет зоны боковой концентрации стока (долины) и зоны рассеяния (гребни). Необходима для прогнозирования распределения влажности почвы и подверженности оползням.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений для удобства чтения (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "principal_curvature_direction": {
            "name": "Направление главной кривизны",
            "description": "Вычисляет угол направления главной кривизны (в градусах).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "profile_curvature": {
            "name": "Профильная кривизна",
            "description": "Вычисляет профильную (вдоль склона) кривизну, измеряющую ускорение/замедление стока по направлению склона. Положительные значения (вогнутость) указывают на зоны ускорения стока (эрозионные); отрицательные (выпуклость) — на зоны замедления стока (аккумулятивные). Показывает форму склона: вогнутая (днища долин, эрозия), выпуклая (гребни, вынос материала), прямая (переходная).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений для удобства чтения (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "relative_aspect": {
            "name": "Относительная экспозиция",
            "description": "Вычисляет экспозицию рельефа относительно заданного пользователем азимута (от 0 до 180 градусов).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Опорный азимут в градусах по часовой стрелке от севера."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "ring_curvature": {
            "name": "Кольцевая кривизна",
            "description": "Вычисляет кольцевую кривизну (квадрат закручивания линий стока) по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "rotor": {
            "name": "Ротор",
            "description": "Вычисляет ротор (закручивание линий стока) по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "shape_index": {
            "name": "Индекс формы",
            "description": "Вычисляет дескриптор формы поверхности «индекс формы» по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "slope": {
            "name": "Уклон",
            "description": "Уклон по Zevenbergen-Thorne (градусы/радианы/проценты). Фундаментальная геоморфометрическая метрика; входные данные для последующего расчёта кривизны, направления стока, отмывки, видимости.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "units": {
                "label": "Единицы",
                "description": "Единицы выходных значений: degrees, radians, percent."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "tangential_curvature": {
            "name": "Тангенциальная кривизна",
            "description": "Вычисляет тангенциальную кривизну (составляющую в направлении В-З), аналогичную плановой кривизне, но направленную. Используется для комплексной характеристики кривизны, отражающей боковое расхождение стока перпендикулярно направлению склона. Часто сочетается с профильной кривизной для полного понимания трёхмерной кривизны.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений для удобства чтения (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "total_curvature": {
            "name": "Полная кривизна",
            "description": "Вычисляет полную кривизну (среднее квадратическое главных кривизн). Скалярная метрика, не зависящая от направления. Высокие значения указывают на сильно искривлённый рельеф (вершины, ямы); низкие — на плоский рельеф. Полезна как безразмерная метрика шероховатости для классификации рельефа и обнаружения аномалий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений для удобства чтения (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "unsphericity": {
            "name": "Несферичность",
            "description": "Вычисляет кривизну несферичности (половину разности главных кривизн) по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "vertical_excess_curvature": {
            "name": "Вертикальная избыточная кривизна",
            "description": "Вычисляет вертикальную избыточную кривизну по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент преобразования Z (по умолчанию 1.0). Псевдоним: zfactor."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Необязательное логарифмирование выходных значений (по умолчанию false). Псевдоним: log."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "average_normal_vector_angular_deviation": {
            "name": "Среднее угловое отклонение векторов нормалей",
            "description": "Вычисляет локальное среднее угловое отклонение между нормалями исходной и сглаженной поверхностей.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Нечётный размер окрестности в ячейках (по умолчанию 11). Псевдоним: filter."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "circular_variance_of_aspect": {
            "name": "Круговая дисперсия экспозиции",
            "description": "Вычисляет локальную круговую дисперсию экспозиции в скользящей окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter": {
                "label": "Фильтр",
                "description": "Нечётный размер окрестности в ячейках (по умолчанию 11)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "edge_density": {
            "name": "Плотность границ",
            "description": "Вычисляет локальную плотность перегибов склонов по угловым разностям векторов нормалей.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Нечётный размер окрестности в ячейках (по умолчанию 11). Псевдоним: filter."
              },
              "norm_diff": {
                "label": "Разность нормалей",
                "description": "Угловой порог вектора нормали в градусах (по умолчанию 5)."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "ruggedness_index": {
            "name": "Индекс пересечённости",
            "description": "Шероховатость рельефа по индексу TRI Riley (сумма квадратов разностей высот). Не зависящая от масштаба метрика классификации рельефа: низкая — гладкие равнины, высокая — пересечённые горы. Экологическое и геоморфологическое картографирование форм рельефа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "spherical_std_dev_of_normals": {
            "name": "Сферическое стандартное отклонение нормалей",
            "description": "Вычисляет сферическое стандартное отклонение локальных нормалей поверхности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Нечётный размер окрестности в ячейках (по умолчанию 11). Псевдоним: filter."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "standard_deviation_of_slope": {
            "name": "Стандартное отклонение уклона",
            "description": "Вычисляет локальное стандартное отклонение уклона как метрику шероховатости рельефа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size": {
                "label": "Размер фильтра",
                "description": "Нечётный размер фильтра в ячейках (по умолчанию 11)."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина фильтра в ячейках (по умолчанию filter_size). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота фильтра в ячейках (по умолчанию filter_size). Псевдоним: filtery."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат остаётся в памяти."
              }
            }
          },
          "elev_relative_to_min_max": {
            "name": "Высота относительно мин./макс.",
            "description": "Выражает каждую высоту в процентах (0–100) от диапазона высот растра.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода. Если не указан, результат хранится в памяти."
              }
            }
          },
          "geomorphons": {
            "name": "Геоморфоны",
            "description": "Классифицирует формы рельефа с помощью тернарных шаблонов прямой видимости по 8 направлениям, полученных сравнением зенитных и надирных углов, или 10 распространённых форм геоморфонов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "analyze_residuals": {
                "label": "Анализировать остатки",
                "description": "Если true, из DEM удаляется тренд по подобранной линейной плоскости перед классификацией."
              },
              "flatness_distance": {
                "label": "Расстояние плоскостности",
                "description": "Расстояние в ячейках, после которого порог плоскостности уменьшается с расстоянием до горизонта (по умолчанию 0)."
              },
              "flatness_threshold": {
                "label": "Порог плоскостности",
                "description": "Порог плоскостности в градусах (по умолчанию 1.0), применяемый к разности углов зенита и надира."
              },
              "output_forms": {
                "label": "Выход форм",
                "description": "Если true, выводятся 10 распространённых классов форм рельефа; иначе выводится исходный троичный код геоморфона, упорядоченный против часовой стрелки от востока."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное расстояние просмотра в ячейках для каждого направления (по умолчанию 50); конечная ячейка включается."
              },
              "skip_distance": {
                "label": "Расстояние пропуска",
                "description": "Расстояние в ячейках, пропускаемое перед оценкой линии видимости (по умолчанию 0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "hypsometric_analysis": {
            "name": "Гипсометрический анализ",
            "description": "Создаёт HTML-отчёт с гипсометрической кривой (площадь–высота) для одной или нескольких DEM.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути входных DEM в виде строки с разделителями ';' или ',' либо в виде списка."
              },
              "watershed": {
                "label": "Водосбор",
                "description": "Необязательные растры водосборов, соответствующие каждой входной DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного отчёта HTML."
              }
            }
          },
          "multiscale_topographic_position_class": {
            "name": "Многомасштабный класс топографического положения",
            "description": "Классифицирует каждую ячейку DEM по девятиклассовой системе относительного топографического положения широкого/локального масштаба с использованием двух мозаик масштабов DEVmax.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "local_min_scale": {
                "label": "Локальный мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках для локального диапазона масштабов (по умолчанию 5)."
              },
              "local_max_scale": {
                "label": "Локальный макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках для локального диапазона масштабов (по умолчанию 80)."
              },
              "local_step_size": {
                "label": "Локальный размер шага",
                "description": "Приращение масштаба в ячейках для локального диапазона масштабов (по умолчанию 1). Псевдоним: local_step."
              },
              "broad_min_scale": {
                "label": "Широкий мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках для широкого диапазона масштабов (по умолчанию 500)."
              },
              "broad_max_scale": {
                "label": "Широкий макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках для широкого диапазона масштабов (по умолчанию 2000)."
              },
              "broad_step_size": {
                "label": "Широкий размер шага",
                "description": "Приращение масштаба в ячейках для широкого диапазона масштабов (по умолчанию 20). Псевдоним: broad_step."
              },
              "local_threshold": {
                "label": "Локальный порог",
                "description": "Порог DEV для классификации мозаики локального масштаба на состояния «ложбина», «среднее положение» и «холм» (по умолчанию 0.5)."
              },
              "broad_threshold": {
                "label": "Широкий порог",
                "description": "Порог DEV для классификации мозаики широкого масштаба на состояния «низменность», «промежуточное» и «возвышенность» (по умолчанию 0.5)."
              },
              "min_patch_size": {
                "label": "Мин. размер участка",
                "description": "Необязательный минимальный размер участка в ячейках для фильтрации участков после классификации (по умолчанию 0, отключено)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для категориального растра из девяти классов."
              },
              "output_confidence": {
                "label": "Выход уверенности",
                "description": "Необязательный выходной путь для растра достоверности в диапазоне [0, 1]."
              }
            }
          },
          "pennock_landform_classification": {
            "name": "Классификация форм рельефа по Пенноку",
            "description": "Классифицирует элементы форм рельефа на семь классов рельефа по Pennock et al. (1987).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "plan_curv_threshold": {
                "label": "Порог плановой кривизны",
                "description": "Порог плановой кривизны в градусах (по умолчанию 0.0)."
              },
              "prof_curv_threshold": {
                "label": "Порог профильной кривизны",
                "description": "Порог профильной кривизны в градусах (по умолчанию 0.1)."
              },
              "slope_threshold": {
                "label": "Порог уклона",
                "description": "Порог уклона в градусах (по умолчанию 3.0)."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Необязательный коэффициент вертикального масштабирования (если < 0 и CRS географическая, оценивается по средней широте)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "percent_elev_range": {
            "name": "Процент диапазона высот",
            "description": "Вычисляет локальное топографическое положение в процентах от диапазона высот окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина фильтра в ячейках (по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота фильтра в ячейках (по умолчанию filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "relative_topographic_position": {
            "name": "Относительное топографическое положение",
            "description": "Вычисляет RTP с использованием минимальной, средней и максимальной высоты окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "filter_size_x": {
                "label": "Размер фильтра X",
                "description": "Нечётная ширина фильтра в ячейках (по умолчанию 11). Псевдоним: filterx."
              },
              "filter_size_y": {
                "label": "Размер фильтра Y",
                "description": "Нечётная высота фильтра в ячейках (по умолчанию filter_size_x). Псевдоним: filtery."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода."
              }
            }
          },
          "max_anisotropy_dev": {
            "name": "Макс. отклонение анизотропии",
            "description": "Вычисляет максимальную анизотропию отклонения высот в диапазоне масштабов окрестности. Автор: Dan Newman.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 3)."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках (по умолчанию 100)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 2). Псевдоним: step."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра величины анизотропии."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра, хранящего масштаб максимального отклика."
              }
            }
          },
          "max_anisotropy_dev_signature": {
            "name": "Сигнатура макс. отклонения анизотропии",
            "description": "Вычисляет многомасштабные сигнатуры анизотропии для входных точечных участков и записывает HTML-отчёт. Автор: Dan Newman.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM."
              },
              "points": {
                "label": "Точки",
                "description": "Путь входного векторного файла точек или мультиточек."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 1)."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках (по умолчанию 100)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для HTML-отчёта о сигнатуре."
              }
            }
          },
          "max_difference_from_mean": {
            "name": "Макс. разность со средним",
            "description": "Вычисляет максимальную абсолютную разность от среднего в диапазоне масштабов окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 1)."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках (по умолчанию 100)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра величины максимальной разности."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра, хранящего масштаб максимального отклика."
              }
            }
          },
          "max_elevation_deviation": {
            "name": "Макс. отклонение высоты",
            "description": "Вычисляет максимальное стандартизированное отклонение высот (DEVmax) в диапазоне масштабов окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 1)."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках (по умолчанию 100)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "min_vertical": {
                "label": "Мин. вертикаль",
                "description": "Минимальный порог локального стандартного отклонения; отклики слабо выраженного рельефа подавляются (по умолчанию 0.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра величины DEVmax."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра, хранящего масштаб максимального отклика."
              }
            }
          },
          "max_elev_dev_signature": {
            "name": "Сигнатура макс. отклонения высоты",
            "description": "Вычисляет многомасштабные сигнатуры отклонения высот для входных точечных участков и записывает HTML-отчёт.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM."
              },
              "points": {
                "label": "Точки",
                "description": "Путь входного векторного файла точек или мультиточек."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 1)."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках (по умолчанию 100)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 10). Псевдоним: step."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для HTML-отчёта о сигнатуре."
              }
            }
          },
          "multiscale_curvatures": {
            "name": "Многомасштабные кривизны",
            "description": "Вычисляет многомасштабные кривизны и индексы на основе кривизны по DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект. Псевдоним: dem."
              },
              "curv_type": {
                "label": "Тип кривизны",
                "description": "Тип кривизны."
              },
              "out_mag": {
                "label": "Выход магнитуды",
                "description": "Необязательный выходной путь для величины. Псевдоним: output."
              },
              "out_scale": {
                "label": "Выход масштаба",
                "description": "Необязательный выходной путь для масштаба при num_steps > 1."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус окрестности поиска в ячейках сетки."
              },
              "step": {
                "label": "Шаг",
                "description": "Размер шага."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число выбираемых шагов масштаба."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Коэффициент нелинейности шага."
              },
              "log_transform": {
                "label": "Логарифмическое преобразование",
                "description": "Применять знаковое логарифмическое преобразование. Псевдоним: log."
              },
              "standardize": {
                "label": "Стандартизировать",
                "description": "Стандартизировать каждый масштаб в z-оценки."
              }
            }
          },
          "multiscale_elevated_index": {
            "name": "Многомасштабный индекс возвышенности",
            "description": "Вычисляет растры многомасштабного индекса возвышенности (MsEI) и ключевого масштаба с использованием остатков гауссова масштабного пространства.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус поиска в ячейках сетки (по умолчанию 2)."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число оцениваемых масштабов (по умолчанию 100)."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Нелинейность шага масштаба в диапазоне [1,4] (по умолчанию 1.1)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Базовый размер шага в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра индекса."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра ключевого масштаба."
              }
            }
          },
          "multiscale_elevation_percentile": {
            "name": "Многомасштабный перцентиль высоты",
            "description": "Вычисляет наиболее экстремальный локальный процентиль высоты в диапазоне масштабов окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 4)."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число оцениваемых масштабов (по умолчанию 10)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Показатель нелинейного масштабирования; при >1.0 масштабы группируются в сторону более высоких разрешений (по умолчанию 1.0)."
              },
              "sig_digits": {
                "label": "Значащие цифры",
                "description": "Число значащих десятичных знаков при группировке процентилей (по умолчанию 3)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра величины процентиля."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра, хранящего масштаб наиболее экстремального отклика процентиля."
              }
            }
          },
          "multiscale_low_lying_index": {
            "name": "Многомасштабный индекс низин",
            "description": "Вычисляет растры многомасштабного индекса низменности (MsLLI) и ключевого масштаба с использованием остатков гауссова масштабного пространства.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус поиска в ячейках сетки (по умолчанию 2)."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число оцениваемых масштабов (по умолчанию 100)."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Нелинейность шага масштаба в диапазоне [1,4] (по умолчанию 1.1)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Базовый размер шага в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра индекса."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра ключевого масштаба."
              }
            }
          },
          "multiscale_roughness": {
            "name": "Многомасштабная шероховатость",
            "description": "Вычисляет шероховатость поверхности в диапазоне масштабов окрестности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 1)."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках (по умолчанию 100)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра величины шероховатости."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра, хранящего масштаб максимального отклика."
              }
            }
          },
          "multiscale_roughness_signature": {
            "name": "Сигнатура многомасштабной шероховатости",
            "description": "Вычисляет многомасштабные сигнатуры шероховатости для входных точечных участков и записывает HTML-отчёт.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM."
              },
              "points": {
                "label": "Точки",
                "description": "Путь входного векторного файла точек или мультиточек."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 1)."
              },
              "max_scale": {
                "label": "Макс. масштаб",
                "description": "Максимальный радиус полуокна в ячейках (по умолчанию 100)."
              },
              "step_size": {
                "label": "Размер шага",
                "description": "Приращение масштаба в ячейках (по умолчанию 1). Псевдоним: step."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для HTML-отчёта о сигнатуре."
              }
            }
          },
          "multiscale_std_dev_normals": {
            "name": "Многомасштабное стандартное отклонение нормалей",
            "description": "Вычисляет максимальное сферическое стандартное отклонение нормалей поверхности по нелинейно выбранному диапазону масштабов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 4)."
              },
              "step": {
                "label": "Шаг",
                "description": "Базовый размер шага в ячейках, используемый нелинейным расписанием масштабов (по умолчанию 1)."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число выбираемых масштабов (по умолчанию 10)."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Показатель нелинейности для расписания масштабов (по умолчанию 1.0)."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для растра величины сферического стандартного отклонения."
              },
              "output_scale": {
                "label": "Выходной масштаб",
                "description": "Необязательный выходной путь для растра, хранящего масштаб максимального отклика."
              }
            }
          },
          "multiscale_std_dev_normals_signature": {
            "name": "Сигнатура многомасштабного стандартного отклонения нормалей",
            "description": "Вычисляет масштабные сигнатуры сферического стандартного отклонения для входных точечных участков и записывает HTML-отчёт.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM."
              },
              "points": {
                "label": "Точки",
                "description": "Путь входного векторного файла точек или мультиточек."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 4)."
              },
              "step": {
                "label": "Шаг",
                "description": "Базовый размер шага в ячейках, используемый нелинейным расписанием масштабов (по умолчанию 1)."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число выбираемых масштабов (по умолчанию 10)."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Показатель нелинейности для расписания масштабов (по умолчанию 1.0)."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Коэффициент преобразования Z, если вертикальные и горизонтальные единицы различаются (по умолчанию 1.0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для HTML-отчёта о сигнатуре."
              }
            }
          },
          "multiscale_topographic_position_image": {
            "name": "Многомасштабное изображение топографического положения",
            "description": "Создаёт упакованное RGB-изображение многомасштабного топографического положения по растрам DEVmax локального, среднего и широкого масштабов.",
            "params": {
              "local": {
                "label": "Локальный",
                "description": "Путь входного растра DEVmax локального масштаба."
              },
              "meso": {
                "label": "Мезо",
                "description": "Путь входного растра DEVmax мезомасштаба."
              },
              "broad": {
                "label": "Широкий",
                "description": "Путь входного растра DEVmax широкого масштаба."
              },
              "hillshade": {
                "label": "Отмывка рельефа",
                "description": "Необязательный путь растра отмывки рельефа, используемого для модуляции освещения."
              },
              "lightness": {
                "label": "Светлота",
                "description": "Коэффициент масштабирования светлоты изображения (по умолчанию 1.2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для упакованного RGB-растра."
              }
            }
          },
          "topographic_position_animation": {
            "name": "Анимация топографического положения",
            "description": "Создаёт интерактивный HTML-просмотрщик и анимированный GIF, показывающие DEV или DEVmax на нелинейно выбранных масштабах.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растра DEM или типизированный растровый объект."
              },
              "delay": {
                "label": "Задержка",
                "description": "Задержка кадра GIF в миллисекундах."
              },
              "image_height": {
                "label": "Высота изображения",
                "description": "Высота отображаемого изображения в пикселях."
              },
              "label": {
                "label": "Подпись",
                "description": "Необязательная подпись, отображаемая в просмотрщике."
              },
              "min_scale": {
                "label": "Мин. масштаб",
                "description": "Минимальный радиус полуокна в ячейках (по умолчанию 1)."
              },
              "num_steps": {
                "label": "Число шагов",
                "description": "Число шагов анимации (по умолчанию 10)."
              },
              "palette": {
                "label": "Палитра",
                "description": "Имя палитры для раскраски значений DEV."
              },
              "step_nonlinearity": {
                "label": "Нелинейность шага",
                "description": "Показатель нелинейности масштаба в диапазоне [1, 4], задающий распределение от грубого к точному."
              },
              "use_dev_max": {
                "label": "Использовать макс. отклонение",
                "description": "Если true, кадры накапливают наибольший по модулю отклик DEV, встреченный до этого момента."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного HTML."
              }
            }
          },
          "topo_render": {
            "name": "Визуализация рельефа",
            "description": "Создаёт псевдотрёхмерное отображение рельефа с использованием окраски палитрой, отмывки, теней и ослабления.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Путь входного растра DEM."
              },
              "palette": {
                "label": "Палитра",
                "description": "Имя палитры (soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "reverse_palette": {
                "label": "Обратить палитру",
                "description": "Обратить порядок палитры."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут источника света в градусах [0, 360]."
              },
              "altitude": {
                "label": "Высота над горизонтом",
                "description": "Высота источника света в градусах [0, 90]."
              },
              "clipping_polygon": {
                "label": "Полигон обрезки",
                "description": "Необязательный путь векторного слоя полигонов; отрисовываются только ячейки DEM внутри полигонов."
              },
              "background_hgt_offset": {
                "label": "Смещение высоты фона",
                "description": "Вертикальное смещение от минимальной высоты DEM до фоновой плоскости."
              },
              "background_clr": {
                "label": "Цвет фона",
                "description": "Цвет фона RGBA в виде массива [r,g,b,a]."
              },
              "attenuation_parameter": {
                "label": "Параметр затухания",
                "description": "Показатель степени затухания с расстоянием (>= 0)."
              },
              "ambient_light": {
                "label": "Рассеянный свет",
                "description": "Величина рассеянного освещения в диапазоне [0, 1]."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Множитель вертикального преувеличения."
              },
              "max_dist": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние поиска теней в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра."
              }
            }
          },
          "add_surface_information": {
            "name": "Добавление информации о поверхности",
            "description": "Добавляет к каждому объекту статистику поверхности по растру высот — Z, длину 3D-поверхности, площадь 3D-поверхности, мин./макс./среднее Z и мин./макс./средний уклон — в виде полей атрибутов без изменения входной геометрии, аналогично ArcGIS Add Surface Information.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки, линии или полигоны) с той же CRS, что и поверхность."
              },
              "surface": {
                "label": "Поверхность",
                "description": "Растр высот/поверхности для выборки значений."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "properties": {
                "label": "Свойства",
                "description": "Список групп свойств поверхности через запятую для добавления: Z, SURFACE_LENGTH, SURFACE_AREA, MIN_MAX_MEAN_Z, MIN_MAX_AVG_SLOPE. По умолчанию: все применимые к геометрии слоя."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Интервал уплотнения в единицах CRS для выборки по линиям и периметрам; длинные сегменты разбиваются, чтобы следовать поверхности. По умолчанию: размер ячейки растра."
              },
              "method": {
                "label": "Метод",
                "description": "Выборка поверхности в вершинах: 'bilinear' (по умолчанию) или 'nearest'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала поверхности для выборки, начиная с 1 (по умолчанию 1)."
              }
            }
          },
          "add_z_information": {
            "name": "Добавление информации о Z",
            "description": "Добавляет к 3D-объектам статистику геометрии, производную от Z — точечное/мин./макс./среднее Z, 3D-длину, площадь поверхности и объём сетки, статистику уклона и число вершин (ArcGIS Add Z Information). vector_summary_statistics и attribute_histogram обобщают атрибуты, а не геометрию, а polygon_volume / surface_volume измеряют растр относительно опорной плоскости, так что пока ничто не аннотирует 3D-векторный объект по его собственным Z.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Трёхмерные точечные, линейные, полигональные или multipatch-объекты. Учтите, что нулевое значение Z неотличимо от отсутствующего Z, поэтому 'features_with_z' является подсказкой, а не гарантией."
              },
              "output": {
                "label": "Выход",
                "description": "Входные объекты с добавленными запрошенными полями. Если не указан, результат хранится в памяти."
              },
              "properties": {
                "label": "Свойства",
                "description": "Разделённое запятыми подмножество spot_z, min_z, max_z, mean_z, length_3d, surface_area, volume, min_slope, max_slope, mean_slope, point_count, vertex_count. По умолчанию: все (поля, неприменимые к геометрии, остаются null)."
              },
              "noise_filtering": {
                "label": "Фильтрация шума",
                "description": "Процент (0-50), отсекаемый с каждого конца распределения Z перед вычислением min_z / max_z, чтобы одиночная выбросная вершина не определяла итоговые экстремумы. По умолчанию 0."
              }
            }
          },
          "adjust_3d_z": {
            "name": "Корректировка 3D Z",
            "description": "Применяет преобразование единиц Z, вертикальное смещение и/или множитель к ординатам Z 3D-объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (объекты должны содержать координаты Z)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного векторного слоя. Если не указан, результат хранится в памяти."
              },
              "factor": {
                "label": "Коэффициент",
                "description": "Множитель, применяемый к Z (по умолчанию 1.0). Полезен для вертикального преувеличения или масштаба датума."
              },
              "offset": {
                "label": "Смещение",
                "description": "Аддитивное вертикальное смещение, применяемое после множителя, в целевых единицах (по умолчанию 0.0)."
              },
              "from_unit": {
                "label": "Из единиц",
                "description": "Предустановка единиц Z источника (meters, feet, us_feet, centimeters, millimeters, kilometers, miles, yards, inches). Требует to_unit."
              },
              "to_unit": {
                "label": "В единицы",
                "description": "Предустановка целевых единиц Z. Требует from_unit. Z масштабируется на (метров-на-from_unit / метров-на-to_unit)."
              }
            }
          },
          "adjust_stream_to_raster": {
            "name": "Корректировка водотоков по растру",
            "description": "Перемещает вершины полилиний водотоков на путь стока, определяемый DEM, чтобы векторная гидрография и поверхность высот согласовывались: узлы привязываются к ячейкам с высокой аккумуляцией, а между ними трассируется цепочка указателя D8. Операция, обратная врезке водотоков. Аналог ArcGIS Adjust Stream To Raster.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Полилинейные объекты водотоков для корректировки."
              },
              "dem": {
                "label": "DEM",
                "description": "Растр поверхности, определяющий действительный путь стока."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных скорректированных водотоков. Если не указан, результат хранится в памяти."
              },
              "snap_distance": {
                "label": "Расстояние привязки",
                "description": "Радиус поиска в единицах карты для привязки узлов к ячейке с высокой аккумуляцией (по умолчанию: 5 ячеек)."
              },
              "channel_threshold": {
                "label": "Порог русла",
                "description": "Значение аккумуляции стока (в ячейках), начиная с которого ячейка считается руслом при привязке (по умолчанию: 1% от максимальной аккумуляции DEM)."
              },
              "remove_disconnected": {
                "label": "Удалять несвязанные",
                "description": "Удалять линии, которые невозможно трассировать (по умолчанию true). Если false, они передаются без изменений и помечаются."
              },
              "output_stream_raster": {
                "label": "Выходной растр водотоков",
                "description": "Необязательный растр, отмечающий скорректированные ячейки водотоков."
              },
              "output_flow_direction": {
                "label": "Выход направления стока",
                "description": "Необязательный растр указателей D8, полученный из DEM."
              },
              "output_split_points": {
                "label": "Выход точек разделения",
                "description": "Необязательные точки, где трассировка по указателям не удалась и был использован резервный метод наименьшей стоимости."
              }
            }
          },
          "aggregate_multidimensional_raster": {
            "name": "Агрегирование многомерного растра",
            "description": "Группирует срезы растрового куба вдоль его измерения в бины и сводит каждый бин к одному выходному каналу — ежедневные сцены в месячные композиты, десятилетие в годовые средние (ArcGIS Aggregate Multidimensional Raster). cell_statistics раунда 17 сводит стек только к одному слою и не имеет понятия измерения, а multidimensional_anomaly раунда 16 выполняет обратную операцию и сохраняет число срезов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Один многоканальный растр (каждый канал — срез) или разделённый запятыми список совмещённых растров."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной многоканальный растр, по одному каналу на интервал. Если не указан, результат хранится в памяти."
              },
              "dimension": {
                "label": "Измерение",
                "description": "Имя измерения, используется только в отчёте (по умолчанию 'slice')."
              },
              "dimension_values": {
                "label": "Значения измерения",
                "description": "Разделённые запятыми координаты каждого среза, строго возрастающие. По умолчанию используется индекс среза, начиная с 1."
              },
              "aggregation_definition": {
                "label": "Определение агрегирования",
                "description": "'all' (по умолчанию), 'interval_value', 'interval_count' или 'interval_ranges'."
              },
              "interval_value": {
                "label": "Значение интервала",
                "description": "Ширина интервала в единицах измерения, для 'interval_value'."
              },
              "interval_count": {
                "label": "Число интервалов",
                "description": "Число интервалов равной ширины, для 'interval_count'."
              },
              "interval_ranges": {
                "label": "Диапазоны интервалов",
                "description": "Явные интервалы в виде 'start:end,start:end', для 'interval_ranges'."
              },
              "aggregation_method": {
                "label": "Метод агрегирования",
                "description": "'mean' (по умолчанию), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' или 'variety'."
              },
              "percentile_value": {
                "label": "Значение перцентиля",
                "description": "Процентиль в диапазоне [0, 100] для метода 'percentile' (по умолчанию 50)."
              },
              "ignore_nodata": {
                "label": "Игнорировать NoData",
                "description": "Пропускать срезы NoData для каждой ячейки (по умолчанию true). Если false, один срез NoData делает весь интервал NoData в этой ячейке."
              }
            }
          },
          "aggregate_points": {
            "name": "Агрегирование точек",
            "description": "Группирует точки, находящиеся в пределах расстояния агрегирования друг от друга, в полигоны кластеров (выпуклая оболочка или буферизованное объединение), каждый из которых содержит число точек и необязательные суммы полей по кластеру, аналогично ArcGIS Aggregate Points.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (Point или MultiPoint)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "aggregation_distance": {
                "label": "Расстояние агрегирования",
                "description": "Максимальное расстояние между точками, при котором они объединяются в один кластер (в единицах карты)."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Минимальное число точек, необходимое для вывода кластера (по умолчанию 2; укажите 1, чтобы сохранить одиночные точки)."
              },
              "method": {
                "label": "Метод",
                "description": "'convex_hull' (по умолчанию) или 'buffer' (объединение буферов с последующим сжатием)."
              },
              "sum_fields": {
                "label": "Суммируемые поля",
                "description": "Разделённые запятыми числовые поля для суммирования по кластерам (выходные столбцы 'sum_<field>')."
              }
            }
          },
          "aggregate_polygons": {
            "name": "Агрегирование полигонов",
            "description": "Объединяет полигоны в пределах расстояния агрегирования в более крупные полигоны (морфологическое закрытие) с фильтрами минимальной площади и минимального размера отверстий и необязательным слоем барьеров, которые агрегирование не может пересекать.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой, формат определяется автоматически (или дескриптор слоя в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "aggregation_distance": {
                "label": "Расстояние агрегирования",
                "description": "Полигоны, находящиеся друг от друга на этом расстоянии (в единицах CRS) или ближе, объединяются. Радиус морфологического замыкания задаётся равным половине этого значения."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Удалять объединённые полигоны, площадь которых (в квадратных единицах CRS) меньше этого значения. По умолчанию: сохранять все."
              },
              "min_hole_size": {
                "label": "Мин. размер отверстия",
                "description": "Заполнять внутренние отверстия, площадь которых (в квадратных единицах CRS) меньше этого значения. По умолчанию: сохранять все отверстия."
              },
              "barrier": {
                "label": "Барьер",
                "description": "Необязательный векторный слой барьеров (линии или полигоны), которые объединение не может пересекать; перемычки, пересекающие барьер, разрываются. Исходные входные полигоны никогда не разделяются."
              }
            }
          },
          "align_features": {
            "name": "Выравнивание объектов",
            "description": "Подгоняет рёбра исходных линий/полигонов к близлежащему доверенному целевому слою в пределах расстояния поиска, подтягивая целые участки рёбер (а не только концы) с плавным переходом и совпадающими общими границами, аналогично ArcGIS Align Features.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Исходный векторный слой для выравнивания (линии или полигоны)."
              },
              "target": {
                "label": "Цель",
                "description": "Достоверный целевой слой (линии или границы полигонов), к которому притягиваются вершины исходного слоя."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер определяется расширением). Если не указан, результат сохраняется в памяти."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное расстояние (в единицах CRS), на которое исходная вершина может быть притянута к целевой. Обязательный параметр."
              },
              "match_field": {
                "label": "Поле сопоставления",
                "description": "Необязательное поле атрибутов источника; кандидатами для вершин этого объекта являются только целевые рёбра, значение target_match_field которых совпадает."
              },
              "target_match_field": {
                "label": "Поле сопоставления цели",
                "description": "Поле атрибутов цели, сравниваемое с match_field. Если не указано, используется имя match_field; требует match_field."
              }
            }
          },
          "analyze_changes_ccdc": {
            "name": "Анализ изменений методом CCDC",
            "description": "Непрерывное выявление изменений CCDC по плотному временному ряду изображений (аналог ArcGIS Analyze Changes Using CCDC): попиксельная гармоническая (сезонная) регрессия OLS, затем скользящий тест остатков (k×RMSE, мин. число последовательных аномалий), который объявляет разрывы и переподбирает сегменты. Выдаёт растры числа разрывов, даты первого разрыва и RMSE/уклона/амплитуды начального сегмента — сезонную историю изменений с несколькими разрывами, которую не могут дать ежегодный landtrendr и двухдатный change_vector_analysis.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Один многоканальный растр (каждый канал — временной срез) ИЛИ список путей совмещённых одноканальных растров через запятую, в хронологическом порядке."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр числа разрывов (разрывы, обнаруженные по каждому пикселю). Если не указан, сохраняется в памяти."
              },
              "dates": {
                "label": "Даты",
                "description": "Числовые даты через запятую (десятичные годы или номера дней), соответствующие срезам. По умолчанию 0,1,2,..."
              },
              "period": {
                "label": "Период",
                "description": "Длина одного сезонного цикла в единицах 'dates' (по умолчанию 1.0 для десятичных лет; используйте 365 для номеров дней)."
              },
              "harmonic_order": {
                "label": "Порядок гармоник",
                "description": "Число пар гармоник синус/косинус на годовой частоте (по умолчанию 1 = только годовая; 2 добавляет полугодовой член)."
              },
              "change_threshold": {
                "label": "Порог изменения",
                "description": "Порог аномалии как кратность k от RMSE сегмента (по умолчанию 3.0). Остаток > k×RMSE помечает наблюдение."
              },
              "min_consecutive": {
                "label": "Мин. последовательных",
                "description": "Число последовательных помеченных наблюдений, необходимое для объявления разрыва (по умолчанию 3)."
              },
              "min_observations": {
                "label": "Мин. наблюдений",
                "description": "Минимальное число действительных наблюдений для инициализации гармонической модели сегмента (по умолчанию 12). Пиксели с меньшим числом действительных наблюдений становятся NoData."
              },
              "band": {
                "label": "Канал",
                "description": "Для входа в виде списка через запятую: номер канала (с 1), читаемого из каждого растра (по умолчанию 1). Игнорируется для одного многоканального входа."
              },
              "break_date_output": {
                "label": "Выход даты разрыва",
                "description": "Необязательный растр даты первого обнаруженного разрыва по каждому пикселю (NoData там, где разрыва нет)."
              },
              "rmse_output": {
                "label": "Выход RMSE",
                "description": "Необязательный растр RMSE гармонической модели начального сегмента."
              },
              "slope_output": {
                "label": "Выход уклона",
                "description": "Необязательный растр коэффициента линейного тренда (наклона) начального сегмента."
              },
              "amplitude_output": {
                "label": "Выход амплитуды",
                "description": "Необязательный растр амплитуды первой гармоники начального сегмента sqrt(a²+b²)."
              }
            }
          },
          "apply_radiometric_calibration": {
            "name": "Применение радиометрической калибровки",
            "description": "Преобразует исходные цифровые значения SAR в калиброванное обратное рассеяние — бета-ноль, сигма-ноль или гамма-ноль — чтобы съёмки стали физически сопоставимыми и к ним применялись опубликованные пороги (ArcGIS Apply Radiometric Calibration). Ни один инструмент ни в одном реестре этого не делает: rescale_value_range — линейное растяжение без радиометрического смысла, а multilook, sar_coherence, спекл-фильтры Ли и compute_sar_indices используют любые переданные им значения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр SAR в цифровых значениях, амплитуде, интенсивности или дБ (см. 'input_units')."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр калиброванного обратного рассеяния. Если не указан, сохраняется в памяти."
              },
              "calibration_type": {
                "label": "Тип калибровки",
                "description": "'sigma0' (по умолчанию), 'beta0' или 'gamma0'. sigma0 и gamma0 требуют 'incidence_angle'."
              },
              "calibration_constant": {
                "label": "Константа калибровки",
                "description": "Калибровочная константа сенсора A (по умолчанию 1.0). Игнорируется, если задан 'calibration_lut'."
              },
              "calibration_lut": {
                "label": "LUT калибровки",
                "description": "Необязательный совмещённый растр калибровочных констант A по ячейкам, переопределяющий 'calibration_constant'."
              },
              "incidence_angle": {
                "label": "Угол падения",
                "description": "Локальный угол падения в градусах: константа или путь к совмещённому растру. Обязателен для 'sigma0' и 'gamma0'."
              },
              "input_units": {
                "label": "Входные единицы",
                "description": "'dn' (по умолчанию), 'amplitude', 'intensity' или 'db'. dn и amplitude возводятся в квадрат для получения мощности; db предварительно делинеаризуется."
              },
              "output_units": {
                "label": "Выходные единицы",
                "description": "'linear' (по умолчанию) или 'db'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер калибруемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "apportion_polygon": {
            "name": "Пропорциональное распределение по полигонам",
            "description": "Переносит числовые атрибуты из исходного слоя полигонов в целевой слой полигонов пропорционально площади перекрытия (дазиметрическая переагрегация между системами зон), аналогично ArcGIS Apportion Polygon.",
            "params": {
              "target": {
                "label": "Цель",
                "description": "Целевой полигональный слой (получает распределённые значения; его объекты и атрибуты сохраняются)."
              },
              "source": {
                "label": "Источник",
                "description": "Исходный полигональный слой, содержащий распределяемые значения."
              },
              "fields": {
                "label": "Поля",
                "description": "Имена числовых полей источника для распределения, через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (копия цели с распределёнными столбцами). Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'area' (по умолчанию; деление по площади перекрытия) или 'weight' (деление по площади перекрытия, умноженной на 'weight_field' цели)."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Числовое поле цели, используемое как дополнительный вес при method=weight."
              },
              "suffix": {
                "label": "Суффикс",
                "description": "Суффикс для выходных столбцов с распределёнными значениями. По умолчанию '_app'."
              }
            }
          },
          "areal_interpolation": {
            "name": "Площадная интерполяция",
            "description": "Предсказывает агрегированные значения для целевых полигонов по исходным полигонам с другой географией, подбирая гладкую базовую поверхность и повторно интегрируя её вместо взвешивания по площади (ArcGIS Areal Interpolation Layer To Polygons). apportion_polygon предполагает, что величина равномерна внутри каждого исходного полигона — классическая проблема изменяемой площадной единицы — и не даёт стандартных ошибок; встроенный набор кригинга работает только с точечной поддержкой и не принимает полигональные наблюдения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Исходные полигоны, содержащие измеренное поле."
              },
              "target": {
                "label": "Цель",
                "description": "Целевые полигоны, для которых прогнозируются значения."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле значений на исходных полигонах."
              },
              "output": {
                "label": "Выход",
                "description": "Целевые полигоны с добавленными PREDICTED, PRED_STD_ERR и диагностикой. Если не указан, сохраняется в памяти."
              },
              "field_type": {
                "label": "Тип поля",
                "description": "'count' (по умолчанию): экстенсивный итог, масштабируемый для сохранения суммы источника. 'average': интенсивное среднее, прогнозируемое напрямую без масштабирования."
              },
              "discretization": {
                "label": "Дискретизация",
                "description": "Приблизительное число внутренних точек, представляющих площадную основу каждого полигона (по умолчанию 25). Большее значение точнее и значительно медленнее."
              },
              "model": {
                "label": "Модель",
                "description": "Модель вариограммы: 'exponential' (по умолчанию), 'spherical' или 'gaussian'."
              },
              "preserve_total": {
                "label": "Сохранять сумму",
                "description": "Масштабировать прогнозы количества так, чтобы итог по цели совпадал с итогом по источнику (по умолчанию true для 'count', всегда отключено для 'average'). Применяется только когда цели покрывают источники — применённый коэффициент сообщается как 'mass_scale', чтобы запуск с частичным покрытием был заметен."
              }
            }
          },
          "attribute_uncertainty": {
            "name": "Неопределённость атрибутов",
            "description": "Распространение ошибок методом Монте-Карло с заданным зерном по неопределённому атрибуту (аналог ArcGIS Attribute Uncertainty): генерирует реализации NORMAL/UNIFORM из поля ошибки для каждого объекта или пары границ и добавляет статистики mean/std/p5/p50/p95/CV.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (или таблица) с неопределённым атрибутом."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле, содержащее оценку (среднее/центр распределения) для каждого объекта."
              },
              "error_field": {
                "label": "Поле ошибки",
                "description": "Числовое поле, содержащее симметричную неопределённость: стандартную ошибку для NORMAL или полуширину для UNIFORM. Укажите это ИЛИ оба поля lower_field/upper_field."
              },
              "lower_field": {
                "label": "Поле нижней границы",
                "description": "Числовое поле с нижней границей значения. Используйте вместе с upper_field вместо error_field."
              },
              "upper_field": {
                "label": "Поле верхней границы",
                "description": "Числовое поле с верхней границей значения. Используйте вместе с lower_field вместо error_field."
              },
              "distribution": {
                "label": "Распределение",
                "description": "Распределение ошибки: NORMAL (по умолчанию) или UNIFORM."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число реализаций Монте-Карло на объект (по умолчанию 1000)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение детерминированного генератора случайных чисел (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой с добавленной статистикой. Если не указан, сохраняется в памяти."
              }
            }
          },
          "band_collection_statistics": {
            "name": "Статистика набора каналов",
            "description": "Мин./макс./среднее/ст. откл. по каналам плюс межканальные матрицы ковариации и корреляции для стека растров (аналог ArcGIS Band Collection Statistics) — многомерная сводка (предшественник PCA / классификации), которой нет во встроенном наборе; отличается от попиксельной cell_statistics.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Один многоканальный растр (каждый канал — слой) или список совмещённых растров через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь к CSV для отчёта статистики. Матрицы всегда возвращаются в результате."
              },
              "detail": {
                "label": "Детализация",
                "description": "'detailed' (по умолчанию) включает матрицы ковариации/корреляции; 'brief' возвращает только статистику по каналам."
              }
            }
          },
          "bivariate_spatial_association": {
            "name": "Двумерная пространственная ассоциация",
            "description": "Глобальная и локальная статистика L Ли, измеряющая, где две непрерывные переменные пространственно ковариируют, с p-значением перестановочного теста с заданным зерном и классом High-High/High-Low/Low-High/Low-Low для каждого объекта — аналог ArcGIS Bivariate Spatial Association. Аналог colocation_analysis для непрерывных полей.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой с двумя числовыми полями."
              },
              "x_field": {
                "label": "Поле X",
                "description": "Первое числовое поле переменной."
              },
              "y_field": {
                "label": "Поле Y",
                "description": "Второе числовое поле переменной."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой с полями локального L, p-значения и класса. Если не указан, сохраняется в памяти."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число ближайших соседей для пространственных весов (по умолчанию 8)."
              },
              "permutations": {
                "label": "Перестановки",
                "description": "Число перестановок для теста значимости (по умолчанию 199; 0 отключает)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для перестановок (по умолчанию 1), для воспроизводимых результатов."
              }
            }
          },
          "block_statistics": {
            "name": "Блочная статистика",
            "description": "Разбивает растр на неперекрывающиеся блоки, сводит каждый к статистике и записывает это значение обратно в каждую ячейку блока с входным разрешением (ArcGIS Block Statistics). Дополняет поставляемые focal_statistics (перекрывающееся окно), zonal_statistics (по слою зон) и cell_statistics (по стеку); в отличие от встроенного aggregate_raster сохраняет размер ячейки, так что вход минус среднее блока даёт поверхность локальных остатков, и добавляет категориальные статистики majority/minority/median/variety.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "Одно из: mean (по умолчанию), majority, maximum, median, minimum, minority, range, std, sum, variety."
              },
              "neighborhood": {
                "label": "Окрестность",
                "description": "Форма блока: rectangle (по умолчанию), circle, annulus или wedge."
              },
              "size": {
                "label": "Размер",
                "description": "Размеры блока в ячейках: 'width,height' для прямоугольника (по умолчанию '3,3'), 'radius' для круга/сектора или 'inner,outer' для кольца."
              },
              "start_angle": {
                "label": "Начальный угол",
                "description": "Начальный угол сектора в градусах против часовой стрелки от востока (по умолчанию 0)."
              },
              "end_angle": {
                "label": "Конечный угол",
                "description": "Конечный угол сектора в градусах против часовой стрелки от востока (по умолчанию 90)."
              },
              "ignore_nodata": {
                "label": "Игнорировать NoData",
                "description": "Если true (по умолчанию), блоки вычисляются только по действительным ячейкам; если false, любая ячейка NoData делает весь блок NoData."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "boundary_clean": {
            "name": "Очистка границ",
            "description": "Сглаживает границы зон категориального растра и удаляет мелкий шум с помощью мажоритарной фильтрации или очистки границ расширением/сжатием — стандартная подготовка перед полигонизацией, аналог ArcGIS Boundary Clean / Majority Filter.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной категориальный (целочисленный) растр."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'majority' (удаление спекл-шума по большинству соседей; по умолчанию) или 'expand_shrink' (сглаживание Boundary Clean)."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Связность окрестности: 4 (rook) или 8 (queen; по умолчанию)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Только для режима majority: 'majority' (строгое большинство соседей; по умолчанию) или 'half' (не менее половины)."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число выполняемых проходов (по умолчанию 1)."
              },
              "sort": {
                "label": "Сортировка",
                "description": "Только для режима expand_shrink: приоритет зон по числу ячеек — 'descending' (побеждают большие зоны; по умолчанию), 'ascending' (побеждают меньшие зоны) или 'none'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "buffer_3d": {
            "name": "3D-буфер",
            "description": "Буферизует 3D-точки и линии в объёмную геометрию (сферы и капсулы), выдаваемую как триангулированная поверхность, аналогично ArcGIS Buffer 3D.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой 3D-точек или полилиний (отсутствующая Z считается равной 0)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Радиус буфера в единицах карты."
              },
              "distance_field": {
                "label": "Поле расстояния",
                "description": "Необязательное поле радиуса по объектам, переопределяющее 'distance'."
              },
              "shape": {
                "label": "Форма",
                "description": "round (по умолчанию; полусферические окончания) или flat (цилиндр с плоскими окончаниями)."
              },
              "quality": {
                "label": "Качество",
                "description": "Разрешение мозаики: число сегментов по окружности (по умолчанию 12, мин. 4, макс. 64)."
              }
            }
          },
          "buffer_vector": {
            "name": "Буфер вектора",
            "description": "Расширяет геометрии на заданное расстояние, создавая полигональные буферы с настраиваемыми стилями концов/соединений. Необязательное слияние объединяет перекрывающиеся буферы в единые полигоны.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Расстояние буфера в единицах карты."
              },
              "quadrant_segments": {
                "label": "Сегментов на квадрант",
                "description": "Разрешение дуги в сегментах на квадрант; по умолчанию 8."
              },
              "cap_style": {
                "label": "Стиль концов",
                "description": "Стиль окончания линии: round, flat или square."
              },
              "join_style": {
                "label": "Стиль соединений",
                "description": "Стиль соединения углов: round, bevel или mitre."
              },
              "mitre_limit": {
                "label": "Предел среза",
                "description": "Предел острого соединения, используемый при join_style=mitre; по умолчанию 5.0."
              },
              "dissolve": {
                "label": "Слияние",
                "description": "Объединять перекрывающиеся буферы в один общий полигон; по умолчанию false."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора."
              }
            }
          },
          "build_balanced_zones": {
            "name": "Построение сбалансированных зон",
            "description": "Группирует смежные полигоны в целевое число связных зон, сбалансированных по числу объектов, сумме атрибута или однородности атрибута, с помощью разбиения остовным деревом SKATER.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "zones": {
                "label": "Зоны",
                "description": "Целевое число создаваемых зон."
              },
              "criterion": {
                "label": "Критерий",
                "description": "Цель балансировки: 'homogeneity' (по умолчанию), 'equal_count' или 'equal_sum' (по первому полю)."
              },
              "fields": {
                "label": "Поля",
                "description": "Числовые поля анализа через запятую. Обязательны для 'homogeneity' и 'equal_sum'; определяют веса рёбер остовного дерева."
              },
              "contiguity": {
                "label": "Смежность",
                "description": "Правило смежности: 'rook' (общее ребро, по умолчанию) или 'queen' (общее ребро или вершина)."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Максимальное расстояние, при котором два сегмента границы считаются общими (rook). По умолчанию 1e-6."
              }
            }
          },
          "build_seamlines": {
            "name": "Построение линий сшивки",
            "description": "По набору перекрывающихся растров (и необязательных контуров) вычисляет, где следует обрезать каждое изображение, чтобы мозаика соединялась по минимально заметному шву, выдавая по одному неперекрывающемуся полигону линии сшивки на изображение через назначение по Вороному, порядку приоритета, радиометрии или с учётом границ. Аналог ArcGIS Build Seamlines.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути растров для мозаики, разделённые запятой или точкой с запятой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных полигонов линий сшивки (по одному объекту на входной растр). Если не указан, сохраняется в памяти."
              },
              "footprints": {
                "label": "Контуры",
                "description": "Необязательный полигональный слой, задающий действительный экстент каждого растра, в порядке входов. Если не указан, выводится из действительных данных."
              },
              "method": {
                "label": "Метод",
                "description": "'voronoi' (по умолчанию), 'order', 'radiometry' или 'edge_detection'."
              },
              "sort_ascending": {
                "label": "Сортировать по возрастанию",
                "description": "Для метода 'order': true (по умолчанию) даёт приоритет более ранним растрам, false — более поздним."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки анализа (по умолчанию: наименьший размер ячейки среди входов)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), используемого для радиометрических методов (по умолчанию 1)."
              },
              "min_region_size": {
                "label": "Мин. размер региона",
                "description": "Переназначать назначенные регионы меньше указанного числа ячеек соседнему изображению (по умолчанию 0, т. е. сохранять все)."
              },
              "blend_width": {
                "label": "Ширина смешивания",
                "description": "Ширина растушёвки в единицах карты, записываемая как атрибут для последующей мозаики (по умолчанию 0)."
              },
              "blend_type": {
                "label": "Тип смешивания",
                "description": "'both' (по умолчанию), 'inside' или 'outside'; записывается как атрибут."
              }
            }
          },
          "calculate_adjacent_fields": {
            "name": "Вычисление смежных полей",
            "description": "Заполняет восемь полей соседних листов по направлениям (N, NE, E, SE, S, SW, W, NW) для каждого тайла индексной сетки серии карт именем прилегающей страницы, для полевых подписей «продолжение на листе …» — аналог ArcGIS Calculate Adjacent Fields.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входная полигональная индексная сетка серии карт (например, результат grid_index_features)."
              },
              "page_name_field": {
                "label": "Поле имени страницы",
                "description": "Поле, значение которого обозначает каждую страницу (записывается в направленные поля соседей)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный вектор (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "include_diagonal": {
                "label": "Включать диагональ",
                "description": "Также заполнять четыре диагональных поля (NE, SE, SW, NW) по тайлам, соприкасающимся углами. По умолчанию true."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Квантовать вершины на сетку такого размера (в единицах CRS) перед сопоставлением границ. По умолчанию 0 (точные координаты)."
              }
            }
          },
          "calculate_central_meridian_and_parallels": {
            "name": "Вычисление центрального меридиана и параллелей",
            "description": "Вычисляет для каждого объекта центральный меридиан и две стандартные параллели по экстенту объекта, для серий карт и страниц атласа, аналогично ArcGIS Calculate Central Meridian And Parallels.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные объекты в географических координатах (долгота/широта), обычно сетка страниц grid_index_features."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "field": {
                "label": "Поле",
                "description": "Имя записываемого поля центрального меридиана (по умолчанию 'central_meridian')."
              },
              "standard_offset": {
                "label": "Стандартное смещение",
                "description": "Доля диапазона широт, используемая для смещения каждой стандартной параллели от края объекта (по умолчанию 0.1667, правило 1/6 Esri). Должна быть в [0, 0.5)."
              }
            }
          },
          "calculate_composite_index": {
            "name": "Вычисление составного индекса",
            "description": "Объединяет несколько числовых атрибутов в составной индекс (аналог ArcGIS Calculate Composite Index): масштабирование по переменным (min-max/z-оценка/перцентиль) с необязательным обращением, взвешенное объединение (среднее/сумма/среднее геометрическое) и масштабирование выхода — векторный собрат fuzzy_overlay.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (или таблица) с числовыми полями переменных."
              },
              "fields": {
                "label": "Поля",
                "description": "Поля переменных через запятую; добавьте ':reverse' к полю, высокие значения которого должны понижать индекс (например, 'income:reverse,unemployment')."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой с добавленными полями индекса. Если не указан, сохраняется в памяти."
              },
              "scaling": {
                "label": "Масштабирование",
                "description": "Масштабирование по переменным: 'minmax' (по умолчанию), 'zscore', 'percentile' или 'none'."
              },
              "weights": {
                "label": "Веса",
                "description": "Веса через запятую, соответствующие 'fields' (по умолчанию: равные веса)."
              },
              "combine": {
                "label": "Объединять",
                "description": "Способ объединения масштабированных переменных: 'mean' (по умолчанию), 'sum' или 'geometric_mean'."
              },
              "output_range": {
                "label": "Выходной диапазон",
                "description": "Пересчёт объединённого индекса: 'minmax' (0–1, по умолчанию), 'zero_to_100', 'zscore' или 'none'."
              }
            }
          },
          "calculate_distance_band": {
            "name": "Вычисление полосы расстояний",
            "description": "Сообщает минимальное, среднее и максимальное расстояние, при котором у каждого объекта есть не менее N соседей (аналог ArcGIS Calculate Distance Band from Neighbor Count) — пороговая диагностика, гарантирующая, что ни один объект не останется без соседей перед пространственной статистикой на основе расстояний. Встроенный generate_spatial_weights_matrix строит матрицу, но никогда не сообщает эту полосу.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный/объектный векторный слой (проекционная CRS; расстояния в её единицах)."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число соседей k (>= 1). По умолчанию 1."
              },
              "distance_method": {
                "label": "Метод расстояния",
                "description": "'euclidean' (по умолчанию) или 'manhattan'."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь к CSV для таблицы feature_id,kth_neighbor_distance."
              }
            }
          },
          "calculate_end_time": {
            "name": "Вычисление времени окончания",
            "description": "Заполняет поле времени окончания временем начала следующей записи внутри каждой группы сущностей, превращая мгновенные наблюдения в записи с временным интервалом (ArcGIS Calculate End Time). transform_fields выполняет преобразования по значениям, а summary_statistics агрегирует группы, но ничто не выполняло временное заполнение с упорядочением строк.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой или таблица."
              },
              "start_field": {
                "label": "Поле начала",
                "description": "Поле метки времени: числовое эпохальное значение или строка даты/даты-времени ISO-8601."
              },
              "end_field": {
                "label": "Поле конца",
                "description": "Поле, принимающее время окончания (по умолчанию 'END_TIME'). Создаётся, если отсутствует, перезаписывается, если существует."
              },
              "id_fields": {
                "label": "Поля ID",
                "description": "Поля группировки, разделённые запятой или точкой с запятой. Время окончания вычисляется только внутри группы, никогда через границы групп."
              },
              "last_record": {
                "label": "Последняя запись",
                "description": "Что записывать в последнюю строку каждой группы: 'null' (по умолчанию), 'same_as_start' или 'duration' (начало + default_duration)."
              },
              "default_duration": {
                "label": "Длительность по умолчанию",
                "description": "Число секунд, добавляемых к началу для last_record 'duration'."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой. Если не указан, сохраняется в памяти."
              }
            }
          },
          "calculate_grid_convergence_angle": {
            "name": "Вычисление угла сближения меридианов",
            "description": "Вычисляет для каждого объекта угол сближения меридианов между северным направлением сетки и истинным севером по долготе/широте центроида и центральному меридиану (по умолчанию центральный меридиан зоны UTM самого объекта), записывая его в поле для корректного поворота символов/подписей на проецированных картах — аналог ArcGIS Calculate Grid Convergence Angle. Географическое (по часовой стрелке от севера) или арифметическое (против часовой стрелки от востока) соглашение. Чистая математика, без PROJ; не связано со встроенной метрикой рельефа convergence_index. Геометрия читается как градусы долготы/широты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (любого типа геометрии) в географических координатах (долгота/широта в градусах, EPSG:4326)."
              },
              "angle_field": {
                "label": "Поле угла",
                "description": "Имя поля с плавающей точкой для хранения угла сближения меридианов в градусах. По умолчанию 'GRID_CONV'."
              },
              "angle_type": {
                "label": "Тип угла",
                "description": "Соглашение об углах: 'geographic' (градусы по часовой стрелке от севера, положительные на восток) или 'arithmetic' (градусы против часовой стрелки от востока, 90 − geographic). По умолчанию 'geographic'."
              },
              "central_meridian": {
                "label": "Центральный меридиан",
                "description": "Долгота центрального меридиана в градусах. Если не указана, каждый объект использует центральный меридиан своей зоны UTM, выведенный из его долготы."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "calculate_missing_z_values": {
            "name": "Вычисление пропущенных значений Z",
            "description": "Заполняет заполнители или отсутствующие значения Z вдоль 3D-объектов интерполяцией по допустимым значениям Z с обеих сторон, аналогично ArcGIS Calculate Missing Z Values.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов с 3D-вершинами."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "placeholder": {
                "label": "Заполнитель",
                "description": "Служебное значение, обозначающее отсутствующую Z (например, -9999). Вершины, у которых Z вовсе нет, всегда считаются отсутствующими."
              },
              "method": {
                "label": "Метод",
                "description": "Метод заполнения: 'linear' (по умолчанию; интерполяция по расстоянию вдоль объекта) или 'nearest'."
              },
              "extrapolate": {
                "label": "Экстраполировать",
                "description": "Заполнять начальные/конечные пропуски продолжением ближайшей действительной вершины (по умолчанию false; вместо этого незаполненные вершины подсчитываются)."
              }
            }
          },
          "calculate_motion_statistics": {
            "name": "Вычисление статистики движения",
            "description": "Аннотирует точки треков с метками времени статистикой движения — скорость, ускорение, пеленг, расстояние сегмента и накопленное расстояние, прошедшее время и флаг простоя — с группировкой по треку и упорядочением по времени, аналогично ArcGIS Calculate Motion Statistics.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой наблюдений с метками времени."
              },
              "track_field": {
                "label": "Поле трека",
                "description": "Поле, идентифицирующее каждый трек/движущийся объект."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: число секунд или метка времени ISO-8601."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной точечный вектор (исходные атрибуты + поля движения). Если не указан, сохраняется в памяти."
              },
              "window": {
                "label": "Окно",
                "description": "Число предшествующих точек для сглаженной 'avg_speed' (по умолчанию 1 = мгновенная)."
              },
              "idle_distance": {
                "label": "Расстояние простоя",
                "description": "Радиус простоя: точка считается точкой простоя, если объект переместился не более чем на это расстояние за последние idle_duration секунд. По умолчанию 0 (обнаружение простоя отключено)."
              },
              "idle_duration": {
                "label": "Длительность простоя",
                "description": "Окно ретроспективы (в секундах) для обнаружения простоя. По умолчанию 60."
              }
            }
          },
          "calculate_polygon_main_angle": {
            "name": "Вычисление главного угла полигона",
            "description": "Записывает в поле угла доминирующую ориентацию каждого полигона (направление длинной стороны его ограничивающего прямоугольника минимальной площади, методом вращающихся калибров) — аналог ArcGIS Calculate Polygon Main Angle. Векторная ориентация полигонов, которой нет у встроенного растрового patch_orientation; используется для поворота символов/подписей.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой с добавленным полем угла. Если не указан, сохраняется в памяти."
              },
              "angle_field": {
                "label": "Поле угла",
                "description": "Имя записываемого поля угла (по умолчанию 'MainAngle')."
              },
              "convention": {
                "label": "Соглашение",
                "description": "'arithmetic' (против часовой стрелки от востока; по умолчанию), 'geographic' (по часовой стрелке от севера) или 'graphic' (по часовой стрелке от востока)."
              }
            }
          },
          "calculate_rates": {
            "name": "Вычисление показателей",
            "description": "Вычисляет сглаженные показатели по полям количества и населения (аналог ArcGIS Calculate Rates): грубый показатель, глобальный эмпирический байесовский метод Маршалла или пространственный эмпирический байесовский метод по k ближайшим соседям — стандартный шаг стабилизации перед анализом горячих точек показателей заболеваемости/преступности.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный или точечный слой с полями количества и населения."
              },
              "count_field": {
                "label": "Поле количества",
                "description": "Поле, содержащее количество событий (числитель)."
              },
              "population_field": {
                "label": "Поле населения",
                "description": "Поле, содержащее численность населения под риском (знаменатель)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой с добавленными полями коэффициентов. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'crude', 'eb_global' (по умолчанию) или 'eb_spatial'."
              },
              "per": {
                "label": "На",
                "description": "Множитель коэффициента, например 100000 для расчёта на 100 тыс. (по умолчанию 100000)."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Только для eb_spatial: число ближайших соседей для локального опорного коэффициента (по умолчанию 8)."
              }
            }
          },
          "calculate_transformation_errors": {
            "name": "Вычисление ошибок трансформации",
            "description": "Подбирает преобразование подобия/аффинное/проективное по связям смещения и сообщает остаточную ошибку каждой связи и общую RMSE, чтобы плохие опорные точки можно было найти и удалить перед трансформацией. Аналог ArcGIS Calculate Transformation Errors.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Линии связей смещения: первая вершина — исходная точка (from), последняя вершина — целевая точка (to)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной путь для таблицы связей с добавленными полями остатков. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'affine' (по умолчанию, 6 параметров), 'similarity' (4) или 'projective' (8)."
              },
              "keep_geometry": {
                "label": "Сохранять геометрию",
                "description": "Сохранять геометрию каждой связи в выходе (по умолчанию true). Установите false для чистой таблицы."
              }
            }
          },
          "calculate_transit_service_frequency": {
            "name": "Вычисление частоты транзитного обслуживания",
            "description": "Частота транзитного обслуживания GTFS в окне: для даты обслуживания (через calendar/calendar_dates) и временного окна подсчитывает рейсы, обслуживающие каждую остановку или линию маршрута, и сообщает число рейсов в час, аналогично ArcGIS Calculate Transit Service Frequency.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к распакованному каталогу ленты GTFS."
              },
              "target": {
                "label": "Цель",
                "description": "'stops' (точка на остановку, по умолчанию) или 'lines' (полилиния на маршрут)."
              },
              "date": {
                "label": "Дата",
                "description": "Дата обслуживания в формате ГГГГММДД, определяемая по calendar.txt/calendar_dates.txt. Если не указана, учитываются все рейсы."
              },
              "start_time": {
                "label": "Время начала",
                "description": "Начало окна ЧЧ:ММ или ЧЧ:ММ:СС (время GTFS может превышать 24:00). Если не указано, учитывается весь день."
              },
              "duration_minutes": {
                "label": "Длительность (мин)",
                "description": "Длительность окна в минутах (используется с start_time; также задаёт знаменатель для расчёта в час)."
              },
              "count": {
                "label": "Количество",
                "description": "'departures' (по умолчанию) или 'arrivals' — какое поле времени остановки подсчитывать."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "calculate_utm_zone": {
            "name": "Вычисление зоны UTM",
            "description": "Вычисляет оптимальную зону UTM и код EPSG WGS84 для каждого объекта по долготе/широте его центроида, добавляя поля зоны (1–60) и EPSG (326##/327##) — для серий карт с адаптивной проекцией, аналог ArcGIS Calculate UTM Zone. Чистая математика с исключениями для Норвегии/Шпицбергена; без PROJ. Геометрия читается как градусы долготы/широты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (любого типа геометрии) в географических координатах (долгота/широта в градусах, EPSG:4326)."
              },
              "zone_field": {
                "label": "Поле зоны",
                "description": "Имя целочисленного поля для хранения номера зоны UTM (1–60). По умолчанию 'utm_zone'."
              },
              "epsg_field": {
                "label": "Поле EPSG",
                "description": "Имя целочисленного поля для хранения кода EPSG UTM WGS84 (326## для севера, 327## для юга). По умолчанию 'utm_epsg'."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "cartogram": {
            "name": "Картограмма",
            "description": "Искажает полигоны так, чтобы площадь была пропорциональна значению атрибута: несмежная (масштабирование каждого полигона относительно его центроида) или Дорлинга (пропорциональные круги с удалением перекрытий).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой, формат определяется автоматически (или дескриптор слоя в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле, значению которого должна быть пропорциональна площадь каждого объекта."
              },
              "method": {
                "label": "Метод",
                "description": "'non_contiguous' (по умолчанию; масштабирование полигонов на месте) или 'dorling' (пропорциональные круги)."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число итераций устранения перекрытий Dorling (по умолчанию 100). Игнорируется методом non_contiguous."
              }
            }
          },
          "causal_inference_analysis": {
            "name": "Анализ причинно-следственных связей",
            "description": "Оценивает причинный эффект бинарного воздействия на исход с помощью сопоставления по propensity score, взвешивания по обратной вероятности или регрессионной корректировки, с бутстреп-доверительным интервалом с заданным зерном и таблицей баланса ковариат для каждого конфаундера до/после корректировки (аналог ArcGIS Causal Inference Analysis).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов."
              },
              "outcome_field": {
                "label": "Поле исхода",
                "description": "Числовое поле отклика (зависимой переменной)."
              },
              "treatment_field": {
                "label": "Поле воздействия",
                "description": "Бинарное (0/1 или логическое) поле воздействия. Непрерывные воздействия в этой версии не поддерживаются."
              },
              "confounding_fields": {
                "label": "Поля конфаундеров",
                "description": "Числовые поля конфаундеров через запятую, по которым выполняется корректировка."
              },
              "method": {
                "label": "Метод",
                "description": "'ps_matching' (по умолчанию, подбор ближайшего соседа с калипером по индексу склонности), 'ipw' (стабилизированное взвешивание обратной вероятностью) или 'regression_adjustment' (отклик ~ воздействие + конфаундеры)."
              },
              "add_spatial_confounders": {
                "label": "Добавить пространственные конфаундеры",
                "description": "Если true, расширить набор конфаундеров координатами x/y каждого объекта и средним по k ближайшим соседям для каждого конфаундера (по умолчанию false)."
              },
              "balance_threshold": {
                "label": "Порог баланса",
                "description": "Порог стандартизованной разности средних для проверки баланса после корректировки (по умолчанию 0.1)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (копия входа + столбцы индекса склонности / веса / идентификатора пары). Если не указан, сохраняется в памяти."
              },
              "seed": {
                "label": "Зерно",
                "description": "Целочисленное начальное значение для детерминированного бутстреп-доверительного интервала (по умолчанию 42)."
              }
            }
          },
          "cell_position_statistics": {
            "name": "Статистика положения ячеек",
            "description": "Поячеечная статистика позиций и рангов по стеку выровненных растров (ArcGIS Highest Position, Lowest Position, Popularity и Rank): какой слой содержит экстремальное значение, значение, встречающееся заданное число раз, или n-е наименьшее значение. cell_statistics сводит стек к значению и никогда не может сообщить, из какого слоя оно взято, а встроенный find_argument_statistics работает вдоль оси аргумента одного многоканального растра без семантики выбора по популярности/рангу.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Один многоканальный растр (каждый канал — слой) или список совмещённых растров через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр. Если не указан, сохраняется в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "'highest_position' (по умолчанию), 'lowest_position', 'popularity' или 'rank'."
              },
              "selector": {
                "label": "Селектор",
                "description": "Обязателен для 'popularity' и 'rank': путь к совмещённому растру или постоянное число, задающее число вхождений по ячейкам (popularity) или выбираемый ранг с отсчётом от 1 (rank)."
              },
              "ignore_nodata": {
                "label": "Игнорировать NoData",
                "description": "Пропускать наблюдения NoData в каждой ячейке (по умолчанию true). При false любое наблюдение NoData делает ячейку NoData."
              },
              "process_as_multiband": {
                "label": "Обрабатывать как многоканальный",
                "description": "'single_band' (по умолчанию): каждый канал каждого входа является слоем единого стека. 'multi_band': канал i каждого входа образует собственный стек, давая многоканальный результат."
              }
            }
          },
          "cell_records_to_sectors": {
            "name": "Записи ячеек в секторы",
            "description": "Строит геометрию покрытия антенн по точкам вышек сотовой связи: полигоны-секторы или линии биссектрис секторов по азимуту, ширине луча и радиусу каждой вышки — аналог ArcGIS Cell Site Records To Feature Class / Generate Sector Lines.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой антенн/вышек."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "output_type": {
                "label": "Тип выхода",
                "description": "Создаваемая геометрия: 'wedge' (полигоны покрытия, по умолчанию) или 'line' (линии биссектрис секторов)."
              },
              "azimuth_field": {
                "label": "Поле азимута",
                "description": "Поле, содержащее азимут каждой антенны (компасные градусы, 0 = север, по часовой стрелке). При отсутствии используется 'azimuth'."
              },
              "beamwidth_field": {
                "label": "Поле ширины луча",
                "description": "Поле, содержащее ширину луча каждой антенны в градусах. При отсутствии используется 'beamwidth'."
              },
              "radius_field": {
                "label": "Поле радиуса",
                "description": "Поле, содержащее радиус покрытия каждой антенны в единицах CRS. При отсутствии используется 'radius'."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Азимут по умолчанию в компасных градусах, когда поле не задано или значение отсутствует. По умолчанию 0."
              },
              "beamwidth": {
                "label": "Ширина луча",
                "description": "Ширина луча по умолчанию в градусах (0 < bw ≤ 360; ≥ 360 = всенаправленная). По умолчанию 65."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус покрытия по умолчанию в единицах CRS (должен быть положительным). По умолчанию 1000."
              },
              "segments": {
                "label": "Сегменты",
                "description": "Число прямых сегментов для аппроксимации дуги каждого сектора (≥ 1). По умолчанию 16."
              }
            }
          },
          "cell_statistics": {
            "name": "Статистика ячеек",
            "description": "Попиксельная статистика по стеку выровненных растров (аналог ArcGIS Cell Statistics): mean, majority, maximum, median, minimum, minority, percentile, range, std, sum или variety — локальный многорастровый редуктор, которого не дают встроенные sum_overlay/weighted_sum (только сумма) и инструменты окрестности/зональные.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Один многоканальный растр (каждый канал — слой) или список совмещённых растров через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной одноканальный растр приведённого значения. Если не указан, сохраняется в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "'mean' (по умолчанию), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' или 'variety'."
              },
              "ignore_nodata": {
                "label": "Игнорировать NoData",
                "description": "Пропускать наблюдения NoData в каждой ячейке (по умолчанию true). При false любое наблюдение NoData делает ячейку NoData."
              },
              "percentile_value": {
                "label": "Значение перцентиля",
                "description": "Процентиль в [0, 100] для статистики 'percentile' (по умолчанию 50 = медиана)."
              }
            }
          },
          "central_feature": {
            "name": "Центральный объект / Линейное направленное среднее",
            "description": "Центральный объект (входной объект с наименьшим суммарным расстоянием до всех остальных) или линейное направленное среднее (средний пеленг, круговая дисперсия и средняя длина линейных объектов) — два члена группы «Измерение географических распределений», которых нет у directional_distribution (ArcGIS Central Feature / Linear Directional Mean).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки для central_feature; линии для linear_directional_mean)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "'central_feature' (по умолчанию) или 'linear_directional_mean'."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное числовое поле, задающее вес каждого объекта (только для central_feature)."
              },
              "case_field": {
                "label": "Поле случая",
                "description": "Необязательное поле для группировки объектов; по одному результату на каждое уникальное значение."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Метрика расстояния для central_feature: 'euclidean' (по умолчанию) или 'manhattan'."
              },
              "orientation_only": {
                "label": "Только ориентация",
                "description": "Считать линии ненаправленными (ориентация по модулю 180°) для linear_directional_mean. По умолчанию false."
              }
            }
          },
          "change_point_detection": {
            "name": "Обнаружение точек изменения",
            "description": "Обнаруживает резкие сдвиги во временном ряду в каждом местоположении пространственно-временного куба H3 (аналог ArcGIS Change Point Detection): бинарная сегментация по стоимости сдвига среднего или уклона со штрафом, масштабируемым чувствительностью (или фиксированным числом точек изменения), с отчётом для каждой ячейки о числе изменений, годе наибольшего изменения и средних сегментов. Временная сегментация, недоступная двухдатному change_vector_analysis и монотонным тестам Манна-Кендалла.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой событий с метками времени (долгота/широта)."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: число или метка времени ISO-8601."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой H3 с атрибутами точек изменения. Если не указан, сохраняется в памяти."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле для агрегирования по ячейкам (по умолчанию: количество точек)."
              },
              "change_type": {
                "label": "Тип изменения",
                "description": "'mean' (сдвиги уровня; по умолчанию) или 'slope' (сдвиги тренда)."
              },
              "method": {
                "label": "Метод",
                "description": "'auto' (на основе штрафа, по умолчанию) или 'defined' (ровно num_change_points)."
              },
              "num_change_points": {
                "label": "Число точек изменения",
                "description": "Метод defined: число точек изменения, находимых для каждого местоположения (по умолчанию 1)."
              },
              "sensitivity": {
                "label": "Чувствительность",
                "description": "Метод auto: масштаб штрафа; больше = меньше точек изменения (по умолчанию 1.0)."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Ширина шага времени в единицах time_field (по умолчанию 1)."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 0..15 (по умолчанию 7)."
              }
            }
          },
          "classification_accuracy_assessment": {
            "name": "Оценка точности классификации",
            "description": "Оценивает классифицированный растр (или точки, уже несущие предсказанный класс) по эталонным точкам с метками наземной истины, выдавая матрицу ошибок, общую точность, точность производителя/пользователя по классам и каппу Коэна — аналог ArcGIS Compute Confusion Matrix.",
            "params": {
              "points": {
                "label": "Точки",
                "description": "Опорный (для оценки точности) точечный слой с полем эталонного класса."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Атрибут точек, содержащий эталонную (опорную) метку класса."
              },
              "input": {
                "label": "Вход",
                "description": "Классифицированный растр, опрашиваемый в каждой опорной точке (ближайшая ячейка). Укажите это ИЛИ 'classified_field'."
              },
              "classified_field": {
                "label": "Поле классификации",
                "description": "Атрибут точек, уже содержащий предсказанный (картографический) класс, используемый вместо опроса растра. Укажите это ИЛИ 'input'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) классифицированного растра для опроса (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора для опорных точек с добавленными REF_CLASS, MAP_CLASS, CORRECT. Если не указан, сохраняется в памяти."
              }
            }
          },
          "collapse_dual_lines_to_centerline": {
            "name": "Свёртывание двойных линий в осевую",
            "description": "Обнаруживает пары примерно параллельных линий в пределах допуска ширины (дороги с разделёнными проезжими частями, обводки дорог) и заменяет каждую пару одной осевой линией, заново соединяя перекрёстки — аналог ArcGIS Collapse Dual Lines To Centerline.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный векторный слой (проекционная CRS; ширины в её единицах)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "min_width": {
                "label": "Мин. ширина",
                "description": "Минимальное расстояние между парными линиями, в единицах CRS (по умолчанию 0)."
              },
              "max_width": {
                "label": "Макс. ширина",
                "description": "Максимальное расстояние между парными линиями, в единицах CRS. Обязательный параметр (ширина схлопывания)."
              },
              "attribute": {
                "label": "Атрибут",
                "description": "Необязательное поле, значения которого должны совпадать, чтобы две линии образовали пару (например, название или класс дороги)."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Интервал уплотнения для проверки параллельности, в единицах CRS. По умолчанию: max_width / 2."
              },
              "min_overlap": {
                "label": "Мин. перекрытие",
                "description": "Минимальная доля линии, которая должна идти параллельно партнёру для образования пары (0-1, по умолчанию 0.5)."
              }
            }
          },
          "collapse_hydro_polygon": {
            "name": "Свёртывание гидрографических полигонов",
            "description": "Свёртывает узкие водные полигоны в осевые линии, сохраняя широкие участки полигонами (аналог ArcGIS Collapse Hydro Polygon): трассирует осевую линию каждого полигона вдоль его главной оси по серединам перпендикулярных сечений, измеряет локальную ширину и свёртывает там, где медианная ширина не превышает порог. Генерализация полигон→линия с порогом ширины, которой не делают collapse_dual_lines_to_centerline для обводок линий и растровый river_centerlines.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой водных объектов."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой осевых линий для схлопнутых (узких) полигонов. Если не указан, сохраняется в памяти."
              },
              "collapse_width": {
                "label": "Ширина свёртывания",
                "description": "Полигоны, медианная ширина которых не превышает это значение, схлопываются в осевую линию."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Шаг поперечных створов вдоль оси (по умолчанию: collapse_width / 2)."
              },
              "min_length": {
                "label": "Мин. длина",
                "description": "Отбрасывать схлопнутые осевые линии короче этого значения (по умолчанию 0)."
              },
              "retained": {
                "label": "Сохранённые",
                "description": "Необязательный выходной полигональный слой для широких (несхлопнутых) участков."
              }
            }
          },
          "collapse_road_detail": {
            "name": "Свёртывание деталей дорог",
            "description": "Свёртывает мелкие дорожные петли и изгибы (круговые развязки, «гантели», смещённые изгибы) ниже порога диаметра в одиночные сквозные соединения для мелкомасштабного отображения, сохраняя связность сети — аналог ArcGIS Collapse Road Detail.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной дорожный (линейный) векторный слой, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "collapse_distance": {
                "label": "Расстояние свёртывания",
                "description": "Максимальный диаметр детали для схлопывания. Петли/изломы, диаметр охвата которых меньше этого значения (метры для географической CRS, единицы CRS в остальных случаях), схлопываются; более крупные сохраняются."
              },
              "road_class_field": {
                "label": "Поле класса дороги",
                "description": "Необязательное поле класса дороги. Если задано, схлопываются только петли, все ограничивающие дороги которых имеют одинаковое значение класса (пересечения дорог разных классов сохраняются)."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Расстояние, в пределах которого конечные точки дорог считаются одним пересечением. По умолчанию 1e-6."
              }
            }
          },
          "collect_events": {
            "name": "Сбор событий",
            "description": "Свёртывает совпадающие точки инцидентов в уникальные местоположения, каждое с числом событий ICOUNT, аналогично ArcGIS Collect Events.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (Point или MultiPoint)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск прилипания в единицах карты; точки, координаты которых округляются до одной и той же ячейки, считаются совпадающими (по умолчанию 1e-8, т. е. практически точно)."
              }
            }
          },
          "colocation_analysis": {
            "name": "Анализ совместного размещения",
            "description": "Локальный коэффициент совместного размещения (Leslie и Kronenfeld), измеряющий, непропорционально ли часто точки категории A встречаются среди соседей категории B, с p-значением перестановочного теста с заданным зерном — аналог ArcGIS Colocation Analysis.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой с полем категории."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (копия входа с полями совместного размещения). Если не указан, сохраняется в памяти."
              },
              "category_field": {
                "label": "Поле категории",
                "description": "Поле, содержащее категорию каждой точки."
              },
              "category_a": {
                "label": "Категория A",
                "description": "Фокальная категория (A): точки, совместное размещение которых с B измеряется."
              },
              "category_b": {
                "label": "Категория B",
                "description": "Соседняя категория (B): точки, относительно которых проверяется A."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число ближайших соседей k (по умолчанию 8)."
              },
              "weight": {
                "label": "Вес",
                "description": "Взвешивание соседей: 'gaussian' (затухание с расстоянием, по умолчанию) или 'uniform'."
              },
              "permutations": {
                "label": "Перестановки",
                "description": "Число перестановок меток для теста значимости (по умолчанию 99; 0 отключает)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для перестановок (по умолчанию 1), для воспроизводимых результатов."
              }
            }
          },
          "color_polygons": {
            "name": "Раскраска полигонов",
            "description": "Назначает каждому полигону небольшой целочисленный индекс цвета так, чтобы никакие два смежных полигона не имели одинакового значения (аналог ArcGIS Calculate Color Theorem Field) — безопасная для смежности картограммная стилизация через раскраску графа DSATUR по смежности общих рёбер (или общих углов).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой с добавленным полем цвета. Если не указан, сохраняется в памяти."
              },
              "field": {
                "label": "Поле",
                "description": "Имя записываемого поля индекса цвета (по умолчанию 'color_id')."
              },
              "adjacency": {
                "label": "Смежность",
                "description": "'edge' (rook, общая граница; по умолчанию) или 'edge_or_corner' (queen, общая граница или вершина)."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Размер сетки для прилипания вершин перед сопоставлением границ (по умолчанию 0 = точно)."
              }
            }
          },
          "combine": {
            "name": "Объединять",
            "description": "Назначает уникальный ID зоны каждой уникальной комбинации значений по двум или более совмещённым категориальным растрам, плюс таблица атрибутов значений (id, count, по одному столбцу на вход).",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список из >=2 совмещённых категориальных/целочисленных растров для объединения, через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра для сетки идентификаторов уникальных сочетаний. Если не указан, сохраняется в памяти."
              },
              "csv_output": {
                "label": "Выходной CSV",
                "description": "Необязательный путь к CSV для таблицы атрибутов значений (значение, количество, по одному столбцу на каждый входной растр)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из каждого входного растра. По умолчанию 1."
              }
            }
          },
          "compare_spatial_weights": {
            "name": "Сравнение пространственных весов",
            "description": "Ранжирует концептуализации пространственных весов-кандидатов (KNN, фиксированная полоса расстояний, смежность по рёбрам / рёбрам+углам, Делоне) по тому, насколько сильно каждая улавливает пространственную кластеризацию одного или нескольких полей анализа, с помощью стандартизированного по строкам глобального индекса Морана I с его z-оценкой и двусторонним p-значением — аналог ArcGIS Compare Neighborhood Conceptualizations. Выдаёт ранжированную таблицу сравнения и единственный лучший метод.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки/линии/полигоны; для смежности требуются полигоны)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы сравнения — CSV (расширение .csv) или векторная таблица без геометрии. Если не указан, сохраняется в памяти."
              },
              "input_fields": {
                "label": "Входные поля",
                "description": "Список имён числовых полей для анализа пространственной кластеризации, через запятую."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Поле, содержащее уникальный идентификатор каждого объекта (принимается для совместимости; не требуется для вычисления индекса Морана)."
              },
              "methods": {
                "label": "Методы",
                "description": "Кандидатные концептуализации через запятую из: knn, fixed_distance_band, contiguity_edges, contiguity_edges_corners, delaunay. По умолчанию 'knn,contiguity_edges,contiguity_edges_corners'. Методы, неприменимые к данной геометрии (или дающие ошибку), пропускаются."
              },
              "number_of_neighbors": {
                "label": "Число соседей",
                "description": "Число ближайших соседей k для метода knn. По умолчанию 8."
              },
              "threshold_distance": {
                "label": "Пороговое расстояние",
                "description": "Порог полосы расстояний в единицах карты. Требуется только когда fixed_distance_band входит в число методов."
              }
            }
          },
          "composite_bands": {
            "name": "Композит каналов",
            "description": "Складывает несколько одноканальных растров в один многоканальный растр в заданном порядке (ArcGIS Composite Bands). Встроенный create_colour_composite фиксирован на трёх каналах RGB, так что не было способа собрать N-канальный вход, который требуют band_collection_statistics, principal_component_analysis, spectral_index и набор OBIA.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути растров, разделённые запятой или точкой с запятой, в порядке выходных каналов. Не менее одного."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), берущегося из каждого входа, если вход сам является многоканальным (по умолчанию 1)."
              },
              "nodata_policy": {
                "label": "Политика NoData",
                "description": "'any' (по умолчанию): ячейка становится NoData, если хотя бы один канал имеет NoData. 'all': только если NoData имеют все каналы."
              },
              "nodata": {
                "label": "NoData",
                "description": "Значение NoData для выхода (по умолчанию: значение NoData первого входа)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной многоканальный растр. Если не указан, сохраняется в памяти."
              }
            }
          },
          "compute_accuracy_for_object_detection": {
            "name": "Вычисление точности обнаружения объектов",
            "description": "Оценивает обнаруженные объекты по эталонным данным с сопоставлением по IoU, сообщая точность, полноту, среднюю точность по классам и общий mAP, аналогично ArcGIS Compute Accuracy For Object Detection.",
            "params": {
              "detected": {
                "label": "Обнаруженные",
                "description": "Обнаруженные объекты (полигоны или ограничивающие прямоугольники)."
              },
              "ground_truth": {
                "label": "Эталонные данные",
                "description": "Эталонные объекты, относительно которых выполняется оценка."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы точности. Если не указан, сохраняется в памяти."
              },
              "detected_class_field": {
                "label": "Поле класса обнаруженных",
                "description": "Поле метки класса у обнаружений. Не указывайте, чтобы оценивать всё как один класс."
              },
              "ground_truth_class_field": {
                "label": "Поле класса эталона",
                "description": "Поле метки класса у эталонных данных. Не указывайте, чтобы оценивать всё как один класс."
              },
              "confidence_field": {
                "label": "Поле уверенности",
                "description": "Поле оценки уверенности у обнаружений, используемое для ранжирования при расчёте средней точности. Без него обнаружения оцениваются в порядке ввода."
              },
              "min_iou": {
                "label": "Мин. IoU",
                "description": "Минимальное отношение пересечения к объединению, при котором обнаружение считается совпадением (по умолчанию 0.5)."
              }
            }
          },
          "compute_sar_indices": {
            "name": "Вычисление индексов SAR",
            "description": "Вычисляет поляриметрические индексы SAR — RVI (Radar Vegetation Index), RFDI (Radar Forest Degradation Index), CSI (Canopy Structure Index) и DPSVI (Dual-Pol SAR Vegetation Index) — по многополяризационному обратному рассеянию (ArcGIS Compute SAR Indices). spectral_index охватывает только математику оптических каналов: его формулы и соглашения о каналах относятся к области отражения, и он не имеет понятия о каналах поляризации, так что цепочка SAR каталога (multilook, sar_coherence, спекл-фильтры) пока не имеет конечной точки анализа.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Калиброванный многополяризационный растр SAR (по одному каналу на поляризацию)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр индекса. Если не указан, сохраняется в памяти."
              },
              "index": {
                "label": "Индекс",
                "description": "'rvi' (по умолчанию), 'rfdi', 'csi' или 'dpsvi'."
              },
              "polarization_bands": {
                "label": "Каналы поляризации",
                "description": "Сопоставление каналов с отсчётом от 1, например 'vv=1,vh=2' или 'hh=1,hv=2,vv=3'. По умолчанию по числу каналов: 2 канала = 'vv=1,vh=2', 3 и более = 'hh=1,hv=2,vv=3'."
              },
              "input_units": {
                "label": "Входные единицы",
                "description": "'linear' (по умолчанию) или 'db'. Вход в дБ преобразуется в линейную мощность перед вычислением отношений, поскольку отношения децибел не имеют смысла."
              }
            }
          },
          "construct_sight_lines": {
            "name": "Построение линий видимости",
            "description": "Строит объекты линий видимости между точками наблюдения и целевыми объектами, со смещениями высоты наблюдателя/цели, выборкой вдоль линейных и площадных целей, необязательными полями азимута и вертикального угла и 2D- или 3D-расстоянием. Аналог ArcGIS Construct Sight Lines.",
            "params": {
              "observers": {
                "label": "Наблюдатели",
                "description": "Точечные объекты наблюдателей."
              },
              "targets": {
                "label": "Цели",
                "description": "Целевые точечные, линейные или полигональные объекты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных линий визирования. Если не указан, сохраняется в памяти."
              },
              "observer_height_field": {
                "label": "Поле высоты наблюдателя",
                "description": "Необязательное поле, задающее превышение каждого наблюдателя (добавляется к его Z)."
              },
              "target_height_field": {
                "label": "Поле высоты цели",
                "description": "Необязательное поле, задающее превышение каждой цели (добавляется к её Z)."
              },
              "join_field": {
                "label": "Поле соединения",
                "description": "Необязательное поле, присутствующее в обоих входах; в пары объединяются только наблюдатели и цели с одинаковым значением. Без него каждый наблюдатель объединяется с каждой целью."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Шаг в единицах карты для целевых точек, создаваемых вдоль границ линий/полигонов (по умолчанию: по одной точке на вершину)."
              },
              "output_direction": {
                "label": "Выход направления",
                "description": "Добавлять поля AZIMUTH и VERT_ANGLE (по умолчанию false)."
              },
              "distance_method": {
                "label": "Метод расстояния",
                "description": "'2d' (по умолчанию) или '3d' для поля DISTANCE."
              }
            }
          },
          "contiguous_cartogram": {
            "name": "Непрерывная картограмма",
            "description": "Картограмма с выравниванием плотности (диффузия Гастнера-Ньюмана): искажает площади полигонов пропорционально атрибуту, сохраняя карту связным листом с общими границами (ArcGIS Generate Contiguous Cartogram). Поставляемый инструмент cartogram реализует только несмежный метод и метод Дорлинга, оба из которых разрушают смежность, и документация его модуля откладывает непрерывную форму.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Слой смежных полигонов."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Положительный числовой атрибут, суммарному значению которого должны стать пропорциональными площади."
              },
              "grid_size": {
                "label": "Размер сетки",
                "description": "Разрешение сетки плотности; должно быть степенью двойки (по умолчанию 256). Основной регулятор соотношения точности и затрат."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число шагов диффузии (по умолчанию 20). Большее число шагов сильнее выравнивает плотность ценой большего искажения."
              },
              "blur": {
                "label": "Размытие",
                "description": "Предварительное гауссово сглаживание поля плотности, в ячейках сетки (по умолчанию 0.5). Предотвращает чрезмерное искажение, возникающее при резком разрыве плотности."
              },
              "sea_density": {
                "label": "Плотность моря",
                "description": "Плотность вне области исследования: 'mean' (по умолчанию) или 'min'. Это существенно меняет результат у края карты."
              },
              "densify_spacing": {
                "label": "Шаг уплотнения",
                "description": "Максимальная длина сегмента границы в ячейках сетки, после которой вставляются вершины (по умолчанию 1.0). Иначе длинные прямые границы отделяются от соседних."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой со смещёнными вершинами и исходными атрибутами. Если не указан, сохраняется в памяти."
              }
            }
          },
          "contour_list": {
            "name": "Список изолиний",
            "description": "Строит изолинии по явному списку значений, а не с фиксированным интервалом, в виде сцепленных полилиний или заполненных полигонов, каждая с меткой уровня (ArcGIS Contour List). Встроенный contours_from_raster принимает только interval и base, так что нерегулярные серии, используемые в реальных картах — ступени глубин IHO, стадии повторяемости наводнений, опубликованные границы классов — требуют запуска на каждое значение и слияния, и всё равно не могут быть получены одним слоем с метками уровней.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр поверхности."
              },
              "contour_values": {
                "label": "Значения изолиний",
                "description": "Список уровней изолиний через запятую, в собственных единицах z растра."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой изолиний. Если не указан, сохраняется в памяти."
              },
              "geometry_type": {
                "label": "Тип геометрии",
                "description": "'polyline' (по умолчанию) для линий изолиний или 'polygon' для заполненной области на уровне каждого значения и выше."
              },
              "min_length": {
                "label": "Мин. длина",
                "description": "Отбрасывать изолинии короче этого значения, в единицах карты, что удаляет мелкие фрагменты, порождаемые зашумлённой поверхностью."
              },
              "close_rings": {
                "label": "Замыкать кольца",
                "description": "Повторять первую вершину на замкнутых изолиниях (по умолчанию true)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) для построения изолиний (по умолчанию 1)."
              }
            }
          },
          "contour_with_barriers": {
            "name": "Изолинии с барьерами",
            "description": "Трассирует изолинии поверхности, которые заканчиваются у объектов-барьеров вместо того, чтобы их пересекать.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр непрерывной поверхности."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный векторный слой барьеров (линии или полигоны). Изолинии не будут пересекать эти объекты."
              },
              "interval": {
                "label": "Интервал",
                "description": "Интервал изолиний в единицах поверхности. Уровни равны base + k*interval в пределах диапазона данных. Игнорируется, если задан 'levels'."
              },
              "base": {
                "label": "База",
                "description": "Базовое значение, от которого отсчитывается интервал (по умолчанию 0)."
              },
              "levels": {
                "label": "Уровни",
                "description": "Явные значения изолиний через запятую (например, \"10,20,30\"). Переопределяет interval/base."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "convert_coordinate_notation": {
            "name": "Преобразование формата записи координат",
            "description": "Преобразует координаты каждого объекта между нотациями — десятичные градусы (DD), градусы-минуты-секунды (DMS), градусы-десятичные минуты (DDM), UTM и MGRS/USNG — записывая новое поле в целевой нотации, аналогично ArcGIS Convert Coordinate Notation. Чистая математика сетки (поперечная проекция Меркатора Крюгера + буквенная разметка MGRS на WGS84); без PROJ.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный (или табличный) векторный слой."
              },
              "input_notation": {
                "label": "Входная нотация",
                "description": "Формат записи входной координаты: DD, DMS, DDM, UTM или MGRS."
              },
              "output_notation": {
                "label": "Выходная нотация",
                "description": "Целевой формат записи: DD, DMS, DDM, UTM или MGRS."
              },
              "coord_field": {
                "label": "Поле координат",
                "description": "Поле, содержащее строку входной координаты. Если не указано, используется геометрия точки (допустимо только при input_notation=DD; геометрия x=долгота, y=широта)."
              },
              "output_field": {
                "label": "Выходное поле",
                "description": "Имя записываемого поля. По умолчанию: выходной формат записи в нижнем регистре (например, 'utm')."
              },
              "precision": {
                "label": "Точность",
                "description": "Число разрядов MGRS по каждой оси (1=10 км … 5=1 м, до 9). По умолчанию 5. Игнорируется другими форматами записи."
              },
              "update_geometry": {
                "label": "Обновлять геометрию",
                "description": "Если true, перестроить геометрию каждого объекта как точку долгота/широта в EPSG:4326 по разобранной координате. По умолчанию false (сохранять исходную геометрию/CRS)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "convert_sar_units": {
            "name": "Преобразование единиц SAR",
            "description": "Преобразует растр SAR между представлениями амплитуды, интенсивности, линейной мощности, децибел, комплексного в интенсивность и развёрнутой фазы в смещение (ArcGIS Convert SAR Units). raster_calculator может вычислить арифметику, но не несёт ни семантики, ни защит — он возвращает -inf для нулевых ячеек при логарифмическом преобразовании, и ничто в каталоге не фиксирует, в каких единицах находится растр SAR, так что спекл-фильтры и индексы отношений регулярно применяются к неверному представлению.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр SAR. Для 'complex_to_intensity' это двухканальный растр I/Q (соглашение multilook / sar_coherence)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра. Если не указан, сохраняется в памяти."
              },
              "conversion": {
                "label": "Преобразование",
                "description": "'linear_to_db', 'db_to_linear', 'amplitude_to_intensity', 'intensity_to_amplitude', 'complex_to_intensity' или 'phase_to_displacement'."
              },
              "wavelength": {
                "label": "Длина волны",
                "description": "Длина волны радара в метрах для 'phase_to_displacement' (по умолчанию 0.05546576, C-диапазон Sentinel-1)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1). Игнорируется для 'complex_to_intensity', который всегда читает каналы 1 и 2 как I и Q."
              }
            }
          },
          "coregister_rasters": {
            "name": "Совмещение растров",
            "description": "Автоматически выравнивает вторичный растр по опорному с помощью нормализованной кросс-корреляции сетки тайлов, субпиксельного уточнения пика, подбора трансформации методом наименьших квадратов с отсевом выбросов и передискретизации (ArcGIS Apply Coregistration). Это недостающее предусловие для всей цепочки InSAR каталога: sar_coherence, flatten_interferogram и goldstein_phase_filter требуют совмещённого входа, и ничто его не создавало. georeference_raster_from_control_points требует вручную подобранных опорных точек, image_correlation только оценивает сходство, а warp_raster нуждается в заданной трансформации.",
            "params": {
              "reference": {
                "label": "Эталон",
                "description": "Опорный растр. Выход записывается в сетке этого растра."
              },
              "secondary": {
                "label": "Вторичный",
                "description": "Растр, выравниваемый по опорному. Выполняется передискретизация всех его каналов."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной передискретизированный вторичный растр в опорной сетке. Если не указан, сохраняется в памяти."
              },
              "tie_points": {
                "label": "Связующие точки",
                "description": "Выходной точечный слой принятых связующих точек с измеренным сдвигом и корреляцией. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), используемого для сопоставления (по умолчанию 1). Двухканальный вход сопоставляется по комплексной амплитуде, если этот параметр не задан."
              },
              "transform": {
                "label": "Трансформация",
                "description": "'translation', 'affine' (по умолчанию) или 'polynomial2'."
              },
              "tile_size": {
                "label": "Размер тайла",
                "description": "Сторона каждого сопоставляемого тайла в ячейках (по умолчанию 32)."
              },
              "grid_size": {
                "label": "Размер сетки",
                "description": "Число тайлов по каждой оси (по умолчанию 8, то есть 64 тайла)."
              },
              "max_shift": {
                "label": "Макс. сдвиг",
                "description": "Полуширина целочисленного окна поиска в ячейках (по умолчанию 8)."
              },
              "min_correlation": {
                "label": "Мин. корреляция",
                "description": "Отбраковывать связующие точки, пиковая нормализованная корреляция которых ниже этого значения (по умолчанию 0.3)."
              },
              "outlier_sigma": {
                "label": "Сигма выбросов",
                "description": "Отсеивать связующие точки, остаток подгонки которых превышает указанное число стандартных отклонений (по умолчанию 3.0). Установите 0, чтобы отключить отсев."
              },
              "resample": {
                "label": "Передискретизация",
                "description": "'bilinear' (по умолчанию) или 'nearest'."
              }
            }
          },
          "corridor": {
            "name": "Коридор",
            "description": "Коридор наименьшей стоимости между двумя поверхностями накопленной стоимости (ArcGIS Corridor): суммирует два растра стоимостного расстояния в поверхность коридора, минимум которой — путь наименьшей стоимости, затем при необходимости отсекает по порогу почти оптимальную полосу. Прямой режим (два растра стоимости) или удобный режим (один растр трения + два растра источников).",
            "params": {
              "cost1": {
                "label": "Стоимость 1",
                "description": "Первый растр накопленной стоимости (от источника A). Прямой режим."
              },
              "cost2": {
                "label": "Стоимость 2",
                "description": "Второй растр накопленной стоимости (от источника B). Прямой режим."
              },
              "cost": {
                "label": "Стоимость",
                "description": "Растр сопротивления/стоимости прохождения. Упрощённый режим (вместе с source1/source2)."
              },
              "source1": {
                "label": "Источник 1",
                "description": "Первый растр источников (положительные ячейки являются источниками). Упрощённый режим."
              },
              "source2": {
                "label": "Источник 2",
                "description": "Второй растр источников (положительные ячейки являются источниками). Упрощённый режим."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра коридора. Если не указан, сохраняется в памяти."
              },
              "threshold": {
                "label": "Порог",
                "description": "Сохранять только ячейки, стоимость коридора в которых не превышает это абсолютное значение (остальные маскируются как NoData)."
              },
              "percent": {
                "label": "Процент",
                "description": "Сохранять только ячейки в пределах указанного процента выше минимальной стоимости коридора (например, 5 = в пределах 5 %). Игнорируется, если задан 'threshold'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из входного растра (растров). По умолчанию 1."
              }
            }
          },
          "cost_back_link": {
            "name": "Обратная связь стоимости",
            "description": "Выдаёт растр направлений соседей 0–8, кодирующий для каждой ячейки следующий шаг по маршруту наименьшей стоимости обратно к ближайшему источнику, плюс поверхность накопленной стоимости (ArcGIS Cost Back Link и Path Back Link). cost_distance, cost_pathway и cost_allocation вычисляют его внутренне и отбрасывают, так что обратная трассировка N назначений сейчас стоит N полных решений вместо одного прохода накопления плюс N дешёвых обходов.",
            "params": {
              "source": {
                "label": "Источник",
                "description": "Ячейки источников: растр (источником является любая ненулевая ячейка, не равная NoData) или точечный/мультиточечный векторный слой."
              },
              "cost": {
                "label": "Стоимость",
                "description": "Растр стоимости на единицу расстояния. Необязателен, если задан 'surface' (тогда стоимость всюду по умолчанию равна 1, что даёт чистое расстояние по поверхности)."
              },
              "surface": {
                "label": "Поверхность",
                "description": "Необязательный растр высот, включающий вариант Path Back Link: горизонтальное расстояние заменяется истинным расстоянием по поверхности sqrt(dxy^2 + dz^2)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр обратных связей (0 = источник, 1-8 = направление к источнику, 1 = восток, против часовой стрелки). Если не указан, сохраняется в памяти."
              },
              "out_distance": {
                "label": "Выход расстояния",
                "description": "Растр накопленной стоимости. Создаётся всегда; при отсутствии пути возвращается дескриптор в памяти."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Необязательный порог накопления: ячейки со стоимостью выше этого значения остаются недостижимыми."
              }
            }
          },
          "cost_connectivity": {
            "name": "Стоимостная связность",
            "description": "Сеть наименьшей стоимости, соединяющая несколько участков по поверхности стоимости (аналог ArcGIS Cost Connectivity / Optimal Region Connections): многоисточниковое распределение Дейкстры, попарные пути наименьшей стоимости между смежными регионами и их минимальное остовное дерево — сеть наименьшей стоимости, которую не могут построить встроенные одноисточниковые cost_distance и path_distance.",
            "params": {
              "sources": {
                "label": "Источники",
                "description": "Точечный слой участков/регионов для соединения."
              },
              "cost": {
                "label": "Стоимость",
                "description": "Растр стоимости/сопротивления (стоимость прохождения ячейки; ячейки NoData являются барьерами)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полилинейный слой путей наименьшей стоимости. Если не указан, сохраняется в памяти."
              },
              "connections": {
                "label": "Соединения",
                "description": "'mst' (минимальное остовное дерево, соединяющее все участки; по умолчанию) или 'all_neighbors' (все пути между смежными регионами)."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Необязательное поле для обозначения источников (по умолчанию: индекс с отсчётом от 1)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) растра стоимости (по умолчанию 1)."
              }
            }
          },
          "count_overlapping_features": {
            "name": "Подсчёт перекрывающихся объектов",
            "description": "Разбивает перекрывающиеся полигоны на непересекающиеся регионы, каждому из которых присваивается число (и при необходимости ID) покрывающих его входных объектов, аналогично ArcGIS Count Overlapping Features.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой (объекты могут перекрываться)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора (драйвер определяется расширением) с полем 'count'. Если не указан, сохраняется в памяти."
              },
              "min_count": {
                "label": "Мин. количество",
                "description": "Сохранять только регионы, покрытые не менее чем указанным числом объектов (по умолчанию 1; используйте 2 только для перекрытий)."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Необязательное поле, идентифицирующее каждый входной объект (используется в столбце идентификаторов / отчёте). По умолчанию: индекс объекта."
              },
              "report_ids": {
                "label": "ID отчёта",
                "description": "Необязательный путь к CSV для таблицы связей region_id,feature_id (по одной строке на каждый покрывающий объект)."
              }
            }
          },
          "create_accuracy_assessment_points": {
            "name": "Создание точек оценки точности",
            "description": "Генерирует случайно распределённые эталонные точки, стратифицированные по классам классифицированного растра или слоя полигонов, с предзаполненным классом карты, готовые для разметки наземной истины (ArcGIS Create Accuracy Assessment Points). classification_accuracy_assessment использует такие точки, но ничто их не создавало, а create_spatial_sampling_locations стратифицирует по полигональному объекту или полю, а не по классу растра, и не имеет выровненного распределения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Классифицированный растр или классифицированный полигональный слой с 'class_field'."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Атрибут класса, обязательный, когда 'input' — векторный слой. Игнорируется для растрового входа, где используется значение ячейки."
              },
              "num_points": {
                "label": "Число точек",
                "description": "Общее число опорных точек (по умолчанию 500)."
              },
              "sampling_strategy": {
                "label": "Стратегия выборки",
                "description": "Одно из: 'stratified_random' (по умолчанию, распределение пропорционально площади класса), 'equalized_stratified' (равное число на класс), 'random' (без учёта класса)."
              },
              "min_points_per_class": {
                "label": "Мин. точек на класс",
                "description": "Нижний предел, применяемый при 'stratified_random', чтобы редкие классы не отбрасывались (по умолчанию 1)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) растрового входа (по умолчанию 1)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение детерминированного генератора случайных чисел (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной точечный слой с полями CLASSVALUE (класс карты), GrndTruth (-1 до сбора данных) и Stratum. Если не указан, сохраняется в памяти."
              }
            }
          },
          "create_cartographic_partitions": {
            "name": "Создание картографических разделов",
            "description": "Создаёт адаптивные неперекрывающиеся полигоны разделов, каждый из которых содержит примерно целевое число объектов (плотнее там, где данные кластеризуются), чтобы крупные задания генерализации / маскирования можно было безопасно разбивать на тайлы — аналог ArcGIS Create Cartographic Partitions на чистом Rust.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (любая геометрия). Каждый объект сводится к представительной точке и относится к одному разделу."
              },
              "feature_count": {
                "label": "Число объектов",
                "description": "Целевое максимальное число объектов в разделе. Ячейка делится, пока она содержит больше указанного числа объектов. По умолчанию 1000."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный вектор разделов (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              }
            }
          },
          "create_overpass": {
            "name": "Создание путепровода",
            "description": "Строит полигоны масок-вырезов (и необязательные декоративные линии крыльев) там, где «верхняя» линия пересекает «нижнюю», чтобы нижняя линия была замаскирована в месте пересечения.",
            "params": {
              "above": {
                "label": "Выше",
                "description": "Линейный вектор объектов, проходящих НАД пересечением (маска ориентируется вдоль них). Формат определяется автоматически, либо дескриптор в памяти."
              },
              "below": {
                "label": "Ниже",
                "description": "Линейный вектор объектов, маскируемых ПОД пересечением (линии, которые вырезаются). Формат определяется автоматически, либо дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для полигонов маски (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "output_decoration": {
                "label": "Выходное оформление",
                "description": "Необязательный выходной путь для декоративных линий-засечек. Если не указан, сохраняется в памяти (всё равно возвращается как 'output_decoration')."
              },
              "margin_along": {
                "label": "Поле вдоль",
                "description": "Полудлина каждой маски вдоль верхней линии, в единицах CRS (длина маски вдвое больше). По умолчанию 1.0."
              },
              "margin_across": {
                "label": "Поле поперёк",
                "description": "Полуширина каждой маски поперёк верхней линии, в единицах CRS (ширина маски вдвое больше). По умолчанию 1.0."
              },
              "wing_type": {
                "label": "Тип крыльев",
                "description": "Стиль декорирования: 'none', 'perpendicular' (по умолчанию; засечка поперёк каждого конца маски) или 'parallel' (окаймляющие линии вдоль каждой стороны)."
              }
            }
          },
          "create_routes": {
            "name": "Создание маршрутов",
            "description": "Сливает линейные объекты по полю идентификатора маршрута, упорядочивает их сегменты в одну полилинию на маршрут и назначает линейные меры (m-значения) по геометрической длине или по полям начальной/конечной меры.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного линейного векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Атрибут, идентифицирующий каждый маршрут; входные линии группируются по нему, по одному выходному маршруту на каждое уникальное значение."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного векторного слоя маршрутов (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "measure_source": {
                "label": "Источник меры",
                "description": "Способ назначения мер: LENGTH (0..геометрическая длина), ONE_FIELD (начало из поля, конец = начало + длина) или TWO_FIELDS (начало/конец из полей, с интерполяцией). По умолчанию LENGTH."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Числовое поле, задающее начальную меру каждого маршрута (используется в ONE_FIELD и TWO_FIELDS). Считывается из первого сегмента маршрута."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Числовое поле, задающее конечную меру каждого маршрута (используется в TWO_FIELDS). Считывается из первого сегмента маршрута."
              },
              "measure_factor": {
                "label": "Коэффициент меры",
                "description": "Множитель, применяемый к естественной (основанной на длине) мере, например 0.001 для перевода метров в километры. По умолчанию 1.0."
              },
              "measure_offset": {
                "label": "Смещение меры",
                "description": "Значение, добавляемое к каждой мере вдоль маршрута (сдвигает все m-значения маршрута). По умолчанию 0.0."
              },
              "ignore_gaps": {
                "label": "Игнорировать разрывы",
                "description": "Для LENGTH/ONE_FIELD исключать прямые переходы между несвязанными сегментами из накопленной меры, чтобы разрывы не завышали расстояния. По умолчанию false."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Конечные точки в пределах этого расстояния (в единицах CRS) считаются совпадающими при сшивке сегментов. По умолчанию 1e-6."
              }
            }
          },
          "create_spatial_sampling_locations": {
            "name": "Создание точек пространственной выборки",
            "description": "Генерирует точки выборки по полигональной области исследования по простой случайной, стратифицированной, систематической (квадрат/шестиугольник/треугольник) или кластерной схеме, с воспроизводимой случайностью по зерну.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь полигонального векторного файла области исследования (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного точечного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'simple_random' (по умолчанию), 'stratified', 'systematic' или 'cluster'."
              },
              "num_samples": {
                "label": "Число выборок",
                "description": "Общее число точек выборки для simple_random, stratified и cluster. По умолчанию 100."
              },
              "strata_field": {
                "label": "Поле страт",
                "description": "Для stratified: группировать входные объекты в страты по этому атрибуту. Если не указан, каждый входной объект образует собственную страту."
              },
              "allocation": {
                "label": "Распределение выборок",
                "description": "Для stratified: 'proportional' — пропорционально площади страты (по умолчанию), 'equal' — поровну на страту или 'population_field' — пропорционально сумме по полю."
              },
              "population_field": {
                "label": "Поле населения",
                "description": "Для allocation=population_field: числовое поле, сумма которого по стратам определяет распределение."
              },
              "bin_shape": {
                "label": "Форма бина",
                "description": "Для systematic: решётка 'square' (по умолчанию), 'hexagon' или 'triangle'."
              },
              "bin_size": {
                "label": "Размер бина",
                "description": "Шаг (в единицах CRS) для систематических решёток и кластерных ячеек. Обязателен для этих методов."
              },
              "num_clusters": {
                "label": "Число кластеров",
                "description": "Для cluster: сколько ячеек выбирать случайным образом. По умолчанию 10."
              },
              "min_distance": {
                "label": "Мин. расстояние",
                "description": "Минимальное расстояние между точками simple_random / stratified / cluster (в единицах CRS). По умолчанию 0 (без ограничения)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение детерминированного генератора случайных чисел (по умолчанию 1)."
              }
            }
          },
          "create_spatially_balanced_points": {
            "name": "Создание пространственно сбалансированных точек",
            "description": "Генерирует пространственно хорошо распределённые (квазислучайные Холтона) точки выборки внутри полигона-ограничения, при необходимости взвешенные растром вероятности включения, каждая с меткой сбалансированного порядка выборки, аналогично ArcGIS Create Spatially Balanced Points.",
            "params": {
              "constraint": {
                "label": "Ограничение",
                "description": "Ограничивающий полигональный слой; точки создаются внутри этих полигонов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "num_points": {
                "label": "Число точек",
                "description": "Число создаваемых точек выборки."
              },
              "probability": {
                "label": "Вероятность",
                "description": "Необязательный растр вероятности включения; ячейки с более высокими значениями вероятнее попадают в выборку (нормируется по максимуму)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для воспроизводимой выборки (по умолчанию 1)."
              }
            }
          },
          "create_underpass": {
            "name": "Создание подземного перехода",
            "description": "В местах пересечения линий строит полигоны масок, ориентированные вдоль верхнего объекта, и вырезает соответствующий разрыв в нижнем объекте, чтобы он читался как проходящий снизу (ArcGIS Create Underpass). Собрат поставляемого create_overpass, который маскирует нижнюю линию, чтобы верхняя читалась непрерывной; подземному переходу вместо этого нужен декоративный разрыв — именно он отличает портал тоннеля от моста. Выдаёт и маски, и обрезанные нижние линии.",
            "params": {
              "above": {
                "label": "Выше",
                "description": "Линейный вектор объектов, проходящих НАД пересечением (маски ориентируются вдоль них). Формат определяется автоматически, либо дескриптор в памяти."
              },
              "below": {
                "label": "Ниже",
                "description": "Линейный вектор объектов, проходящих ПОД пересечением (линии, в которых создаётся разрыв). Формат определяется автоматически, либо дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь для полигонов маски пересечения снизу. Если не указан, сохраняется в памяти."
              },
              "output_lines": {
                "label": "Выходные линии",
                "description": "Необязательный выходной путь для нижнего слоя с вырезанными разрывами пересечения снизу. Если не указан, сохраняется в памяти (всё равно возвращается как 'output_lines')."
              },
              "margin_along": {
                "label": "Поле вдоль",
                "description": "Полудлина каждой маски, измеряемая ВДОЛЬ верхней линии, в единицах CRS; маска простирается в этом направлении вдвое дальше. По умолчанию 1.0."
              },
              "margin_across": {
                "label": "Поле поперёк",
                "description": "Полуширина каждой маски ПОПЕРЁК верхней линии, в единицах CRS. При перпендикулярном пересечении именно она ограничивает разрыв, вырезаемый в нижней линии, поэтому удаляемая длина вдвое больше. По умолчанию 1.0."
              },
              "min_angle": {
                "label": "Мин. угол",
                "description": "Пропускать пересечения, где две линии сходятся под углом меньше указанного в градусах, поскольку почти параллельная маска неустойчива. По умолчанию 15."
              }
            }
          },
          "cul_de_sac_masks": {
            "name": "Маски тупиков",
            "description": "Генерирует зависящие от масштаба полигоны масок-вырезов у разворотных площадок тупиков дорожной сети, аналогично ArcGIS Cul-De-Sac Masks.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Слой осевых линий дорог."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходных полигонов маски. Если не указан, сохраняется в памяти."
              },
              "reference_scale": {
                "label": "Опорный масштаб",
                "description": "Знаменатель масштаба карты, под который рассчитывается размер маски (например, 24000 для 1:24 000)."
              },
              "symbol_width": {
                "label": "Ширина символа",
                "description": "Ширина окантовки дороги в единицах страницы (см. 'page_unit') в опорном масштабе."
              },
              "margin": {
                "label": "Поле отступа",
                "description": "Дополнительный отступ вокруг знака, в единицах страницы (по умолчанию 0)."
              },
              "page_unit": {
                "label": "Единица страницы",
                "description": "Единица измерения 'symbol_width' и 'margin': пункты (по умолчанию, 1/72 дюйма), мм или дюймы."
              },
              "map_units_per_meter": {
                "label": "Единиц карты на метр",
                "description": "Число единиц CRS в метре (по умолчанию 1, что верно для проекционных CRS в метрах). Для слоя в градусах используйте примерно 0.000008983."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск прилипания координат при объединении конечных точек линий в узлы сети (по умолчанию 0.001 единицы карты)."
              },
              "attributes": {
                "label": "Атрибуты",
                "description": "ids_only (по умолчанию) | all — переносить ли атрибуты исходного объекта на маску."
              }
            }
          },
          "cut_fill": {
            "name": "Выемка и насыпь",
            "description": "Объёмное изменение между двумя поверхностями DEM (до/после) или поверхностью и опорной плоскостью: растр изменения высот со знаком плюс объёмы выемки, насыпи и чистый объём, с необязательной разметкой объёмов по регионам.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь растрового файла «до» (или единственной поверхности для режима плоскости)."
              },
              "after": {
                "label": "После",
                "description": "Растр «после» (режим двух поверхностей). Должен иметь ту же сетку, что и 'input'. Укажите его или 'plane'."
              },
              "plane": {
                "label": "Плоскость",
                "description": "Высота опорной плоскости (режим объёма поверхности): изменение вычисляется как вход минус это значение. Укажите его или 'after'."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра знакового изменения высоты (Δz). Если не указан, сохраняется в памяти."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из входного растра (растров). По умолчанию 1."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Ячейки, у которых |Δz| не превышает это значение (в единицах z CRS), считаются неизменившимися. По умолчанию 0."
              },
              "region_output": {
                "label": "Выход регионов",
                "description": "Необязательный путь растра меток связных регионов выемки/насыпи (идентификаторы регионов >= 1; неизменившиеся ячейки — NoData)."
              },
              "csv_output": {
                "label": "Выходной CSV",
                "description": "Необязательный путь к CSV для таблицы объёмов по регионам (region_id, type, cell_count, volume)."
              }
            }
          },
          "darcy_flow": {
            "name": "Поток Дарси",
            "description": "Стационарное поле скоростей Дарси подземных вод по растрам напора, проводимости и пористости — растр величины потока (скорость Дарси) и растр направления потока вниз по градиенту (v = -(T/n)·∇head), с необязательным адвективным трассированием частиц (RK2) от затравочных точек в полилинии линий тока — аналог ArcGIS Darcy Flow / Particle Track.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр напора грунтовых вод (высоты уровня грунтовых вод). Размер ячейки берётся из этого растра."
              },
              "transmissivity": {
                "label": "Проводимость",
                "description": "Растр водопроводимости (совмещённый с растром напора)."
              },
              "porosity": {
                "label": "Пористость",
                "description": "Растр эффективной пористости (совмещённый с растром напора; значения должны быть > 0)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра модуля скорости Дарси. Если не указан, сохраняется в памяти."
              },
              "direction": {
                "label": "Направление",
                "description": "Необязательный путь выходного растра направления потока (азимут в градусах, от севера по часовой стрелке, вниз по градиенту). Если не указан, сохраняется в памяти."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из каждого входного растра (по умолчанию 1)."
              },
              "seeds": {
                "label": "Затравки",
                "description": "Необязательный точечный вектор затравок частиц. Если задан, линии тока трассируются от каждой затравки."
              },
              "streamlines": {
                "label": "Линии тока",
                "description": "Необязательный путь выходного линейного вектора для трассированных линий тока частиц (требует 'seeds')."
              },
              "step": {
                "label": "Шаг",
                "description": "Длина шага трассировки частиц в единицах CRS (по умолчанию: размер ячейки растра напора)."
              },
              "max_steps": {
                "label": "Макс. шагов",
                "description": "Максимальное число шагов интегрирования на частицу (по умолчанию 1000)."
              }
            }
          },
          "delineate_built_up_areas": {
            "name": "Выделение застроенных территорий",
            "description": "Генерализует плотные контуры зданий в гладкие полигоны населённых пунктов / городской застройки, группируя близлежащие здания (морфологическое закрытие), с фильтрами минимального числа зданий и площади.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой контуров зданий, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "grouping_distance": {
                "label": "Расстояние группировки",
                "description": "Здания, контуры которых находятся в пределах этого расстояния (в единицах CRS), объединяются в одну застроенную территорию. Задаёт радиус морфологического замыкания, равный половине этого значения."
              },
              "min_building_count": {
                "label": "Мин. число зданий",
                "description": "Отбрасывать застроенные территории, содержащие меньше указанного числа зданий (по умолчанию 1 — сохранять все группы)."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Отбрасывать застроенные территории, площадь которых (в квадратных единицах CRS) меньше этого значения, и заполнять внутренние отверстия меньшего размера. По умолчанию: сохранять все."
              },
              "simplify_tolerance": {
                "label": "Допуск упрощения",
                "description": "Допуск Дугласа–Пекера (в единицах CRS), применяемый к границе застроенной территории для разрежения скруглённого буфера с большим числом вершин. По умолчанию 0 (без упрощения)."
              }
            }
          },
          "delineate_depressions": {
            "name": "Выделение понижений",
            "description": "Выделяет вложенные понижения из растра стоков методом множеств уровня (lidar slicing.py).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр стоков (например, результат extract_sinks)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь растра идентификаторов понижений. Если не указан, сохраняется в памяти."
              },
              "level_output": {
                "label": "Выход уровня",
                "description": "Необязательный выходной путь для растра уровней понижений."
              },
              "csv_output": {
                "label": "Выходной CSV",
                "description": "Необязательный выходной путь для CSV атрибутов понижений."
              },
              "vector_output": {
                "label": "Векторный выход",
                "description": "Необязательный выходной путь для полигонов понижений в формате GeoJSON (с присоединёнными атрибутами)."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальное число пикселей для понижения (по умолчанию 10)."
              },
              "min_depth": {
                "label": "Мин. глубина",
                "description": "Минимальная глубина понижения (принимается для совместимости; не используется, как и в lidar)."
              },
              "interval": {
                "label": "Интервал",
                "description": "Интервал нарезки для метода множеств уровня (по умолчанию 0.3)."
              }
            }
          },
          "delineate_mounts": {
            "name": "Выделение возвышенностей",
            "description": "Выделяет вложенную иерархию возвышенных форм (возвышенностей) в DEM (lidar mounts.py).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь растра идентификаторов возвышенностей. Если не указан, сохраняется в памяти."
              },
              "level_output": {
                "label": "Выход уровня",
                "description": "Необязательный выходной путь для растра уровней возвышенностей."
              },
              "csv_output": {
                "label": "Выходной CSV",
                "description": "Необязательный выходной путь для CSV атрибутов возвышенностей."
              },
              "vector_output": {
                "label": "Векторный выход",
                "description": "Необязательный выходной путь для полигонов возвышенностей в формате GeoJSON (с присоединёнными атрибутами)."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальное число пикселей для возвышенности (по умолчанию 10)."
              },
              "min_height": {
                "label": "Мин. высота",
                "description": "Минимальная высота возвышенности (принимается для совместимости; не используется, как и в lidar)."
              },
              "interval": {
                "label": "Интервал",
                "description": "Интервал нарезки для метода множеств уровня (по умолчанию 0.3)."
              },
              "delta": {
                "label": "Дельта",
                "description": "Базовое значение, добавляемое при инвертировании DEM (по умолчанию 100)."
              }
            }
          },
          "dem_filter": {
            "name": "Фильтр DEM",
            "description": "Сглаживает DEM фильтром среднего, медианным или гауссовым фильтром (lidar filtering.py).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              },
              "filter": {
                "label": "Фильтр",
                "description": "Тип фильтра: 'mean', 'median' или 'gaussian' (по умолчанию 'mean')."
              },
              "kernel_size": {
                "label": "Размер ядра",
                "description": "Размер окна в пикселях для фильтров mean/median (по умолчанию 3)."
              },
              "sigma": {
                "label": "Сигма",
                "description": "Стандартное отклонение для гауссова фильтра (по умолчанию 1.0)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер фильтруемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "dendrogram": {
            "name": "Дендрограмма",
            "description": "Строит иерархическое дерево слияния по сигнатурам классов, показывающее, насколько разделимы классы, аналогично ArcGIS Dendrogram.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Слой кластеризованных объектов, содержащий поле класса и числовые поля, задающие пространство признаков."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Поле, содержащее идентификатор класса / кластера."
              },
              "fields": {
                "label": "Поля",
                "description": "Числовые поля, задающие пространство признаков, через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы слияний. Если не указан, сохраняется в памяти."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Расстояние между сигнатурами: 'variance' (по умолчанию; нормируется по внутриклассовому разбросу) или 'mean_only'."
              },
              "standardize": {
                "label": "Стандартизировать",
                "description": "Выполнять z-стандартизацию каждого поля перед вычислением расстояний, чтобы поля с большим диапазоном не доминировали (по умолчанию true)."
              },
              "output_text": {
                "label": "Выходной текст",
                "description": "Необязательный путь для текстового представления дерева с отступами."
              }
            }
          },
          "densify_sampling_network": {
            "name": "Уплотнение сети выборки",
            "description": "Предлагает новые места выборки в ячейках с наибольшей поверхностью стандартной ошибки предсказания кригинга, соблюдая минимальное расстояние подавления, аналогично ArcGIS Densify Sampling Network.",
            "params": {
              "prediction_error": {
                "label": "Ошибка предсказания",
                "description": "Входной растр стандартной ошибки прогноза (например, поверхность дисперсии/ошибки кригинга). Новые точки выборки нацелены на ячейки с наибольшей ошибкой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "count": {
                "label": "Количество",
                "description": "Число предлагаемых новых мест выборки."
              },
              "inhibition_distance": {
                "label": "Расстояние подавления",
                "description": "Минимальное расстояние между предлагаемыми точками выборки в единицах карты (по умолчанию 0 = без ограничения; просто ячейки с наибольшей ошибкой)."
              },
              "mask": {
                "label": "Маска",
                "description": "Необязательный полигональный слой; кандидатами являются только ячейки, центр которых попадает внутрь."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) растра ошибки прогноза для чтения (по умолчанию 1)."
              }
            }
          },
          "detect_bright_ocean_objects": {
            "name": "Обнаружение ярких объектов в океане",
            "description": "Находит суда и другие яркие точечные цели на воде в снимках SAR двухпараметрическим детектором CFAR и выдаёт их как ориентированные ограничивающие прямоугольники с длиной, шириной, курсом и пиковым обратным рассеянием (ArcGIS Detect Bright Ocean Objects). Ни в одном реестре нет детектора локального фона: глобальный порог не работает, потому что морской фон ярчает с ветром и углом падения, matched_filter_target_detection — спектральный оптический детектор, а detect_image_anomalies использует глобальную, а не скользящую модель.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр обратного рассеяния SAR."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой обнаруженных объектов. Если не указан, сохраняется в памяти."
              },
              "geometry_type": {
                "label": "Тип геометрии",
                "description": "'bounding_box' (по умолчанию) для минимального ориентированного прямоугольника или 'perimeter' для трассированного контура обнаружения."
              },
              "threshold": {
                "label": "Порог",
                "description": "Порог обнаружения CFAR в стандартных отклонениях фона (по умолчанию 5.0)."
              },
              "guard_size": {
                "label": "Размер защитной зоны",
                "description": "Полуширина в ячейках защитной полосы, исключаемой из оценки фона (по умолчанию 3). Должна быть меньше background_size."
              },
              "background_size": {
                "label": "Размер фона",
                "description": "Полуширина фонового кольца в ячейках (по умолчанию 12)."
              },
              "mask_features": {
                "label": "Маскирующие объекты",
                "description": "Полигональный слой, маскирующий сушу или воду. Ячейки, исключённые маской, не проверяются и не используются как фон."
              },
              "mask_type": {
                "label": "Тип маски",
                "description": "'land_polygon' (по умолчанию; анализ вне полигонов) или 'water_polygon' (анализ внутри них)."
              },
              "min_object_length": {
                "label": "Мин. длина объекта",
                "description": "Отбрасывать объекты короче этого значения, в единицах карты."
              },
              "max_object_length": {
                "label": "Макс. длина объекта",
                "description": "Отбрасывать объекты длиннее этого значения, в единицах карты."
              },
              "min_object_width": {
                "label": "Мин. ширина объекта",
                "description": "Отбрасывать объекты уже этого значения, в единицах карты."
              },
              "max_object_width": {
                "label": "Макс. ширина объекта",
                "description": "Отбрасывать объекты шире этого значения, в единицах карты."
              },
              "min_cells": {
                "label": "Мин. ячеек",
                "description": "Отбрасывать обнаружения меньше указанного числа ячеек (по умолчанию 2), что подавляет одиночные всплески спекл-шума."
              },
              "input_units": {
                "label": "Входные единицы",
                "description": "'intensity' (по умолчанию), 'dn', 'amplitude' или 'db'. Обнаружение выполняется по линейной мощности, где статистика помех имеет смысл."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) для поиска (по умолчанию 1)."
              }
            }
          },
          "detect_dark_ocean_areas": {
            "name": "Обнаружение тёмных областей океана",
            "description": "Находит аномально тёмные участки на воде в снимках SAR — нефтяные пятна, естественные выходы, плёнки водорослей, зоны слабого ветра — как области, лежащие на заданное число стандартных отклонений ниже локального морского фона, с указанием их контраста в дБ (ArcGIS Detect Dark Ocean Areas). Дополнение к detect_bright_ocean_objects и отличие от extract_water_sar: полностью водная сцена унимодальна, так что разделение Оцу просто рассекло бы морской фон и объявило бы половину океана пятном.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр обратного рассеяния SAR над водой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой тёмных областей. Если не указан, сохраняется в памяти."
              },
              "output_raster": {
                "label": "Выходной растр",
                "description": "Выходная бинарная маска (1 — тёмное, 0 — фон). Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'statistical' (по умолчанию; заданное число стандартных отклонений ниже среднего фона), 'otsu' или 'fixed'."
              },
              "threshold": {
                "label": "Порог",
                "description": "Для 'statistical' — на сколько стандартных отклонений ниже среднего значение считается тёмным (по умолчанию 2.0). Для 'fixed' — уровень в дБ, на котором и ниже которого ячейка считается тёмной."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Отбрасывать тёмные области меньше этой площади в квадратных единицах карты. Плёнки нефти велики и связны, в отличие от спекл-шума."
              },
              "min_contrast_db": {
                "label": "Мин. контраст (дБ)",
                "description": "Отбрасывать регионы, находящиеся менее чем на указанное число дБ ниже фона. Плёнка минерального масла обычно ниже более чем на 5 дБ."
              },
              "mask_features": {
                "label": "Маскирующие объекты",
                "description": "Полигональный слой, ограничивающий анализ водной поверхностью. Суша яркая и завысила бы оценку фона."
              },
              "mask_type": {
                "label": "Тип маски",
                "description": "'land_polygon' (по умолчанию; анализ вне полигонов) или 'water_polygon' (анализ внутри них)."
              },
              "histogram_bins": {
                "label": "Бины гистограммы",
                "description": "Число интервалов гистограммы Оцу (по умолчанию 256)."
              },
              "input_units": {
                "label": "Входные единицы",
                "description": "'intensity' (по умолчанию), 'dn', 'amplitude' или 'db'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) для поиска (по умолчанию 1)."
              }
            }
          },
          "detect_feature_changes": {
            "name": "Обнаружение изменений объектов",
            "description": "Сопоставляет два набора линий по расстоянию Хаусдорфа и классифицирует каждую как unchanged / spatial / attribute / spatial_attribute / new, плюс удалённые базовые объекты — точка входа для выявления изменений и конфляции векторов, аналог ArcGIS Detect Feature Changes.",
            "params": {
              "update": {
                "label": "Обновление",
                "description": "Обновлённый линейный векторный слой (новое состояние)."
              },
              "base": {
                "label": "База",
                "description": "Базовый линейный векторный слой (предыдущее состояние) для сравнения."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной линейный вектор (классифицированные обновлённые объекты плюс удалённые базовые объекты). Если не указан, сохраняется в памяти."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное расстояние (в единицах CRS) для сопоставления обновлённой линии с базовой. Обязательный параметр."
              },
              "spatial_tolerance": {
                "label": "Пространственный допуск",
                "description": "Расстояние Хаусдорфа, ниже которого сопоставленная геометрия считается неизменившейся (в единицах CRS). По умолчанию: search_distance / 5."
              },
              "compare_fields": {
                "label": "Сравниваемые поля",
                "description": "Поля, присутствующие в обоих слоях, для сравнения изменений атрибутов, через запятую."
              }
            }
          },
          "detect_graphic_conflict": {
            "name": "Обнаружение графических конфликтов",
            "description": "Находит, где символизированные (с учётом ширины отрисовки) экстенты двух слоёв объектов — или одного слоя с самим собой — перекрываются или сближаются ближе минимального расстояния, выдавая полигон конфликта на каждую конфликтующую пару с ID обоих исходных объектов и площадью перекрытия, аналогично ArcGIS Detect Graphic Conflict.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки, линии или полигоны)."
              },
              "conflict": {
                "label": "Конфликт",
                "description": "Второй векторный слой, с которым сопоставляется 'input'. Не указывайте, чтобы проверить 'input' сам с собой."
              },
              "symbol_width": {
                "label": "Ширина символа",
                "description": "Символьная ширина/диаметр объектов 'input', в единицах карты."
              },
              "conflict_symbol_width": {
                "label": "Ширина символа конфликта",
                "description": "Символьная ширина/диаметр объектов 'conflict', в единицах карты. По умолчанию: то же, что 'symbol_width'. Игнорируется, если 'conflict' не указан."
              },
              "conflict_distance": {
                "label": "Расстояние конфликта",
                "description": "Дополнительный требуемый зазор сверх соприкосновения, в единицах карты. По умолчанию 0."
              },
              "line_connection_allowance": {
                "label": "Допуск соединения линий",
                "description": "Радиус вокруг общей конечной точки двух линейных объектов одного слоя, в пределах которого их перекрытие считается обычным соединением «конец в конец», а не конфликтом. По умолчанию 0 (без допуска)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора с полями 'input_fid', 'conflict_fid' и 'overlap_area'. Если не указан, сохраняется в памяти."
              }
            }
          },
          "detect_image_anomalies": {
            "name": "Обнаружение аномалий изображения",
            "description": "Оценивает каждый пиксель многоканального изображения по его расстоянию Махаланобиса до статистики каналов сцены (или скользящего окна) — детектор аномалий Рида-Сяоли (RX) — с необязательной маской перцентильного порога, аналогично ArcGIS Detect Image Anomalies.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной многоканальный растр (2 и более каналов)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр оценок аномальности (F32). Если не указан, сохраняется в памяти."
              },
              "mode": {
                "label": "Режим",
                "description": "'global' (статистика по всей сцене, по умолчанию) или 'local' (статистика скользящего окна)."
              },
              "window": {
                "label": "Окно",
                "description": "Нечётный размер окна (в пикселях) для локального режима (по умолчанию 15)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Необязательный процентиль (0-100) распределения оценок, выше которого записывается бинарная маска аномалий."
              },
              "mask_output": {
                "label": "Выход маски",
                "description": "Выходной путь для бинарной маски аномалий (требует 'threshold'). Если порог задан, а путь не указан, сохраняется в памяти."
              }
            }
          },
          "detect_incidents": {
            "name": "Обнаружение инцидентов",
            "description": "Отмечает, где условие начинается и заканчивается вдоль каждого трека: группирует точки с метками времени по треку, сортирует по времени, вычисляет сравнение начала (и необязательное сравнение конца) по числовому атрибуту и выдаёт эпизоды инцидентов как помеченные точки или линейные сегменты по эпизодам с ID и длительностями — аналог ArcGIS Detect Incidents.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой наблюдений с метками времени."
              },
              "track_field": {
                "label": "Поле трека",
                "description": "Поле, идентифицирующее каждый трек/движущийся объект (например, идентификатор транспортного средства или животного)."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: число секунд или метка времени ISO-8601."
              },
              "start_condition": {
                "label": "Условие начала",
                "description": "Условие, открывающее инцидент, например 'speed > 30'. Синтаксис: '<поле> <оператор> <число>', где оператор — один из > >= < <= == != , при необходимости два выражения, соединённых AND."
              },
              "end_condition": {
                "label": "Условие конца",
                "description": "Необязательное условие, закрывающее инцидент (тот же синтаксис). Если не указано, инцидент завершается, когда перестаёт выполняться начальное условие."
              },
              "mode": {
                "label": "Режим",
                "description": "Режим вывода: 'points' (по умолчанию, каждая точка переносится с полями инцидента) или 'segments' (по одной полилинии на инцидент)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "dice": {
            "name": "Кости",
            "description": "Разбивает полигоны или полилинии с числом вершин выше предела на сетку меньших частей (аналог ArcGIS Dice), чтобы последующие оверлей и тайлирование оставались быстрыми — адаптивное квадродерево пересекает геометрию с каждым квадрантом, пока каждая часть не окажется ниже предела.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный или полилинейный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой нарезанных частей. Если не указан, сохраняется в памяти."
              },
              "vertex_limit": {
                "label": "Предел вершин",
                "description": "Максимальное число вершин в выходном объекте (по умолчанию 10000). Объекты с этим или меньшим числом вершин переносятся без изменений."
              }
            }
          },
          "difference_3d": {
            "name": "3D-разность",
            "description": "Вычитает один набор 3D-тел из другого, сообщая объём, удалённый из каждого уменьшаемого объекта и оставшийся в нём (ArcGIS Difference 3D). union_3d был единственным 3D-оверлеем в обоих реестрах, а erase работает только с 2D-полигонами, так что не было способа вычислить объём выемки, оставшийся после вырезающего тела, или объём шлейфа вне огибающей исключения. Объёмы уменьшаемых точны; удалённый объём оценивается по заполнению вокселей с указанным разрешением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Уменьшаемые замкнутые 3D-тела (мультиполигоны в виде треугольных сеток с Z)."
              },
              "subtract": {
                "label": "Вычитание",
                "description": "Вычитаемые замкнутые 3D-тела, удаляемые из каждого уменьшаемого."
              },
              "output": {
                "label": "Выход",
                "description": "Выходная таблица, по одной строке на каждое уменьшаемое. Если не указана, сохраняется в памяти."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Число вокселей вдоль самой длинной оси ограничивающего прямоугольника каждого уменьшаемого (по умолчанию 64). Большее значение точнее и медленнее."
              },
              "keep_geometry": {
                "label": "Сохранять геометрию",
                "description": "Переносить исходную геометрию каждого уменьшаемого в его выходную строку (по умолчанию false: таблица только с атрибутами). Геометрия соответствует НЕРАЗРЕЗАННОМУ уменьшаемому — точная объединённая сетка не создаётся."
              }
            }
          },
          "diffusion_interpolation_with_barriers": {
            "name": "Диффузионная интерполяция с барьерами",
            "description": "Интерполирует рассеянные точечные измерения в растр, моделируя диффузию тепла, которая обтекает абсолютные (непроницаемые) барьеры, а не проходит сквозь них (аналог ArcGIS Diffusion Interpolation With Barriers). Выборки закрепляются как фиксированные ячейки; каждая другая ячейка релаксирует к среднему своих небарьерных соседей за `number_iterations` проходов Якоби уравнения Лапласа/теплопроводности, так что влияние затухает с диффузионным расстоянием. Отличается от ядра кратчайшего небарьерного пути interpolate_with_barriers и от растрового сглаживателя anisotropic_diffusion_filter.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой измерений выборки (Point / MultiPoint)."
              },
              "z_field": {
                "label": "Поле Z",
                "description": "Числовое поле точек, содержащее интерполируемое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной интерполированный растр (GeoTIFF). Если не указан, сохраняется в памяти."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки / разрешение выхода в единицах карты (метры для географической CRS, единицы CRS в остальных случаях). Обязательный параметр."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный векторный слой барьеров (полилинии или полигоны), блокирующий диффузию. Полилинии блокируют ячейки, которые пересекают их сегменты; полигоны блокируют ячейки, центр которых попадает внутрь. Не указывайте для контрольного расчёта без барьеров."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Вес релаксации лямбда на итерацию в (0, 0.25] (по умолчанию 0.2): за один проход каждая свободная ячейка смещается на эту долю пути к среднему значению соседей."
              },
              "number_iterations": {
                "label": "Число итераций",
                "description": "Число проходов якобиевой релаксации уравнения теплопроводности (по умолчанию 100). Больше итераций — дальше распространяется влияние."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное числовое поле, задающее вес каждой точки (по умолчанию 1), используется только для усреднения совпадающих измерений, попадающих в одну выходную ячейку."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Переопределяет код EPSG входной CRS (например, когда слой не имеет метки). Значение 4326 включает локальную метровую проекцию."
              }
            }
          },
          "dimension_reduction": {
            "name": "Снижение размерности",
            "description": "Анализ главных компонент по числовым атрибутам объектов (аналог ArcGIS Dimension Reduction): стандартизирует выбранные поля, выполняет собственное разложение матрицы корреляции/ковариации собственной реализацией вращений Якоби и записывает оценки компонент PC1..PCk обратно в объекты плюс отчёт о собственных значениях/дисперсии/нагрузках — векторно-атрибутивный аналог встроенного principal_component_analysis, работающего только с каналами.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (или таблица) с числовыми полями атрибутов."
              },
              "fields": {
                "label": "Поля",
                "description": "Список не менее чем из двух числовых полей для сокращения размерности, через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой с добавленными полями оценок главных компонент. Если не указан, сохраняется в памяти."
              },
              "table": {
                "label": "Таблица",
                "description": "Необязательный путь к CSV для отчёта по компонентам (собственное значение, объяснённая дисперсия, накопленная доля, нагрузки по переменным). Всегда возвращается в результате."
              },
              "num_components": {
                "label": "Число компонент",
                "description": "Число сохраняемых ведущих компонент. По умолчанию: столько, сколько нужно для достижения 'min_variance', иначе все поля."
              },
              "min_variance": {
                "label": "Мин. дисперсия",
                "description": "Сохранять наименьшее число компонент, накопленная объяснённая дисперсия которых достигает этой доли (0-1). Игнорируется, если задан 'num_components'."
              },
              "standardize": {
                "label": "Стандартизировать",
                "description": "Стандартизовать каждое поле (z-оценка) перед PCA, чтобы масштабы были сопоставимы — анализируется корреляционная матрица. По умолчанию true; при false анализируется ковариационная матрица."
              }
            }
          },
          "dimensional_moving_statistics": {
            "name": "Размерная скользящая статистика",
            "description": "Проводит скользящее окно вдоль измерения растрового куба, записывая один сглаженный срез на каждый входной срез — скользящее среднее или медиана на месте, превращающие зашумлённый спутниковый временной ряд в пригодный (ArcGIS Dimensional Moving Statistics). time_series_smoothing раунда 17 работает только с векторами, встроенные фокальные фильтры перемещают окно пространственно внутри одного среза, а aggregate_multidimensional_raster укорачивает куб в бины. Включает круговое среднее, без которого усреднение экспозиции или фазы через точку перехода бессмысленно.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Один многоканальный растр (каждый канал — срез) или разделённый запятыми список совмещённых растров."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной многоканальный растр с одним каналом на каждый входной срез. Если не указан, сохраняется в памяти."
              },
              "dimension": {
                "label": "Измерение",
                "description": "Имя измерения, используется только в отчёте (по умолчанию 'slice')."
              },
              "backward_window": {
                "label": "Окно назад",
                "description": "Число включаемых срезов перед текущим (по умолчанию 1)."
              },
              "forward_window": {
                "label": "Окно вперёд",
                "description": "Число включаемых срезов после текущего (по умолчанию 1)."
              },
              "statistic": {
                "label": "Статистика",
                "description": "'mean' (по умолчанию), 'circular_mean', 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'std' или 'sum'."
              },
              "percentile_value": {
                "label": "Значение перцентиля",
                "description": "Процентиль в [0, 100] для статистики 'percentile' (по умолчанию 50)."
              },
              "period": {
                "label": "Период",
                "description": "Период замыкания для 'circular_mean' (по умолчанию 360, т. е. градусы; используйте 6.283185307179586 для радиан)."
              },
              "min_valid": {
                "label": "Мин. допустимых",
                "description": "Минимальное число наблюдений в окне, не равных NoData, при котором записывается значение (по умолчанию 1)."
              },
              "nodata_handling": {
                "label": "Обработка NoData",
                "description": "'data' (по умолчанию; пропускать NoData и вычислять по остальным), 'nodata' (любое NoData в окне делает выход NoData) или 'fill_nodata' (записывать значение и там, где сам центральный срез равен NoData)."
              }
            }
          },
          "directional_distribution": {
            "name": "Направленное распределение",
            "description": "Описательная статистика географического распределения: средний центр, медианный центр, центральный объект, стандартное расстояние (окружность) и эллипс стандартного отклонения — с необязательным взвешиванием и группировкой.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (предпочтительно точки; для других геометрий используется представительная точка как среднее вершин)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "Вычисляемая мера: 'mean_center', 'median_center', 'central_feature', 'standard_distance' или 'standard_deviational_ellipse'."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное числовое поле для взвешивания каждого объекта (например, население). По умолчанию: вес каждого объекта равен 1."
              },
              "case_field": {
                "label": "Поле случая",
                "description": "Необязательное поле для группировки объектов; создаётся по одному выходному объекту на каждое уникальное значение."
              },
              "n_std": {
                "label": "Число ст. откл.",
                "description": "Множитель стандартного отклонения (1, 2 или 3) для круга стандартного расстояния и эллипса отклонений. По умолчанию 1."
              }
            }
          },
          "directional_trend": {
            "name": "Направленный тренд",
            "description": "Проецирует точки выборки на выбранный азимут и подбирает полином 1–3-го порядка зависимости значения от расстояния для обнаружения глобального/анизотропного тренда перед вариографией (аналог ArcGIS Directional Trend). Режим determine перебирает азимуты в поисках направления максимальной объяснённой дисперсии.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (предпочтительно точки; для других геометрий используется представительная точка как среднее вершин)."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле атрибутов, тренд которого анализируется."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "Компасное направление в градусах (0 = север, по часовой стрелке), на которое выполняется проецирование, или 'determine' (по умолчанию) для перебора 0-179° в поисках направления с максимальной объяснённой дисперсией."
              },
              "order": {
                "label": "Порядок",
                "description": "Порядок полинома 1, 2 или 3 (по умолчанию 2)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти. Точки содержат proj_dist, value, fitted и residual."
              }
            }
          },
          "directional_variogram": {
            "name": "Анализ направленной вариограммы",
            "description": "Вычисляет вариограммы в нескольких направлениях для обнаружения пространственной анизотропии. Выявляет паттерны направленной непрерывности, необходимые для реалистичного кригинга.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный слой со значениями измерений"
              },
              "field": {
                "label": "Поле",
                "description": "Поле, содержащее значения измерений"
              },
              "directions": {
                "label": "Направления",
                "description": "Список азимутов (0-180°) для анализа, через запятую"
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск по направлению в градусах (по умолчанию 22.5)"
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Максимальное расстояние лага для расчёта (по умолчанию 1000)"
              },
              "bin_size": {
                "label": "Размер бина",
                "description": "Размер интервалов лага (по умолчанию 50)"
              },
              "output_json": {
                "label": "Выходной JSON",
                "description": "Путь выходного файла для результатов направленной вариограммы"
              },
              "output_html": {
                "label": "Выходной HTML",
                "description": "Необязательный выходной путь для визуализации розы-диаграммы в HTML"
              }
            }
          },
          "disperse_markers": {
            "name": "Рассеивание маркеров",
            "description": "Раздвигает совпадающие или перекрывающиеся точечные символы до минимального расстояния между центрами (расширенный/кольцевой/крестовой/квадратный паттерны), чтобы наложенные точки оставались различимыми, аналогично ArcGIS Disperse Markers.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "min_spacing": {
                "label": "Мин. шаг",
                "description": "Минимальное расстояние между центрами кластеризованных точек, в единицах карты."
              },
              "pattern": {
                "label": "Шаблон",
                "description": "'expanded' (по умолчанию, концентрические кольца + локальное отталкивание), 'ring' (одна окружность), 'cross' (четыре луча) или 'square' (сетка)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Целочисленное начальное значение для детерминированного разрешения неоднозначностей, когда элементы изначально точно совпадают (по умолчанию 0)."
              }
            }
          },
          "dissolve_route_events": {
            "name": "Слияние событий маршрута по атрибутам",
            "description": "Сливает события маршрута, которые касаются или перекрываются вдоль одного маршрута, в единые интервалы мер — либо только при совпадении полей слияния (dissolve), либо конкатенируя различающиеся значения (concatenate). Аналог ArcGIS Dissolve Route Events.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входная таблица событий (линейные события с начальной/конечной мерами)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы событий. Если не указан, сохраняется в памяти."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Поле, содержащее идентификатор маршрута."
              },
              "from_measure_field": {
                "label": "Поле начальной меры",
                "description": "Поле, содержащее начальную меру каждого события."
              },
              "to_measure_field": {
                "label": "Поле конечной меры",
                "description": "Поле, содержащее конечную меру каждого события. Для точечных событий используйте то же поле, что и 'from_measure_field'."
              },
              "dissolve_fields": {
                "label": "Поля слияния",
                "description": "Имена полей, разделённые запятой или точкой с запятой, значения которых должны совпадать для слияния двух участков (или значения которых объединяются)."
              },
              "mode": {
                "label": "Режим",
                "description": "'dissolve' (по умолчанию) или 'concatenate'."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Разрыв мер, ниже которого два участка считаются смежными (по умолчанию 0)."
              },
              "separator": {
                "label": "Разделитель",
                "description": "Разделитель, используемый для объединения значений в режиме 'concatenate' (по умолчанию ', ')."
              }
            }
          },
          "edgematch_features": {
            "name": "Сшивка краёв объектов",
            "description": "Соединяет наборы линий через границу тайла/листа (аналог ArcGIS Generate Edgematch Links + Edgematch Features): сопоставляет висячие концы один к одному в пределах допуска и согласует их (середина или привязка), с необязательным слоем связей сопоставления. Межобъектное сопоставление один к одному, которого нет у слепого snap_endnodes.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный слой (например, два объединённых смежных тайла) для сведения границ."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной скорректированный линейный слой. Если не указан, сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Максимальное расстояние между висячими конечными точками для их сопоставления."
              },
              "method": {
                "label": "Метод",
                "description": "'midpoint' (переместить оба конца в их середину; по умолчанию) или 'move_endpoint' (притянуть второй к первому)."
              },
              "match_fields": {
                "label": "Поля сопоставления",
                "description": "Необязательные поля через запятую; сопоставленная пара должна совпадать по ним (устраняет неоднозначность кандидатов)."
              },
              "links": {
                "label": "Связи",
                "description": "Необязательный выходной линейный слой связей сопоставления (для контроля качества)."
              }
            }
          },
          "eighty_twenty_analysis": {
            "name": "Анализ 80/20",
            "description": "Привязывает точки инцидентов к взвешенным местоположениям и вычисляет концентрацию Парето («X% инцидентов происходят в Y% местоположений»), помечая каждое местоположение рангом, накопленным процентом инцидентов и полосой головы/хвоста, аналогично ArcGIS Eighty Twenty Analysis.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой инцидентов (Point или MultiPoint)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "cluster_tolerance": {
                "label": "Допуск кластеризации",
                "description": "Расстояние, в пределах которого инциденты объединяются в одно местоположение (в единицах карты, по умолчанию 0 = только точно совпадающие точки)."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное числовое поле, задающее вес каждого инцидента (по умолчанию: каждый инцидент считается за 1)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Пороговый процент концентрации, определяющий «голову» Парето (по умолчанию 80)."
              }
            }
          },
          "eliminate_polygon_part": {
            "name": "Удаление части полигона",
            "description": "Удаляет внутренние отверстия (и при необходимости мелкие внешние части) полигонов, площадь которых ниже абсолютного или процентного порога, сохраняя атрибуты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "condition": {
                "label": "Условие",
                "description": "Критерий размера: 'AREA' (по умолчанию) сравнивает с 'min_area'; 'PERCENT' сравнивает площадь части/отверстия как процент от общей внешней площади объекта с 'percentage'."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Условие AREA: удалять части/отверстия, площадь которых (в квадратных единицах CRS) меньше этого значения. Обязательно при condition = AREA."
              },
              "percentage": {
                "label": "Процентная доля",
                "description": "Условие PERCENT: удалять части/отверстия, площадь которых в процентах (0-100) от общей внешней площади объекта меньше этого значения. Обязательно при condition = PERCENT."
              },
              "part_option": {
                "label": "Вариант частей",
                "description": "Что подлежит удалению: 'CONTAINED_ONLY' (по умолчанию) удаляет только внутренние кольца (отверстия); 'ANY' удаляет также мелкие внешние части, кроме единственной наибольшей."
              }
            }
          },
          "eliminate_polygons": {
            "name": "Удаление полигонов",
            "description": "Сливает полигоны-осколки (по макс. площади и/или запросу по атрибутам) с соседним полигоном, выбранным по самой длинной общей границе или наибольшей площади.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "max_area": {
                "label": "Макс. площадь",
                "description": "Выбирать полигоны, площадь которых (в квадратных единицах CRS) не превышает это значение. Можно сочетать с 'where' (должны выполняться оба условия)."
              },
              "where": {
                "label": "Условие WHERE",
                "description": "Выбирать полигоны, соответствующие простому атрибутивному условию 'ПОЛЕ ОПЕРАТОР ЗНАЧЕНИЕ', где оператор — один из = != < <= > >= (например, \"class = 0\"). Можно сочетать с 'max_area'."
              },
              "exclude": {
                "label": "Исключить",
                "description": "Защищать объекты, соответствующие этому условию (тот же синтаксис 'ПОЛЕ ОПЕРАТОР ЗНАЧЕНИЕ'), от исключения; они сохраняются и могут принимать слияния."
              },
              "strategy": {
                "label": "Стратегия",
                "description": "С каким соседом сливается узкий полигон: 'longest_border' (по умолчанию) или 'largest_area'."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Максимальное перпендикулярное расстояние (в единицах CRS), при котором два сегмента границы считаются общим ребром. По умолчанию 1e-6."
              }
            }
          },
          "emerging_hot_spot_analysis": {
            "name": "Анализ возникающих горячих точек",
            "description": "Тренды пространственно-временных горячих точек на пространственно-временном кубе H3: группирует точки с метками времени в ячейки H3 × шаги времени, вычисляет Getis-Ord Gi* для каждого бина и классифицирует каждую ячейку (новая/усиливающаяся/устойчивая/ослабевающая/... горячая или холодная точка) с помощью теста тренда Манна-Кендалла, аналогично ArcGIS Emerging Hot Spot Analysis.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (географические долгота/широта, EPSG:4326). Для других геометрий используется представительная точка как среднее вершин."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (драйвер определяется расширением). По одному полигону H3 на ячейку. Если не указан, сохраняется в памяти."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: числовое поле (в собственных единицах) или строка даты/даты-времени ISO-8601."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Ширина шага времени: обычное число (для числового time_field) или длительность вида '1w', '7d', '12h', '1M' для поля даты. По умолчанию '1w'."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Необязательное числовое поле, суммируемое по каждой ячейке. По умолчанию: количество точек в ячейке."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 от 0 (самое грубое) до 15 (самое детальное); по умолчанию 7 (ячейки ~5 км²)."
              },
              "neighborhood": {
                "label": "Окрестность",
                "description": "Радиус пространственной окрестности в k-кольцах H3 (по умолчанию 1)."
              },
              "time_window": {
                "label": "Временное окно",
                "description": "Радиус временной окрестности в шагах времени (по умолчанию 1)."
              }
            }
          },
          "empirical_bayesian_kriging": {
            "name": "Эмпирический байесовский кригинг",
            "description": "Интерполирует точечное поле через множество перекрывающихся локальных подмножеств, каждое из которых подбирает собственную семивариограмму, неопределённость которой учитывается моделированием возмущённых семивариограмм от генератора с заданным зерном, затем смешивает предсказания/дисперсии кригинга подмножеств по расстоянию (аналог ArcGIS Empirical Bayesian Kriging) — в отличие от встроенных ординарного/универсального/простого/кокригинга, которые подбирают одну вручную принятую глобальную (или одну скользящую) семивариограмму.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле входного слоя для интерполяции."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр прогноза. Если не указан, сохраняется в памяти."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS. По умолчанию: подбирается так, чтобы длинная ось сетки составляла ~150 ячеек."
              },
              "subset_size": {
                "label": "Размер подмножества",
                "description": "Целевое число точек в локальном подмножестве (по умолчанию 40, минимум 4)."
              },
              "overlap": {
                "label": "Перекрытие",
                "description": "Доля ширины/высоты тайла подмножества, на которую перекрываются соседние тайлы (по умолчанию 0.25)."
              },
              "simulations": {
                "label": "Симуляции",
                "description": "Число моделируемых полувариограмм на подмножество для представления неопределённости модели (по умолчанию 5, максимум 50)."
              },
              "semivariogram": {
                "label": "Семивариограмма",
                "description": "Семейство моделей полувариограммы: 'power' (по умолчанию), 'linear' или 'exponential'."
              },
              "transform": {
                "label": "Трансформация",
                "description": "Преобразование данных перед кригингом: 'none' (по умолчанию) или 'log_empirical' (натуральный логарифм; требует, чтобы поле было > 0 везде)."
              },
              "error_output": {
                "label": "Выход ошибок",
                "description": "Необязательный выходной растр стандартной ошибки прогноза."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для детерминированного моделирования полувариограмм (по умолчанию 42)."
              }
            }
          },
          "enclose_multipatch": {
            "name": "Замыкание мультипатча",
            "description": "Преобразует открытые 3D-поверхности из треугольных сеток в замкнутые водонепроницаемые тела, закрывая их граничные контуры, чтобы они стали допустимым входом для объёмного анализа (ArcGIS Enclose Multipatch). is_closed_3d может диагностировать открытую сетку, но ничто не могло её исправить, а union_3d / intersect_3d / difference_3d / inside_3d отвергают открытые сетки или дают неверный результат — а это обычное состояние выдавленных контуров, оболочек рельефа и импортированных поверхностей зданий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "3D-объекты поверхности (мультиполигоны в виде треугольных сеток с Z)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходные замкнутые объёмные объекты. Если не указаны, сохраняются в памяти."
              },
              "drop_failed": {
                "label": "Отбрасывать неудачные",
                "description": "Пропускать объекты, которые не удалось сделать герметичными (по умолчанию false: они выводятся с CAP_FAILED = true, чтобы сбой был виден, а не оставался незамеченным)."
              }
            }
          },
          "enforce_river_monotonicity": {
            "name": "Обеспечение монотонности рек",
            "description": "Врезает DEM так, чтобы высоты монотонно убывали вниз по течению вдоль картографированных полилиний рек — шаг гидрологического принуждения для гидравлического моделирования и моделирования наводнений, аналог ArcGIS Enforce River Monotonicity. В отличие от fill_depressions/fill_burn (которые удаляют замкнутые ямы), обеспечивает монотонный профиль вдоль известного вектора реки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный слой рек (LineString / MultiLineString) в той же CRS, что и DEM."
              },
              "surface": {
                "label": "Поверхность",
                "description": "Корректируемый растр высот (DEM)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной скорректированной DEM (формат определяется расширением). Если не указан, сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Минимальное падение высоты, обеспечиваемое на каждом уплотнённом шаге, в единицах Z (по умолчанию 0 = невозрастание). Положительные значения задают строго убывающий профиль."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Интервал уплотнения в единицах CRS вдоль каждой линии реки. По умолчанию: размер ячейки растра (≈ по одному отсчёту на ячейку)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер корректируемого канала DEM (с 1) (по умолчанию 1)."
              }
            }
          },
          "estimate_time_to_event": {
            "name": "Оценка времени до события",
            "description": "Оценивает время до события по кривой выживаемости Каплана-Мейера (аналог ArcGIS Estimate Time To Event): по полю длительности и полю события/цензурирования вычисляет вероятность выживания каждого объекта и медианное время до события его страты, при необходимости со стратификацией по категориальному полю.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный или полигональный слой с полем длительности и полем события/цензурирования."
              },
              "age_field": {
                "label": "Поле возраста",
                "description": "Поле, содержащее наблюдаемую длительность каждого объекта (время до события или до цензурирования), неотрицательное число."
              },
              "event_field": {
                "label": "Поле события",
                "description": "Поле, указывающее, произошло ли событие (истинное значение: 1/true) или наблюдение было цензурировано (ложное значение: 0/false)."
              },
              "stratify_field": {
                "label": "Поле стратификации",
                "description": "Необязательное категориальное поле для подбора отдельной кривой выживания по каждой группе."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой с добавленными полями km_survival, km_median и km_stratum. Если не указан, сохраняется в памяти."
              }
            }
          },
          "estimate_variogram": {
            "name": "Оценка вариограммы",
            "description": "Вычисляет эмпирическую семивариограмму по точечным наблюдениям для характеристики структуры пространственной корреляции. Необходимый первый шаг геостатистического рабочего процесса.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой со значениями"
              },
              "field": {
                "label": "Поле",
                "description": "Поле, содержащее значения измерений"
              },
              "lag_distance": {
                "label": "Расстояние лага",
                "description": "Размер интервала лага в единицах карты (по умолчанию: 100.0)"
              },
              "lag_tolerance": {
                "label": "Допуск лага",
                "description": "Допуск при разбиении на интервалы лага (по умолчанию: 50.0)"
              },
              "max_lag_count": {
                "label": "Макс. число лагов",
                "description": "Максимальное число сохраняемых лагов (по умолчанию: 20)"
              }
            }
          },
          "euclidean_direction": {
            "name": "Евклидово направление",
            "description": "Вычисляет азимут от каждой ячейки к ближайшей ячейке-источнику, плюс необязательные растры расстояния и обратного направления (ArcGIS Euclidean Direction). Завершает встроенное евклидово семейство, в которое входят euclidean_distance (как далеко) и euclidean_allocation (какой источник), но не пеленг. Использует точное преобразование расстояний, переносящее координаты ближайшего источника; с растром барьеров вместо этого обходит препятствия.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр источников: источниками являются ячейки, не равные NoData и не равные нулю."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра направления (градусы по часовой стрелке от севера). Если не указан, сохраняется в памяти."
              },
              "output_distance": {
                "label": "Выход расстояния",
                "description": "Необязательный путь для сопутствующего растра расстояний."
              },
              "output_back_direction": {
                "label": "Выход обратного направления",
                "description": "Необязательный путь для растра обратного направления: направление движения от этой ячейки обратно к ближайшему источнику. Совпадает с растром направления, когда барьеры не заданы; при наличии барьеров это первый шаг обратного пути."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный растр барьеров; ненулевые ячейки, не равные NoData, блокируют прямолинейные пути, вынуждая обходить их."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Ячейки, удалённые от любого источника дальше этого значения, записываются как NoData."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) растра источников для чтения (по умолчанию 1)."
              }
            }
          },
          "evaluate_bin_sizes": {
            "name": "Оценка размеров бинов",
            "description": "Перебирает размеры бинов агрегирования-кандидатов и сообщает диагностику, определяющую, какой размер лучше всего выявляет структуру, аналогично ArcGIS Evaluate Bin Sizes.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Агрегируемые точечные объекты."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы диагностики. Если не указан, сохраняется в памяти."
              },
              "bin_shape": {
                "label": "Форма бина",
                "description": "hexagon (по умолчанию; приближение со смещением строк, см. документацию) | square."
              },
              "sizes": {
                "label": "Размеры",
                "description": "Кандидатные размеры ячеек через запятую (в единицах карты). Если не указаны, генерируется геометрический ряд на основе среднего расстояния до ближайшего соседа."
              },
              "steps": {
                "label": "Шаги",
                "description": "Число кандидатов в генерируемом ряду (по умолчанию 8, максимум 64)."
              },
              "analysis_field": {
                "label": "Поле анализа",
                "description": "Необязательное числовое поле, суммируемое по каждой ячейке вместо подсчёта точек."
              }
            }
          },
          "evaluate_variable_influence": {
            "name": "Оценка влияния переменных",
            "description": "Сообщает перестановочную важность и кривые частичной зависимости для модели леса, подобранной по таблице, отвечая, какие объясняющие переменные модель действительно использует и какую форму имеет каждый эффект (ArcGIS Evaluate Variable Influence). Каталог умеет подбирать модели — generalized_linear_regression, exploratory_regression, geographically_weighted_regression, forest_based_forecast, случайные леса Whitebox — но ни одна не сообщает ни одну из этих мер. ArcGIS читает обученный файл модели .ssm; в этом стеке нет переносимого формата модели, поэтому инструмент подбирает собственный лес и затем объясняет его. Полностью детерминирован: бэггинг с шагом и фиксированная перестановка, без генератора случайных чисел.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Слой или таблица, содержащие обучающие наблюдения."
              },
              "dependent_field": {
                "label": "Зависимое поле",
                "description": "Прогнозируемое поле."
              },
              "explanatory_fields": {
                "label": "Объясняющие поля",
                "description": "Оцениваемые числовые поля через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Выходная таблица важности по переменным. Если не указана, сохраняется в памяти."
              },
              "output_partial_dependence": {
                "label": "Выход частичной зависимости",
                "description": "Выходная таблица кривых частичной зависимости, по одной строке на переменную и точку сетки. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "model_type": {
                "label": "Тип модели",
                "description": "'regression' (по умолчанию) для непрерывной целевой переменной или 'classification' для категориальной."
              },
              "number_of_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев в ансамбле (по умолчанию 50)."
              },
              "max_depth": {
                "label": "Макс. глубина",
                "description": "Максимальная глубина дерева (по умолчанию 8)."
              },
              "min_samples_leaf": {
                "label": "Мин. выборок в листе",
                "description": "Минимальное число наблюдений в листе (по умолчанию 3)."
              },
              "grid_points": {
                "label": "Точки сетки",
                "description": "Число точек на кривой частичной зависимости (по умолчанию 12)."
              },
              "permutation_repeats": {
                "label": "Повторы перестановок",
                "description": "Число различных перестановок, усредняемых по каждой переменной (по умолчанию 3). Больше — устойчивее и медленнее."
              }
            }
          },
          "excel_to_table": {
            "name": "Excel в таблицу",
            "description": "Читает лист из книги .xlsx/.xls/.xlsb/.ods в таблицу атрибутов, определяя числовые и текстовые столбцы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входной книги Excel/OpenDocument (.xlsx, .xls, .xlsb или .ods)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы (драйвер определяется расширением; рекомендуется GeoParquet .parquet). Если не указан, сохраняется в памяти."
              },
              "sheet": {
                "label": "Лист",
                "description": "Читаемый лист, по имени или индексу с отсчётом от 0. По умолчанию: первый лист."
              },
              "cell_range": {
                "label": "Диапазон ячеек",
                "description": "Необязательный импортируемый диапазон в нотации A1, например 'B2:E40'. По умолчанию: весь используемый диапазон листа."
              },
              "field_names_row": {
                "label": "Строка имён полей",
                "description": "Номер строки (с 1) в выбранном диапазоне, содержащей имена столбцов (по умолчанию 1). Строки выше пропускаются; 0 означает отсутствие строки заголовка (имена генерируются автоматически: Field1, Field2, ...)."
              }
            }
          },
          "expand_shrink": {
            "name": "Расширение / Сжатие",
            "description": "Расширяет или сжимает выбранные классы категориального растра на заданное число ячеек, оставляя остальные классы нетронутыми — стандартная очистка классифицированного растительного покрова перед полигонизацией, аналог ArcGIS Expand / Shrink.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной категориальный (целочисленный) растр."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра. Если не указан, сохраняется в памяти."
              },
              "classes": {
                "label": "Классы",
                "description": "Значения классов через запятую, подлежащие расширению или сжатию."
              },
              "cells": {
                "label": "Ячейки",
                "description": "Число ячеек, на которое выполняется расширение или сжатие (>= 1)."
              },
              "mode": {
                "label": "Режим",
                "description": "'expand' (наращивать выбранные классы; по умолчанию) или 'shrink' (сжимать их)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "exploratory_interpolation": {
            "name": "Исследовательская интерполяция",
            "description": "Запускает несколько методов интерполяции (IDW, ближайший сосед, поверхности тренда первого/второго порядка), проводит для каждого перекрёстную проверку с исключением по одному и ранжирует их по точности предсказания (RMSE/MAE) или смещению (ME) — аналог ArcGIS Exploratory Interpolation. Сообщает ранжированную таблицу сравнения методов и может выдать растр предсказания лучшего метода. Заменяет отдельный запрос перекрёстной проверки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой измерений."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле точек, содержащее интерполируемое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Выходная таблица ранжированного сравнения — CSV (расширение .csv) или векторная таблица без геометрии. Если не указана, сохраняется в памяти."
              },
              "methods": {
                "label": "Методы",
                "description": "Подмножество сравниваемых методов, разделённых запятой или вертикальной чертой: 'idw', 'nearest', 'trend1', 'trend2'. По умолчанию: все четыре."
              },
              "criterion": {
                "label": "Критерий",
                "description": "Критерий ранжирования: 'rmse' (по умолчанию, наименьшая ошибка), 'mae' (наименьшая абсолютная ошибка) или 'me' (наименьшее смещение, минимальное |среднее отклонение|)."
              },
              "power": {
                "label": "Степень",
                "description": "Показатель затухания с расстоянием для IDW (по умолчанию 2)."
              },
              "output_raster": {
                "label": "Выходной растр",
                "description": "Необязательный выходной GeoTIFF: метод с наивысшим рангом, подобранный по всем измерениям и вычисленный на сетке, охватывающей экстент выборки."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки растра-победителя в единицах CRS (градусы для географической CRS). По умолчанию: подбирается так, чтобы длинная ось охватывала ~256 ячеек."
              }
            }
          },
          "exploratory_regression": {
            "name": "Исследовательская регрессия",
            "description": "Перебирает модели OLS по всем комбинациям полей-кандидатов объясняющих переменных и проверяет каждую по скорректированному R2, значимости коэффициентов, мультиколлинеарности VIF, нормальности остатков Jarque-Bera и пространственной автокорреляции остатков по индексу Морана I, сообщая каждую модель плюс ранжированный набор прошедших и сводку значимости по переменным — аналог ArcGIS Exploratory Regression.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов с геометрией (используется для окрестности при расчёте индекса Морана по остаткам)."
              },
              "dependent_field": {
                "label": "Зависимое поле",
                "description": "Зависимое числовое поле (отклик)."
              },
              "explanatory_fields": {
                "label": "Объясняющие поля",
                "description": "Кандидатные объясняющие числовые поля для перебора, через запятую."
              },
              "min_vars": {
                "label": "Мин. переменных",
                "description": "Минимальное число объясняющих переменных в модели-кандидате (по умолчанию 1)."
              },
              "max_vars": {
                "label": "Макс. переменных",
                "description": "Максимальное число объясняющих переменных в модели-кандидате (по умолчанию: min(число кандидатов, 6))."
              },
              "max_coef_p": {
                "label": "Макс. p коэффициентов",
                "description": "Максимально допустимое p-значение для каждого объясняющего коэффициента (по умолчанию 0.05)."
              },
              "min_adj_r2": {
                "label": "Мин. скорр. R²",
                "description": "Минимальный скорректированный коэффициент детерминации R² (по умолчанию 0.5)."
              },
              "max_vif": {
                "label": "Макс. VIF",
                "description": "Максимально допустимый фактор инфляции дисперсии для каждого члена (по умолчанию 7.5)."
              },
              "min_jb_p": {
                "label": "Мин. p Jarque-Bera",
                "description": "Минимальное p-значение теста Жарка-Бера на нормальность остатков (по умолчанию 0.1)."
              },
              "min_moran_p": {
                "label": "Мин. p Морана",
                "description": "Минимальное p-значение для пространственной автокорреляции остатков (индекс Морана); выше него остатки не имеют значимой кластеризации (по умолчанию 0.1)."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число ближайших соседей, задающих пространственные веса для теста индекса Морана по остаткам (по умолчанию 8)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы отчёта — CSV (расширение .csv) или векторная таблица без геометрии."
              }
            }
          },
          "extract_locations_from_text": {
            "name": "Извлечение местоположений из текста",
            "description": "Сканирует произвольный текст на наличие встроенных координат — десятичные градусы (DD), градусы-десятичные минуты (DDM), градусы-минуты-секунды (DMS) и ссылки сетки MGRS/USNG — и выдаёт одну точку WGS84 на каждое совпадение, аналогично ArcGIS Extract Locations From Text (координатная ветвь). Чистое сканирование по шаблонам; без сервиса геокодирования.",
            "params": {
              "input_text": {
                "label": "Входной текст",
                "description": "Произвольный текст для сканирования. Либо сам текст, либо путь к текстовому файлу в UTF-8 (читается, когда значение указывает на существующий файл)."
              },
              "notations": {
                "label": "Нотации",
                "description": "Подмножество искомых форматов записи, разделённых запятой или пробелом: DD, DDM, DMS, MGRS (USNG — псевдоним MGRS). По умолчанию: все четыре."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "extract_ocean_winds": {
            "name": "Извлечение океанских ветров",
            "description": "Восстанавливает эквивалентно-нейтральную скорость ветра над океаном на высоте 10 м из калиброванного обратного рассеяния SAR путём обращения геофизической модельной функции CMOD5.N (ArcGIS Extract Ocean Winds). Вся поставляемая цепочка SAR остаётся в радиометрической области, и ничто не преобразовывало обратное рассеяние в геофизическую величину — а именно это отличает участок слабого ветра от нефтяного пятна.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр калиброванного обратного рассеяния (sigma0)."
              },
              "units": {
                "label": "Единицы",
                "description": "Единицы 'input': 'dn', 'amplitude', 'intensity' или 'db' (по умолчанию 'db')."
              },
              "incidence_angle": {
                "label": "Угол падения",
                "description": "Угол падения по ячейкам в градусах: путь к растру или постоянное число."
              },
              "wind_direction": {
                "label": "Направление ветра",
                "description": "Метеорологическое направление ветра в градусах (направление, ОТКУДА дует ветер), в виде пути к растру или константы. Обязательное априорное значение: у CMOD два неизвестных и одно наблюдение."
              },
              "look_direction": {
                "label": "Направление обзора",
                "description": "Азимут визирования радара в градусах, в виде пути к растру или константы. Используется для перевода направления ветра в относительный угол, который принимает CMOD."
              },
              "polarization": {
                "label": "Поляризация",
                "description": "'vv' (по умолчанию, штатный CMOD5.N) или 'hh' (применяется приближённое отношение поляризаций)."
              },
              "polarization_ratio_alpha": {
                "label": "Альфа поляризационного отношения",
                "description": "Параметр альфа в отношении поляризаций HH к VV (по умолчанию 0.6). Используется только при поляризации 'hh'."
              },
              "water_mask": {
                "label": "Маска воды",
                "description": "Необязательный полигональный слой или растр, ограничивающий выход водной поверхностью; отражения от суши здесь не имеют смысла."
              },
              "max_wind": {
                "label": "Макс. ветер",
                "description": "Верхняя граница интервала обращения, м/с (по умолчанию 50)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр скорости ветра в м/с. Если не указан, сохраняется в памяти."
              }
            }
          },
          "extract_scanned_features": {
            "name": "Извлечение отсканированных объектов",
            "description": "Векторизует бинарный (отсканированный/пороговый) растр в чистые линии (трассировка скелета) или полигоны, с удалением шума, заполнением отверстий, замыканием разрывов и упрощением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной бинарный/классифицированный растр для векторизации."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "feature_type": {
                "label": "Тип объектов",
                "description": "'lines' (по умолчанию): скелетизировать и трассировать осевые линии. 'polygons': векторизовать заполненные регионы."
              },
              "foreground_value": {
                "label": "Значение переднего плана",
                "description": "Значение ячейки, обозначающее передний план. Если не указано, передним планом считаются ячейки >= 'threshold' (или, при его отсутствии, любая ненулевая действительная ячейка)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Передним планом считаются ячейки со значением >= этого (используется, когда 'foreground_value' не задан)."
              },
              "noise_size": {
                "label": "Размер шума",
                "description": "Удалять компоненты переднего плана меньше указанного числа ячеек (по умолчанию 4)."
              },
              "hole_size": {
                "label": "Размер отверстий",
                "description": "Заполнять отверстия фона меньше указанного числа ячеек (по умолчанию 4)."
              },
              "gap_distance": {
                "label": "Расстояние разрыва",
                "description": "Для линий: соединять разрывы до этого расстояния (в единицах CRS) между почти коллинеарными конечными точками линий. По умолчанию 0 (отключено)."
              },
              "simplify_tolerance": {
                "label": "Допуск упрощения",
                "description": "Допуск Дугласа-Пекера (в единицах CRS) для выходной геометрии. По умолчанию ~1 ячейка."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "extract_sinks": {
            "name": "Извлечение стоков",
            "description": "Извлекает стоки (максимальный экстент понижений) из DEM (lidar filling.py).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь растра стоков. Если не указан, сохраняется в памяти."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальное число пикселей для стока (сохраняется, если строго больше; по умолчанию 10)."
              },
              "region_output": {
                "label": "Выход регионов",
                "description": "Необязательный выходной путь для растра помеченных регионов."
              },
              "depth_output": {
                "label": "Выход глубины",
                "description": "Необязательный выходной путь для растра глубины заполнения."
              },
              "filled_output": {
                "label": "Заполненный выход",
                "description": "Необязательный выходной путь для DEM с заполненными понижениями."
              },
              "csv_output": {
                "label": "Выходной CSV",
                "description": "Необязательный выходной путь для CSV атрибутов по регионам."
              },
              "vector_output": {
                "label": "Векторный выход",
                "description": "Необязательный выходной путь для полигонов регионов в формате GeoJSON (с присоединёнными атрибутами)."
              },
              "flat_increment": {
                "label": "Приращение на плоских участках",
                "description": "Плоский инкремент, добавляемый при заполнении для обеспечения стока (по умолчанию 0)."
              }
            }
          },
          "extract_spectra_from_image": {
            "name": "Извлечение спектров из изображения",
            "description": "Формирует спектральную библиотеку по многоканальному изображению и обучающим регионам, по одному спектру на класс, в формате CSV, который читает spectral_library_matching (ArcGIS Extract Spectra From Image). spectral_library_matching, spectral_angle_mapper и matched_filter_target_detection используют библиотеку, и ничто её не создавало, так что спектральный набор можно было применять только с уже существующими опубликованными библиотеками.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Многоканальное изображение."
              },
              "training_features": {
                "label": "Обучающие объекты",
                "description": "Полигональный или точечный слой, оконтуривающий каждый класс или цель."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Атрибут, содержащий метку класса. Объекты с одинаковой меткой объединяются в один спектр."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV спектральной библиотеки ('name,b1,b2,...' для каждого класса), готового для 'library_csv' инструмента spectral_library_matching."
              },
              "statistic": {
                "label": "Статистика",
                "description": "Свёртка по покрытым ячейкам: 'mean' (по умолчанию), 'median', 'max', 'min'."
              },
              "trim_percent": {
                "label": "Процент усечения",
                "description": "Процент, отбрасываемый с каждого хвоста по каждому каналу перед свёрткой, для подавления смешанных краевых пикселей (по умолчанию 0, максимум 49)."
              },
              "min_cells": {
                "label": "Мин. ячеек",
                "description": "Классы, покрывающие меньше указанного числа ячеек, отмечаются в отчёте и пропускаются, вместо того чтобы давать «спектр» из одного пикселя (по умолчанию 1)."
              },
              "wavelengths": {
                "label": "Длины волн",
                "description": "Необязательные длины волн по каналам через запятую, записываемые в виде комментария-заголовка в библиотеке и в output_stats."
              },
              "output_stats": {
                "label": "Выход статистики",
                "description": "Необязательный CSV, принимающий стандартное отклонение и число ячеек по каждому классу и каналу. Хранится отдельно, чтобы библиотека оставалась пригодной для разбора."
              }
            }
          },
          "extract_water_sar": {
            "name": "Извлечение воды (SAR)",
            "description": "Выделяет открытую воду и зону затопления по обратному рассеянию SAR с посценовым порогом Оцу по децибелам, плюс необязательные фильтры уклона DEM и высоты над минимумом, отбрасывающие радарную тень и сухие тёмные поверхности (ArcGIS Extract Water). Ни один реестр не умеет делать это по радару: NDWI/MNDWI в spectral_index требуют каналов отражения green/NIR/SWIR, которых у SAR нет, depth_to_water моделирует, где вода должна быть, по рельефу, а не наблюдает её, а заданный вручную порог raster_calculator не переносится между сценами, потому что граница вода/суша смещается с ветром и углом падения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр обратного рассеяния SAR."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой водной поверхности. Если не указан, сохраняется в памяти."
              },
              "output_raster": {
                "label": "Выходной растр",
                "description": "Выходная бинарная маска воды (1 — вода, 0 — суша). Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "dem": {
                "label": "DEM",
                "description": "Необязательная DEM, совмещённая с входом, включающая фильтры по уклону и высоте."
              },
              "threshold_db": {
                "label": "Порог (дБ)",
                "description": "Фиксированный порог в дБ; ячейки на нём и ниже считаются водой. Переопределяет автоматический порог Оцу."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Отбрасывать водные объекты меньше этой площади в квадратных единицах карты."
              },
              "max_slope": {
                "label": "Макс. уклон",
                "description": "При наличии DEM отклонять воду на рельефе круче указанного числа градусов (по умолчанию 5). Стоячая вода не может располагаться на крутом склоне, но радиолокационная тень там столь же тёмная."
              },
              "max_height_above_min": {
                "label": "Макс. высота над минимумом",
                "description": "При наличии DEM отклонять ячейки-кандидаты, расположенные более чем на указанное число единиц z выше самой низкой ячейки DEM в их собственном связном регионе."
              },
              "mask_features": {
                "label": "Маскирующие объекты",
                "description": "Полигональный слой, ограничивающий область анализа."
              },
              "mask_type": {
                "label": "Тип маски",
                "description": "'land_polygon' (по умолчанию; анализ вне полигонов) или 'water_polygon' (анализ внутри них)."
              },
              "histogram_bins": {
                "label": "Бины гистограммы",
                "description": "Число интервалов гистограммы Оцу (по умолчанию 256)."
              },
              "input_units": {
                "label": "Входные единицы",
                "description": "'intensity' (по умолчанию), 'dn', 'amplitude' или 'db'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) для пороговой обработки (по умолчанию 1)."
              }
            }
          },
          "extrude_between": {
            "name": "Выдавливание между",
            "description": "Строит водонепроницаемые замкнутые тела, заполняющие пространство между двумя поверхностями внутри каждого входного полигона, с точными объёмами по объектам (ArcGIS Extrude Between). cut_fill даёт поячеечное изменение объёма между двумя растрами, но выдаёт растр, не может ограничиваться контурами и не несёт атрибутов; buffer_3d и minimum_bounding_volume строят тела из объектов, а не из пары поверхностей. Выход напрямую подаётся в union_3d, intersect_3d, difference_3d и inside_3d.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Полигональные контуры, задающие боковой экстент каждого тела. Используется только ПЕРВОЕ кольцо первой части: внутренние отверстия и дополнительные части мультиполигона игнорируются, поэтому перед выдавливанием разделите многосоставные контуры и заполните отверстия."
              },
              "surface_upper": {
                "label": "Верхняя поверхность",
                "description": "Растр верхней ограничивающей поверхности."
              },
              "surface_lower": {
                "label": "Нижняя поверхность",
                "description": "Растр нижней ограничивающей поверхности, совмещённый с верхней."
              },
              "output": {
                "label": "Выход",
                "description": "Замкнутые объёмные объекты (мультиполигоны в виде треугольных сеток с Z). Если не указаны, сохраняются в памяти."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Шаг выборки контура и уплотнения границы в единицах CRS. По умолчанию: меньший размер ячейки поверхности."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из каждого растра поверхности (по умолчанию 1)."
              }
            }
          },
          "feature_outline_masks": {
            "name": "Маски контуров объектов",
            "description": "Генерирует картографические полигоны масок с отступом вокруг объектов (точный контур, выпуклая оболочка или ограничивающий прямоугольник), при необходимости обрезанные по второму слою (Intersecting Layers Masks).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (любая геометрия), формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "margin": {
                "label": "Поле отступа",
                "description": "Отступ маски. В метрах для географической CRS (EPSG:4326 или неизвестной, с пересчётом в градусы), иначе в единицах CRS слоя. Должен быть положительным."
              },
              "mask_kind": {
                "label": "Вид маски",
                "description": "Форма маски: 'exact' (по умолчанию, буферизованный контур объекта), 'convex_hull' (расширенная выпуклая оболочка) или 'box' (ограничивающая рамка + отступ)."
              },
              "masked_layer": {
                "label": "Маскируемый слой",
                "description": "Необязательный второй полигональный слой. Если задан, маски обрезаются по пересечению с ним (Intersecting Layers Masks); непересекающиеся маски отбрасываются."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Необязательное поле источника, значение которого копируется в каждую маску как 'source_id'. По умолчанию используется индекс исходного объекта."
              }
            }
          },
          "feature_to_line": {
            "name": "Объект в линию",
            "description": "Планаризует линейные объекты/границы полигонов в узловые неперекрывающиеся линейные сегменты, разделённые в каждом взаимном и самопересечении, аналогично ArcGIS Feature To Line — предшественник построения топологии, которого не дают встроенные polygons_to_lines и split_vector_lines.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный или полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "cluster_tolerance": {
                "label": "Допуск кластеризации",
                "description": "Прилипание точек разделения к сетке с таким шагом в единицах карты для объединения почти совпадающих узлов (по умолчанию 1e-9)."
              },
              "attributes": {
                "label": "Атрибуты",
                "description": "Если true (по умолчанию), помечать каждый выходной сегмент полем 'src_fid' — идентификатором исходного объекта."
              }
            }
          },
          "feature_vertices_to_points": {
            "name": "Вершины объектов в точки",
            "description": "Создаёт точечный слой из выбранных вершин объектов — ALL, START, END, BOTH_ENDS, MID (середина по длине дуги) или DANGLE (необщие концы линий) — с полем FID родителя, аналогично ArcGIS Feature Vertices To Points.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный, полигональный или точечный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "point_location": {
                "label": "Положение точки",
                "description": "Какие вершины извлекать: ALL | START | END | BOTH_ENDS | MID | DANGLE. По умолчанию ALL."
              }
            }
          },
          "features_to_gpx": {
            "name": "Объекты в GPX",
            "description": "Записывает точечные объекты как путевые точки GPX, а линейные объекты как треки GPX, сопоставляя поля атрибутов с name/description/elevation/time.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Экспортируемый точечный или линейный векторный слой (предполагается WGS84 / EPSG:4326)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла .gpx."
              },
              "name_field": {
                "label": "Поле имени",
                "description": "Поле атрибутов, сопоставляемое с элементом GPX <name> (необязательно)."
              },
              "description_field": {
                "label": "Поле описания",
                "description": "Поле атрибутов, сопоставляемое с элементом GPX <desc> (необязательно)."
              },
              "z_field": {
                "label": "Поле Z",
                "description": "Поле атрибутов, сопоставляемое с высотой GPX <ele> (необязательно; при наличии используется Z геометрии)."
              },
              "date_field": {
                "label": "Поле даты",
                "description": "Поле атрибутов, сопоставляемое с меткой времени GPX <time>, строка ISO-8601 (необязательно)."
              }
            }
          },
          "features_to_gtfs": {
            "name": "Объекты в GTFS",
            "description": "Экспортирует точечные объекты в GTFS stops.txt, а линейные объекты в GTFS shapes.txt, замыкая полный цикл GTFS.",
            "params": {
              "stops_input": {
                "label": "Вход остановок",
                "description": "Точечный векторный слой для записи в stops.txt (при наличии используются поля атрибутов stop_id/stop_name)."
              },
              "shapes_input": {
                "label": "Вход форм",
                "description": "Линейный векторный слой для записи в shapes.txt (при наличии используется поле атрибутов shape_id)."
              },
              "output_dir": {
                "label": "Выходной каталог",
                "description": "Каталог, в который записываются текстовые файлы GTFS (stops.txt / shapes.txt). Создаётся, если отсутствует."
              }
            }
          },
          "features_to_kml": {
            "name": "Объекты в KML",
            "description": "Записывает векторный слой в документ KML 2.2 (или сжатый KMZ), с атрибутами в ExtendedData и необязательным общим стилем (ArcGIS Layer To KML / Map To KML). kml_to_features уже умел читать KML, но ничто его не записывало, в отличие от симметричных пар GPX, GTFS и GeoParquet.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой. Должен быть в EPSG:4326 (долгота/широта) — единственной CRS, определённой в KML."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла .kml или .kmz."
              },
              "name_field": {
                "label": "Поле имени",
                "description": "Атрибут, используемый для <name> каждой метки Placemark."
              },
              "description_field": {
                "label": "Поле описания",
                "description": "Атрибут, используемый для <description>. Если не указан, все атрибуты записываются как <ExtendedData>."
              },
              "z_field": {
                "label": "Поле Z",
                "description": "Атрибут, задающий высоту, записываемую как третья координата."
              },
              "altitude_mode": {
                "label": "Режим высоты",
                "description": "'clampToGround' (по умолчанию), 'relativeToGround' или 'absolute'."
              },
              "color": {
                "label": "Цвет",
                "description": "Цвет линии/контура в шестнадцатеричном формате KML aabbggrr (например, 'ff0000ff' — непрозрачный красный)."
              },
              "line_width": {
                "label": "Ширина линии",
                "description": "Ширина линии в пикселях (по умолчанию 1.0)."
              },
              "fill_color": {
                "label": "Цвет заливки",
                "description": "Цвет заливки полигона в шестнадцатеричном формате KML aabbggrr. Не указывайте, чтобы отключить заливку."
              }
            }
          },
          "fence_diagram": {
            "name": "Диаграмма-ограждение",
            "description": "Генерирует панели 3D-вертикальных сечений там, где линия трассы пересекает стек поверхностей — стандартный способ визуализации подповерхностной стратиграфии или слоистости атмосферы (ArcGIS Fence Diagram). profile, long_profile и stack_profile делают выборку поверхностей вдоль линии, но возвращают 2D-линии профиля или таблицы без геометрии пространства МЕЖДУ соседними поверхностями, а voxel_isosurface извлекает поверхность уровня из объёма, а не сечение.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Линейные объекты, задающие след разреза."
              },
              "surfaces": {
                "label": "Поверхности",
                "description": "Список совмещённых растров поверхностей через запятую, в порядке СВЕРХУ ВНИЗ."
              },
              "output": {
                "label": "Выход",
                "description": "3D-панели разреза, по одной на каждый след и пару поверхностей. Если не указаны, сохраняются в памяти."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Шаг выборки вдоль следа в единицах CRS. По умолчанию: наименьший размер ячейки поверхности."
              },
              "floor_height": {
                "label": "Высота пола",
                "description": "Необязательная постоянная нижняя граница: синтетическая нижняя поверхность на этой высоте, замыкающая самую глубокую панель."
              },
              "ceiling_height": {
                "label": "Высота потолка",
                "description": "Необязательная постоянная верхняя граница: синтетическая верхняя поверхность на этой высоте."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из каждого растра поверхности (по умолчанию 1)."
              }
            }
          },
          "fill_missing_values": {
            "name": "Заполнение пропущенных значений",
            "description": "Оценивает и заполняет пустые значения числового поля атрибутов по пространственным соседям (k ближайших или полоса расстояний), при необходимости ограничиваясь временным окном, с выбираемым оценщиком (mean/median/min/max/temporal_trend). Заполненные строки помечаются полем флага (ArcGIS Fill Missing Values).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой с заполняемым полем."
              },
              "fill_field": {
                "label": "Поле заливки",
                "description": "Числовое поле, пустые значения которого требуется оценить и заполнить."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "estimator": {
                "label": "Оценщик",
                "description": "Способ объединения значений соседей: 'mean' (по умолчанию), 'median', 'min', 'max' или 'temporal_trend' (метод наименьших квадратов по времени; требует time_field)."
              },
              "neighbourhood": {
                "label": "Окрестность",
                "description": "Пространственный отбор: 'knn' (по умолчанию, k ближайших) или 'distance_band' (все в пределах search_radius)."
              },
              "k": {
                "label": "K",
                "description": "Число ближайших соседей для 'knn' (по умолчанию 8)."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус (в единицах CRS) для отбора 'distance_band'."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Необязательное числовое поле, задающее время/порядок каждого объекта (обязательно для 'temporal_trend')."
              },
              "time_window": {
                "label": "Временное окно",
                "description": "Необязательно: ограничить соседей теми, кто находится в пределах этого временного расстояния от целевого объекта (требует time_field)."
              },
              "flag_field": {
                "label": "Поле флага",
                "description": "Имя логического поля, отмечающего заполненные строки (по умолчанию 'imputed')."
              }
            }
          },
          "fill_spill_merge": {
            "name": "Заполнение-перелив-слияние",
            "description": "Направляет конечный объём поверхностной воды по DEM для получения реалистичных экстентов озёр/затопления (частичное заполнение понижений с переливом и слиянием), повторно реализуя Fill-Spill-Merge из RichDEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM (высоты)."
              },
              "water_level": {
                "label": "Уровень воды",
                "description": "Равномерная глубина поверхностной воды, применяемая к каждой ячейке. Укажите это или 'surface_water'."
              },
              "surface_water": {
                "label": "Поверхностные воды",
                "description": "Растр глубины поверхностной воды по ячейкам (выровненный с DEM). Переопределяет 'water_level', если заданы оба."
              },
              "ocean_level": {
                "label": "Уровень океана",
                "description": "Необязательный уровень моря: ячейки на этой высоте и ниже, связанные с краем сетки, становятся океаном (базовый уровень прибрежного затопления)."
              },
              "edge_outlet": {
                "label": "Краевой выход",
                "description": "Считать каждую граничную ячейку сетки свободным стоком (по умолчанию true). Вода, достигшая границы, покидает DEM."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь растра глубины стоячей воды. Если не указан, сохраняется в памяти."
              },
              "water_surface": {
                "label": "Поверхность воды",
                "description": "Необязательный выходной путь для гидравлической поверхности (DEM + глубина воды)."
              },
              "flood_extent": {
                "label": "Зона затопления",
                "description": "Необязательный выходной путь для маски зоны затопления (1 там, где есть стоячая вода, иначе 0)."
              }
            }
          },
          "find_argument_statistics": {
            "name": "Поиск статистики аргумента",
            "description": "Попиксельная статистика аргументов по стеку растров (аналог ArcGIS Find Argument Statistics): индекс среза (или дата) максимума/минимума, позиция медианы, число срезов выше порога (длительность) или самая длинная непрерывная серия — ответы о позиции аргумента, которых не дают встроенные агрегаты значений cell-statistics и image_stack_profile.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Один многоканальный растр (каждый канал — срез) или список совмещённых растров через запятую, в хронологическом порядке."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной одноканальный растр индексов срезов / дат / количеств. Если не указан, сохраняется в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "'argmax' (по умолчанию), 'argmin', 'median_position', 'duration' или 'longest_run'."
              },
              "threshold": {
                "label": "Порог",
                "description": "Числовой порог для 'duration'/'longest_run' (обязателен для них)."
              },
              "comparison": {
                "label": "Сравнение",
                "description": "Сравнение для 'duration'/'longest_run': '>' (по умолчанию), '>=', '<' или '<='."
              },
              "dates": {
                "label": "Даты",
                "description": "Необязательные числовые даты через запятую (например, день года) для каждого среза; argmax/argmin/median выводят соответствующую дату вместо индекса среза."
              },
              "min_valid": {
                "label": "Мин. допустимых",
                "description": "Минимальное число наблюдений на пиксель, не равных NoData (по умолчанию 1)."
              }
            }
          },
          "find_dwell_locations": {
            "name": "Поиск мест остановок",
            "description": "Обнаруживает, где движущаяся сущность оставалась на месте: серии фиксаций трека в пределах допуска расстояния в течение не менее допуска времени, выдаваемые как фиксации, средние центры или выпуклые оболочки, аналогично ArcGIS Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечные объекты с метками времени (отметки трека)."
              },
              "track_field": {
                "label": "Поле трека",
                "description": "Поле, идентифицирующее трек, которому принадлежит каждая отметка."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле метки времени (число секунд или текст ISO-8601)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "distance_tolerance": {
                "label": "Допуск расстояния",
                "description": "Максимальное расстояние (в единицах карты), на котором отметка может находиться от текущего центроида остановки."
              },
              "time_tolerance": {
                "label": "Допуск времени",
                "description": "Минимальная длительность (в тех же единицах, что и time_field), при которой неподвижный участок считается остановкой."
              },
              "output_type": {
                "label": "Тип выхода",
                "description": "dwell_features (по умолчанию) | mean_centers | convex_hulls | all_features."
              }
            }
          },
          "find_identical": {
            "name": "Поиск идентичных",
            "description": "Находит объекты, идентичные по геометрии и/или выбранным полям, группируя дубликаты; report добавляет столбцы dup_group/dup_seq, delete сохраняет только первый в каждой группе, аналогично ArcGIS Find Identical / Delete Identical.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой для удаления дубликатов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "fields": {
                "label": "Поля",
                "description": "Сравниваемые поля через запятую. Не указывайте, чтобы сравнивать только геометрию; сочетайте с 'compare_geometry'."
              },
              "compare_geometry": {
                "label": "Сравнивать геометрию",
                "description": "Учитывается ли геометрия при проверке идентичности (по умолчанию true; установите false, чтобы сравнивать только поля)."
              },
              "xy_tolerance": {
                "label": "Допуск XY",
                "description": "Допуск прилипания при сравнении геометрии (вершины округляются до этой сетки перед хешированием). По умолчанию 0 (точно)."
              },
              "mode": {
                "label": "Режим",
                "description": "'report' (по умолчанию; добавляет dup_group/dup_seq) или 'delete' (сохраняет первый объект каждой группы)."
              }
            }
          },
          "find_meeting_locations": {
            "name": "Поиск мест встреч",
            "description": "Обнаруживает собрания, где несколько различных треков находятся вместе в пределах расстояния в течение не менее минимальной длительности (аналог ArcGIS Find Meeting Locations) — совместное присутствие N треков, которого не охватывают авторские trace_proximity_events (попарный) и reconstruct_tracks (остановка одного трека). Выдаёт оболочки областей и репрезентативные точки с числом участников, временем начала/окончания и длительностью.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный слой трека с метками времени (проекционная CRS; расстояния в единицах карты)."
              },
              "track_field": {
                "label": "Поле трека",
                "description": "Поле, идентифицирующее каждый трек/сущность."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: число секунд или метка времени ISO-8601."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное расстояние (в единицах карты), при котором треки считаются находящимися вместе."
              },
              "min_meeting_duration": {
                "label": "Мин. длительность встречи",
                "description": "Минимальная длительность (в единицах времени), в течение которой должно сохраняться скопление, чтобы попасть в отчёт."
              },
              "max_meeting_duration": {
                "label": "Макс. длительность встречи",
                "description": "Необязательная максимальная длительность; более продолжительные скопления отбрасываются."
              },
              "min_participants": {
                "label": "Мин. участников",
                "description": "Минимальное число различных треков в скоплении (по умолчанию 2)."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Ширина временного среза (в единицах времени). По умолчанию: min_meeting_duration."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой представительных точек (по одной точке на встречу). Если не указан, сохраняется в памяти."
              },
              "output_area": {
                "label": "Выход площади",
                "description": "Необязательный выходной слой областей (полигон выпуклой оболочки на каждую встречу). Если не указан, сохраняется в памяти."
              }
            }
          },
          "find_space_time_matches": {
            "name": "Поиск пространственно-временных совпадений",
            "description": "Сопоставляет объекты между двумя точечными слоями с метками времени, которые находятся в пределах пространственного расстояния поиска И временного окна друг от друга (до/после/любое), выдавая сопоставленные пары с расстоянием и смещением времени, аналогично ArcGIS Find Space Time Matches.",
            "params": {
              "primary": {
                "label": "Основной",
                "description": "Первичный точечный слой (каждый объект сопоставляется со вторичным слоем)."
              },
              "secondary": {
                "label": "Вторичный",
                "description": "Вторичный точечный слой, с которым выполняется сопоставление."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле метки времени, присутствующее в ОБОИХ слоях (числовое или ISO-8601)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой сопоставлений (по одной линии связи на каждую сопоставленную пару). Если не указан, сохраняется в памяти."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное пространственное расстояние между первичным и вторичным объектами (в единицах карты)."
              },
              "time_window": {
                "label": "Временное окно",
                "description": "Максимальный интервал времени: число секунд или длительность вида '2h', '30m', '7d'."
              },
              "temporal_relationship": {
                "label": "Временное отношение",
                "description": "'either' (по умолчанию), 'before' (вторичный до первичного) или 'after' (вторичный после первичного)."
              },
              "primary_id_field": {
                "label": "Поле ID основного",
                "description": "Поле, именующее каждый первичный объект в выходе (по умолчанию: индекс объекта)."
              },
              "secondary_id_field": {
                "label": "Поле ID вторичного",
                "description": "Поле, именующее каждый вторичный объект в выходе (по умолчанию: индекс объекта)."
              }
            }
          },
          "fit_variogram": {
            "name": "Подбор модели вариограммы",
            "description": "Подбирает теоретическую модель вариограммы (сферическую, экспоненциальную, гауссову) к данным эмпирической семивариограммы для использования в кригинге.",
            "params": {
              "lags_json": {
                "label": "JSON лагов",
                "description": "Массив JSON интервалов лага из estimate_variogram"
              },
              "model_family": {
                "label": "Семейство моделей",
                "description": "Модель: spherical, exponential или gaussian"
              }
            }
          },
          "flatten_interferogram": {
            "name": "Выравнивание интерферограммы",
            "description": "Удаляет топографическую компоненту фазы из свёрнутой интерферограммы с помощью DEM и интерферометрической базы, оставляя сигнал деформации и атмосферы (режим выравнивания TOPO в ArcGIS Generate Interferogram). sar_coherence уже выдаёт саму интерферограмму через output_phase, но ничто ни в одном реестре не может смоделировать и вычесть топографическую фазу — а над любым рельефом эта компонента доминирует, так что невыровненная интерферограмма непригодна для работы с деформациями.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр свёрнутой интерферометрической фазы в радианах (какой выдаёт output_phase инструмента sar_coherence) или двухканальная интерферограмма I/Q."
              },
              "dem": {
                "label": "DEM",
                "description": "Совмещённый растр высот."
              },
              "output": {
                "label": "Выход",
                "description": "Растр выровненной свёрнутой фазы, повторно свёрнутый в (-pi, pi]. Если не указан, сохраняется в памяти."
              },
              "perpendicular_baseline": {
                "label": "Перпендикулярная база",
                "description": "Перпендикулярная база B_perp в метрах. Обязательный параметр: он задаёт чувствительность фазы к высоте, и обоснованного значения по умолчанию не существует."
              },
              "wavelength": {
                "label": "Длина волны",
                "description": "Длина волны радара в метрах (по умолчанию 0.05546576, C-диапазон Sentinel-1)."
              },
              "incidence_angle": {
                "label": "Угол падения",
                "description": "Угол падения в градусах: константа (по умолчанию 39.0, типичное значение для середины полосы Sentinel-1 IW) или путь к совмещённому растру."
              },
              "slant_range": {
                "label": "Наклонная дальность",
                "description": "Наклонная дальность R от сенсора до поверхности в метрах (по умолчанию 800000)."
              },
              "reference_elevation": {
                "label": "Опорная высота",
                "description": "Высота, принимаемая за нулевую топографическую фазу. По умолчанию: среднее по DEM, так что выход не содержит произвольного глобального смещения."
              },
              "out_topographic_phase": {
                "label": "Выход топографической фазы",
                "description": "Растр смоделированной топографической фазы, СВЁРНУТЫЙ в (-pi, pi], как и выровненный выход, — не абсолютная смоделированная фаза. Создаётся всегда; при отсутствии пути возвращается дескриптор в памяти."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), содержащего фазу. Не указывайте его для одноканального растра фазы или двухканальной интерферограммы I/Q (они определяются автоматически); задайте его, чтобы читать действительную фазу из конкретного канала многоканального стека. Для растра более чем с двумя каналами этот параметр ОБЯЗАТЕЛЕН, поскольку три и более каналов не образуют пару I/Q, а догадка вернула бы правдоподобную, но неверную фазу."
              }
            }
          },
          "flip_line": {
            "name": "Разворот линии",
            "description": "Обращает порядок вершин (начало↔конец) полилинейных объектов, меняя направление их оцифровки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного линейного векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              }
            }
          },
          "focal_flow": {
            "name": "Фокальный сток",
            "description": "Кодирует, какие из восьми соседей ячейки стекают в неё, в виде 8-битной маски (ArcGIS Focal Flow). В отличие от встроенных инструментов аккумуляции D8/D-infinity, которые направляют каждую ячейку вниз по склону в одном направлении, записывает каждого притекающего соседа — улавливая схождение в ямы, стоки и седловины. Веса битов идут против часовой стрелки от востока (1, 2, 4, 8, 16, 32, 64, 128); 0 — локальный максимум, 255 — яма.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр поверхности (высоты или любая непрерывная поверхность)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              },
              "threshold": {
                "label": "Порог",
                "description": "Сосед считается притекающим только если он превышает центральную ячейку более чем на это значение (по умолчанию 0)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "focal_statistics": {
            "name": "Фокальная статистика",
            "description": "Статистика окрестности скользящим окном (прямоугольник/круг/кольцо/сектор; числовая и категориальная).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              },
              "statistics": {
                "label": "Статистика",
                "description": "Статистика: mean, majority, maximum, median, minimum, minority, percentile, range, std, sum или variety (по умолчанию mean)."
              },
              "neighborhood": {
                "label": "Окрестность",
                "description": "Форма окрестности: rectangle, circle, annulus или wedge (по умолчанию rectangle)."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина прямоугольника в ячейках (по умолчанию 3)."
              },
              "height": {
                "label": "Высота",
                "description": "Высота прямоугольника в ячейках (по умолчанию 3)."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус в ячейках для круга / сектора и внешний радиус для кольца (по умолчанию 1)."
              },
              "inner_radius": {
                "label": "Внутренний радиус",
                "description": "Внутренний радиус в ячейках для кольцевой окрестности (по умолчанию 0)."
              },
              "start_angle": {
                "label": "Начальный угол",
                "description": "Начальный угол сектора в градусах (0 = восток, против часовой стрелки; по умолчанию 0)."
              },
              "end_angle": {
                "label": "Конечный угол",
                "description": "Конечный угол сектора в градусах (0 = восток, против часовой стрелки; по умолчанию 90)."
              },
              "percentile_value": {
                "label": "Значение перцентиля",
                "description": "Процентиль в [0, 100] для статистики percentile (по умолчанию 90)."
              },
              "ignore_nodata": {
                "label": "Игнорировать NoData",
                "description": "Если true (по умолчанию), свёртка выполняется только по действительным ячейкам; если false, любая ячейка NoData в окне даёт NoData."
              },
              "band": {
                "label": "Канал",
                "description": "Номер обрабатываемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "forest_based_forecast": {
            "name": "Прогноз на основе лесов",
            "description": "Прогнозирует значение вперёд в каждом местоположении с помощью случайного леса, обученного на скользящих лаговых окнах собственной истории этого местоположения, аналогично ArcGIS Forest-based Forecast.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Объекты с метками времени, содержащие идентификатор местоположения, поле времени и поле значения."
              },
              "location_field": {
                "label": "Поле местоположения",
                "description": "Поле, идентифицирующее местоположение, к которому относится каждое наблюдение."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Числовое поле времени, используемое для упорядочивания ряда каждого местоположения."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Прогнозируемое числовое поле."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы прогноза. Если не указан, сохраняется в памяти."
              },
              "forecast_steps": {
                "label": "Шаги прогноза",
                "description": "Число шагов прогноза вперёд (по умолчанию 3)."
              },
              "time_window": {
                "label": "Временное окно",
                "description": "Число предшествующих значений, используемых как предикторы (по умолчанию: четверть длины ряда, но не менее 2)."
              },
              "validation_steps": {
                "label": "Шаги валидации",
                "description": "Число конечных шагов, откладываемых для оценки RMSE (по умолчанию 0, без проверки)."
              },
              "n_trees": {
                "label": "Число деревьев",
                "description": "Число деревьев в лесу (по умолчанию 50, максимум 500)."
              },
              "min_leaf_size": {
                "label": "Мин. размер листа",
                "description": "Минимальное число обучающих строк в листе (по умолчанию 2)."
              },
              "max_depth": {
                "label": "Макс. глубина",
                "description": "Максимальная глубина дерева (по умолчанию 8)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение детерминированного генератора случайных чисел, управляющего бутстрепом и отбором признаков (по умолчанию 42)."
              }
            }
          },
          "frequency_comparison": {
            "name": "Сравнение частот",
            "description": "Подсчитывает для каждой ячейки, сколько растров в стеке равны / больше / меньше соответствующей ячейки растра опорных значений (ArcGIS Equal To Frequency, Greater Than Frequency и Less Than Frequency, плюс нестрогие и отрицательные операторы). Ни один реестр не умеет агрегировать сравнение по стеку: у cell_statistics нет опорного входа, raster_calculator выражает одно сравнение, но не может считать по стеку произвольной длины, а conditional_evaluation — селектор с одним условием.",
            "params": {
              "value_raster": {
                "label": "Растр значений",
                "description": "Опорный растр, с которым сравнивается каждый слой стека, совмещённый с входами. Одноканальный опорный растр применяется ко всем группам каналов; многоканальный опорный растр должен иметь по одному каналу на группу и продвигается вместе с ней."
              },
              "inputs": {
                "label": "Входные данные",
                "description": "Один многоканальный растр (каждый канал — слой) или список совмещённых растров через запятую."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр количеств (0..n). Если не указан, сохраняется в памяти."
              },
              "comparison": {
                "label": "Сравнение",
                "description": "'equal' (по умолчанию), 'greater', 'less', 'greater_equal', 'less_equal' или 'not_equal'."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Абсолютный допуск для 'equal'/'not_equal' на данных с плавающей точкой (по умолчанию 0 = точно)."
              },
              "ignore_nodata": {
                "label": "Игнорировать NoData",
                "description": "Пропускать наблюдения NoData в каждой ячейке (по умолчанию true). При false любое наблюдение NoData делает ячейку NoData."
              },
              "process_as_multiband": {
                "label": "Обрабатывать как многоканальный",
                "description": "'single_band' (по умолчанию): каждый канал каждого входа является слоем единого стека. 'multi_band': канал i каждого входа образует собственный стек, давая многоканальный результат."
              }
            }
          },
          "fuzzy_overlay": {
            "name": "Нечёткий оверлей",
            "description": "Масштабирует растр в поверхность нечёткой принадлежности 0..1 (linear/gaussian/small/large/ms_small/ms_large) или объединяет несколько растров принадлежности нечёткими операциями AND/OR/PRODUCT/SUM/GAMMA, аналогично ArcGIS Fuzzy Membership + Fuzzy Overlay.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Режим принадлежности: входной растр для преобразования в поверхность 0..1."
              },
              "inputs": {
                "label": "Входные данные",
                "description": "Режим оверлея: список из ≥2 растров принадлежности для объединения, через запятую. Имеет приоритет над 'input'."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра. Если не указан, результат сохраняется в памяти."
              },
              "function": {
                "label": "Функция",
                "description": "Функция принадлежности: 'linear' (по умолчанию), 'gaussian', 'small', 'large', 'ms_small', 'ms_large'."
              },
              "overlay": {
                "label": "Оверлей",
                "description": "Оператор оверлея: 'and' (минимум, по умолчанию), 'or' (максимум), 'product', 'sum', 'gamma'."
              },
              "midpoint": {
                "label": "Середина",
                "description": "linear: значение, отображаемое в 0.5, игнорируется (используйте min/max); gaussian/small/large: средняя точка функции; ms_small/ms_large: множитель среднего (по умолчанию из статистики канала)."
              },
              "spread": {
                "label": "Разброс",
                "description": "gaussian/small/large: разброс (по умолчанию 0.1 для gaussian, 5 для small/large); ms_small/ms_large: множитель стандартного отклонения (по умолчанию 1)."
              },
              "min": {
                "label": "Min",
                "description": "linear: значение, отображаемое в принадлежность 0 (по умолчанию минимум канала). Если min>max, шкала убывающая."
              },
              "max": {
                "label": "Max",
                "description": "linear: значение, отображаемое в принадлежность 1 (по умолчанию максимум канала)."
              },
              "gamma": {
                "label": "Гамма",
                "description": "Показатель гамма-оверлея в [0,1] (по умолчанию 0.9)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер преобразуемого канала (с 1) в режиме принадлежности (по умолчанию 1)."
              }
            }
          },
          "gaussian_geostatistical_simulations": {
            "name": "Гауссово геостатистическое моделирование",
            "description": "Последовательное гауссово моделирование: N равновероятных условных реализаций поля, согласованных с данными выборки (аналог ArcGIS Gaussian Geostatistical Simulations) — условный многореализационный выход, которого не дают однoповерхностные empirical_bayesian_kriging / ординарный кригинг и безусловный turning_bands_simulation. С зерном и детерминирован.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой с обусловливающими значениями (проекционная CRS)."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле, содержащее моделируемое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной многоканальный растр (по одному каналу на реализацию). Если не указан, сохраняется в памяти."
              },
              "num_realizations": {
                "label": "Число реализаций",
                "description": "Число реализаций / выходных каналов (по умолчанию 10)."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS. По умолчанию: длинная сторона экстента / 100."
              },
              "variogram_model": {
                "label": "Модель вариограммы",
                "description": "'exponential' (по умолчанию), 'spherical' или 'gaussian'."
              },
              "nugget": {
                "label": "Наггет",
                "description": "Наггет, задаваемый вручную; не указывайте, чтобы подобрать по данным."
              },
              "sill": {
                "label": "Порог вариограммы",
                "description": "Частичный порог, задаваемый вручную; не указывайте, чтобы подобрать по данным."
              },
              "range": {
                "label": "Размах",
                "description": "Радиус влияния, задаваемый вручную; не указывайте, чтобы подобрать по данным."
              },
              "max_neighbors": {
                "label": "Макс. соседей",
                "description": "Максимальное число известных точек, используемых при кригинге каждой ячейки (по умолчанию 16)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение детерминированного генератора случайных чисел (по умолчанию 1)."
              },
              "output_mean": {
                "label": "Выход среднего",
                "description": "Необязательный путь растра среднего по ансамблю."
              },
              "output_std": {
                "label": "Выход ст. откл.",
                "description": "Необязательный путь растра стандартного отклонения по ансамблю."
              }
            }
          },
          "generalized_linear_regression": {
            "name": "Обобщённая линейная регрессия",
            "description": "Глобальная регрессия (гауссова/OLS, пуассоновская или логистическая) зависимого поля по объясняющим полям методом IRLS, с выходными полями подобранных значений и остатков и полной диагностикой: коэффициент, стандартная ошибка, t/z, вероятность и VIF по каждому члену, плюс AICc, R²/девианс и стьюдентизированный тест гетероскедастичности Кёнкера (Бройша-Пагана) — аналог ArcGIS Generalized Linear Regression.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов (точки или другие геометрии — геометрия переносится без изменений)."
              },
              "dependent_field": {
                "label": "Зависимое поле",
                "description": "Зависимое (результирующее) числовое поле. Для 'logistic' оно должно быть 0/1."
              },
              "explanatory_fields": {
                "label": "Объясняющие поля",
                "description": "Объясняющие числовые поля через запятую."
              },
              "family": {
                "label": "Семейство",
                "description": "Семейство моделей: 'gaussian' (OLS, по умолчанию), 'poisson' (логарифмическая связь, счётные данные) или 'logistic' (логит-связь, 0/1)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "report": {
                "label": "Отчёт",
                "description": "Необязательный путь к CSV для отчёта о коэффициентах и диагностике модели."
              }
            }
          },
          "generate_breach_lines": {
            "name": "Создание линий прорыва",
            "description": "По полигонам понижений и DEM выдаёт полилинию, вдоль которой каждое понижение будет прорвано для дренажа, по критерию минимальной стоимости прорыва, кратчайшего пути или минимального изменения высоты, с глубиной выемки и объёмом извлечённого грунта на каждый прорыв. Аналог ArcGIS Generate Breach Lines.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Полигоны понижений (например, результат delineate_depressions)."
              },
              "dem": {
                "label": "DEM",
                "description": "Растр поверхности, сквозь который прорезается прорыв."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных линий прорыва. Если не указан, сохраняется в памяти."
              },
              "connection_points": {
                "label": "Точки соединения",
                "description": "Необязательные точечные объекты, ограничивающие, где может заканчиваться прорыв."
              },
              "method": {
                "label": "Метод",
                "description": "'minimum_breaching_cost' (по умолчанию), 'shortest_path' или 'minimum_elevation_change'."
              },
              "max_length": {
                "label": "Макс. длина",
                "description": "Отбрасывать прорывы длиннее этого значения (в единицах карты); такие понижения остаются непрорванными."
              }
            }
          },
          "generate_near_table": {
            "name": "Создание таблицы близости",
            "description": "Для каждого входного объекта перечисляет k ближайших (или все в пределах радиуса поиска) объектов ближнего слоя с расстоянием, рангом, необязательным пеленгом и координатами XY ближайшего — таблица близости с несколькими соседями, аналог ArcGIS Generate Near Table.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки, линии или полигоны), близость которого измеряется."
              },
              "near_features": {
                "label": "Ближайшие объекты",
                "description": "Векторный слой ближайших объектов для поиска (точки, линии или полигоны)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (по одной точке Point на каждое найденное соответствие). Если не указан, сохраняется в памяти."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Сохранять только ближайшие объекты в пределах этого расстояния (в единицах карты). Обязателен при closest_count = 0 (все в пределах радиуса)."
              },
              "closest_count": {
                "label": "Число ближайших",
                "description": "Число ближайших объектов на каждый входной объект (k, по умолчанию 1). Используйте 0, чтобы вернуть все ближайшие объекты в пределах search_radius."
              },
              "angle": {
                "label": "Угол",
                "description": "Добавлять NEAR_ANGLE (арифметическое направление в градусах, восток = 0, против часовой стрелки). По умолчанию false."
              },
              "location": {
                "label": "Местоположение",
                "description": "Добавлять столбцы NEAR_X / NEAR_Y для местоположения ближайшего объекта. По умолчанию false."
              }
            }
          },
          "generate_network_swm": {
            "name": "Создание сетевой SWM",
            "description": "Строит матрицу пространственных весов, в которой соседи и веса определяются расстоянием проезда по линейной сети, а не прямолинейной геометрией (ArcGIS Generate Network Spatial Weights). generate_spatial_weights_matrix предлагает только евклидовы и топологические концептуализации (knn, фиксированная полоса расстояний, обратное расстояние, смежность, Делоне), так что для явлений, ограниченных сетью, он связывает объекты, которые не могут достичь друг друга, и искажает каждую последующую статистику. Выход использует ту же схему таблицы, так что global_morans_i, local_morans_i_lisa, getis_ord_gi_star и compare_spatial_weights принимают его без изменений.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Взвешиваемые точечные объекты."
              },
              "network": {
                "label": "Сеть",
                "description": "Линейная сеть, вдоль которой измеряются расстояния перемещения."
              },
              "output": {
                "label": "Выход",
                "description": "Таблица весов (CSV по расширению или векторная таблица без геометрии) в той же схеме origin/neighbor/weight, которую выдаёт generate_spatial_weights_matrix. Если не указана, сохраняется в памяти."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Поле, содержащее уникальный идентификатор каждого объекта. По умолчанию: индекс объекта с отсчётом от 0, как в generate_spatial_weights_matrix."
              },
              "impedance_field": {
                "label": "Поле импеданса",
                "description": "Поле стоимости сети. По умолчанию: геометрическая длина каждого сегмента."
              },
              "distance_cutoff": {
                "label": "Отсечка расстояния",
                "description": "Максимальное сетевое сопротивление, на котором может находиться сосед. По умолчанию: без ограничения."
              },
              "max_neighbors": {
                "label": "Макс. соседей",
                "description": "Ограничение числа соседей на каждый источник с сохранением ближайших. По умолчанию: без ограничения."
              },
              "conceptualization": {
                "label": "Концептуализация",
                "description": "'fixed' (по умолчанию, бинарный вес 1 в пределах порога) или 'inverse' (вес = 1 / сопротивление^показатель)."
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Показатель затухания для 'inverse' (по умолчанию 1)."
              },
              "row_standardization": {
                "label": "Стандартизация по строкам",
                "description": "Делить веса каждого источника на их сумму по строке, чтобы сумма по каждому источнику равнялась 1. По умолчанию false, как в generate_spatial_weights_matrix."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Расстояние, в пределах которого две вершины сети объединяются в один узел, в единицах CRS (по умолчанию 1e-6). Иначе сеть, сегменты которой почти сходятся, незаметно распалась бы, и каждый затронутый источник дал бы нулевое число строк."
              },
              "search_tolerance": {
                "label": "Допуск поиска",
                "description": "Максимальное расстояние прилипания точки к сети. Более удалённые точки отмечаются как непривязанные, а не присоединяются незаметно к дальнему узлу."
              }
            }
          },
          "generate_od_links": {
            "name": "Создание связей источник-назначение",
            "description": "Рисует прямые линии желания от точек источников к точкам назначений — сопоставленных по общему ID, в пределах расстояния и/или к k ближайшим — каждая с ID источника/назначения и длиной, аналогично ArcGIS Generate Origin-Destination Links.",
            "params": {
              "origins": {
                "label": "Источники",
                "description": "Точечный слой источников (Point или MultiPoint)."
              },
              "destinations": {
                "label": "Назначения",
                "description": "Точечный слой назначений (Point или MultiPoint)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "num_nearest": {
                "label": "Число ближайших",
                "description": "Сохранять только k ближайших назначений на каждый источник (после любых фильтров по идентификатору/расстоянию)."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Сохранять только назначения в пределах этого расстояния от источника (в единицах карты)."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Поле, присутствующее в ОБОИХ слоях; связывать только пары с совпадающими значениями. Также записывается как 'link_id'."
              },
              "origin_id_field": {
                "label": "Поле ID источника",
                "description": "Поле в источниках, записываемое как 'origin_id' (по умолчанию: индекс объекта)."
              },
              "dest_id_field": {
                "label": "Поле ID назначения",
                "description": "Поле в назначениях, записываемое как 'dest_id' (по умолчанию: индекс объекта)."
              }
            }
          },
          "generate_points_along_3d_lines": {
            "name": "Создание точек вдоль 3D-линий",
            "description": "Генерирует равномерно расположенные точки вдоль 3D-линий, измеряемых в истинном 3D-расстоянии (а не в плановой 2D-длине, которую использует встроенный points_along_lines), с интерполированным Z, необязательными конечными точками и полем накопленного 3D-пикетажа. Аналог ArcGIS Generate Points Along 3D Lines.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные 3D-полилинейные объекты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных точек. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'distance' (по умолчанию), 'percentage' или 'distance_field'."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Шаг в единицах карты для метода 'distance'."
              },
              "percentage": {
                "label": "Процентная доля",
                "description": "Шаг в процентах (0-100) от 3D-длины каждой линии для метода 'percentage'."
              },
              "distance_field": {
                "label": "Поле расстояния",
                "description": "Поле, задающее шаг для каждого объекта в методе 'distance_field'."
              },
              "include_end_points": {
                "label": "Включать конечные точки",
                "description": "Также выводить начальную и конечную вершины каждой линии (по умолчанию false)."
              },
              "add_chainage": {
                "label": "Добавить пикетаж",
                "description": "Записывать поле CHAINAGE с накопленным 3D-расстоянием от начала линии (по умолчанию false)."
              }
            }
          },
          "generate_spatial_weights_matrix": {
            "name": "Создание матрицы пространственных весов",
            "description": "Выдаёт переиспользуемую таблицу соседей/весов в длинном формате (origin_id, neighbor_id, weight) по выбранной концептуализации — KNN, фиксированная полоса расстояний, обратное расстояние, смежность (рёбра / рёбра+углы) или Делоне — с необязательной стандартизацией по строкам, аналогично ArcGIS Generate Spatial Weights Matrix.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки/линии/полигоны; для смежности требуются полигоны)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы — CSV (расширение .csv) или векторная таблица без геометрии. Если не указан, сохраняется в памяти."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Поле, содержащее уникальный идентификатор каждого объекта. По умолчанию: индекс объекта с отсчётом от 0."
              },
              "method": {
                "label": "Метод",
                "description": "Концептуализация пространственных отношений: 'knn', 'fixed_distance_band', 'inverse_distance', 'contiguity_edges', 'contiguity_edges_corners' или 'delaunay'. По умолчанию 'knn'."
              },
              "number_of_neighbors": {
                "label": "Число соседей",
                "description": "Число ближайших соседей k (method = knn). По умолчанию 8."
              },
              "threshold_distance": {
                "label": "Пороговое расстояние",
                "description": "Порог полосы расстояний в единицах карты. Обязателен для fixed_distance_band; необязательный порог для inverse_distance (не задан = все остальные объекты)."
              },
              "exponent": {
                "label": "Показатель степени",
                "description": "Показатель затухания с расстоянием p для inverse_distance (вес = 1/d^p). По умолчанию 1."
              },
              "row_standardization": {
                "label": "Стандартизация по строкам",
                "description": "Делить веса каждого источника на их сумму по строке, чтобы сумма весов каждого источника равнялась 1. По умолчанию false."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Квантовать вершины на сетку такого размера (в единицах CRS) перед сопоставлением границ для определения смежности. По умолчанию 0 (точные координаты)."
              }
            }
          },
          "generate_subset_polygons": {
            "name": "Создание полигонов подмножеств",
            "description": "Разбивает плотный точечный слой на компактные неперекрывающиеся полигоны, покрывающие экстент точек, каждый из которых содержит от минимального до максимального числа точек (ArcGIS Generate Subset Polygons). Стандартный шаг предобработки для интерполяции очень больших наборов точек. В отличие от встроенных фиксированных сеток адаптируется к плотности (медианное разбиение k-d), в отличие от voronoi_diagram группирует точки, а не создаёт по ячейке на каждую, и в отличие от group_by_proximity выдаёт полигоны и соблюдает границы размера.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходных полигонов. Если не указан, результат сохраняется в памяти."
              },
              "output_points": {
                "label": "Выходные точки",
                "description": "Необязательный путь для входных точек с проставленным идентификатором подмножества. Если не указан, сохраняется в памяти (всё равно возвращается)."
              },
              "min_points_per_subset": {
                "label": "Мин. точек на подмножество",
                "description": "Нижняя граница числа точек в подмножестве (по умолчанию 50)."
              },
              "max_points_per_subset": {
                "label": "Макс. точек на подмножество",
                "description": "Верхняя граница числа точек в подмножестве (по умолчанию 200)."
              },
              "coincident_points": {
                "label": "Совпадающие точки",
                "description": "'single' (по умолчанию; точно совпадающие точки учитываются один раз при определении размера) или 'all' (каждая учитывается отдельно)."
              },
              "clip_to_hull": {
                "label": "Обрезать по оболочке",
                "description": "Обрезать полигоны подмножеств по выпуклой оболочке точек, чтобы результат повторял данные, а не их ограничивающий прямоугольник (по умолчанию true)."
              }
            }
          },
          "generate_transects_along_lines": {
            "name": "Создание трансект вдоль линий",
            "description": "Проходит вдоль каждой линии с фиксированным интервалом и выдаёт перпендикулярные линии трансект заданной длины (центрированные или смещённые) для выборки изменений береговой линии, прибрежных зон и поперечных сечений — аналог ArcGIS Generate Transects Along Lines.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "interval": {
                "label": "Интервал",
                "description": "Шаг между створами вдоль каждой линии, в единицах CRS. Обязательный параметр."
              },
              "length": {
                "label": "Длина",
                "description": "Полная длина створа, в единицах CRS. Обязательный параметр."
              },
              "offset": {
                "label": "Смещение",
                "description": "Знаковое смещение центра створа от линии, в единицах CRS (0 = по центру; +/- сдвигает влево/вправо). По умолчанию 0."
              },
              "include_ends": {
                "label": "Включать концы",
                "description": "Также размещать створ точно в начале и конце каждой линии. По умолчанию false."
              }
            }
          },
          "generate_trend_raster": {
            "name": "Создание растра тренда",
            "description": "Подбирает попиксельный временной тренд по временному ряду совмещённых растров (аналог ArcGIS Generate Trend Raster): уклон/свободный член/R² OLS или непараметрический Манн-Кендалл + уклон Сена с p-значением — попиксельный временной тренд, которого не могут дать встроенные trend_surface (пространственный) и change_vector_analysis (двухдатный).",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список путей совмещённых одноканальных растров через запятую, в хронологическом порядке (>= 3)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр наклона (наклон Сена для mann_kendall). Если не указан, сохраняется в памяти."
              },
              "times": {
                "label": "Моменты времени",
                "description": "Числовые моменты времени через запятую (например, годы), соответствующие 'inputs'. По умолчанию 0,1,2,..."
              },
              "method": {
                "label": "Метод",
                "description": "'linear' (OLS; по умолчанию) или 'mann_kendall' (непараметрический + наклон Сена)."
              },
              "intercept_output": {
                "label": "Выход свободного члена",
                "description": "Только для linear: необязательный выходной растр свободного члена OLS."
              },
              "significance_output": {
                "label": "Выход значимости",
                "description": "Необязательный выходной растр: R² (для linear) или двустороннее p-значение Манна-Кендалла (для mann_kendall)."
              },
              "min_valid": {
                "label": "Мин. допустимых",
                "description": "Минимальное число наблюдений на пиксель, не равных NoData (по умолчанию 3)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из каждого входа (по умолчанию 1)."
              }
            }
          },
          "geodetic_densify": {
            "name": "Геодезическое уплотнение",
            "description": "Вставляет вершины вдоль истинной геодезической линии или локсодромии (постоянного пеленга) между существующими вершинами географического (долгота/широта) линейного или полигонального слоя, аналогично ArcGIS Geodetic Densify — чтобы длинные сегменты следовали кривизне Земли, а не плоской хорде.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный или полигональный векторный слой, предполагается географическим (долгота/широта, в стиле EPSG:4326)."
              },
              "geodetic_type": {
                "label": "Тип геодезической линии",
                "description": "Тип пути между вершинами: 'geodesic' (по умолчанию; кратчайший путь по эллипсоиду WGS84) или 'rhumb'/'loxodrome' (постоянный истинный азимут)."
              },
              "max_segment_length": {
                "label": "Макс. длина сегмента",
                "description": "Целевой максимальный интервал в метрах между соседними вершинами после уплотнения. Должен быть задан ровно один из параметров max_segment_length / vertices_per_segment."
              },
              "vertices_per_segment": {
                "label": "Вершин на сегмент",
                "description": "Альтернатива max_segment_length: вставлять ровно столько равномерно распределённых вершин в каждый исходный сегмент, независимо от его длины. Должен быть задан ровно один из параметров max_segment_length / vertices_per_segment."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь; если не указан, сохраняется в памяти."
              }
            }
          },
          "geotagged_photos_to_points": {
            "name": "Фотографии с геотегами в точки",
            "description": "Читает папку фотографий с геотегами и строит точечный слой WGS-84 с путём к каждому файлу, датой и временем съёмки, высотой, направлением камеры (GPS image direction) и производителем/моделью — только из метаданных EXIF (пиксели не декодируются), аналогично ArcGIS GeoTagged Photos To Points.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к папке с фотографиями (JPEG/TIFF), из которых читаются метаданные GPS в EXIF."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной точечный вектор (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "recursive": {
                "label": "Рекурсивно",
                "description": "Просматривать вложенные папки при поиске фотографий. По умолчанию false."
              },
              "only_geotagged": {
                "label": "Только с геотегами",
                "description": "Пропускать изображения без координат GPS (по умолчанию true). При false изображения без геопривязки выводятся с пустой геометрией."
              }
            }
          },
          "getis_ord_general_g": {
            "name": "Кластеризация высоких/низких значений (общий G Getis-Ord)",
            "description": "Вычисляет глобальную статистику Getis-Ord General G — единую z-оценку и p-значение, показывающие, кластеризуются ли глобально ВЫСОКИЕ или НИЗКИЕ значения, аналогично ArcGIS High/Low Clustering (Getis-Ord General G).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой. Точки используют свои координаты; для других геометрий используется представительная точка как среднее вершин (для весов смежности нужны полигоны)."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое неотрицательное поле для проверки на кластеризацию высоких/низких значений."
              },
              "weights": {
                "label": "Веса",
                "description": "Схема пространственных весов: 'distance_band' (по умолчанию), 'k_nearest', 'queen' или 'rook'."
              },
              "distance_band": {
                "label": "Полоса расстояний",
                "description": "Пороговое расстояние (в единицах CRS) для схемы 'distance_band'. По умолчанию: максимальное расстояние до ближайшего соседа (у каждого объекта есть >=1 сосед)."
              },
              "k": {
                "label": "K",
                "description": "Число соседей для схемы 'k_nearest' (по умолчанию 8)."
              },
              "row_standardize": {
                "label": "Стандартизация по строкам",
                "description": "Выполнять построчную стандартизацию матрицы весов, чтобы сумма каждой строки равнялась 1 (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь к CSV для однострочного отчёта. Всегда возвращается в результате."
              }
            }
          },
          "goldstein_phase_filter": {
            "name": "Фазовый фильтр Goldstein",
            "description": "Адаптивная спектральная фильтрация (Goldstein) интерферометрической фазы SAR — шаг, делающий возможной развёртку фазы (ArcGIS Apply Complex Data Filter). unwrap_phase раунда 17 не справляется с необработанной интерферограммой, потому что шумовые остатки вынуждают делать разрезы ветвей; всё встроенное семейство фильтров lee/frost/kuan/wiener/gaussian работает с вещественной интенсивностью и здесь неприменимо, поскольку усреднение свёрнутой фазы через разрыв ±pi её разрушает. Фильтрует комплексный сигнал по фрагментам в частотной области и сообщает число остатков до и после.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Интерферограмма: двухканальный растр I/Q или одноканальный растр свёрнутой фазы в радианах (предполагается единичная амплитуда)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной двухканальный (I, Q) отфильтрованный комплексный растр. Если не указан, сохраняется в памяти."
              },
              "output_phase": {
                "label": "Выход фазы",
                "description": "Выходная одноканальная отфильтрованная свёрнутая фаза в радианах, в (-pi, pi]. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "alpha": {
                "label": "Альфа",
                "description": "Сила фильтра в [0, 1] (по умолчанию 0.5). 0 оставляет фазу без изменений; 1 — максимально агрессивно."
              },
              "outer_window_size": {
                "label": "Размер внешнего окна",
                "description": "Размер участка FFT в ячейках (по умолчанию 32). Округляется вверх до степени двойки."
              },
              "inner_window_size": {
                "label": "Размер внутреннего окна",
                "description": "Шаг между участками в ячейках (по умолчанию = outer/4). Меньшее значение даёт большее перекрытие и более плавное смешивание; не должно превышать внешнее окно."
              },
              "spectrum_smoothing": {
                "label": "Сглаживание спектра",
                "description": "Ширина в интервалах скользящего среднего, применяемого к спектру участка перед возведением в степень (по умолчанию 3, должна быть нечётной)."
              }
            }
          },
          "gpx_to_features": {
            "name": "GPX в объекты",
            "description": "Разбирает файл GPX в точки путевых точек и/или полилинии треков/маршрутов, перенося ele/time/name.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к файлу .gpx (XML формата GPS Exchange)."
              },
              "points_output": {
                "label": "Выход точек",
                "description": "Необязательный путь выходного точечного вектора для путевых точек (драйвер определяется расширением). Если не задан ни один выход, путевые точки сохраняются в памяти."
              },
              "lines_output": {
                "label": "Выход линий",
                "description": "Необязательный путь выходного линейного вектора для треков и маршрутов (драйвер определяется расширением)."
              }
            }
          },
          "graphic_buffer": {
            "name": "Графический буфер",
            "description": "Буферизует объекты с выбором стиля концов (round/square/butt) и стиля соединений (round/miter/bevel) с пределом среза — геометрия квадратных/усечённых буферов, которую не могут дать буферы только со скруглением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Расстояние буфера в единицах CRS слоя. Должно быть положительным."
              },
              "cap": {
                "label": "Концы",
                "description": "Стиль окончания для концов линий/точек: 'round' (по умолчанию), 'square' или 'butt' (псевдоним 'flat')."
              },
              "join": {
                "label": "Соединение",
                "description": "Стиль соединения углов: 'round' (по умолчанию), 'miter' или 'bevel'."
              },
              "miter_limit": {
                "label": "Предел среза",
                "description": "Отношение длины острого соединения к расстоянию буфера, сверх которого острый угол срезается (по умолчанию 10, как в ArcGIS/JTS). Должно быть >= 1. Используется только при join='miter'."
              },
              "dissolve": {
                "label": "Слияние",
                "description": "Если true, объединять все буферы в один слитый (мульти)полигональный объект. По умолчанию false (по одному буферу на входной объект, атрибуты сохраняются)."
              }
            }
          },
          "greater_than_or_equal_to": {
            "name": "Больше или равно",
            "description": "Проверяет, больше или равен ли первый растр второму, ячейка за ячейкой.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "grid_index_features": {
            "name": "Объекты индекса сетки",
            "description": "Строит индексную сетку серии карт из прямоугольников размером со страницу с именами страниц (A1, B3, ... или последовательными), размерами по масштабу и необязательным фильтром пересечения с данными — аналог ArcGIS Grid Index Features, плюс ленточный режим, следующий маршруту с повёрнутыми страницами, аналог ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой. Задаёт экстент, если явный экстент не указан, маршрут для полосового режима и объекты, проверяемые параметром intersect_only."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный вектор индексных страниц (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "mode": {
                "label": "Режим",
                "description": "grid (по умолчанию): разбить на тайлы прямоугольный экстент. strip: следовать вдоль линии маршрута повёрнутыми перекрывающимися страницами."
              },
              "x_min": {
                "label": "Мин. X",
                "description": "Явный минимум X экстента (в единицах CRS). Задайте все четыре параметра x_min/y_min/x_max/y_max, чтобы переопределить экстент входа."
              },
              "y_min": {
                "label": "Мин. Y",
                "description": "Явный минимум Y экстента (в единицах CRS)."
              },
              "x_max": {
                "label": "Макс. X",
                "description": "Явный максимум X экстента (в единицах CRS)."
              },
              "y_max": {
                "label": "Макс. Y",
                "description": "Явный максимум Y экстента (в единицах CRS)."
              },
              "tile_width": {
                "label": "Ширина тайла",
                "description": "Ширина страницы в единицах CRS. Задайте оба параметра tile_width и tile_height либо используйте page_size + map_scale."
              },
              "tile_height": {
                "label": "Высота тайла",
                "description": "Высота страницы в единицах CRS (длина страницы вдоль маршрута в полосовом режиме)."
              },
              "page_size": {
                "label": "Размер страницы",
                "description": "Предустановка формата бумаги (a0..a4, letter, legal, tabloid), метрические размеры которой умножаются на map_scale для определения размера каждой страницы. Требует map_scale."
              },
              "map_scale": {
                "label": "Масштаб карты",
                "description": "Знаменатель масштаба карты (например, 24000 для 1:24 000). Вместе с page_size размер тайла = метры бумаги × map_scale (предполагается метрическая CRS)."
              },
              "origin_x": {
                "label": "Начало X",
                "description": "Координата X начала сетки, по которой выравниваются границы тайлов. По умолчанию: минимум X экстента."
              },
              "origin_y": {
                "label": "Начало Y",
                "description": "Координата Y начала сетки, по которой выравниваются границы тайлов. По умолчанию: минимум Y экстента."
              },
              "naming": {
                "label": "Именование",
                "description": "Схема именования страниц: alphanumeric (по умолчанию; буква столбца + номер строки, например A1) или sequential (номер в порядке чтения)."
              },
              "intersect_only": {
                "label": "Только пересечение",
                "description": "Если true, отбрасывать страницы, не пересекающиеся ни с одним входным объектом. Требует input. По умолчанию false."
              },
              "route": {
                "label": "Маршрут",
                "description": "Полосовой режим: линейный векторный слой, вдоль которого выполняется построение. По умолчанию используется первый линейный объект во входе."
              },
              "overlap": {
                "label": "Перекрытие",
                "description": "Полосовой режим: доля [0,1), на которую соседние страницы перекрываются вдоль маршрута. По умолчанию 0.05."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG выхода, когда экстент задан явно и нет входного слоя, от которого можно унаследовать CRS."
              }
            }
          },
          "group_by_proximity": {
            "name": "Группировка по близости",
            "description": "Помечает объекты GROUP_ID пространственных связных компонент по методу одиночной связи — объекты в пределах расстояния (near) или касающиеся (intersects), при необходимости с общим значением атрибута — аналог ArcGIS Group By Proximity.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (любого типа геометрии)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "relationship": {
                "label": "Отношение",
                "description": "'near' (в пределах 'spatial_near_distance', по умолчанию) или 'intersects' (соприкосновение, расстояние 0)."
              },
              "spatial_near_distance": {
                "label": "Расстояние пространственной близости",
                "description": "Радиус поиска в единицах карты для 'near' (по умолчанию 0)."
              },
              "attribute_field": {
                "label": "Поле атрибута",
                "description": "Необязательное поле; объекты группируются только при совпадении значения этого атрибута."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Имя выходного поля идентификатора группы (по умолчанию 'GROUP_ID')."
              }
            }
          },
          "gtfs_to_features": {
            "name": "GTFS в объекты",
            "description": "Разбирает транзитный фид GTFS в точки остановок и линии маршрутов, при необходимости с подсчётом частоты обслуживания для каждой остановки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к распакованному каталогу ленты GTFS (папка с файлами *.txt: stops.txt, shapes.txt, trips.txt, ...)."
              },
              "stops_output": {
                "label": "Выход остановок",
                "description": "Необязательный путь выходного точечного вектора для остановок (драйвер определяется расширением). Если не задан ни один выход, остановки сохраняются в памяти."
              },
              "shapes_output": {
                "label": "Выход форм",
                "description": "Необязательный путь выходного линейного вектора для геометрий маршрутов (драйвер определяется расширением)."
              },
              "frequency": {
                "label": "Частота",
                "description": "Если true, подсчитывать запланированные отправления с каждой остановки по stop_times.txt в поле n_departures. По умолчанию false."
              },
              "start_time": {
                "label": "Время начала",
                "description": "Необязательная нижняя граница ЧЧ:ММ:СС для окна частот (время GTFS может превышать 24:00:00)."
              },
              "end_time": {
                "label": "Время окончания",
                "description": "Необязательная верхняя граница ЧЧ:ММ:СС для окна частот."
              }
            }
          },
          "h3_polyfill": {
            "name": "Заполнение H3",
            "description": "Покрывает входные полигоны ячейками дискретной глобальной сетки H3 выбранного разрешения.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла (должен быть в географических координатах долгота/широта, EPSG:4326) или дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора; драйвер определяется расширением (.geojson, .fgb, .parquet, ...). Если не указан, слой сохраняется в памяти."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 от 0 (самое грубое) до 15 (самое детальное); по умолчанию 8 (ячейки ~0,7 км²)."
              }
            }
          },
          "h3_to_vector": {
            "name": "Ячейки H3 в полигоны",
            "description": "Преобразует столбец ID ячеек H3 в полигоны границ ячеек, копируя остальные атрибуты.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла (или дескриптор в памяти) с полем идентификаторов ячеек H3."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора; драйвер определяется расширением (.geojson, .fgb, .parquet, ...). Если не указан, слой сохраняется в памяти."
              },
              "field": {
                "label": "Поле",
                "description": "Имя текстового поля, содержащего идентификатор ячейки H3; по умолчанию 'h3'."
              }
            }
          },
          "hdbscan": {
            "name": "Кластеризация HDBSCAN",
            "description": "Иерархическая кластеризация на основе плотности (HDBSCAN*): MST взаимной достижимости, сжатое дерево кластеров и выбор по избытку массы, с вероятностью принадлежности и оценкой выброса для каждой точки — обрабатывает переменную плотность без эпсилона, аналог варианта HDBSCAN в ArcGIS Density-based Clustering.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (проекционная CRS; расстояния в её единицах)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (копия входа с полями кластеров). Если не указан, сохраняется в памяти."
              },
              "min_cluster_size": {
                "label": "Мин. размер кластера",
                "description": "Наименьшая группа, считающаяся кластером (>= 2). По умолчанию 5."
              },
              "min_samples": {
                "label": "Мин. выборок",
                "description": "Размер окрестности для оценки плотности по основному расстоянию (больше = больше точек считается шумом). По умолчанию: min_cluster_size."
              }
            }
          },
          "hot_spot_analysis_comparison": {
            "name": "Сравнение анализа горячих точек",
            "description": "Сравнивает два слоя результатов горячих точек Getis-Ord: сопоставляет их местоположения, классифицирует каждый переход (hot_to_hot, hot_to_cold, none_to_hot, ...) и выполняет перестановочный тест общего согласия с заданным зерном — аналог ArcGIS Hot Spot Analysis Comparison.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый слой результатов анализа горячих точек (точки или полигоны)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй слой результатов анализа горячих точек."
              },
              "bin_field": {
                "label": "Поле бина",
                "description": "Поле значимости, присутствующее в обоих входах (положительное = горячая зона, отрицательное = холодная)."
              },
              "significance": {
                "label": "Значимость",
                "description": "Порог абсолютного значения, ниже которого местоположение считается 'none' (по умолчанию 0)."
              },
              "match_field": {
                "label": "Поле сопоставления",
                "description": "Необязательное поле идентификатора, присутствующее в обоих входах и используемое для сопоставления местоположений; иначе используется ближайший центроид."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Максимальное расстояние между центроидами при сопоставлении по ближайшему местоположению (в единицах карты). Если не указано, без ограничения."
              },
              "permutations": {
                "label": "Перестановки",
                "description": "Число перестановок для глобального теста согласованности (по умолчанию 499)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение детерминированного генератора случайных чисел для перестановок (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "identify_narrow_polygons": {
            "name": "Определение узких полигонов",
            "description": "Помечает полигоны, которые где-либо уже допуска ширины (осколки и тонкие перешейки), аннотируя каждый флагом is_narrow и оценкой минимальной ширины.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "width_tolerance": {
                "label": "Допуск ширины",
                "description": "Порог ширины в единицах CRS. Полигон считается узким там, где он тоньше этого значения. Обязательный параметр."
              },
              "min_narrow_area": {
                "label": "Мин. площадь узкого участка",
                "description": "Минимальная площадь узкой части (в квадратных единицах CRS), необходимая для пометки полигона; меньшие узкие области игнорируются как шум. По умолчанию квадрат width_tolerance, что также поглощает незначительное скругление углов при размыкании."
              },
              "narrow_only": {
                "label": "Только узкие",
                "description": "Если true, отбрасывать неузкие объекты и выводить только помеченные узкие полигоны. По умолчанию false (помечать и сохранять все объекты)."
              }
            }
          },
          "idw_3d": {
            "name": "IDW 3D",
            "description": "Объёмная интерполяция 3D-точечных наблюдений обратными расстояниями в стек уровней высоты (по одному каналу растра на уровень), с коэффициентом увеличения высоты для учёта вертикальной/горизонтальной анизотропии и необязательными точками перекрёстной проверки с исключением по одному. Аналог ArcGIS IDW3D.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные 3D-точечные объекты."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле, содержащее интерполируемое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного многоканального растра (по одному каналу на уровень высоты). Если не указан, сохраняется в памяти."
              },
              "z_field": {
                "label": "Поле Z",
                "description": "Поле, задающее высоту; по умолчанию используется Z геометрии."
              },
              "power": {
                "label": "Степень",
                "description": "Показатель обратного расстояния (по умолчанию 2)."
              },
              "elev_inflation_factor": {
                "label": "Коэффициент увеличения высоты",
                "description": "Множитель, применяемый к вертикальному расстоянию перед вычислением 3D-расстояния (по умолчанию 1). Значения > 1 усиливают вклад вертикального расстояния, что соответствует меньшему масштабу вертикальной корреляции большинства объёмных данных."
              },
              "x_spacing": {
                "label": "Шаг X",
                "description": "Размер выходной ячейки по X (по умолчанию: экстент / 100)."
              },
              "y_spacing": {
                "label": "Шаг Y",
                "description": "Размер выходной ячейки по Y (по умолчанию: как у x_spacing)."
              },
              "z_spacing": {
                "label": "Шаг Z",
                "description": "Вертикальный шаг между выходными уровнями (по умолчанию: диапазон z / 10)."
              },
              "z_min": {
                "label": "Мин. Z",
                "description": "Наименьший выходной уровень (по умолчанию: минимум данных)."
              },
              "z_max": {
                "label": "Макс. Z",
                "description": "Наибольший выходной уровень (по умолчанию: максимум данных)."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Максимальное число измерений на один прогноз (по умолчанию 12)."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Необязательное максимальное (масштабированное) 3D-расстояние поиска; измерения за его пределами игнорируются."
              },
              "output_cv_features": {
                "label": "Выход объектов перекрёстной проверки",
                "description": "Необязательный путь для точек перекрёстной проверки с исключением по одному, содержащих наблюдённые, спрогнозированные значения и остатки."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG, проставляемый в выходном растре (по умолчанию: CRS входного слоя)."
              }
            }
          },
          "incremental_spatial_autocorrelation": {
            "name": "Инкрементальная пространственная автокорреляция",
            "description": "Вычисляет глобальный индекс Морана I по серии возрастающих полос расстояний и сообщает кривую z-оценок с её первым и максимальным пиками — обоснованный способ выбора расстояния кластеризации, аналог ArcGIS Incremental Spatial Autocorrelation.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (для других геометрий используется представительная точка как среднее вершин). Используйте проекционную CRS."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле для проверки пространственной автокорреляции."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь к CSV для таблицы по полосам. Всегда возвращается в результате."
              },
              "begin_distance": {
                "label": "Начальное расстояние",
                "description": "Расстояние первой полосы, в единицах CRS. По умолчанию: максимальное расстояние до ближайшего соседа (у каждого объекта есть >=1 сосед)."
              },
              "increment": {
                "label": "Инкремент",
                "description": "Расстояние, добавляемое на каждой полосе, в единицах CRS. По умолчанию: начальное расстояние."
              },
              "num_bands": {
                "label": "Число каналов",
                "description": "Число оцениваемых полос расстояний (по умолчанию 10)."
              }
            }
          },
          "inside_3d": {
            "name": "Внутри 3D",
            "description": "Определяет, какие 3D-объекты (точки, полилинии или тела) находятся внутри замкнутых объёмных контейнеров, при необходимости сообщая содержащуюся длину или долю вершин (ArcGIS Inside 3D). Каждый предикат вложенности в обоих реестрах проецирует на плоскость XY, так что датчик над контуром здания или труба под участком сейчас определяются как находящиеся внутри. Контейнеры следуют соглашению о треугольных сетках поставляемых buffer_3d и minimum_bounding_volume.",
            "params": {
              "target": {
                "label": "Цель",
                "description": "Проверяемые 3D-объекты: точки, полилинии или тела в виде треугольных сеток."
              },
              "container": {
                "label": "Контейнер",
                "description": "Замкнутые 3D-объекты (тела в виде треугольных сеток), выступающие контейнерами."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы пар цель/контейнер. Если не указан, сохраняется в памяти."
              },
              "mode": {
                "label": "Режим",
                "description": "'simple' (по умолчанию) сообщает, находится ли цель внутри; 'complex' добавляет длину внутри и долю внутри."
              },
              "output_features": {
                "label": "Выходные объекты",
                "description": "Необязательный путь для обрезанных внутренних частей линейных целей (режим complex). Если не указан, сохраняется в памяти (всё равно возвращается)."
              }
            }
          },
          "integrate": {
            "name": "Интеграция",
            "description": "Привязывает все вершины всех объектов в пределах допуска кластеризации к общему местоположению, чтобы почти совпадающие общие границы стали точно совпадающими, при необходимости вставляя вершины T-образных соединений на близлежащие рёбра — аналог ArcGIS Integrate.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (любого типа геометрии)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер определяется расширением). Если не указан, результат сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Расстояние кластеризации в единицах CRS: вершины в пределах этого расстояния притягиваются к общему местоположению. Обязательный параметр."
              },
              "snap_to_edges": {
                "label": "Привязывать к рёбрам",
                "description": "Также вставлять вершину там, где вершина одного объекта попадает в пределах допуска на сегмент другого объекта (T-образные соединения). По умолчанию true."
              }
            }
          },
          "interpolate_from_spatiotemporal_points": {
            "name": "Интерполяция по пространственно-временным точкам",
            "description": "Группирует точечные наблюдения с метками времени в регулярные временные срезы и интерполирует каждый на одну общую сетку, создавая совмещённый многомерный растр, аналогично ArcGIS Interpolate From Spatiotemporal Points.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечные объекты с метками времени."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Интерполируемое числовое поле."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле метки времени: число секунд от эпохи или текст ISO-8601."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра для первого среза. Последующие срезы записываются рядом с суффиксом _t<индекс>. Если не указан, все срезы сохраняются в памяти."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "daily | weekly | monthly (по умолчанию) | quarterly | yearly."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах карты. По умолчанию 1/50 большей стороны экстента."
              },
              "method": {
                "label": "Метод",
                "description": "idw (по умолчанию) | nearest | mean | median."
              },
              "power": {
                "label": "Степень",
                "description": "Показатель расстояния IDW (по умолчанию 2)."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число ближайших наблюдений, используемых на каждую ячейку (по умолчанию 8)."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Минимальное число наблюдений, необходимое для интерполяции среза; более разреженные срезы выводятся целиком как NoData, а не в виде вводящей в заблуждение поверхности (по умолчанию 3)."
              }
            }
          },
          "interpolate_shape": {
            "name": "Интерполяция формы",
            "description": "Накладывает точки/линии/полигоны на растр поверхности: уплотняет, выбирает Z для каждой вершины (билинейно или ближайший), записывает 3D-геометрию и добавляет метрики поверхности (z_min/z_max/z_mean, длина 3D-поверхности, средний уклон), аналогично ArcGIS Interpolate Shape / Add Surface Information.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки, линии или полигоны) с той же CRS, что и поверхность."
              },
              "surface": {
                "label": "Поверхность",
                "description": "Растр высот/поверхности для выборки значений."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Интервал уплотнения в единицах CRS; длинные сегменты разбиваются, чтобы следовать поверхности. По умолчанию: размер ячейки растра."
              },
              "method": {
                "label": "Метод",
                "description": "Выборка по поверхности: 'bilinear' (по умолчанию) или 'nearest'."
              },
              "attributes": {
                "label": "Атрибуты",
                "description": "Список добавляемых столбцов метрик через запятую: z_min,z_max,z_mean,surf_len,avg_slope. По умолчанию: все."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала поверхности для выборки, начиная с 1 (по умолчанию 1)."
              }
            }
          },
          "interpolate_with_barriers": {
            "name": "Интерполяция с барьерами",
            "description": "Интерполирует точечные измерения в растр с учётом абсолютных барьеров (береговые линии, гребни, разломы, стены): влияние распространяется вокруг барьеров по стоимостному/геодезическому расстоянию, а не сквозь них — IDW или локально-полиномиальное ядро первого порядка, аналог ArcGIS Kernel Interpolation With Barriers / Spline With Barriers. Встроенные инструменты idw/кригинга/естественного соседа/сплайна не учитывают барьеры.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой измерений."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле точек, содержащее интерполируемое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной интерполированный растр (GeoTIFF). Если не указан, сохраняется в памяти."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный векторный слой барьеров (полилинии или полигоны). Растеризуется как непроходимые ячейки, поэтому влияние вынуждено обходить их. Не указывайте для контрольного расчёта без барьеров."
              },
              "method": {
                "label": "Метод",
                "description": "'idw' (по умолчанию) или 'local_polynomial' (взвешенная плоская аппроксимация первого порядка с гауссовым ядром по геодезическому расстоянию)."
              },
              "power": {
                "label": "Степень",
                "description": "Показатель затухания с расстоянием для IDW (по умолчанию 2)."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Ширина гауссова ядра для local_polynomial (в единицах расстояния). По умолчанию: радиус поиска, иначе экстент сетки."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус поиска как геодезическое (стоимостное) расстояние: измерения за его пределами не влияют на ячейку, а недостижимые в его пределах ячейки становятся NoData. Метры для географической CRS, единицы CRS в остальных случаях. По умолчанию: без ограничения."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS (градусы для географической CRS). По умолчанию: подбирается так, чтобы длинная ось охватывала ~256 ячеек."
              }
            }
          },
          "intersect_3d": {
            "name": "3D-пересечение",
            "description": "Вычисляет объём, общий для перекрывающихся замкнутых 3D-тел, пара за парой, с необязательным ограничивающим телом для каждого пересечения (ArcGIS Intersect 3D). union_3d — единственный 3D-оверлей в обоих реестрах, и он отвечает только на вопрос об объединённом объёме; inside_3d — предикат вложенности для точек и линий, а polygon_volume / surface_volume измеряют относительно опорной плоскости. Объёмы тел точны; пересечение оценивается по заполнению вокселей с указанным разрешением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Замкнутые 3D-объёмные объекты (мультиполигоны в виде треугольных сеток с Z, какие выдают buffer_3d и minimum_bounding_volume)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Необязательный второй слой тел. Если не указан, пересекаются все пары внутри 'input' (режим одного входа ArcGIS)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходная таблица пересекающихся пар, по одной строке на каждое непустое пересечение. Если не указана, сохраняется в памяти."
              },
              "mode": {
                "label": "Режим",
                "description": "'table' (по умолчанию): только атрибуты. 'solid': дополнительно выводить ограничивающее тело каждого пересечения в виде геометрии. Измеренный объём всегда является атрибутом — точная объединённая сетка не заявляется."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Число вокселей вдоль самой длинной оси общего ограничивающего прямоугольника каждой пары (по умолчанию 64). Большее значение точнее и медленнее."
              }
            }
          },
          "intersect_3d_line_with_surface": {
            "name": "Пересечение 3D-линии с поверхностью",
            "description": "Разделяет 3D-линии в каждой точке пересечения с поверхностью высот или мультипатчем, помечая каждую часть как находящуюся выше или ниже и выдавая точки пересечения (ArcGIS Intersect 3D Line With Surface / Intersect 3D Line With Multi Patch). intersect_3d раунда 17 принимает замкнутые тела, а не линии, inside_3d — предикат вложенности, который не режет геометрию и не находит пересечения, а interpolate_shape накладывает линию на поверхность, отбрасывая z линии, от которого зависит сравнение.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Слой 3D-линий с вершинами, содержащими z."
              },
              "surface": {
                "label": "Поверхность",
                "description": "Растр высот, по которому выполняется рассечение. Обязателен, если не задан 'multipatch'."
              },
              "multipatch": {
                "label": "Мультипатч",
                "description": "Слой multipatch (треугольные мультиполигоны) для рассечения вместо растровой поверхности."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной линейный слой, разделённый в каждом месте пересечения. Если не указан, сохраняется в памяти."
              },
              "output_points": {
                "label": "Выходные точки",
                "description": "Выходной точечный слой самих пересечений. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "spacing": {
                "label": "Шаг",
                "description": "Шаг уплотнения в плане в единицах карты (по умолчанию: одна ячейка поверхности). Меньшее значение точнее разрешает пересечения ценой больших затрат."
              },
              "keep_above": {
                "label": "Сохранять выше",
                "description": "Сохранять части выше поверхности (по умолчанию true)."
              },
              "keep_below": {
                "label": "Сохранять ниже",
                "description": "Сохранять части ниже поверхности (по умолчанию true)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) растра поверхности (по умолчанию 1)."
              }
            }
          },
          "intersecting_layers_masks": {
            "name": "Маски пересекающихся слоёв",
            "description": "Генерирует картографические полигоны масок с отступом вокруг объектов маскируемого слоя, но только там, где они пересекают второй маскирующий слой (точный контур, выпуклая оболочка или ограничивающий прямоугольник).",
            "params": {
              "masked_layer": {
                "label": "Маскируемый слой",
                "description": "Маскируемый векторный слой (любая геометрия): каждый объект, пересекающийся с маскирующим слоем, получает маску. Формат определяется автоматически (или дескриптор в памяти)."
              },
              "masking_layer": {
                "label": "Маскирующий слой",
                "description": "Маскирующий векторный слой (любая геометрия): маскируемый объект маскируется только там, где он пересекается с объектом этого слоя."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "margin": {
                "label": "Поле отступа",
                "description": "Отступ маски. В метрах для географической CRS (EPSG:4326 или неизвестной, с пересчётом в градусы), иначе в единицах CRS слоя. Должен быть положительным."
              },
              "mask_kind": {
                "label": "Вид маски",
                "description": "Форма маски: 'exact' (по умолчанию, буферизованный контур объекта), 'convex_hull' (расширенная выпуклая оболочка) или 'box' (ограничивающая рамка + отступ)."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Необязательное поле маскируемого слоя, значение которого копируется в каждую маску как 'source_id'. По умолчанию используется индекс исходного объекта."
              }
            }
          },
          "intervisibility": {
            "name": "Взаимная видимость",
            "description": "Проверяет каждую линию видимости по 3D-векторным препятствиям и помечает её как видимую или заблокированную, сообщая, какое препятствие её заблокировало и где (ArcGIS Intervisibility). line_of_sight, visibility_index, viewshed и skyline_analysis работают с растром поверхности; ни один не может проверять по 3D-препятствиям-мультипатчам, таким как здания, чьи навесы и аркады теряются при врезке в DEM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Линии визирования: 3D-полилинии, первая вершина которых — наблюдатель, а последняя — цель."
              },
              "obstructions": {
                "label": "Препятствия",
                "description": "Один или несколько слоёв 3D-препятствий через запятую (мультиполигоны в виде треугольных сеток с Z)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходные линии визирования с добавленными полями видимости. Если не указан, сохраняется в памяти."
              },
              "visible_field": {
                "label": "Поле видимости",
                "description": "Имя логического поля видимости (по умолчанию 'VISIBLE'), соответствующее параметру ArcGIS."
              },
              "observer_offset": {
                "label": "Смещение наблюдателя",
                "description": "Высота, добавляемая к конечной точке наблюдателя перед проверкой, в единицах CRS (по умолчанию 0). Моделирует высоту глаз или прибора."
              },
              "target_offset": {
                "label": "Смещение цели",
                "description": "Высота, добавляемая к конечной точке цели перед проверкой, в единицах CRS (по умолчанию 0)."
              },
              "visible_only": {
                "label": "Только видимые",
                "description": "Выводить только линии визирования без препятствий (по умолчанию false)."
              }
            }
          },
          "is_closed_3d": {
            "name": "Замкнуто в 3D",
            "description": "Помечает, какие 3D-объекты-мультипатчи являются водонепроницаемыми замкнутыми телами, а какие — открытыми поверхностями, с диагностическими подсчётами непарных граничных рёбер, немногообразных рёбер и согласованности обхода (ArcGIS Is Closed 3D). Каждый объёмный инструмент каталога — union_3d, inside_3d, minimum_bounding_volume, buffer_3d — предполагает замкнутый вход и возвращает бессмысленное число для открытой сетки, и ничто не позволяет сначала проверить это предусловие.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "3D-объекты (мультиполигоны в виде треугольных сеток с Z, какие выдают buffer_3d, minimum_bounding_volume и voxel_isosurface)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора: входные объекты с добавленными диагностическими полями. Если не указан, сохраняется в памяти."
              },
              "closed_only": {
                "label": "Только замкнутые",
                "description": "Выводить только объекты, являющиеся замкнутыми телами (по умолчанию false: выводится каждый объект со своим заключением)."
              }
            }
          },
          "kernel_density_ratio": {
            "name": "Отношение плотности ядра",
            "description": "Отношение относительного риска двух поверхностей плотности ядра: вычисляет точечный слой числителя (случаи) и точечный слой знаменателя (население под риском) с одним квартическим ядром и общей шириной полосы, затем делит ячейка за ячейкой — аналог ArcGIS Calculate Kernel Density Ratio. Нижняя граница знаменателя записывает NoData там, где население слишком разрежено (без утечек inf/NaN), а необязательное преобразование натуральным логарифмом делает избыточную/недостаточную представленность симметричной. Отношение плотностей, которое не может выразить однослойная heat_map.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный слой числителя (например, случаи / инциденты)."
              },
              "denominator": {
                "label": "Знаменатель",
                "description": "Точечный слой знаменателя (например, население / подверженность риску)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра отношения. Если не указан, сохраняется в памяти."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Числовое поле, задающее вес точек числителя (по умолчанию: каждая точка считается за 1)."
              },
              "denominator_weight_field": {
                "label": "Поле веса знаменателя",
                "description": "Числовое поле, задающее вес точек знаменателя (по умолчанию: каждая точка считается за 1)."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Общая ширина ядра / радиус поиска (метры для географической CRS, единицы CRS в остальных случаях). По умолчанию: правило Сильвермана по совокупному разбросу точек."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS (по умолчанию: большая сторона экстента / 200)."
              },
              "log_ratio": {
                "label": "Логарифм отношения",
                "description": "Если true, выводить натуральный логарифм отношения (симметричный относительно 0). По умолчанию false."
              },
              "denominator_floor": {
                "label": "Нижняя граница знаменателя",
                "description": "Ячейки, плотность знаменателя в которых ниже этого значения (или равна нулю), становятся NoData, что предотвращает всплески при делении. По умолчанию 0 (маскируется только строго нулевой знаменатель)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG для маркировки выхода (по умолчанию: из слоя числителя)."
              }
            }
          },
          "kernel_interpolation_with_barriers": {
            "name": "Ядерная интерполяция с барьерами",
            "description": "Интерполирует точечные наблюдения полиномиальной подгонкой со взвешиванием ядром в скользящем окне, где расстояние измеряется как кратчайший путь ВОКРУГ абсолютных барьеров, а не напрямую сквозь них (ArcGIS Kernel Interpolation With Barriers). Дополняет поставляемый diffusion_interpolation_with_barriers, который решает уравнение теплопроводности вместо применения явного ядра. Все остальные интерполяторы в обоих реестрах используют евклидово расстояние, так что все они интерполируют напрямую через мысы и разломы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой, содержащий наблюдения."
              },
              "z_field": {
                "label": "Поле Z",
                "description": "Интерполируемое числовое поле."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра прогнозируемых значений. Если не указан, сохраняется в памяти."
              },
              "output_error": {
                "label": "Выход ошибки",
                "description": "Необязательный путь для растра локального взвешенного среднеквадратичного остатка — взвешенного разброса остатков соседей относительно локальной аппроксимации. Это мера качества подгонки, а НЕ стандартная ошибка прогноза в стиле ArcGIS (она не учитывает ни эффективное число степеней свободы, ни рычаг). Если не указан, сохраняется в памяти (всё равно возвращается)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательный полилинейный слой абсолютных барьеров. Если он не задан, инструмент вырождается в обычную ядерную интерполяцию."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS. По умолчанию примерно 1/100 большей стороны экстента."
              },
              "kernel": {
                "label": "Ядро",
                "description": "exponential, gaussian, quartic, epanechnikov, polynomial5 (по умолчанию) или constant."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Ширина ядра в единицах CRS. По умолчанию значение, определяемое по данным на основе среднего расстояния до ближайшего соседа."
              },
              "power": {
                "label": "Степень",
                "description": "Порядок локального полинома: 0 (взвешенное среднее) или 1 (по умолчанию, плоская аппроксимация)."
              },
              "ridge": {
                "label": "Гребень",
                "description": "Ридж-параметр, стабилизирующий локальную аппроксимацию методом наименьших квадратов там, где окрестность вырождена (по умолчанию 1e-6)."
              },
              "max_neighbors": {
                "label": "Макс. соседей",
                "description": "Ограничение числа наблюдений, участвующих в каждой локальной аппроксимации (по умолчанию 32)."
              }
            }
          },
          "kml_to_features": {
            "name": "KML в объекты",
            "description": "Читает метки Placemark из .kml/.kmz в слои точек, линий и полигонов с атрибутами name/description.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к файлу .kml или архиву .kmz (KML в zip-архиве)."
              },
              "points_output": {
                "label": "Выход точек",
                "description": "Необязательный путь выходного точечного вектора (драйвер определяется расширением). Записывается, только если в KML есть точечные метки Placemark."
              },
              "lines_output": {
                "label": "Выход линий",
                "description": "Необязательный путь выходного линейного вектора (драйвер определяется расширением). Записывается, только если в KML есть линейные метки Placemark."
              },
              "polygons_output": {
                "label": "Выход полигонов",
                "description": "Необязательный путь выходного полигонального вектора (драйвер определяется расширением). Записывается, только если в KML есть полигональные метки Placemark."
              }
            }
          },
          "landtrendr": {
            "name": "LandTrendr",
            "description": "Временная сегментация LandTrendr ежегодного ряда изображений (аналог ArcGIS Analyze Changes Using LandTrendr): удаление всплесков, жадная кусочно-линейная подгонка по вершинам и извлечение наибольшего нарушения (год, магнитуда, длительность) для каждого пикселя. Попиксельная сегментация истории изменений, которой не могут дать двухдатный change_vector_analysis и однотрендовый generate_trend_raster.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути годовых растров через запятую в хронологическом порядке (например, результаты NBR инструмента spectral_index; >= 4)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр: год наибольшего нарушения для каждого пикселя. Если не указан, сохраняется в памяти."
              },
              "years": {
                "label": "Годы",
                "description": "Годы через запятую, соответствующие 'inputs' (по умолчанию 0,1,2,...)."
              },
              "magnitude_output": {
                "label": "Выход магнитуды",
                "description": "Необязательный растр величины нарушения (изменение индекса)."
              },
              "duration_output": {
                "label": "Выход длительности",
                "description": "Необязательный растр длительности нарушения (в годах)."
              },
              "direction": {
                "label": "Направление",
                "description": "Направление нарушения в индексе: 'loss' (падение; по умолчанию) или 'gain' (рост)."
              },
              "max_segments": {
                "label": "Макс. сегментов",
                "description": "Максимальное число сегментов (по умолчанию 6)."
              },
              "spike_threshold": {
                "label": "Порог всплеска",
                "description": "Сила подавления выбросов 0..1 (доля диапазона ряда; по умолчанию 0.75; 1 отключает)."
              },
              "min_valid": {
                "label": "Мин. допустимых",
                "description": "Минимальное число действительных наблюдений на пиксель (по умолчанию 4)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из каждого входа (по умолчанию 1)."
              }
            }
          },
          "las_height_metrics": {
            "name": "Метрики высот LAS",
            "description": "Растеризует поячеечные метрики высоты полога по высотам LiDAR (аналог ArcGIS LAS Height Metrics): среднее, ст. откл., асимметрия, эксцесс, MAD и перцентили высоты в виде многоканальной сетки — лесохозяйственный набор моментов/перцентилей, который встроенные height_above_ground и lidar_point_stats не выдают за один проход.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входное облако точек LAS/LAZ с высотами над землёй (сначала нормализуйте с помощью height_above_ground)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного многоканального растра. Если не указан, сохраняется в памяти."
              },
              "metrics": {
                "label": "Метрики",
                "description": "Подмножество через запятую из mean,std,skewness,kurtosis,mad (по умолчанию 'mean,std,skewness,kurtosis,mad')."
              },
              "height_percentiles": {
                "label": "Перцентили высоты",
                "description": "Процентили через запятую в [0,100], например '50,95,99' (по умолчанию '50,95,99'; пусто — ни одного)."
              },
              "min_height": {
                "label": "Мин. высота",
                "description": "Исключать точки с высотой ниже этого значения (отсечение земли/шума). По умолчанию 0."
              },
              "min_points": {
                "label": "Мин. точек",
                "description": "Ячейки с меньшим числом действительных точек становятся NoData. По умолчанию 4."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS. По умолчанию 10."
              }
            }
          },
          "less_than_or_equal_to": {
            "name": "Меньше или равно",
            "description": "Проверяет, меньше или равен ли первый растр второму, ячейка за ячейкой.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый входной растр (строка пути или типизированный растровый объект)."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй входной растр (строка пути или типизированный растровый объект)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растрового файла. Если не указан, выход остаётся в памяти и возвращается как растровый дескриптор memory://."
              }
            }
          },
          "line_density": {
            "name": "Плотность линий",
            "description": "Плотность линейных объектов (длина на единицу площади) в круговой окрестности каждой ячейки растра — плотность дорог, водотоков или разломов — путём обрезки каждого сегмента линии по кругу радиуса поиска (в замкнутой форме) и деления суммарной взвешенной длины на pi*r^2. Аналог ArcGIS Line Density; аналог для векторных линий, которого нет у встроенных точечной heat_map и категориальной edge_density.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра плотности (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Числовое поле, задающее вес каждой линии (например, число полос, трафик, население). По умолчанию: вес каждой линии равен 1."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности (метры для географической CRS, единицы CRS в остальных случаях). По умолчанию: меньшая сторона экстента / 25."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки (в тех же единицах, что и search_radius). По умолчанию: search_radius / 10."
              },
              "area_units": {
                "label": "Единицы площади",
                "description": "Единица площади для значений плотности: 'square_map_units' (по умолчанию), 'square_meters', 'square_kilometers', 'square_miles' или 'square_feet'."
              }
            }
          },
          "line_of_sight": {
            "name": "Линия видимости",
            "description": "Видимость от точки к точке по DEM: для каждой пары наблюдатель-цель выдаёт линию видимости, разделённую на видимые и закрытые сегменты, плюс флаг видимости цели, аналогично ArcGIS Line Of Sight.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр высот (проекционная CRS; расстояния/высоты в её единицах)."
              },
              "observers": {
                "label": "Наблюдатели",
                "description": "Точечный векторный слой наблюдателей."
              },
              "targets": {
                "label": "Цели",
                "description": "Точечный векторный слой целей."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "observer_offset": {
                "label": "Смещение наблюдателя",
                "description": "Высота наблюдателя над землёй, в единицах DEM (по умолчанию 1.75)."
              },
              "target_offset": {
                "label": "Смещение цели",
                "description": "Высота цели над землёй, в единицах DEM (по умолчанию 0)."
              },
              "pair_field": {
                "label": "Поле пары",
                "description": "Необязательное поле, присутствующее в обоих слоях; наблюдатели и цели объединяются в пары при совпадении этого поля (вместо соединения всех со всеми)."
              },
              "band": {
                "label": "Канал",
                "description": "Опрашиваемый канал DEM (по умолчанию 1)."
              }
            }
          },
          "line_statistics": {
            "name": "Статистика линий",
            "description": "Растеризует статистику окрестности по атрибуту линий (среднее, мода, медиана, мин./макс., размах, разнообразие или общая длина) путём обрезки каждого сегмента по кругу радиуса поиска и взвешивания значений по длине — аналог ArcGIS Line Statistics; атрибутивное дополнение к line_density, которого нет во встроенном наборе.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный векторный слой."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле для сводки. Обязательно для всех статистик, кроме 'length'."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "'mean' (по умолчанию), 'majority', 'maximum', 'median', 'minimum', 'minority', 'range', 'variety' или 'length'."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Радиус окрестности в единицах CRS. По умолчанию: меньшая сторона экстента / 25."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS. По умолчанию: search_radius / 10."
              }
            }
          },
          "local_bivariate_relationships": {
            "name": "Локальные двумерные отношения",
            "description": "Для каждого объекта классифицирует, как две переменные связаны в его локальной окрестности (незначимо, положительная/отрицательная линейная, вогнутая, выпуклая, не определена), по локальным линейным и квадратичным подгонкам, статистике зависимости на основе снижения энтропии и p-значению перестановочного теста с заданным зерном — аналог ArcGIS Local Bivariate Relationships.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой, содержащий два поля переменных."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (копия входа с полями зависимости). Если не указан, сохраняется в памяти."
              },
              "field1": {
                "label": "Поле 1",
                "description": "Имя первого (объясняющего) поля переменной."
              },
              "field2": {
                "label": "Поле 2",
                "description": "Имя второго (зависимого) поля переменной."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число ближайших соседей k, задающее каждую локальную выборку (по умолчанию 12; должно быть >= 5)."
              },
              "permutations": {
                "label": "Перестановки",
                "description": "Число перестановок для теста значимости (по умолчанию 199; 0 отключает)."
              },
              "significance": {
                "label": "Значимость",
                "description": "Порог псевдо-p-значения, при котором зависимость считается значимой (по умолчанию 0.05)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для перестановок (по умолчанию 1), для воспроизводимых результатов."
              }
            }
          },
          "local_outlier_analysis": {
            "name": "Анализ локальных выбросов",
            "description": "Пространственно-временной анализ локальных выбросов (локальный индекс Морана I Анселина на пространственно-временном кубе H3): классифицирует каждую ячейку × временной бин как кластер High-High/Low-Low или выброс High-Low/Low-High с перестановочным p-значением с заданным зерном, затем обобщает по ячейке во времени — аналог ArcGIS Local Outlier Analysis. Пространственно-временное расширение встроенного чисто пространственного local_morans_i_lisa.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой событий с метками времени (долгота/широта)."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: число или метка времени ISO-8601."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный сводный слой H3. Если не указан, сохраняется в памяти."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле для агрегирования по ячейкам (по умолчанию: количество точек)."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Ширина шага времени в единицах time_field (по умолчанию 1)."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 0..15 (по умолчанию 7)."
              },
              "kring": {
                "label": "Кольцо K",
                "description": "Радиус пространственной окрестности в k-кольцах (по умолчанию 1)."
              },
              "time_window": {
                "label": "Временное окно",
                "description": "Полуширина временной окрестности в шагах (по умолчанию 1)."
              },
              "permutations": {
                "label": "Перестановки",
                "description": "Число перестановок для теста значимости (по умолчанию 99; 0 отключает)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для перестановок (по умолчанию 1)."
              }
            }
          },
          "local_polynomial_interpolation": {
            "name": "Локальная полиномиальная интерполяция",
            "description": "Подбирает полином порядка 1/2/3 в скользящей окрестности со взвешиванием ядром в каждой ячейке, создавая поверхность предсказания, поверхность стандартной ошибки предсказания или поверхность числа обусловленности. В отличие от встроенного глобального trend_surface, полином переподбирается локально. Аналог ArcGIS Local Polynomial Interpolation.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные точечные объекты, содержащие интерполируемое значение."
              },
              "z_field": {
                "label": "Поле Z",
                "description": "Числовое поле, содержащее интерполируемое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра. Если не указан, сохраняется в памяти."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах карты (по умолчанию: экстент входа / 200)."
              },
              "order": {
                "label": "Порядок",
                "description": "Порядок полинома: 1 (по умолчанию), 2 или 3."
              },
              "kernel": {
                "label": "Ядро",
                "description": "'exponential' (по умолчанию), 'gaussian', 'quartic', 'epanechnikov', 'fifth_order' или 'constant'."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "Фиксированная ширина ядра в единицах карты. Если не указана, используется адаптивная ширина: расстояние до измерения с номером 'neighbors' среди ближайших."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число измерений на локальную аппроксимацию для адаптивной ширины (по умолчанию: тройное число членов полинома)."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное поле веса измерения для каждого наблюдения."
              },
              "condition_number": {
                "label": "Число обусловленности",
                "description": "Отказываться от прогноза там, где число обусловленности локальной матрицы плана превышает этот порог (по умолчанию: без ограничения)."
              },
              "output_type": {
                "label": "Тип выхода",
                "description": "'prediction' (по умолчанию), 'standard_error' или 'condition_number'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG, проставляемый в выходном растре (по умолчанию: CRS входного слоя)."
              }
            }
          },
          "locate_lines_along_routes": {
            "name": "Локализация линий вдоль маршрутов",
            "description": "Накладывает линейные или полигональные объекты на маршруты с мерами для получения линейных событий с начальной/конечной мерой (RID, FMEAS, TMEAS), аналогично ArcGIS Locate Features Along Routes (линейные/полигональные события).",
            "params": {
              "input_features": {
                "label": "Входные объекты",
                "description": "Входной линейный или полигональный векторный слой для локализации вдоль маршрутов."
              },
              "routes": {
                "label": "Маршруты",
                "description": "Линейный векторный слой маршрутов, задающий меры линейной привязки."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Поле слоя маршрутов, содержащее идентификатор каждого маршрута (RID). Если не указано, используется индекс объекта маршрута с отсчётом от 0."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Радиус поиска в единицах CRS. Вершина объекта в пределах этого расстояния от маршрута считается совпадающей с ним. Обязательный параметр (> 0)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора линейных событий (драйвер определяется расширением). Если не указан, результат сохраняется в памяти."
              }
            }
          },
          "locate_regions": {
            "name": "Локализация регионов",
            "description": "Находит лучшие связные регионы целевой площади по растру пригодности (аналог ArcGIS Locate Regions): наращивание регионов от пиков пригодности по принципу «лучший первым» с контролем формы/компактности и расстояния между регионами — шаг размещения, превращающий поверхность fuzzy_overlay/weighted_overlay в реальные регионы, чего не могут clump и пороговая обработка.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр пригодности (выше значение = более пригодно)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр идентификаторов регионов с отсчётом от 1 (в остальных местах NoData). Если не указан, сохраняется в памяти."
              },
              "total_area": {
                "label": "Общая площадь",
                "description": "Общая целевая площадь по всем регионам, в единицах площади CRS (по умолчанию: 5 % действительной площади)."
              },
              "num_regions": {
                "label": "Число регионов",
                "description": "Число размещаемых регионов (по умолчанию 1). Для каждого целевая площадь равна total_area / num_regions."
              },
              "shape": {
                "label": "Форма",
                "description": "Вес компактности 0..1: 0 = только пригодность, 1 = сильное предпочтение округлых регионов (по умолчанию 0.3)."
              },
              "min_distance": {
                "label": "Мин. расстояние",
                "description": "Минимальное расстояние между регионами, в единицах CRS (по умолчанию 0)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "matched_filter_target_detection": {
            "name": "Обнаружение целей согласованным фильтром (CEM/ACE)",
            "description": "Оценивает каждый пиксель многоканального изображения относительно известного целевого спектра, используя статистику сцены для подавления фона — Constrained Energy Minimization (CEM) или Adaptive Coherence Estimator (ACE) — с необязательной маской перцентильного порога, аналогично ArcGIS Detect Target Using Spectra.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной многоканальный растр (2 и более каналов)."
              },
              "target_spectrum": {
                "label": "Целевой спектр",
                "description": "Целевой спектр: по одному значению на канал, в виде массива JSON или списка, разделённого запятыми или пробелами (длина должна совпадать с числом каналов)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр оценок обнаружения (F32). Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'cem' (Constrained Energy Minimization, по умолчанию) или 'ace' (Adaptive Coherence Estimator, оценки в 0..1)."
              },
              "threshold": {
                "label": "Порог",
                "description": "Необязательный процентиль (0-100) распределения оценок, выше которого записывается бинарная маска обнаружения."
              },
              "mask_output": {
                "label": "Выход маски",
                "description": "Путь выходной бинарной маски обнаружения (требуется 'threshold'). Если не указан при заданном пороге, сохраняется в памяти."
              }
            }
          },
          "maximum_likelihood_classification": {
            "name": "Классификация максимального правдоподобия",
            "description": "Гауссов классификатор максимального правдоподобия с обучением: моделирует каждый обучающий класс как многомерное нормальное распределение (среднее + ковариация по классу), классифицирует каждый пиксель многоканального изображения по наибольшему гауссову логарифмическому правдоподобию с необязательными равными/выборочными априорными весами и может выдать растр вероятности/уверенности по пикселям и отклонить наименее уверенные ячейки, аналогично ArcGIS Maximum Likelihood Classification.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной многоканальный растр для классификации (1 и более каналов; каждый канал — признак)."
              },
              "training": {
                "label": "Обучающие данные",
                "description": "Обучающий растр с целочисленными метками на той же сетке, что и 'input': каждое отдельное положительное целое число — класс; ячейки NoData, неположительные и неконечные считаются непомеченными."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной классифицированный растр с идентификаторами обучающих классов. Если не указан, сохраняется в памяти."
              },
              "prob_output": {
                "label": "Выход вероятности",
                "description": "Необязательный выходной растр F32 с апостериорной вероятностью (достоверностью) победившего класса в диапазоне [0,1]."
              },
              "a_priori": {
                "label": "Априорные вероятности",
                "description": "Априорные веса классов: 'equal' (по умолчанию, 1/K) или 'sample' (пропорционально числу обучающих пикселей каждого класса)."
              },
              "reject_fraction": {
                "label": "Доля отклонения",
                "description": "Доля в диапазоне [0,1) наименее достоверно классифицированных ячеек, оставляемых неклассифицированными (NoData). По умолчанию 0."
              }
            }
          },
          "median_center": {
            "name": "Медианный центр",
            "description": "Геометрическая медиана (точка Вайсфельда, минимизирующая суммарное, при необходимости взвешенное, евклидово расстояние до всех входных точек) — одна робастная центральная точка на группу случаев, с необязательными медианными атрибутами по полям (ArcGIS Median Center).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное числовое поле, задающее вес влияния каждой точки на медиану."
              },
              "case_field": {
                "label": "Поле случая",
                "description": "Необязательное поле для группировки точек; по одной медиане на каждое отдельное значение."
              },
              "attribute_fields": {
                "label": "Поля атрибутов",
                "description": "Необязательные числовые поля, разделённые запятыми; медиана каждого по группам добавляется как '<field>_med'."
              }
            }
          },
          "merge_divided_roads": {
            "name": "Слияние разделённых дорог",
            "description": "Заменяет сопоставленные пары полос разделённых дорог одиночными осевыми линиями, сохраняя связность перекрёстков, объединяя только полосы с общим полем слияния, идущие антипараллельно в пределах расстояния разделения, и выдавая полигоны смещения для propagate_displacement. Аналог ArcGIS Merge Divided Roads.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Объекты осевых линий дорог."
              },
              "merge_field": {
                "label": "Поле слияния",
                "description": "Поле, совпадение значений которого делает две линии кандидатами на парные проезжие части (например, название или класс дороги)."
              },
              "merge_distance": {
                "label": "Расстояние слияния",
                "description": "Максимальное расстояние между парными проезжими частями, в единицах карты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной объединённой осевой линии. Если не указан, сохраняется в памяти."
              },
              "output_displacement_features": {
                "label": "Выход объектов смещения",
                "description": "Необязательные полигоны, показывающие, где геометрия была смещена, для propagate_displacement."
              },
              "character_field": {
                "label": "Поле символов",
                "description": "Необязательное поле; объекты с ненулевым или непустым значением исключаются из объединения."
              },
              "output_table": {
                "label": "Выходная таблица",
                "description": "Необязательная таблица происхождения, связывающая выходные объекты с исходными."
              }
            }
          },
          "merge_lines_by_pseudo_node": {
            "name": "Слияние линий по псевдоузлам",
            "description": "Сливает цепочки сегментов линий, встречающихся в псевдоузлах степени 2, в единые полилинии, сохраняя истинные пересечения и (при необходимости) разрывы по атрибутам.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного линейного векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "dissolve_fields": {
                "label": "Поля слияния",
                "description": "Имена атрибутивных полей, разделённые запятыми; два сегмента объединяются, только если совпадают по всем из них. Если не указано, сегменты объединяются в каждом узле степени 2 независимо от атрибутов."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Конечные точки, находящиеся в пределах этого расстояния (в единицах CRS), считаются одним узлом. По умолчанию 1e-6."
              }
            }
          },
          "merge_multidimensional_rasters": {
            "name": "Слияние многомерных растров",
            "description": "Объединяет несколько совмещённых растровых кубов в один, упорядочивая по координате измерения и разрешая дублирующиеся координаты по ячейкам (ArcGIS Merge Multidimensional Rasters). aggregate_multidimensional_raster сводит куб, а composite_bands складывает одноканальные растры в каналы, но ничто не объединяло кубы вдоль их общего измерения.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Пути кубов (многоканальных растров), разделённые запятыми или точками с запятой. Не менее двух."
              },
              "dimension_values": {
                "label": "Значения измерения",
                "description": "Необязательные координаты срезов, охватывающие каждый срез каждого входа, в порядке входных данных. Не обязаны быть отсортированными или уникальными — именно это и разрешает данный инструмент. Без них входные данные объединяются в заданном порядке."
              },
              "dimension": {
                "label": "Измерение",
                "description": "Имя измерения, используется только в отчётах (по умолчанию 'slice')."
              },
              "resolve_overlap": {
                "label": "Разрешать перекрытия",
                "description": "Правило обработки дублирующихся координат: 'first' (по умолчанию), 'last', 'mean', 'min', 'max' или 'error'."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Относительный допуск, при котором две координаты считаются равными (по умолчанию 1e-9)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр-куб, по одному каналу на объединённый срез, в порядке измерения. Если не указан, сохраняется в памяти."
              }
            }
          },
          "mgwr": {
            "name": "Многомасштабная географически взвешенная регрессия",
            "description": "GWR, где каждый объясняющий член получает собственную ширину полосы через обратную подгонку AICc (MGWR): коэффициенты по объектам, локальный R2, остатки, число обусловленности, плюс оптимальная ширина полосы каждого члена с локальной/региональной/глобальной интерпретацией и глобальная диагностика AICc / R2.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов (точки или другие геометрии через их репрезентативную точку)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "dependent_field": {
                "label": "Зависимое поле",
                "description": "Зависимое числовое поле (отклик)."
              },
              "explanatory_fields": {
                "label": "Объясняющие поля",
                "description": "Числовые объясняющие поля, разделённые запятыми; для каждого подбирается собственная ширина полосы."
              },
              "kernel": {
                "label": "Ядро",
                "description": "Ядро затухания по расстоянию: gaussian (по умолчанию) или bisquare."
              },
              "bandwidth_type": {
                "label": "Тип ширины полосы",
                "description": "'adaptive' (по умолчанию; ширина полосы = k ближайших соседей) или 'fixed' (ширина полосы = расстояние). Применяется к поиску собственной ширины полосы для каждого члена."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск сходимости обратной подгонки: остановка, когда относительное изменение RSS между проходами становится меньше этого значения (по умолчанию 0.001)."
              },
              "max_iterations": {
                "label": "Макс. итераций",
                "description": "Максимальное число проходов обратной подгонки по всем членам (по умолчанию 30)."
              }
            }
          },
          "minimum_bounding_volume": {
            "name": "Минимальный ограничивающий объём",
            "description": "Вычисляет минимальный охватывающий объём (выпуклая оболочка, сфера или экстент) вокруг 3D-объектов — по объекту, по группе или по всему входу — выдавая тело как треугольные грани со значениями Z с атрибутами объёма и площади поверхности. Аналог ArcGIS Minimum Bounding Volume.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные 3D-объекты: точки, мультиточки или линии."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных граней объёма. Если не указан, сохраняется в памяти."
              },
              "z_value": {
                "label": "Значение Z",
                "description": "'geometry' (по умолчанию) — брать Z из геометрии, либо имя числового поля, содержащего Z."
              },
              "geometry_type": {
                "label": "Тип геометрии",
                "description": "'convex_hull' (по умолчанию), 'sphere' или 'envelope'. ('concave_hull' в этой версии не реализован.)"
              },
              "group_option": {
                "label": "Вариант группировки",
                "description": "'none' (один объём на объект, по умолчанию), 'all' (один объём для всех входных данных) или 'list' (по одному на каждое значение 'group_field')."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Поле, определяющее группы, когда 'group_option' имеет значение 'list'."
              },
              "mbv_fields": {
                "label": "Поля MBV",
                "description": "Добавлять поля MBV_VOLUME и MBV_AREA (по умолчанию false)."
              }
            }
          },
          "multicriteria_overlay": {
            "name": "Многокритериальный оверлей",
            "description": "Объединяет стек растров критериев в одну поверхность пригодности ранговым MCDA: weighted_sum, weighted_geometric_mean, OWA (упорядоченное взвешенное усреднение) или TOPSIS (близость к идеальной точке), с весами по растрам и масштабированием from_scale/to_scale, аналогично ArcGIS Multicriteria Overlay.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Список из ≥2 совмещённых растров-критериев, разделённых запятыми (большее значение = более пригодно; каждый перед объединением масштабируется по min-max в диапазон 0..1)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра. Если не указан, результат сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "Метод объединения: 'weighted_sum' (по умолчанию), 'weighted_geometric_mean', 'owa', 'topsis'."
              },
              "weights": {
                "label": "Веса",
                "description": "Веса значимости по растрам, разделённые запятыми, по одному на каждый вход (по умолчанию равные). Нормируются к сумме 1."
              },
              "order_weights": {
                "label": "Веса порядка",
                "description": "Только для OWA: порядковые веса, разделённые запятыми, по одному на каждый вход, применяемые к критериям, отсортированным по убыванию в каждой ячейке (по умолчанию равные, при которых OWA == взвешенное среднее). Нормируются к сумме 1."
              },
              "from_scale": {
                "label": "Из масштаба",
                "description": "Нижняя граница выходной шкалы оценки (по умолчанию 0)."
              },
              "to_scale": {
                "label": "В масштаб",
                "description": "Верхняя граница выходной шкалы оценки (по умолчанию 1)."
              }
            }
          },
          "multidimensional_anomaly": {
            "name": "Создание многомерной аномалии",
            "description": "Куб временных аномалий по срезам из временного стека растров (аналог ArcGIS Generate Multidimensional Anomaly): для каждого пикселя вычисляет временную базу (среднее/ст. откл. или медиана по измерению срезов) и переписывает каждый временной срез как его отклонение от этой базы — разность со средним, процент от среднего, z-оценка или разность с медианой — выдавая стек аномалий с одним срезом на входной срез.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Один многоканальный растр (каждый канал — временной срез) или список совмещённых растров, разделённых запятыми, в хронологическом порядке."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной многоканальный растр аномалий (по одному каналу на каждый входной срез). Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "Расчёт аномалии: 'difference_from_mean' (по умолчанию), 'percent_of_mean', 'z_score' или 'difference_from_median'."
              },
              "reference_range": {
                "label": "Опорный диапазон",
                "description": "Необязательный включительный диапазон срезов 'start-end' (нумерация с 1), используемый для вычисления попиксельной базовой линии (по умолчанию: все срезы)."
              },
              "min_valid": {
                "label": "Мин. допустимых",
                "description": "Минимальное число наблюдений, отличных от NoData, на пиксель внутри опорного диапазона (по умолчанию 1); при меньшем значении пиксель считается NoData."
              }
            }
          },
          "multidimensional_principal_components": {
            "name": "Многомерные главные компоненты",
            "description": "Разлагает растровый куб на несколько реальных мод, лежащих в основе длинного временного ряда, выдавая растры компонент, нагрузки и собственные значения в форме снижения размерности или пространственного снижения (ArcGIS Multidimensional Principal Components). Встроенный principal_component_analysis разлагает пространство каналов внутри одной сцены, так что его компоненты смешивают спектральные каналы, а не время; dimension_reduction работает с векторными таблицами атрибутов. Оба снижения получаются из одной ковариации в пространстве срезов, поскольку эквивалент в пространстве пикселей имел бы миллионы строк в квадрате.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Один многоканальный растр (каждый канал — срез) или разделённый запятыми список совмещённых растров."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной многоканальный растр: значения компонент для 'dimension_reduction', нагрузки компонент для 'spatial_reduction'. Если не указан, сохраняется в памяти."
              },
              "output_loadings": {
                "label": "Выход нагрузок",
                "description": "Выходная таблица нагрузок по срезам (или рядов компонент по срезам в режиме 'spatial_reduction'). Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "output_eigenvalues": {
                "label": "Выход собственных значений",
                "description": "Выходная таблица собственных значений и доли объяснённой дисперсии. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "mode": {
                "label": "Режим",
                "description": "'dimension_reduction' (по умолчанию; компоненты — пространственные структуры) или 'spatial_reduction' (компоненты — ряды по измерению)."
              },
              "dimension": {
                "label": "Измерение",
                "description": "Имя измерения, используется только в отчёте (по умолчанию 'slice')."
              },
              "dimension_values": {
                "label": "Значения измерения",
                "description": "Разделённые запятыми координаты каждого среза, строго возрастающие. По умолчанию используется индекс среза, начиная с 1."
              },
              "number_of_pc": {
                "label": "Число главных компонент",
                "description": "Сколько компонент сохранить (по умолчанию: все срезы)."
              },
              "correlation": {
                "label": "Корреляция",
                "description": "Разлагать корреляционную матрицу вместо ковариационной (по умолчанию false). Используйте, когда срезы имеют разные масштабы."
              }
            }
          },
          "multidimensional_raster_correlation": {
            "name": "Корреляция многомерных растров",
            "description": "Коррелирует два растровых куба ячейка за ячейкой вдоль их общего измерения, создавая карту коэффициентов Пирсона, Спирмена или Кендалла и — в режиме кросс-корреляции — лаг, при котором связь каждой ячейки достигает пика (ArcGIS Multidimensional Raster Correlation). Ничто в обоих реестрах этого не картографирует: image_correlation сводит пару изображений к одному скаляру, time_series_cross_correlation раунда 17 работает только с векторами, attribute_correlation — табличная операция, а bivariate_spatial_association сравнивает два одноканальных растра без оси времени.",
            "params": {
              "input1": {
                "label": "Вход 1",
                "description": "Первый куб: один многоканальный растр (каждый канал — срез) или список совмещённых растров, разделённых запятыми."
              },
              "input2": {
                "label": "Вход 2",
                "description": "Второй куб, совмещённый с первым и с тем же числом срезов."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр корреляции в диапазоне [-1, 1]. Если не указан, сохраняется в памяти."
              },
              "output_lag": {
                "label": "Выход лага",
                "description": "Выходной растр наилучшего лага для каждой ячейки (режим кросс-корреляции); в остальных случаях — фиксированный лаг везде. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "output_count": {
                "label": "Выход количества",
                "description": "Выходной растр числа парных наблюдений, лежащих в основе каждого коэффициента. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'pearson' (по умолчанию), 'spearman' или 'kendall'."
              },
              "lag": {
                "label": "Лаг",
                "description": "Фиксированное число срезов, на которое второй куб сдвигается вперёд перед формированием пар (по умолчанию 0). Игнорируется в режиме кросс-корреляции."
              },
              "cross_correlation": {
                "label": "Кросс-корреляция",
                "description": "Перебирать все лаги в диапазоне -max_lag..=max_lag и сохранять наибольший коэффициент (по умолчанию false)."
              },
              "max_lag": {
                "label": "Макс. лаг",
                "description": "Полуширина поиска лага в срезах (по умолчанию 3). Только для режима кросс-корреляции."
              },
              "use_absolute": {
                "label": "Использовать абсолютные значения",
                "description": "В режиме кросс-корреляции ранжировать лаги по абсолютной корреляции, чтобы побеждала сильная отрицательная связь (по умолчанию true)."
              },
              "min_valid": {
                "label": "Мин. допустимых",
                "description": "Минимальное число парных наблюдений, при котором записывается коэффициент (по умолчанию 3)."
              }
            }
          },
          "multilook": {
            "name": "Мультилукинг",
            "description": "Уменьшает спекл SAR путём некогерентного усреднения соседних луков по дальности и азимуту, создавая изображение интенсивности с квадратными пикселями (ArcGIS Multilook). Ни один из реестров не содержит инструментов SAR; встроенное семейство lee_filter работает с уже детектированной интенсивностью, поэтому этот инструмент обеспечивает предшествующий шаг, превращающий комплексные однолуковые данные в детектированное изображение, которого ожидают эти фильтры. Комплексный вход читается как двухканальная пара I/Q; детектирование выполняется до усреднения, а эквивалентное число луков сообщается для последующей фильтрации спекла.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр SAR: пара каналов I/Q для комплексных данных (SLC) либо один канал уже детектированных данных (см. 'input_domain')."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              },
              "input_domain": {
                "label": "Входной домен",
                "description": "Для некомплексного входа — что уже содержит канал 1: 'intensity' (по умолчанию) или 'amplitude'. Амплитуда возводится в квадрат для перехода к интенсивности перед усреднением, поскольку некогерентное усреднение корректно только в области интенсивности."
              },
              "complex": {
                "label": "Комплексный",
                "description": "Считать вход комплексной парой I/Q (по умолчанию: true, если растр имеет 2 и более каналов, иначе false)."
              },
              "range_looks": {
                "label": "Луков по дальности",
                "description": "Число взглядов по дальности (x). По умолчанию 1 или вычисляется, если задан auto_looks."
              },
              "azimuth_looks": {
                "label": "Луков по азимуту",
                "description": "Число взглядов по азимуту (y). По умолчанию 1 или вычисляется, если задан auto_looks."
              },
              "auto_looks": {
                "label": "Автоматические луки",
                "description": "Если true (по умолчанию) и число взглядов явно не задано, вычислять его из соотношения размеров пикселя, чтобы выходные наземные пиксели были примерно квадратными."
              },
              "output_units": {
                "label": "Выходные единицы",
                "description": "amplitude, intensity (по умолчанию) или db."
              },
              "statistic": {
                "label": "Статистика",
                "description": "mean (по умолчанию) или median; median устойчивее там, где в окне взгляда преобладают сильные отражатели."
              }
            }
          },
          "multipatch_footprint": {
            "name": "Контур мультипатча",
            "description": "Проецирует 3D-объекты мультипатча на плоскость XY и сливает их в 2D-полигоны контуров — по одному на объект или на значение поля группировки (ArcGIS Multipatch Footprint). layer_footprint_vector возвращает один прямоугольник экстента для всего слоя, а не контуры отдельных объектов, поэтому сейчас нет способа передать результаты buffer_3d / voxel_isosurface / импортированные тела зданий в конвейер regularize_building_footprints.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "3D-объекты multipatch (MultiPolygon в виде треугольной сетки с Z)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходные полигональные 2D-контуры. Если не указан, сохраняется в памяти."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Необязательное поле, значения которого объединяют контуры (по одному выходному полигону на каждое отдельное значение). По умолчанию: по одному выходному объекту на каждый входной."
              },
              "simplify_tolerance": {
                "label": "Допуск упрощения",
                "description": "Необязательный допуск Douglas-Peucker (в единицах CRS), применяемый к объединённому контуру. По умолчанию не задан, чтобы исходный контур сохранялся для regularize_building_footprints."
              }
            }
          },
          "multipatch_to_mesh": {
            "name": "Мультипатч в сетку",
            "description": "Экспортирует геометрию мультипатчей и 3D-тел в OBJ или glTF 2.0 / GLB для любого 3D- или веб-просмотрщика (ArcGIS Multipatch To Collada). Набор union_3d / difference_3d / enclose_multipatch / voxel_isosurface вообще не имел пути экспорта — в реестре не было ни одного формата сеток, — поэтому 3D-результаты мог прочитать только этот каталог.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Слой multipatch / 3D-полигонов."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла .glb, .gltf или .obj. Расширение определяет формат, если не задан параметр 'format'."
              },
              "format": {
                "label": "Формат",
                "description": "'glb' (по умолчанию для .glb), 'gltf' (JSON со встроенным буфером base64) или 'obj'. По умолчанию определяется расширением выходного файла."
              },
              "origin": {
                "label": "Начало координат",
                "description": "Перенос локального начала координат: 'centroid' (по умолчанию), 'min_corner' или 'none'. Необходим для точности — координаты glTF являются 32-битными числами с плавающей точкой."
              },
              "y_up": {
                "label": "Y вверх",
                "description": "Переходить к соглашению glTF Y-вверх от геопространственного Z-вверх (по умолчанию true для glTF/GLB, false для OBJ)."
              },
              "name_field": {
                "label": "Поле имени",
                "description": "Атрибут, задающий имя сетки каждого объекта в выходных данных."
              }
            }
          },
          "multiple_ring_buffer": {
            "name": "Многокольцевой буфер",
            "description": "Строит буферы объектов по списку расстояний в виде концентрических полос — вложенных дисков или неперекрывающихся колец, — при необходимости сливая их по каждому расстоянию и сохраняя расстояние полосы как атрибут.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки, линии или полигоны), формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "distances": {
                "label": "Расстояния",
                "description": "Список расстояний буферизации в единицах CRS, разделённых запятыми, например \"100,250,500\". Сортируется по возрастанию; дубликаты и неположительные значения отбрасываются."
              },
              "ring_type": {
                "label": "Тип колец",
                "description": "'rings' (по умолчанию) — непересекающиеся кольцевые зоны, или 'disks' — вложенные накопительные буферы."
              },
              "dissolve": {
                "label": "Слияние",
                "description": "'none' (по умолчанию) сохраняет по одной зоне на каждый исходный объект; 'per_ring' объединяет зоны всех объектов на каждом расстоянии в один полигон."
              },
              "distance_field": {
                "label": "Поле расстояния",
                "description": "Имя выходного атрибута, содержащего расстояние каждой зоны. По умолчанию 'distance'."
              }
            }
          },
          "multitemporal_coherence": {
            "name": "Многовременная когерентность",
            "description": "Вычисляет интерферометрическую когерентность по стеку совмещённых снимков SAR и сводит её к среднему/мин./макс./ст. откл. и уклону временной декорреляции, при необходимости выводя куб когерентности по парам (ArcGIS Generate Multitemporal Coherence). sar_coherence обрабатывает ровно две сцены, поэтому отбор постоянных рассеивателей и определение времени изменения когерентности были недоступны.",
            "params": {
              "inputs": {
                "label": "Входные данные",
                "description": "Совмещённые комплексные растры SLC, разделённые запятыми или точками с запятой (по два канала: сначала I, затем Q). Не менее двух."
              },
              "dates": {
                "label": "Даты",
                "description": "Необязательные моменты съёмки, по одному на каждый вход, в виде чисел в согласованных единицах (например, в сутках). Требуются для статистики 'decorrelation_slope'."
              },
              "pairs": {
                "label": "Пары",
                "description": "'consecutive' (по умолчанию, i с i+1), 'all' (все неупорядоченные пары) или 'reference' (каждая сцена относительно reference_index)."
              },
              "reference_index": {
                "label": "Опорный индекс",
                "description": "Индекс опорной сцены (с 0) для pairs='reference' (по умолчанию 0)."
              },
              "window_size": {
                "label": "Размер окна",
                "description": "Окно оценивания в ячейках; одно значение или 'range,azimuth' (по умолчанию 5). Чётные значения округляются вверх до нечётных."
              },
              "bias_correction": {
                "label": "Коррекция смещения",
                "description": "Применять поправку на смещение когерентности при малой выборке (по умолчанию true)."
              },
              "statistics": {
                "label": "Статистика",
                "description": "Через запятую: 'mean' (по умолчанию), 'min', 'max', 'std', 'decorrelation_slope'. По одному выходному каналу на каждую статистику, в этом порядке."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр, по одному каналу на каждую запрошенную статистику. Если не указан, сохраняется в памяти."
              },
              "output_pairs": {
                "label": "Выход пар",
                "description": "Необязательный растр для куба когерентности по парам, по одному каналу на каждую пару."
              }
            }
          },
          "multivariate_clustering": {
            "name": "Многомерная кластеризация",
            "description": "Кластеризует векторные объекты по сходству их стандартизированных атрибутивных значений (k-средних с затравкой или k-медоидов), автоматически выбирая число кластеров по псевдо-F Калински-Харабаша, если оно не задано, подобно ArcGIS Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой, формат определяется автоматически (или дескриптор в памяти)."
              },
              "fields": {
                "label": "Поля",
                "description": "Числовые поля анализа, разделённые запятыми (пространство атрибутов для кластеризации)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (копия входного слоя с cluster_id/silhouette). Если не указан, сохраняется в памяти."
              },
              "num_clusters": {
                "label": "Число кластеров",
                "description": "Число кластеров k. Не указывайте или передайте 0, чтобы автоматически оценить k = 2..15 по псевдо-F Calinski-Harabasz."
              },
              "method": {
                "label": "Метод",
                "description": "Метод кластеризации: 'kmeans' (по умолчанию) или 'kmedoids' (PAM; подходит для меньшего числа объектов)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для детерминированной инициализации k-means++ / медоидов (по умолчанию 1)."
              }
            }
          },
          "near_3d": {
            "name": "Ближайший 3D",
            "description": "Находит ближайший объект по истинному 3D-расстоянию, сообщая расстояние, ближайшее местоположение, углы и смещения по каждой оси, подобно ArcGIS Near 3D.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов (3D-вершины; отсутствующая Z считается равной 0)."
              },
              "near_features": {
                "label": "Ближайшие объекты",
                "description": "Список слоёв для поиска, разделённых запятыми. Не указывайте, чтобы выполнить самосоединение входного слоя."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Учитывать только ближайшие объекты в пределах этого 3D-расстояния (в единицах карты). Без ограничения, если не указано."
              },
              "location": {
                "label": "Местоположение",
                "description": "Добавлять координаты ближайшей точки как near_x / near_y / near_z (по умолчанию false)."
              },
              "angle": {
                "label": "Угол",
                "description": "Добавлять горизонтальный азимут (near_bearing, в градусах от севера) и вертикальный угол (near_vert_angle, в градусах от горизонтали) до ближайшей точки (по умолчанию false)."
              },
              "delta": {
                "label": "Дельта",
                "description": "Добавлять смещения по осям near_dx / near_dy / near_dz (по умолчанию false)."
              }
            }
          },
          "neighborhood_summary_statistics": {
            "name": "Сводная статистика окрестности",
            "description": "Для каждого объекта сводит выбранные числовые поля по его соседям (k ближайших, в пределах расстояния или смежность по общему ребру), добавляя <field>_nbr_mean/median/std/min/max/sum и число соседей, подобно ArcGIS Neighborhood Summary Statistics.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки, линии или полигоны)."
              },
              "fields": {
                "label": "Поля",
                "description": "Числовые поля для расчёта статистик по соседям, разделённые запятыми."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (копия входного слоя + столбцы статистик по соседям). Если не указан, сохраняется в памяти."
              },
              "neighborhood": {
                "label": "Окрестность",
                "description": "'knn' (по умолчанию), 'distance_band' или 'contiguity' (полигоны с общим ребром)."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "k для knn (по умолчанию 8)."
              },
              "distance": {
                "label": "Расстояние",
                "description": "Расстояние полосы для distance_band (в единицах карты)."
              },
              "weights": {
                "label": "Веса",
                "description": "'uniform' (по умолчанию) или 'inverse_distance' (взвешивает среднее и стандартное отклонение)."
              }
            }
          },
          "non_maximum_suppression": {
            "name": "Подавление немаксимумов",
            "description": "Сохраняет обнаружение с наибольшей уверенностью в каждом кластере перекрытий и отбрасывает полигоны с меньшей оценкой, у которых отношение пересечения к объединению превышает порог (подобно ArcGIS Non Maximum Suppression) — дедупликатор по оценке для результатов обнаружения объектов/OBIA, которого не дают count_overlapping_features (считает, сохраняет все), resolve_building_conflicts (смещает) и find_identical (только точные совпадения).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные полигональные обнаружения (могут перекрываться)."
              },
              "confidence_score_field": {
                "label": "Поле оценки уверенности",
                "description": "Числовое поле с достоверностью/оценкой каждого обнаружения; побеждает большее значение."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных полигонов с сохранившимися обнаружениями. Если не указан, сохраняется в памяти."
              },
              "max_overlap_ratio": {
                "label": "Макс. доля перекрытия",
                "description": "Значение IoU, выше которого обнаружение с меньшей оценкой подавляется (0-1, по умолчанию 0.5)."
              },
              "class_value_field": {
                "label": "Поле значения класса",
                "description": "Необязательное поле; подавлять друг друга могут только обнаружения одного класса."
              }
            }
          },
          "observer_points": {
            "name": "Точки наблюдения",
            "description": "Определяет, какие из до 32 наблюдателей видят каждую ячейку, в виде битовой маски по наблюдателям, и записывает растр высоты над уровнем земли, показывающий, на сколько нужно поднять цель, чтобы она стала видимой (ArcGIS Observer Points / Viewshed 2 в режиме OBSERVERS). Встроенный viewshed возвращает только число видимых станций, из которого нельзя получить ни один из этих ответов: значение 1 не говорит, какая вышка покрывает участок, а значение 0 не отличает нехватку двух метров от нахождения за горой.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр высот (DEM или DSM)."
              },
              "observers": {
                "label": "Наблюдатели",
                "description": "Точечный слой позиций наблюдателей, не более 32."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр видимости: битовая маска наблюдателей либо количество при analysis_type 'frequency'. Если не указан, сохраняется в памяти."
              },
              "output_agl": {
                "label": "Выход AGL",
                "description": "Выходной растр высоты над землёй: высота, на которую нужно поднять цель, чтобы она стала видимой. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "output_table": {
                "label": "Выходная таблица",
                "description": "Выходная таблица с одной строкой на каждого наблюдателя, числом видимых ячеек и площадью. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "analysis_type": {
                "label": "Тип анализа",
                "description": "'observers' (по умолчанию; битовая маска) или 'frequency' (количество, как в стандартном инструменте viewshed)."
              },
              "observer_offset": {
                "label": "Смещение наблюдателя",
                "description": "Высота каждого наблюдателя над поверхностью, в единицах z (по умолчанию 2.0)."
              },
              "observer_offset_field": {
                "label": "Поле смещения наблюдателя",
                "description": "Атрибут с высотой для каждого наблюдателя, переопределяющий 'observer_offset'."
              },
              "target_offset": {
                "label": "Смещение цели",
                "description": "Высота цели над поверхностью, в единицах z (по умолчанию 0.0)."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Игнорировать ячейки, удалённые от наблюдателя больше чем на это расстояние, в единицах карты. По умолчанию без ограничения."
              },
              "curvature": {
                "label": "Кривизна",
                "description": "Применять поправку на кривизну Земли и рефракцию (по умолчанию false, то есть плоская земля)."
              },
              "refractivity_coefficient": {
                "label": "Коэффициент рефракции",
                "description": "Коэффициент атмосферной рефракции, используемый с 'curvature' (по умолчанию 0.13)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала растра высот (с 1) (по умолчанию 1)."
              }
            }
          },
          "optics_clustering": {
            "name": "Кластеризация OPTICS",
            "description": "Многомасштабная кластеризация на основе плотности методом OPTICS (подобно варианту OPTICS в ArcGIS Density-based Clustering): строит упорядочение по достижимости и извлекает кластеры разной плотности методом ξ-крутизны — многомасштабный член троицы DBSCAN/HDBSCAN/OPTICS, которого не покрывают авторские dbscan и hdbscan.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (проекционная CRS; расстояния в её единицах)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (копия входа с полями кластеров). Если не указан, сохраняется в памяти."
              },
              "min_features_cluster": {
                "label": "Мин. объектов в кластере",
                "description": "Минимальное число точек для оценки плотности по основному расстоянию и для наименьшего кластера (>= 2). По умолчанию 5."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Необязательное максимальное расстояние достижимости (max epsilon). По умолчанию: без ограничения (все масштабы)."
              },
              "cluster_sensitivity": {
                "label": "Чувствительность кластеризации",
                "description": "0-100; большее значение выявляет больше более плотных кластеров. Соответствует xi = 1 - sensitivity/100. По умолчанию 95 (xi = 0.05)."
              }
            }
          },
          "optimal_corridor_connections": {
            "name": "Оптимальные соединения коридоров",
            "description": "Вычисляет сеть полигонов коридоров фиксированной ширины с наименьшей стоимостью, оптимально соединяющую все входные регионы по поверхности стоимости, а также осевые линии коридоров. В отличие от cost_connectivity (линии нулевой ширины) или corridor (поверхность стоимости для одной пары), выдаёт готовые полигоны коридоров для всей сети регионов. Подобно ArcGIS Optimal Corridor Connections.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Полигональные объекты регионов, которые нужно соединить."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигона коридора. Если не указан, сохраняется в памяти."
              },
              "cost_raster": {
                "label": "Растр стоимости",
                "description": "Необязательная поверхность стоимости. Без неё стоимость считается однородной (евклидово расстояние)."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Необязательные полигональные объекты, считающиеся непроходимыми."
              },
              "corridor_width": {
                "label": "Ширина коридора",
                "description": "Ширина коридора в единицах карты (по умолчанию: 10 ячеек)."
              },
              "output_lines": {
                "label": "Выходные линии",
                "description": "Необязательный путь для осевых линий коридоров."
              },
              "neighbor_option": {
                "label": "Вариант соседства",
                "description": "'spanning_tree' (по умолчанию) оставляет только коридоры, необходимые для соединения всех регионов; 'all_pairs' создаёт коридор для каждой пары регионов."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки анализа, если растр стоимости не задан (по умолчанию: экстент регионов / 200)."
              }
            }
          },
          "optimal_interpolation": {
            "name": "Оптимальная интерполяция",
            "description": "Корректирует фоновый растр по точечным наблюдениям с помощью шага анализа оптимальной интерполяции / ассимиляции данных x_a = x_b + B Hᵀ (H B Hᵀ + R)⁻¹ (y − H x_b), используя гауссову пространственную корреляцию с заданной длиной корреляции и дисперсии ошибок наблюдений/фона (подобно Optimal Interpolation в ArcGIS). В отличие от IDW/кригинга/EBK, которые интерполируют только по точкам, этот инструмент смешивает априорное сеточное поле с наблюдениями и может выводить растр дисперсии ошибки анализа.",
            "params": {
              "background": {
                "label": "Фон",
                "description": "Фоновое (априорное) растровое поле, подлежащее коррекции."
              },
              "observations": {
                "label": "Наблюдения",
                "description": "Точечный слой наблюдений."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле слоя наблюдений, содержащее наблюдённое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной скорректированный (аналитический) растр. Если не указан, сохраняется в памяти."
              },
              "correlation_length": {
                "label": "Длина корреляции",
                "description": "Длина пространственной корреляции L в единицах CRS (гауссова). По умолчанию: 5% от большей стороны фонового растра."
              },
              "background_error_variance": {
                "label": "Дисперсия ошибки фона",
                "description": "Дисперсия ошибки фона σ_b² (по умолчанию 1.0). Больше => больше доверия наблюдениям."
              },
              "obs_error_variance": {
                "label": "Дисперсия ошибки наблюдений",
                "description": "Дисперсия ошибки наблюдений σ_o² (по умолчанию 1.0), используется, когда поле ошибки для каждой точки не задано. Больше => больше доверия фону."
              },
              "error_field": {
                "label": "Поле ошибки",
                "description": "Необязательное поле слоя наблюдений с дисперсией ошибки каждой точки (переопределяет obs_error_variance там, где оно задано и > 0)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер корректируемого канала фонового растра (с 1) (по умолчанию 1)."
              },
              "max_obs": {
                "label": "Макс. наблюдений",
                "description": "Максимальное число ближайших наблюдений, используемых при локальном решении для каждой ячейки (по умолчанию 50, диапазон 1..=200)."
              },
              "analysis_error": {
                "label": "Ошибка анализа",
                "description": "Необязательный выходной растр дисперсии ошибки анализа σ_a² (≤ σ_b²)."
              }
            }
          },
          "optimal_path_as_line": {
            "name": "Оптимальный путь как линия",
            "description": "Трассирует растр обратной связи стоимости от каждого назначения обратно к его источнику и выдаёт маршруты наименьшей стоимости в виде полилиний (ArcGIS Optimal Path As Line / Cost Path As Polyline). cost_pathway лишь отмечает маршрут ячейками растра, а cost_connectivity охватывает только случай сети из N узлов, поэтому обычный путь от источника к назначению не имел векторной формы.",
            "params": {
              "destination": {
                "label": "Назначение",
                "description": "Пункты назначения, от которых выполняется трассировка: растр (любая ненулевая ячейка, отличная от NoData) или точечный/мультиточечный векторный слой."
              },
              "backlink": {
                "label": "Обратная связь",
                "description": "Растр направлений обратных связей из cost_back_link (0 = источник, 1-8 = направление к источнику, 1 = восток, далее против часовой стрелки)."
              },
              "accumulation": {
                "label": "Аккумуляция",
                "description": "Необязательный растр накопленной стоимости (out_distance инструмента cost_back_link). Задаёт полную стоимость каждого пути и требуется для path_type 'each_zone' и 'best_single'."
              },
              "path_type": {
                "label": "Тип пути",
                "description": "Одно из значений: 'each_cell' (по умолчанию, один путь на каждую ячейку назначения), 'each_zone' (один путь на каждую зону назначения, из её самой дешёвой ячейки), 'best_single' (единственный самый дешёвый путь)."
              },
              "zone_field": {
                "label": "Поле зоны",
                "description": "Атрибут с идентификатором зоны для векторных пунктов назначения при path_type 'each_zone'. Для растровых пунктов назначения зоной служит значение ячейки."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полилинейный слой. Если не указан, сохраняется в памяти."
              }
            }
          },
          "optimized_hot_spot_analysis": {
            "name": "Оптимизированный анализ горячих точек",
            "description": "Автоматически агрегирует инциденты, автоматически выбирает полосу расстояний анализа, запускает Getis-Ord Gi* и сообщает бин горячих/холодных точек с коррекцией FDR (подобно ArcGIS Optimized Hot Spot Analysis) — обёртка рабочего процесса, которой нет у встроенного getis_ord_gi_star.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов (точки инцидентов или объекты с полем анализа)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной точечный слой с результатами Gi*. Если не указан, сохраняется в памяти."
              },
              "analysis_field": {
                "label": "Поле анализа",
                "description": "Числовое поле для анализа (взвешенное, без агрегации). Не указывайте, чтобы подсчитывать инциденты."
              },
              "aggregation": {
                "label": "Агрегирование",
                "description": "Агрегация инцидентов, когда analysis_field не задано: 'fishnet' (подсчёт по сетке; по умолчанию) или 'snap' (объединение совпадающих)."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки агрегации/прилипания в единицах CRS. По умолчанию: большая сторона экстента / 30."
              },
              "distance_band": {
                "label": "Полоса расстояний",
                "description": "Расстояние полосы анализа в единицах CRS. По умолчанию: подбирается автоматически по пиковой интенсивности кластеризации."
              }
            }
          },
          "optimized_outlier_analysis": {
            "name": "Оптимизированный анализ выбросов",
            "description": "Автоматически агрегирует инциденты, автоматически выбирает полосу расстояний анализа, запускает локальный индекс Морана I Анселина и сообщает типы кластеров/выбросов с коррекцией FDR (HH/LL/HL/LH) — подобно ArcGIS Optimized Outlier Analysis; невременная обёртка локального индекса Морана, которой не дают встроенный local_morans_i_lisa и пространственно-временной local_outlier_analysis.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов (точки инцидентов или объекты с полем анализа)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной точечный слой с результатами локального индекса Морана. Если не указан, сохраняется в памяти."
              },
              "analysis_field": {
                "label": "Поле анализа",
                "description": "Числовое поле для анализа (взвешенное, без агрегации). Не указывайте, чтобы подсчитывать инциденты."
              },
              "aggregation": {
                "label": "Агрегирование",
                "description": "Агрегация инцидентов, когда analysis_field не задано: 'fishnet' (подсчёт по сетке; по умолчанию) или 'snap' (объединение совпадающих)."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер ячейки агрегации/прилипания в единицах CRS. По умолчанию: большая сторона экстента / 30."
              },
              "distance_band": {
                "label": "Полоса расстояний",
                "description": "Расстояние полосы анализа в единицах CRS. По умолчанию: подбирается автоматически по пиковой интенсивности кластеризации."
              },
              "fdr_alpha": {
                "label": "Альфа FDR",
                "description": "Уровень ложных обнаружений (FDR) для значимости COType (по умолчанию 0.05)."
              }
            }
          },
          "ordinary_cokriging": {
            "name": "Ординарный кокригинг",
            "description": "Выполняет многомерную пространственную интерполяцию с использованием вспомогательных переменных для улучшения предсказаний основной переменной. Идеально, когда основные данные разрежены, но коррелирующие вторичные данные обильны.",
            "params": {
              "primary_points": {
                "label": "Основные точки",
                "description": "Векторный слой с обучающими точками основной переменной"
              },
              "primary_field": {
                "label": "Основное поле",
                "description": "Поле со значениями основной переменной"
              },
              "auxiliary_inputs": {
                "label": "Вспомогательные входы",
                "description": "Список путей к файлам вспомогательных переменных, разделённых запятыми"
              },
              "auxiliary_fields": {
                "label": "Вспомогательные поля",
                "description": "Имена полей вспомогательных переменных, разделённые запятыми (пусто для растров)"
              },
              "template_raster": {
                "label": "Растр-шаблон",
                "description": "Растровый шаблон, задающий выходную сетку и CRS"
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра кокригинга"
              },
              "output_variance": {
                "label": "Выход дисперсии",
                "description": "Необязательный путь выходного растра дисперсии кригинга"
              },
              "neighborhood_size": {
                "label": "Размер окрестности",
                "description": "Число ближайших соседей для локального кокригинга (по умолчанию: все)"
              }
            }
          },
          "pairwise_comparison_weights": {
            "name": "Веса парного сравнения",
            "description": "Выводит веса критериев из матрицы парных сравнений AHP (шкала Саати 1-9) как нормированный главный собственный вектор с проверкой согласованности (lambda_max, индекс согласованности, отношение согласованности) — подобно ArcGIS Assign Weights By Pairwise Comparison.",
            "params": {
              "matrix": {
                "label": "Матрица",
                "description": "Обратно симметричная матрица сравнений n x n в виде двумерного массива JSON, например [[1,3,5],[0.333,1,2],[0.2,0.5,1]]. Укажите этот параметр или `input`."
              },
              "input": {
                "label": "Вход",
                "description": "Файл CSV с матрицей сравнений (простые числовые строки либо с заголовком и начальным столбцом имён). Укажите этот параметр или `matrix`."
              },
              "criteria": {
                "label": "Критерии",
                "description": "Имена критериев, разделённые запятыми (должны соответствовать порядку в матрице). Переопределяют метки из CSV; по умолчанию C1..Cn."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы — CSV (расширение .csv) или векторная таблица без геометрии (критерий, вес, ранг). Если не указан, сохраняется в памяти."
              }
            }
          },
          "path_distance": {
            "name": "Путевое расстояние",
            "description": "Накопленное расстояние наименьшей стоимости, где каждый шаг оплачивается истинным 3D-расстоянием по поверхности (из DEM), умноженным на зависящий от уклона вертикальный фактор (функция ходьбы Тоблера, линейный, бинарный) и на сопротивление, подобно ArcGIS Path Distance.",
            "params": {
              "source": {
                "label": "Источник",
                "description": "Растр источников; ячейки с положительными значениями, отличными от NoData, являются началами (накопленная стоимость 0)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр накопленной стоимости. Если не указан, сохраняется в памяти."
              },
              "cost": {
                "label": "Стоимость",
                "description": "Необязательный растр трения/стоимости прохождения (по умолчанию однородный 1)."
              },
              "surface": {
                "label": "Поверхность",
                "description": "Необязательный растр высот (DEM); включает расчёт расстояния по 3D-поверхности и вертикальных коэффициентов на основе уклона."
              },
              "vertical_factor": {
                "label": "Вертикальный фактор",
                "description": "'tobler' (по умолчанию), 'linear', 'sym_linear', 'inverse_linear' или 'binary'."
              },
              "slope_factor": {
                "label": "Фактор уклона",
                "description": "Коэффициент штрафа за уклон для линейных факторов (по умолчанию 1)."
              },
              "zero_factor": {
                "label": "Нулевой фактор",
                "description": "Минимальное (для спуска) нижнее значение вертикального коэффициента для linear/inverse_linear (по умолчанию 0.1)."
              },
              "max_slope": {
                "label": "Макс. уклон",
                "description": "Для 'binary': уклоны круче указанного числа градусов считаются непроходимыми (по умолчанию 30)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала для всех растров (с 1) (по умолчанию 1)."
              }
            }
          },
          "percentile_contours": {
            "name": "Перцентильные изолинии",
            "description": "Выдаёт вложенные полигоны, охватывающие самые экстремальные ячейки поверхности, с порогом по перцентилю значений или по перцентилю накопленной массы (объёма).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр непрерывной поверхности (плотность, пригодность, высота)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного полигонального вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "percentiles": {
                "label": "Перцентили",
                "description": "Процентили в диапазоне [0,100], разделённые запятыми (например, \"50,90,95\"). По умолчанию \"90\"."
              },
              "mode": {
                "label": "Режим",
                "description": "'value' (по умолчанию): ячейки со значением на уровне p-го процентиля и выше. 'volume': ячейки с наибольшими значениями, дающие верхние (100-p)% суммарного значения."
              },
              "ignore_negative": {
                "label": "Игнорировать отрицательные",
                "description": "Исключить отрицательные значения ячеек из ранжирования и выходных данных. По умолчанию false."
              },
              "smooth": {
                "label": "Сглаживание",
                "description": "Упростить полигоны по границам ячеек методом Douglas-Peucker (допуск ~1.5 ячейки), чтобы сгладить ступенчатость. По умолчанию false."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "pivot_table": {
            "name": "Сводная таблица",
            "description": "Преобразует длинную таблицу атрибутов в широкую: одна выходная строка на уникальную комбинацию полей идентичности и один столбец на каждое уникальное значение поля сводки, заполняемый из поля значений. Подобно ArcGIS Pivot Table.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой или атрибутивная таблица в длинном формате."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "fields": {
                "label": "Поля",
                "description": "Имена полей, разделённые запятыми или точками с запятой, определяющие выходную строку; переносятся без изменений."
              },
              "pivot_field": {
                "label": "Поле сводки",
                "description": "Поле, отдельные значения которого становятся новыми столбцами."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Поле, из которого берутся значения ячеек."
              },
              "aggregate": {
                "label": "Агрегировать",
                "description": "Применяется, когда одной ячейке строки/столбца соответствует несколько исходных записей: 'first' (по умолчанию), 'sum', 'mean', 'min', 'max', 'count'."
              }
            }
          },
          "pmtiles_extract": {
            "name": "Извлечение из PMTiles",
            "description": "Извлекает подмножество архива PMTiles по ограничивающему прямоугольнику/зуму в новый архив (например, офлайн-базовую карту из планетарной сборки Protomaps).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного файла .pmtiles."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла .pmtiles."
              },
              "bbox": {
                "label": "Ограничивающий прямоугольник",
                "description": "Ограничивающий прямоугольник WGS84 в виде 'min_lon,min_lat,max_lon,max_lat'."
              },
              "min_zoom": {
                "label": "Мин. зум",
                "description": "Наименьший включаемый уровень масштабирования (по умолчанию 0, чтобы карта оставалась пригодной при отдалении)."
              },
              "max_zoom": {
                "label": "Макс. зум",
                "description": "Наибольший включаемый уровень масштабирования (по умолчанию: максимальный уровень исходного архива)."
              },
              "max_tiles": {
                "label": "Макс. тайлов",
                "description": "Прервать выполнение, если выборка охватывает больше тайлов, чем указано (по умолчанию 2000000)."
              },
              "url": {
                "label": "URL",
                "description": "URL PMTiles по HTTP(S). Укажите либо url, либо input; источники HTTP используют запросы по диапазону байтов (хост должен разрешать кросс-доменные запросы Range)."
              },
              "bbox_crs": {
                "label": "CRS ограничивающего прямоугольника",
                "description": "Код EPSG координат ограничивающего прямоугольника. По умолчанию 4326 (WGS84, долгота/широта); другие CRS перепроецируются в 4326."
              }
            }
          },
          "point_statistics": {
            "name": "Статистика точек",
            "description": "Растеризует статистику скользящего окна по атрибуту точечных объектов: для каждой выходной ячейки окрестность (круг или прямоугольник) собирает значения выбранного числового поля из точек внутри неё и сводит их к mean/majority/maximum/median/minimum/minority/range/std/sum/variety. Подобно ArcGIS Point Statistics; дополняет только плотностные line_density/heat_map и только векторный neighborhood_summary_statistics.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (Point / MultiPoint)."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое атрибутивное поле для расчёта статистики."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "statistic": {
                "label": "Статистика",
                "description": "Статистика по окрестности: mean (по умолчанию), majority, maximum, median, minimum, minority, range, std, sum или variety."
              },
              "neighborhood": {
                "label": "Окрестность",
                "description": "Форма окрестности: 'circle' (по умолчанию, использует 'radius') или 'rectangle' (квадрат со стороной 2*radius)."
              },
              "radius": {
                "label": "Радиус",
                "description": "Радиус окрестности / половина стороны прямоугольника (метры для географической CRS, иначе единицы CRS). По умолчанию: меньшая сторона экстента / 20."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки (в тех же единицах, что и радиус). По умолчанию: радиус / 5."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Переопределить код EPSG входной CRS (например, когда слой не имеет метки). Значение 4326 включает проекцию в метры."
              }
            }
          },
          "points_to_line": {
            "name": "Точки в линию",
            "description": "Строит полилинейные объекты из точек: одна линия на каждое уникальное значение line_field, вершины упорядочены по sort_field, с необязательным флагом замыкания линии.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного точечного векторного файла (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "line_field": {
                "label": "Поле линии",
                "description": "Атрибут, отдельные значения которого разделяют точки на отдельные линии (по одной полилинии на значение). Если не указан, все точки образуют одну линию."
              },
              "sort_field": {
                "label": "Поле сортировки",
                "description": "Атрибут, задающий порядок вершин внутри каждой линии. Числовые значения сортируются численно, текстовые — лексикографически. Если не указан, используется порядок входных объектов."
              },
              "close_line": {
                "label": "Замыкать линию",
                "description": "Добавлять первую вершину в конец каждой линии, замыкая её в кольцо. По умолчанию false."
              }
            }
          },
          "points_to_path": {
            "name": "Точки в путь",
            "description": "Соединяет точки в полилинейные объекты, упорядоченные по полю и (при необходимости) сгруппированные в один путь на значение, с необязательной естественной сортировкой и замыканием пути.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного точечного векторного файла (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "order_field": {
                "label": "Поле порядка",
                "description": "Атрибут, задающий порядок соединения точек внутри каждого пути. Числовые значения сортируются численно, текстовые — лексикографически. Если не указан, используется порядок входных объектов."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Атрибут, разделяющий точки на отдельные пути (по одной линии на каждое отдельное значение). Если не указан, все точки образуют один путь."
              },
              "natural_sort": {
                "label": "Естественная сортировка",
                "description": "Сортировать текстовые значения порядка естественным образом, чтобы 'a9' шло перед 'a10'. По умолчанию false."
              },
              "close_path": {
                "label": "Замыкать путь",
                "description": "Добавлять первую вершину в конец каждого пути, замыкая его в кольцо. По умолчанию false."
              }
            }
          },
          "polygon_neighbors": {
            "name": "Соседи полигонов",
            "description": "Строит таблицу смежности (соприкосновения) полигонов: пары соседей с длиной их общей границы и числом касаний в точке, подобно ArcGIS Polygon Neighbors.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы — CSV (расширение .csv) или векторная таблица без геометрии. Если не указан, сохраняется в памяти."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Поле, идентифицирующее каждый полигон в таблице. По умолчанию: индекс объекта."
              },
              "both_sides": {
                "label": "Обе стороны",
                "description": "Выводить каждую пару соседей дважды (src→nbr и nbr→src). По умолчанию false (один раз на пару)."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Квантовать вершины на сетку такого размера (в единицах CRS) перед сопоставлением границ. По умолчанию 0 (точные координаты)."
              }
            }
          },
          "polygon_volume": {
            "name": "Объём полигона",
            "description": "Объём и площадь 3D-поверхности растра поверхности выше/ниже высоты опорной плоскости для каждого полигона, подобно ArcGIS Polygon Volume — зональный аналог surface_volume.",
            "params": {
              "surface": {
                "label": "Поверхность",
                "description": "Входной растр поверхности высот."
              },
              "input": {
                "label": "Вход",
                "description": "Полигональный векторный слой (зоны)."
              },
              "height_field": {
                "label": "Поле высоты",
                "description": "Поле атрибутов, задающее высоту опорной плоскости каждого полигона."
              },
              "direction": {
                "label": "Направление",
                "description": "С какой стороны каждой плоскости выполняется интегрирование: 'above' (по умолчанию), 'below' или 'both'."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из поверхности (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              }
            }
          },
          "porous_puff": {
            "name": "Пористый выброс",
            "description": "Аналитическая адвекция-дисперсия мгновенного выброса загрязнителя через грунтовые воды (подобно ArcGIS Porous Puff): перемещает центр выброса от точки сброса вдоль поля скорости Дарси (магнитуда+направление, как выдаёт darcy_flow), затем вычисляет замкнутую формулу 2D-гауссовой концентрации выброса в координатах, выровненных по пути, с учётом пористости, мощности, замедления и распада первого порядка.",
            "params": {
              "magnitude": {
                "label": "Магнитуда",
                "description": "Растр модуля скорости Дарси, создаваемый параметром 'output' инструмента darcy_flow. Размер ячейки и экстент берутся из этого растра."
              },
              "direction": {
                "label": "Направление",
                "description": "Растр направления потока Дарси (азимут в градусах от севера, по часовой стрелке, вниз по градиенту), создаваемый параметром 'direction' инструмента darcy_flow. Должен быть совмещён с 'magnitude'."
              },
              "x": {
                "label": "X",
                "description": "Координата X точки выпуска (в единицах карты, в той же CRS, что и растры скорости)."
              },
              "y": {
                "label": "Y",
                "description": "Координата Y точки выпуска (в единицах карты)."
              },
              "mass": {
                "label": "Масса",
                "description": "Масса выпущенного загрязнителя (должна быть положительной)."
              },
              "porosity": {
                "label": "Пористость",
                "description": "Эффективная пористость: либо числовая константа в (0, 1], либо путь к растру, совмещённому с 'magnitude'."
              },
              "thickness": {
                "label": "Мощность",
                "description": "Мощность водоносного горизонта: либо положительная числовая константа, либо путь к растру, совмещённому с 'magnitude'."
              },
              "dispersivity_long": {
                "label": "Продольная дисперсивность",
                "description": "Продольная дисперсивность (в единицах длины; должна быть положительной)."
              },
              "dispersivity_trans": {
                "label": "Поперечная дисперсивность",
                "description": "Поперечная дисперсивность (в единицах длины; должна быть положительной)."
              },
              "retardation": {
                "label": "Замедление",
                "description": "Коэффициент задержки (по умолчанию 1, должен быть >= 1)."
              },
              "decay": {
                "label": "Распад",
                "description": "Константа распада первого порядка (по умолчанию 0, должна быть >= 0; в тех же единицах времени, что и 'time')."
              },
              "time": {
                "label": "Время",
                "description": "Список из одного или нескольких положительных значений прошедшего времени через запятую. Последнее значение записывается в 'output'; все значения (включая последнее) отражаются в выходе 'time_series'."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра концентрации для последнего значения в 'time'. Если не указан, сохраняется в памяти."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из растров модуля/направления (по умолчанию 1)."
              },
              "step": {
                "label": "Шаг",
                "description": "Длина шага продвижения центра облака в единицах CRS (по умолчанию: размер ячейки растра модуля)."
              },
              "max_steps": {
                "label": "Макс. шагов",
                "description": "Максимальное число шагов продвижения на каждый запрошенный момент времени (по умолчанию 1000)."
              }
            }
          },
          "predict_using_trend_raster": {
            "name": "Предсказание по растру тренда",
            "description": "Вычисляет растры уклона/свободного члена, подобранные generate_trend_raster, в один или несколько моментов времени, создавая предсказанные поверхности, подобно ArcGIS Predict Using Trend Raster.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр наклона (тренда), записываемый инструментом generate_trend_raster."
              },
              "intercept": {
                "label": "Свободный член",
                "description": "Растр свободного члена, записываемый инструментом generate_trend_raster (его 'intercept_output'), совмещённый с растром наклона."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра для первого прогнозируемого момента времени. Если не указан, результаты сохраняются в памяти."
              },
              "times": {
                "label": "Моменты времени",
                "description": "Моменты времени для прогноза через запятую, в той же шкале, что использовалась при подгонке (например, '12,18,24'). Переопределяет start/end/interval."
              },
              "start": {
                "label": "Начало",
                "description": "Первый момент времени генерируемого диапазона (используется, когда 'times' не задан)."
              },
              "end": {
                "label": "Конец",
                "description": "Последний момент времени генерируемого диапазона (включительно; используется, когда 'times' не задан)."
              },
              "interval": {
                "label": "Интервал",
                "description": "Шаг между генерируемыми моментами времени (по умолчанию 1; используется, когда 'times' не задан)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), читаемого из каждого растра коэффициентов (по умолчанию 1)."
              }
            }
          },
          "presence_only_prediction": {
            "name": "Предсказание только по присутствию",
            "description": "Моделирование пригодности видов/местообитаний в стиле MaxEnt: подбирает L1-регуляризованную логистическую модель, противопоставляющую точки присутствия фоновой выборке с затравкой из объясняющих растров (разложение по линейному/квадратичному/шарнирному базису), затем предсказывает поверхность вероятности присутствия и отчёт о важности переменных — подобно ArcGIS Presence-only Prediction (MaxEnt).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой присутствия (наблюдённые находки)."
              },
              "explanatory": {
                "label": "Объясняющая",
                "description": "Список путей объясняющих растров через запятую (стек ковариат). Опрашивается в точках присутствия и фоновых точках; первый растр задаёт выходную сетку."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного растра вероятности присутствия. Если не указан, сохраняется в памяти."
              },
              "report": {
                "label": "Отчёт",
                "description": "Необязательный выходной путь для CSV-таблицы коэффициентов / важности переменных."
              },
              "features": {
                "label": "Признаки",
                "description": "Классы признаков базисного разложения через запятую: любые из 'linear', 'quadratic', 'hinge'. По умолчанию 'linear,quadratic'."
              },
              "background": {
                "label": "Фон",
                "description": "Число фоновых точек, выбираемых из стека растров. По умолчанию 1000 (ограничено числом действительных ячеек)."
              },
              "regularization": {
                "label": "Регуляризация",
                "description": "Сила L1-регуляризации (лассо) для стандартизованных признаков. Больше = проще модель. По умолчанию 0.01."
              },
              "hinge_knots": {
                "label": "Узлы шарнирных функций",
                "description": "Число внутренних узлов на каждую ковариату для шарнирных признаков (используется только при включённом 'hinge'). По умолчанию 10."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для детерминированной фоновой выборки (по умолчанию 1)."
              }
            }
          },
          "propagate_displacement": {
            "name": "Распространение смещения",
            "description": "Распространяет смещение, внесённое resolve_road_conflicts (или любым слоем двухточечных связей смещения), на близлежащие объекты, интерполируя разреженные связи в гладкое поле IDW: жёсткие объекты (здания, участки) получают единый усреднённый перенос, гибкие линии — повершинный изгиб, сглаженный по длине дуги, подобно ArcGIS Propagate Displacement.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой для корректировки (любого типа геометрии)."
              },
              "links": {
                "label": "Связи",
                "description": "Связи смещения: линейный слой из 2 вершин на каждую связь, первая вершина = исходное местоположение, последняя вершина = смещённое местоположение (эту схему используют и выход 'links' инструмента resolve_road_conflicts, и вход 'links' инструмента rubbersheet_features)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер определяется расширением). Если не указан, результат сохраняется в памяти."
              },
              "adjustment_style": {
                "label": "Стиль корректировки",
                "description": "'auto' (по умолчанию: жёсткий перенос для точек/полигонов, повершинный изгиб для линий), 'preserve_orientation' (жёсткий перенос по полю, усреднённому по контуру) или 'solid' (жёсткий перенос по полю, опрошенному один раз в представительной точке объекта)."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное расстояние (в единицах CRS), на котором связь может влиять на точку выборки; более удалённые связи игнорируются. По умолчанию: без ограничения (каждая связь влияет всюду)."
              }
            }
          },
          "pycnophylactic_interpolation": {
            "name": "Пикнофилактическая интерполяция",
            "description": "Площадная интерполяция Тоблера с сохранением массы: превращает агрегированные по зонам счётчики в гладкую поверхность плотности, суммы которой по зонам точно совпадают с входом (подобно ArcGIS Areal Interpolation) — гладкая альтернатива предположению о равномерной плотности в apportion_polygon.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой с полем количества (экстенсивная переменная)."
              },
              "count_field": {
                "label": "Поле количества",
                "description": "Поле, содержащее общее количество по каждой зоне (население и т. п.)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр плотности (значение по ячейкам; суммы по зонам равны входным). Если не указан, сохраняется в памяти."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS (по умолчанию: экстент / 200)."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Максимальное число итераций сглаживания (по умолчанию 100)."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Останавливаться, когда максимальное изменение по ячейке становится ниже этой доли средней плотности (по умолчанию 0.001)."
              },
              "non_negative": {
                "label": "Неотрицательный",
                "description": "Обнулять отрицательные значения и перераспределять их для сохранения массы (по умолчанию true)."
              }
            }
          },
          "radiometric_terrain_flattening": {
            "name": "Радиометрическое выравнивание рельефа",
            "description": "Удаляет топографический сигнал яркости из калиброванного обратного рассеяния SAR, заменяя опорную площадь плоской земли локальной освещённой площадью, полученной из DEM, и отмечает наложение и радарную тень (ArcGIS Apply Radiometric Terrain Flattening). apply_radiometric_calibration из раунда 17 нормализует по углу падения на эллипсоид, поэтому на наклонной поверхности его sigma0/gamma0 отслеживает рельеф, а не земной покров — регулярно более чем на 6 дБ, что превышает различие лес/голая почва, которое он должен измерять.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр калиброванного обратного рассеяния SAR (по умолчанию бета-ноль; см. 'input_calibration')."
              },
              "dem": {
                "label": "DEM",
                "description": "Цифровая модель рельефа, совмещённая с входным растром."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр обратного рассеяния с коррекцией за рельеф. Если не указан, сохраняется в памяти."
              },
              "output_scattering_area": {
                "label": "Выход площади рассеяния",
                "description": "Выходное отношение истинной освещённой площади к площади на плоской земле. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "output_geometry_mask": {
                "label": "Выход маски геометрии",
                "description": "Выходная маска: 0 — норма, 1 — наложение, 2 — радиолокационная тень. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "incidence_angle": {
                "label": "Угол падения",
                "description": "Эллипсоидальный угол падения в градусах: константа или путь к растру со значениями по ячейкам. Обязательный параметр."
              },
              "look_azimuth": {
                "label": "Азимут обзора",
                "description": "Компасный азимут в градусах от цели к сенсору (по умолчанию 270, т. е. восходящий виток с правым обзором). Нисходящий виток Sentinel-1 с правым обзором составляет около 283."
              },
              "input_calibration": {
                "label": "Входная калибровка",
                "description": "Чем уже является вход: 'beta0' (по умолчанию), 'sigma0_ellipsoid' или 'gamma0_ellipsoid'. Последние два перед коррекцией пересчитываются обратно в бета-ноль с использованием эллипсоидального угла."
              },
              "calibration_type": {
                "label": "Тип калибровки",
                "description": "Соглашение для выхода: 'gamma0' (по умолчанию) или 'sigma0'."
              },
              "input_units": {
                "label": "Входные единицы",
                "description": "'intensity' (по умолчанию), 'dn', 'amplitude' или 'db'."
              },
              "output_units": {
                "label": "Выходные единицы",
                "description": "'linear' (по умолчанию) или 'db'."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Множитель, переводящий единицы z DEM в единицы XY растра (по умолчанию 1.0)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) входного растра для коррекции (по умолчанию 1)."
              }
            }
          },
          "raster_domain": {
            "name": "Домен растра",
            "description": "Трассирует границу области действительных данных растра в виде полигонов (или замкнутых полилиний), сохраняя внутренние отверстия NoData (ArcGIS Raster Domain). Встроенный layer_footprint_raster возвращает полный прямоугольный экстент, который для повёрнутой сцены, обрезанного водосбора или рваного тайла мозаики может в несколько раз превышать фактическое покрытие; polygonize мог бы это сделать, но только по маске валидности 0/1, которую вызывающий должен сначала построить, а это и есть вся задача.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр, контур действительных данных которого требуется получить."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный или линейный слой. Если не указан, сохраняется в памяти."
              },
              "geometry_type": {
                "label": "Тип геометрии",
                "description": "'polygon' (по умолчанию) или 'line' для границы в виде замкнутых полилиний."
              },
              "ignore_value": {
                "label": "Игнорируемое значение",
                "description": "Считать это значение также недействительным, наряду с собственным NoData растра (обычно 0 для снимков с чёрной рамкой)."
              },
              "min_value": {
                "label": "Мин. значение",
                "description": "Считать значения ниже этого недействительными."
              },
              "max_value": {
                "label": "Макс. значение",
                "description": "Считать значения выше этого недействительными."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Отбрасывать части контура меньше этой площади в квадратных единицах карты, что удаляет мелкие фрагменты вдоль рваного края."
              },
              "fill_holes": {
                "label": "Заполнять отверстия",
                "description": "Отбрасывать внутренние отверстия и возвращать сплошной контур (по умолчанию false)."
              },
              "all_bands": {
                "label": "Все каналы",
                "description": "Требовать, чтобы ячейка была действительной во всех каналах, а не только в выбранном (по умолчанию false)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер проверяемого канала (с 1) (по умолчанию 1). Игнорируется, если задан 'all_bands'."
              }
            }
          },
          "raster_normalize": {
            "name": "Нормализация растра",
            "description": "Нормализует канал растра по минимуму-максимуму в диапазон [0, 1].",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              },
              "band": {
                "label": "Канал",
                "description": "Номер нормализуемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "raster_to_h3": {
            "name": "Растр в бины H3",
            "description": "Агрегирует значения канала растра в ячейки дискретной глобальной сетки H3 (mean, sum, min, max, count, median).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла (должен быть в географических координатах долгота/широта, EPSG:4326)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора; драйвер определяется расширением (.geojson, .fgb, .parquet, ...). Если не указан, слой сохраняется в памяти."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 от 0 (самое грубое) до 15 (самое детальное); по умолчанию 8 (ячейки ~0,7 км²)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер агрегируемого канала растра (с 1) (по умолчанию 1)."
              },
              "aggregate": {
                "label": "Агрегировать",
                "description": "Способ объединения значений пикселей в каждой ячейке: mean, sum, min, max, count или median (по умолчанию mean)."
              }
            }
          },
          "raster_to_tiles": {
            "name": "Растр в тайлы XYZ",
            "description": "Нарезает растр на пирамиду PNG-тайлов XYZ в Web Mercator (EPSG:3857) для веб-карт.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла. Должен содержать исходную CRS (EPSG или WKT)."
              },
              "output_dir": {
                "label": "Выходной каталог",
                "description": "Выходной каталог для дерева тайлов {z}/{x}/{y}.png (например, /work/tiles)."
              },
              "min_zoom": {
                "label": "Мин. зум",
                "description": "Минимальный уровень масштабирования (по умолчанию: один собственный уровень, соответствующий разрешению растра)."
              },
              "max_zoom": {
                "label": "Макс. зум",
                "description": "Максимальный уровень масштабирования (по умолчанию: как min_zoom)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер визуализируемого канала (с 1) (по умолчанию 1)."
              },
              "colormap": {
                "label": "Цветовая карта",
                "description": "Цветовая карта: viridis (по умолчанию), magma, turbo, terrain или grayscale."
              },
              "method": {
                "label": "Метод",
                "description": "Метод передискретизации при перепроецировании и опросе: bilinear (по умолчанию), nearest, cubic."
              },
              "min": {
                "label": "Min",
                "description": "Значение, отображаемое на нижний край цветовой карты (по умолчанию: минимум канала)."
              },
              "max": {
                "label": "Max",
                "description": "Значение, отображаемое на верхний край цветовой карты (по умолчанию: максимум канала)."
              }
            }
          },
          "raster_to_weighted_points": {
            "name": "Растр во взвешенные точки",
            "description": "Распределяет фиксированное число точек по растру так, чтобы их плотность была пропорциональна значению ячейки, размещая их по детерминированной решётке Фибоначчи, спирали, окружности или центроидам (ArcGIS Raster To Weighted Points). Ничто в обоих реестрах не взвешивает по поверхности: random_sample и random_points_in_polygon равномерны, create_spatially_balanced_points намеренно распределяет точки равномерно, а raster_to_vector_points выдаёт по одной точке на ячейку без прореживания или взвешивания. Распределение использует метод наибольшего остатка и не требует ГСЧ, поэтому результаты воспроизводимы в WASM.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр поверхности; значения ячеек являются весами."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной точечный слой. Если не указан, сохраняется в памяти."
              },
              "max_number_of_points": {
                "label": "Макс. число точек",
                "description": "Общее число распределяемых точек (по умолчанию 1000)."
              },
              "method": {
                "label": "Метод",
                "description": "Размещение внутри ячейки: 'fibonacci_lattice' (по умолчанию), 'fibonacci_spiral', 'circular' или 'centroid'."
              },
              "min_value": {
                "label": "Мин. значение",
                "description": "Ячейки с этим весом и ниже не получают точек (по умолчанию 0). Отрицательные веса всегда исключаются."
              },
              "max_points_per_cell": {
                "label": "Макс. точек на ячейку",
                "description": "Ограничение числа точек, которое может получить одна ячейка, чтобы одна «горячая» ячейка не поглотила весь бюджет."
              },
              "include_weight": {
                "label": "Включать вес",
                "description": "Записывать значение исходной ячейки в каждую точку (по умолчанию true)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), задающего веса (по умолчанию 1)."
              }
            }
          },
          "read_geoparquet": {
            "name": "Чтение GeoParquet",
            "description": "Читает файл GeoParquet и преобразует его в другой векторный формат (или сохраняет в памяти).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного файла GeoParquet (например, /work/data.parquet)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора; формат определяется расширением (.geojson, .fgb, .shp, .gpkg, ...). Если не указан, слой сохраняется в памяти."
              }
            }
          },
          "reclassify_field": {
            "name": "Переклассификация поля",
            "description": "Классифицирует числовой векторный атрибут по бинам классов (подобно ArcGIS Reclassify Field): equal_interval, defined_interval, quantile, natural_breaks (Jenks), std_dev или geometric_interval, записывая целочисленное поле класса и необязательное поле значения границы.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (или таблица) с классифицируемым числовым полем."
              },
              "field": {
                "label": "Поле",
                "description": "Имя классифицируемого числового поля."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой с добавленным полем класса. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "Метод классификации: equal_interval, defined_interval, quantile, natural_breaks, std_dev или geometric_interval (по умолчанию natural_breaks)."
              },
              "classes": {
                "label": "Классы",
                "description": "Число классов для equal_interval/quantile/natural_breaks/geometric_interval (по умолчанию 5). Игнорируется методами defined_interval и std_dev, у которых число классов определяется данными."
              },
              "interval": {
                "label": "Интервал",
                "description": "Фиксированная ширина класса для defined_interval (обязательна для этого метода)."
              },
              "std_dev_interval": {
                "label": "Интервал ст. откл.",
                "description": "Размер интервала для std_dev, в единицах стандартного отклонения (по умолчанию 1.0; например, 0.5 для полусигмовых интервалов)."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Имя добавляемого целочисленного поля класса (по умолчанию 'class')."
              },
              "break_field": {
                "label": "Поле разрыва",
                "description": "Если задано, дополнительно добавить поле с плавающей точкой, содержащее верхнюю границу класса, в который попадает каждый объект."
              }
            }
          },
          "reconstruct_tracks": {
            "name": "Реконструкция треков",
            "description": "Превращает точки с метками времени в полилинии треков движения (с группировкой по ID, сортировкой по времени, разделением по разрывам во времени/расстоянии) со статистикой по каждому треку и при необходимости находит места остановок, где движущийся объект делал паузу — подобно ArcGIS Reconstruct Tracks / Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой наблюдений с метками времени."
              },
              "track_field": {
                "label": "Поле трека",
                "description": "Поле, идентифицирующее каждый трек/движущийся объект (например, идентификатор транспортного средства или животного)."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: число секунд или метка времени ISO-8601."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной линейный вектор треков (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "time_gap": {
                "label": "Временной разрыв",
                "description": "Начинать новый сегмент трека, когда интервал времени между точками превышает указанное число секунд. По умолчанию: без разделения по времени."
              },
              "distance_gap": {
                "label": "Разрыв по расстоянию",
                "description": "Начинать новый сегмент трека, когда расстояние между точками превышает это значение (метры для географической CRS, единицы CRS в остальных случаях). По умолчанию: без разделения по расстоянию."
              },
              "dwells": {
                "label": "Остановки",
                "description": "Необязательный выходной путь точек для мест остановок (где движущийся объект делал паузу)."
              },
              "dwell_distance": {
                "label": "Расстояние остановки",
                "description": "Максимальный радиус остановки, в указанных выше единицах расстояния. По умолчанию 50."
              },
              "dwell_min_duration": {
                "label": "Мин. длительность остановки",
                "description": "Минимальное время (в секундах), которое движущийся объект должен оставаться в пределах dwell_distance, чтобы это считалось остановкой. По умолчанию 300."
              }
            }
          },
          "reduce_point_density": {
            "name": "Снижение плотности точек",
            "description": "Прореживает векторный точечный слой так, чтобы никакие две сохранённые точки не были ближе минимального шага, или оставляет по одной точке на ячейку сетки (ArcGIS Reduce Point Density). lidar_thin работает только с LAS, а find_identical ловит только точные дубликаты, поэтому плотные слои промеров, GPS и датчиков нельзя было прореживать перед интерполяцией.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный (или мультиточечный) слой."
              },
              "method": {
                "label": "Метод",
                "description": "'spacing' (по умолчанию): жадное прореживание по минимальному расстоянию. 'bin': сохранять по одной точке на ячейку сетки."
              },
              "min_distance": {
                "label": "Мин. расстояние",
                "description": "Минимальное расстояние между сохраняемыми точками, в единицах слоя. Обязательно для метода 'spacing'."
              },
              "bin_size": {
                "label": "Размер бина",
                "description": "Размер ячейки сетки в единицах слоя. Обязателен для метода 'bin'."
              },
              "sort_field": {
                "label": "Поле сортировки",
                "description": "Числовой атрибут, определяющий, какая точка побеждает при конфликте. Без него решает порядок ввода."
              },
              "sort_order": {
                "label": "Порядок сортировки",
                "description": "'descending' (по умолчанию, побеждает наибольшее значение sort_field) или 'ascending'."
              },
              "keep_field": {
                "label": "Сохраняемое поле",
                "description": "Атрибут, отмечающий точки, которые должны сохраняться всегда (ненулевое / true / непустое значение). Используйте для опасностей, например отметок глубин на мелководье."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой сохранённых точек. Если не указан, сохраняется в памяти."
              },
              "output_removed": {
                "label": "Выход удалённых",
                "description": "Необязательный слой, принимающий отброшенные точки, для проверки."
              }
            }
          },
          "regression_kriging": {
            "name": "Регрессионный кригинг",
            "description": "Кригинг с внешним дрейфом: регрессирует значения выборок на исчерпывающие растры ковариат, подбирает вариограмму по остаткам и добавляет кригированное поле остатков обратно к регрессионной поверхности (ArcGIS EBK Regression Prediction). Каждый поставляемый вариант кригинга моделирует тренд по координатам или требует вторичных точечных выборок; ни один не принимает растры ковариат, а именно это нужно большинству прикладной геостатистики.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный слой измерений."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Прогнозируемый числовой атрибут."
              },
              "covariates": {
                "label": "Ковариаты",
                "description": "Пути растров ковариат, разделённые запятой или точкой с запятой, полностью покрывающие сетку прогноза. Первый задаёт выходную сетку."
              },
              "variogram_model": {
                "label": "Модель вариограммы",
                "description": "Модель вариограммы остатков: 'spherical' (по умолчанию), 'exponential' или 'gaussian'."
              },
              "lag_count": {
                "label": "Число лагов",
                "description": "Число интервалов лага, используемых для подгонки вариограммы остатков (по умолчанию 12)."
              },
              "max_neighbors": {
                "label": "Макс. соседей",
                "description": "Число ближайших измерений, используемых в системе кригинга для каждой ячейки (по умолчанию 16)."
              },
              "bilinear": {
                "label": "Билинейная",
                "description": "Опрашивать ковариаты в точках билинейно, а не по ближайшей ячейке (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр прогноза. Если не указан, сохраняется в памяти."
              },
              "output_error": {
                "label": "Выход ошибки",
                "description": "Растр стандартной ошибки прогноза (стандартная ошибка кригинга поля остатков). Создаётся всегда."
              }
            }
          },
          "regularize_adjacent_building_footprint": {
            "name": "Регуляризация смежных контуров зданий",
            "description": "Регуляризует группу смежных контуров зданий к одной общей ориентации, чтобы общие стены оставались параллельными и коллинеарными (подобно ArcGIS Regularize Adjacent Building Footprint) — согласованный по группе аналог regularize_building_footprints для отдельных зданий, который позволяет соседним контурам расходиться по выравниванию.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный слой контуров зданий."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходных полигонов. Если не указан, сохраняется в памяти."
              },
              "group": {
                "label": "Группа",
                "description": "Необязательное поле, группирующее контуры для совместной регуляризации. Без него группы формируются по смежности границ."
              },
              "method": {
                "label": "Метод",
                "description": "'right_angles' (по умолчанию) или 'right_angles_and_diagonals'."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Минимальная длина стены; более короткие рёбра удаляются как шум (в единицах CRS). По умолчанию 1.0."
              },
              "precision": {
                "label": "Точность",
                "description": "Шаг сетки для прилипания смещений стен, чтобы близкие параллельные стены стали коллинеарными (в единицах CRS). По умолчанию: tolerance."
              },
              "adjacency_distance": {
                "label": "Расстояние смежности",
                "description": "Если поле 'group' не задано, контуры, вершины которых находятся в пределах этого расстояния, образуют одну группу (в единицах CRS). По умолчанию: 2 × tolerance."
              }
            }
          },
          "regularize_building_footprints": {
            "name": "Регуляризация контуров зданий",
            "description": "Нормализует зашумлённые полигоны контуров зданий в правильные формы (стены под прямым углом, диагональные, под любым углом или круговые).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "Метод регуляризации: 'right_angles' (по умолчанию), 'right_angles_and_diagonals', 'any_angle' или 'circle'."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Максимальное расстояние (в единицах CRS), на которое регуляризованный контур может отклоняться от исходной границы. По умолчанию 1.0."
              },
              "diagonal_penalty": {
                "label": "Штраф за диагональ",
                "description": "Для 'right_angles_and_diagonals': насколько сильно прямые углы предпочитаются стенам под 45 градусов (стена становится диагональной, только если её угловое отклонение от диагонали, умноженное на этот коэффициент, меньше её отклонения от оси). По умолчанию 1.5; большие значения дают меньше диагоналей."
              },
              "min_radius": {
                "label": "Мин. радиус",
                "description": "Для 'circle': наименьший допустимый подобранный радиус; при меньших значениях сохраняется исходный контур. По умолчанию 0.1."
              },
              "max_radius": {
                "label": "Макс. радиус",
                "description": "Для 'circle': наибольший допустимый подобранный радиус; при больших значениях сохраняется исходный контур. Если не указан, без ограничения."
              }
            }
          },
          "remove_overlap_multiple": {
            "name": "Удаление перекрытий (несколько)",
            "description": "Перераспределяет каждое перекрытие среди набора полигонов ровно одному объекту, создавая разбиение их объединения без разрывов и перекрытий (деление по осевой линии или по Тиссену), подобно ArcGIS Remove Overlap (Multiple).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой (объекты могут перекрываться)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'center_line' (относить каждую точку перекрытия к объекту, внутри которого она лежит глубже всего; по умолчанию) или 'thiessen' (ближайший центроид-генератор)."
              },
              "grid_resolution": {
                "label": "Разрешение сетки",
                "description": "Число ячеек по длинной стороне каждой области перекрытия при разделении (по умолчанию 40; больше = более плавные разделительные линии, медленнее)."
              }
            }
          },
          "remove_thermal_noise": {
            "name": "Удаление теплового шума",
            "description": "Вычитает аддитивный порог теплового шума приёмника из обратного рассеяния SAR, удаляя поперечную полосатость полосы обзора, преобладающую на тёмных поверхностях, таких как спокойная вода, затопленная земля и радарная тень (ArcGIS Remove Thermal Noise). Ничто в обоих реестрах этого не делает: встроенные фильтры lee/frost/kuan/refined-lee подавляют мультипликативный спекл — другую величину. Без этого порог воды по Оцу цепляется за границу подполосы, а не за береговую линию, а кросс-поляризационные отношения вычисляются по числителю, который в основном является шумом.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр калиброванного обратного рассеяния SAR."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр с подавленным шумом. Если не указан, сохраняется в памяти."
              },
              "output_snr": {
                "label": "Выход SNR",
                "description": "Выходное отношение сигнал/шум в дБ. Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "noise_raster": {
                "label": "Растр шума",
                "description": "Растр мощности шума по ячейкам, совмещённый с входом. Имеет приоритет над двумя другими формами."
              },
              "noise_profile": {
                "label": "Профиль шума",
                "description": "Мощности шума поперёк дальности через запятую, линейно интерполируемые по столбцам растра. Не менее двух значений."
              },
              "noise_constant": {
                "label": "Константа шума",
                "description": "Единое эквивалентное шуму сигма-ноль, применяемое ко всем ячейкам."
              },
              "noise_units": {
                "label": "Единицы шума",
                "description": "Единицы, в которых заданы значения шума: 'intensity' (по умолчанию), 'dn', 'amplitude' или 'db'."
              },
              "input_units": {
                "label": "Входные единицы",
                "description": "'intensity' (по умолчанию), 'dn', 'amplitude' или 'db'."
              },
              "output_units": {
                "label": "Выходные единицы",
                "description": "'linear' (по умолчанию) или 'db'."
              },
              "floor_fraction": {
                "label": "Доля нижней границы",
                "description": "Ячейки, доведённые до нуля или ниже, ограничиваются этой долей локальной мощности шума (по умолчанию 0.01). Это сохраняет конечность при переводе в дБ."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1) для подавления шума (по умолчанию 1)."
              }
            }
          },
          "render_raster_png": {
            "name": "Визуализация растра в PNG",
            "description": "Визуализирует один канал растра в изображение PNG через цветовую карту (NoData становится прозрачным).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла PNG (например, /work/preview.png)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер визуализируемого канала (с 1) (по умолчанию 1)."
              },
              "colormap": {
                "label": "Цветовая карта",
                "description": "Цветовая карта: viridis (по умолчанию), magma, turbo, terrain или grayscale."
              },
              "min": {
                "label": "Min",
                "description": "Значение, отображаемое на нижний край цветовой карты (по умолчанию: минимум канала)."
              },
              "max": {
                "label": "Max",
                "description": "Значение, отображаемое на верхний край цветовой карты (по умолчанию: максимум канала)."
              }
            }
          },
          "render_vector_png": {
            "name": "Визуализация вектора в PNG",
            "description": "Рисует векторный слой (точки/линии/полигоны) в изображение карты PNG.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла или дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла PNG (например, /work/map.png)."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина изображения в пикселях (по умолчанию 800)."
              },
              "height": {
                "label": "Высота",
                "description": "Высота изображения в пикселях (по умолчанию: из соотношения сторон данных)."
              },
              "fill": {
                "label": "Заполнение",
                "description": "Цвет заливки полигонов/точек в формате #rrggbb или #rrggbbaa (по умолчанию полупрозрачный синий)."
              },
              "stroke": {
                "label": "Обводка",
                "description": "Цвет контура/линии в формате #rrggbb или #rrggbbaa (по умолчанию тёмно-синий)."
              },
              "stroke_width": {
                "label": "Ширина обводки",
                "description": "Ширина контура/линии в пикселях (по умолчанию 1)."
              },
              "background": {
                "label": "Фон",
                "description": "Цвет фона в формате #rrggbb[aa] или 'transparent' (по умолчанию прозрачный)."
              }
            }
          },
          "repair_geometry": {
            "name": "Исправление геометрии",
            "description": "Обнаруживает и исправляет недопустимую геометрию полигонов — самопересечения (через самообъединение), направление обхода колец, дублирующиеся вершины и пустые части — или, при check_only, сообщает код проблемы для каждого объекта. Подобно ArcGIS Repair Geometry / Check Geometry.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "check_only": {
                "label": "Только проверка",
                "description": "Если true, не изменять геометрию: выводить вход со столбцами 'problem_code'/'problem_desc' (аналогично ArcGIS Check Geometry). По умолчанию false."
              }
            }
          },
          "rescale_by_function": {
            "name": "Масштабирование по функции",
            "description": "Масштабирует непрерывный растр в общую шкалу пригодности через передаточную функцию (linear, inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear), подобно ArcGIS Rescale By Function.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной непрерывный растр."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              },
              "function": {
                "label": "Функция",
                "description": "Передаточная функция: linear (по умолчанию), inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear."
              },
              "from_scale": {
                "label": "Из масштаба",
                "description": "Нижний край выходной шкалы (по умолчанию 0)."
              },
              "to_scale": {
                "label": "В масштаб",
                "description": "Верхний край выходной шкалы (по умолчанию 1)."
              },
              "param1": {
                "label": "Параметр 1",
                "description": "Первый параметр формы (показатель для power; крутизна для exponential/logarithmic/logistic/small/large; центр для gaussian/near). Значение по умолчанию зависит от функции."
              },
              "param2": {
                "label": "Параметр 2",
                "description": "Второй параметр формы (разброс для gaussian/near). Значение по умолчанию зависит от функции."
              },
              "low_threshold": {
                "label": "Нижний порог",
                "description": "Необязательная нижняя отсечка: значения ниже отображаются в 'value_below'."
              },
              "high_threshold": {
                "label": "Верхний порог",
                "description": "Необязательная верхняя отсечка: значения выше отображаются в 'value_above'."
              },
              "value_below": {
                "label": "Значение ниже",
                "description": "Выходное значение для ячеек ниже 'low_threshold' (по умолчанию = from_scale)."
              },
              "value_above": {
                "label": "Значение выше",
                "description": "Выходное значение для ячеек выше 'high_threshold' (по умолчанию = to_scale)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер масштабируемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "resolve_building_conflicts": {
            "name": "Разрешение конфликтов зданий",
            "description": "Смещает, сжимает или скрывает контуры зданий, графически конфликтующие с символизированными дорожными барьерами (и друг с другом) при мелкомасштабном картографировании, помечая каждый статусом, подобно ArcGIS Resolve Building Conflicts.",
            "params": {
              "buildings": {
                "label": "Здания",
                "description": "Входной полигональный слой зданий."
              },
              "barriers": {
                "label": "Барьеры",
                "description": "Линейный слой барьеров (например, дорог), от которых здания должны быть отодвинуты."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой зданий с полем 'status'. Если не указан, сохраняется в памяти."
              },
              "barrier_width": {
                "label": "Ширина барьера",
                "description": "Символьная ширина барьера в единицах карты (буферизуется на половину этого значения с каждой стороны). По умолчанию 0."
              },
              "gap": {
                "label": "Разрыв",
                "description": "Минимальный зазор, сохраняемый между зданием и барьером (в единицах карты). По умолчанию 0."
              },
              "min_size": {
                "label": "Мин. размер",
                "description": "Минимальная площадь здания (в квадратных единицах карты), ниже которой конфликтующее здание скрывается, а не уменьшается. По умолчанию 0 (никогда не скрывать)."
              },
              "hide": {
                "label": "Скрыть",
                "description": "Удалять ли скрытые здания из выхода (по умолчанию false: сохранять их со status='hidden')."
              }
            }
          },
          "resolve_road_conflicts": {
            "name": "Разрешение конфликтов дорог",
            "description": "Смещает дороги, символизированные (с шириной отрисовки) представления которых перекрываются или скучиваются в целевом масштабе: дороги низшей иерархии отодвигаются от дорог высшей иерархии с помощью сглаженных сдвигов вершин при закреплённых концах, при необходимости выдавая связи смещения, подобно ArcGIS Resolve Road Conflicts / Propagate Displacement.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный слой дорог (LineString / MultiLineString)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой смещённых дорог с полями 'status' и 'shift'. Если не указан, сохраняется в памяти."
              },
              "symbol_width": {
                "label": "Ширина символа",
                "description": "Фиксированная символьная ширина для всех дорог, в единицах карты (или в миллиметрах страницы, когда задан 'scale'). Используется при отсутствии 'symbol_width_field'."
              },
              "symbol_width_field": {
                "label": "Поле ширины символа",
                "description": "Числовое поле, задающее символьную ширину каждой дороги (в единицах карты или в миллиметрах страницы, когда задан 'scale'). При отсутствии значения используется 'symbol_width'."
              },
              "hierarchy_field": {
                "label": "Поле иерархии",
                "description": "Числовое поле, ранжирующее важность дорог (меньшее значение = важнее, остаётся неподвижной). Если не задано, все дороги смещаются в равной мере."
              },
              "scale": {
                "label": "Масштаб",
                "description": "Знаменатель целевого масштаба карты. Если задан, символьные ширины считаются миллиметрами страницы и переводятся в наземные единицы (мм * масштаб / 1000). По умолчанию: ширины берутся непосредственно как единицы карты."
              },
              "gap": {
                "label": "Разрыв",
                "description": "Дополнительный свободный зазор между символьными полосами, в единицах карты. По умолчанию 0."
              },
              "max_iter": {
                "label": "Макс. итераций",
                "description": "Максимальное число итераций смещения. По умолчанию 50."
              },
              "pin_endpoints": {
                "label": "Закрепить концы",
                "description": "Удерживать первую/последнюю вершину каждой дороги неподвижной для сохранения пересечений и связности (по умолчанию true)."
              },
              "links": {
                "label": "Связи",
                "description": "Необязательный выходной путь для связей смещения (линии «от→к»), пригодных для rubbersheet_features."
              }
            }
          },
          "ripleys_k": {
            "name": "K Рипли",
            "description": "Многодистанционный анализ точечного паттерна (K/L-функция Рипли) с огибающими полной пространственной случайности методом Монте-Карло для выявления кластеризации или рассеяния в диапазоне расстояний.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой (для других геометрий используется представительная точка как среднее вершин)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь к CSV для таблицы K/L. Таблица также возвращается в результате работы инструмента."
              },
              "distance_bands": {
                "label": "Полосы расстояний",
                "description": "Число оцениваемых полос расстояний (по умолчанию 10)."
              },
              "max_distance": {
                "label": "Макс. расстояние",
                "description": "Наибольшее оцениваемое расстояние, в единицах CRS. По умолчанию: четверть меньшей стороны ограничивающего прямоугольника точек."
              },
              "permutations": {
                "label": "Перестановки",
                "description": "Число моделирований полной пространственной случайности для доверительной огибающей (по умолчанию 99; 0 отключает огибающую)."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное числовое поле, задающее вес каждой точки."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для полной пространственной случайности (по умолчанию 1), для воспроизводимых огибающих."
              }
            }
          },
          "rubbersheet_features": {
            "name": "Резиновая трансформация объектов",
            "description": "Деформирует векторный слой для выравнивания с целью по связям смещения: кусочно-аффинная трансформация по TIN Делоне (или IDW), которая помещает опорные точки на их цели и плавно деформирует всё между ними — трансформация конфляции, подобно ArcGIS Rubbersheet Features.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой для корректировки (любого типа геометрии)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер определяется расширением). Если не указан, результат сохраняется в памяти."
              },
              "links": {
                "label": "Связи",
                "description": "Необязательный линейный слой связей смещения (каждая линия: первая вершина = откуда, последняя вершина = куда)."
              },
              "target": {
                "label": "Цель",
                "description": "Необязательный целевой векторный слой; связи создаются сопоставлением представительной точки каждого входного объекта с ближайшей целью в пределах search_distance."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное расстояние для сопоставления входа с целью при создании связей (в единицах CRS). Обязательно вместе с 'target'."
              },
              "method": {
                "label": "Метод",
                "description": "'linear' (кусочно-аффинное преобразование по TIN Делоне, по умолчанию) или 'idw' (взвешивание обратным расстоянием)."
              },
              "power": {
                "label": "Степень",
                "description": "Показатель IDW для затухания вне TIN / для method=idw. По умолчанию 2."
              }
            }
          },
          "sar_coherence": {
            "name": "Когерентность SAR",
            "description": "Вычисляет нормированную магнитуду интерферометрической когерентности (и при необходимости интерферометрическую фазу) между двумя совмещёнными комплексными снимками SAR по скользящему окну (ArcGIS Compute Coherence / Generate Interferogram). Когерентность измеряет стабильность фазы, а не яркость, поэтому выявляет изменения, невидимые для разности интенсивностей, — обрушения, затопление под растительностью, уборку урожая, движение льда — в любую погоду. Ни один инструмент в обоих реестрах не использует фазу SAR. Входы — двухканальные пары I/Q, которые должны быть уже совмещены.",
            "params": {
              "reference": {
                "label": "Эталон",
                "description": "Комплексный растр SAR (два канала: I и Q) первой съёмки."
              },
              "secondary": {
                "label": "Вторичный",
                "description": "Совмещённый комплексный растр SAR (два канала: I и Q) второй съёмки."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра когерентности (модуль, 0..1). Если не указан, сохраняется в памяти."
              },
              "output_phase": {
                "label": "Выход фазы",
                "description": "Необязательный выходной путь для растра интерферометрической фазы в радианах, свёрнутой в (-pi, pi]."
              },
              "window_size": {
                "label": "Размер окна",
                "description": "Окно оценивания в виде 'дальность,азимут' в ячейках (по умолчанию '5,5'). Оценщик центрирован, поэтому чётное значение округляется ВВЕРХ до следующего нечётного размера; фактическое окно возвращается как window_range/window_azimuth."
              },
              "bias_correction": {
                "label": "Коррекция смещения",
                "description": "Корректировать завышающее смещение оценщика когерентности при малых размерах окна (по умолчанию true)."
              }
            }
          },
          "semivariogram_sensitivity": {
            "name": "Чувствительность семивариограммы",
            "description": "Возмущает наггет, частичный порог и радиус подобранной вариограммы, повторно выполняет кригинг в точках оценки и сообщает, насколько сдвигаются предсказания и стандартные ошибки — стандартная проверка обоснованности модели кригинга (ArcGIS GA Semivariogram Sensitivity). Встроенный набор кригинга широк, а kriging_cross_validation измеряет качество подгонки, но ничто не измеряет чувствительность, и эти две вещи независимы: модель с хорошей перекрёстной проверкой всё равно может быть крайне хрупкой к параметрам, выбранным аналитиком.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный слой, содержащий измеренные значения."
              },
              "field": {
                "label": "Поле",
                "description": "Числовое поле для кригинга."
              },
              "locations": {
                "label": "Местоположения",
                "description": "Точечный слой мест прогноза, в которых оценивается чувствительность."
              },
              "output": {
                "label": "Выход",
                "description": "Таблица с одной строкой на каждую возмущённую модель. Если не указана, сохраняется в памяти."
              },
              "model": {
                "label": "Модель",
                "description": "Модель вариограммы: 'exponential' (по умолчанию), 'spherical' или 'gaussian'."
              },
              "nugget_span_percent": {
                "label": "Диапазон наггета (%)",
                "description": "Полуширина возмущения для наггета, в процентах (по умолчанию 10)."
              },
              "partial_sill_span_percent": {
                "label": "Диапазон частичного порога (%)",
                "description": "Полуширина возмущения для частичного порога, в процентах (по умолчанию 10)."
              },
              "range_span_percent": {
                "label": "Диапазон радиуса (%)",
                "description": "Полуширина возмущения для радиуса влияния, в процентах (по умолчанию 10)."
              },
              "nugget_steps": {
                "label": "Шаги наггета",
                "description": "Число значений по диапазону наггета (по умолчанию 3; 1 фиксирует его на подобранном значении)."
              },
              "partial_sill_steps": {
                "label": "Шаги частичного порога",
                "description": "Число значений по диапазону частичного порога (по умолчанию 3)."
              },
              "range_steps": {
                "label": "Шаги радиуса",
                "description": "Число значений по диапазону радиуса влияния (по умолчанию 3)."
              },
              "lag_count": {
                "label": "Число лагов",
                "description": "Число интервалов лага эмпирической вариограммы, используемых для базовой подгонки (по умолчанию 12)."
              }
            }
          },
          "similarity_search": {
            "name": "Поиск по сходству",
            "description": "Ранжирует объекты-кандидаты по атрибутивному сходству с одним или несколькими эталонными объектами по z-стандартизированным числовым полям (евклидово или косинусное), наибольшие/наименьшие/оба — подобно ArcGIS Similarity Search.",
            "params": {
              "reference": {
                "label": "Эталон",
                "description": "Эталонный векторный слой (один или несколько объектов, задающих искомый профиль)."
              },
              "candidates": {
                "label": "Кандидаты",
                "description": "Векторный слой кандидатов для ранжирования по сходству с эталоном."
              },
              "fields": {
                "label": "Поля",
                "description": "Сравниваемые числовые поля через запятую (должны присутствовать в обоих слоях)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора (ранжированные кандидаты). Если не указан, сохраняется в памяти."
              },
              "match_method": {
                "label": "Метод сопоставления",
                "description": "'euclidean' (расстояние по z-стандартизованным значениям; по умолчанию) или 'cosine' (угловое сходство)."
              },
              "most_or_least": {
                "label": "Наибольшие или наименьшие",
                "description": "Сохранять 'most' — наиболее похожие (по умолчанию), 'least' — наименее похожие или 'both' — оба края."
              },
              "num_results": {
                "label": "Число результатов",
                "description": "Число сохраняемых результатов с каждого края (0 = все кандидаты). По умолчанию 10."
              }
            }
          },
          "simplify_3d_line": {
            "name": "Упрощение 3D-линии",
            "description": "Уменьшает число вершин 3D-полилиний с помощью разбиения Дугласа-Пекера, измеряющего отклонение в трёх измерениях, сохраняя вертикальный профиль, подобно ArcGIS Simplify 3D Line.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полилинейный слой (3D-вершины; 2D-вершины обрабатываются как плоский частный случай)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Максимальное 3D-отклонение в единицах карты. Вершины, расположенные ближе этого расстояния к хорде, удаляются."
              },
              "z_factor": {
                "label": "Коэффициент Z",
                "description": "Множитель, применяемый к Z перед проверкой расстояния, для данных, у которых единица Z отличается от XY (по умолчанию 1)."
              }
            }
          },
          "simplify_building": {
            "name": "Упрощение зданий",
            "description": "Уменьшает число вершин контуров зданий, защищая прямые углы, с порогом отбрасывания по минимальной площади, подобно ArcGIS Simplify Building.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Полигоны контуров зданий."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск упрощения в единицах карты: максимальное расстояние, на которое может сместиться граница."
              },
              "minimum_area": {
                "label": "Минимальная площадь",
                "description": "Контуры площадью меньше этого значения отбрасываются (по умолчанию 0, сохранять все)."
              },
              "keep_collapsed_points": {
                "label": "Сохранять свёрнутые точки",
                "description": "Создавать точку в центроиде каждого контура, отброшенного по minimum_area (по умолчанию false)."
              },
              "corner_tolerance": {
                "label": "Допуск углов",
                "description": "Число градусов, в пределах которых внутренний угол считается защищённым прямым углом (по умолчанию 20)."
              }
            }
          },
          "simplify_by_circular_arcs": {
            "name": "Упрощение дугами окружностей",
            "description": "Упрощает линии и полигоны, заменяя последовательности вершин прямыми сегментами и истинными дугами окружностей, сохраняя инженерные кривые вместо их аппроксимации хордами (ArcGIS Simplify By Straight Lines And Circular Arcs; режим 'tangent' покрывает Simplify By Tangent Segments). Все упростители в обоих реестрах только удаляют вершины, что вынуждает выбирать между гранёной кривой и недопустимым числом вершин на тупиковых разворотах, кольцевых развязках и контурах резервуаров. Окружности подбираются алгебраическим методом наименьших квадратов, но принимаются по истинному ортогональному отклонению, поэтому гарантия допуска сохраняется.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный или полигональный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный выходной путь. Если не указан, результат сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Максимально допустимое отклонение подобранного примитива от исходных вершин, в единицах CRS."
              },
              "mode": {
                "label": "Режим",
                "description": "'arcs' (по умолчанию; подбирает прямые сегменты и дуги окружностей) или 'tangent' (только прямые сегменты, поведение Simplify By Tangent Segments)."
              },
              "min_arc_angle": {
                "label": "Мин. угол дуги",
                "description": "Дуги, стягивающие угол меньше указанного числа градусов, выводятся вместо этого как прямые сегменты (по умолчанию 10)."
              },
              "max_radius": {
                "label": "Макс. радиус",
                "description": "Дуги с радиусом больше этого значения выводятся как прямые сегменты (по умолчанию: 1e6)."
              },
              "densify_output": {
                "label": "Уплотнять выход",
                "description": "Повторно уплотнять подобранные дуги до хордового допуска при записи (по умолчанию true). При false выводятся только конечные точки дуг, поэтому сама геометрия теряет кривизну — используйте 'output_arcs', чтобы её восстановить."
              },
              "output_arcs": {
                "label": "Выход дуг",
                "description": "Необязательный путь для таблицы подобранных дуг (идентификатор объекта, конечные точки, центр, радиус, знаковый угол раствора в градусах). Если не указан, сохраняется в памяти (всё равно возвращается)."
              }
            }
          },
          "simplify_by_tangent_segments": {
            "name": "Упрощение касательными сегментами",
            "description": "Заменяет уплотнённую геометрию кривых минимальной цепочкой прямых сегментов, остающихся в пределах максимального перпендикулярного смещения, соединяя последовательные сегменты в точке их пересечения, чтобы результат оставался касательным к оригиналу (ArcGIS Simplify By Tangent Segments). Линейный компаньон simplify_by_circular_arcs: simplify_features (Дуглас-Пекер) может сохранять только существующие вершины и не гарантирует касательности, оставляя изломы на инженерной геометрии, тогда как smooth_line и smooth_natural_features перемещают вершины, а не сокращают их.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Упрощаемые линейные или полигональные объекты."
              },
              "output": {
                "label": "Выход",
                "description": "Упрощённые объекты с добавленными полями числа вершин. Если не указан, сохраняется в памяти."
              },
              "max_offset": {
                "label": "Макс. смещение",
                "description": "Максимальное перпендикулярное отклонение от исходной геометрии, в ЕДИНИЦАХ CRS. В EPSG:4326 это градусы, поэтому для работы в метровом масштабе нужно примерно 2e-5, а не 2.0. Ограничение применяется к каждой подобранной линии, поэтому получаемая цепочка может немного превышать его вблизи стыка соседних сегментов."
              },
              "anchor_points": {
                "label": "Опорные точки",
                "description": "Необязательный точечный слой, местоположения которого должны сохраниться как вершины (anchor_points в ArcGIS). Участки никогда не расширяются через опорную точку."
              },
              "anchor_tolerance": {
                "label": "Допуск опорных точек",
                "description": "Расстояние, в пределах которого входная вершина считается совпадающей с опорной точкой (единицы CRS). По умолчанию: max_offset."
              },
              "min_run": {
                "label": "Мин. серия",
                "description": "Минимальное число входных вершин в последовательности, необходимое для её схлопывания в сегмент (по умолчанию 3). Более короткие последовательности выводятся без изменений."
              },
              "preserve_endpoints": {
                "label": "Сохранять концы",
                "description": "Точно сохранять первую и последнюю вершины каждой части (по умолчанию true)."
              }
            }
          },
          "simplify_shared_edges": {
            "name": "Упрощение общих рёбер",
            "description": "Упрощает полигональное покрытие, сохраняя совпадение границ, общих для смежных полигонов (без разрывов и щелей), подобно ArcGIS Simplify Shared Edges.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск упрощения Дугласа-Пекера: максимальное расстояние (в единицах CRS), на которое упрощённая дуга может отклоняться от исходной. По умолчанию 1.0."
              },
              "simplify_boundary": {
                "label": "Упрощать границу",
                "description": "Также упрощать дуги на внешней границе покрытия (рёбра, принадлежащие одному полигону). По умолчанию true; задайте false, чтобы оставить внешнюю границу без изменений."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Квантовать вершины по сетке такого размера (единицы CRS) перед построением топологии, чтобы почти совпадающие общие вершины считались одной. По умолчанию 0 (использовать координаты точно)."
              }
            }
          },
          "slice_raster": {
            "name": "Нарезка растра",
            "description": "Классифицирует непрерывный растр на N порядковых зон (равные интервалы, равные площади, естественные границы, геометрический интервал или стандартное отклонение).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к файлу входного непрерывного растра."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра зон. Если не указан, сохраняется в памяти."
              },
              "band": {
                "label": "Канал",
                "description": "Номер классифицируемого канала (с 1) (по умолчанию 1)."
              },
              "number_zones": {
                "label": "Число зон",
                "description": "Число выходных зон (по умолчанию 10). Игнорируется для std_dev."
              },
              "slice_type": {
                "label": "Тип среза",
                "description": "Метод классификации: equal_interval, equal_area, natural_breaks, geometric_interval или std_dev (по умолчанию equal_interval)."
              },
              "base_output_zone": {
                "label": "Базовая выходная зона",
                "description": "Идентификатор, присваиваемый самой нижней зоне (по умолчанию 1)."
              },
              "class_interval_size": {
                "label": "Размер интервала классов",
                "description": "Размер интервала стандартного отклонения в единицах σ (по умолчанию 1.0). Используется только методом std_dev."
              }
            }
          },
          "smooth_natural_features": {
            "name": "Сглаживание природных объектов",
            "description": "Сглаживает пикселизированные полигоны и зазубренные линии (результаты преобразования растра в вектор) в естественно выглядящие кривые методом срезания углов Чайкина, сохраняя площадь полигонов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к файлу входного вектора с полигональными или линейными объектами, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "segment_length": {
                "label": "Длина сегмента",
                "description": "Масштаб удаляемого ступенчатого шума в единицах CRS — в идеале размер ячейки исходного растра. Если не указан, определяется автоматически по медианной длине ребра слоя."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Число итераций сглаживания Чайкина (1-8); больше итераций даёт более гладкий результат с большим числом вершин. По умолчанию 3."
              },
              "preserve_area": {
                "label": "Сохранять площадь",
                "description": "Восстанавливать исходную площадь каждого полигона после сглаживания (срезание углов уменьшает выпуклые фигуры). По умолчанию true."
              }
            }
          },
          "smooth_shared_edges": {
            "name": "Сглаживание общих рёбер",
            "description": "Сглаживает полигональное покрытие, сохраняя совпадение границ, общих для смежных полигонов (без разрывов и щелей), подобно ArcGIS Smooth Shared Edges.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного полигонального векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "algorithm": {
                "label": "Алгоритм",
                "description": "Алгоритм сглаживания: 'paek' (гауссово ядро, управляется допуском; по умолчанию) или 'bezier' (срезание углов по Чайкину, допуск игнорируется)."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Длина сглаживания PAEK в единицах CRS: окно по длине дуги, в пределах которого усредняются вершины. Большие значения дают более гладкие кривые. По умолчанию 1.0. Игнорируется алгоритмом 'bezier'."
              },
              "smooth_boundary": {
                "label": "Сглаживать границу",
                "description": "Также сглаживать дуги на внешней границе покрытия (рёбра, принадлежащие одному полигону). По умолчанию true; задайте false, чтобы оставить внешнюю границу без изменений."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Квантовать вершины по сетке такого размера (единицы CRS) перед построением топологии, чтобы почти совпадающие общие вершины считались одной. По умолчанию 0 (использовать координаты точно)."
              }
            }
          },
          "snap_tracks": {
            "name": "Привязка треков",
            "description": "Сопоставляет GPS-треки с метками времени с дорожной сетью с помощью динамического программирования Витерби (эмиссия = расстояние привязки, переход = непрерывность маршрута), чтобы сопоставленные треки следовали одному правдоподобному пути вместо зигзагов между параллельными улицами — подобно ArcGIS Snap Tracks.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой GPS с временными метками."
              },
              "network": {
                "label": "Сеть",
                "description": "Линейный слой дорожной сети, к которому выполняется привязка."
              },
              "track_field": {
                "label": "Поле трека",
                "description": "Поле, идентифицирующее каждый трек/движущийся объект."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле со временем каждой точки (числовые секунды или ISO-8601)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой привязанных точек (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Радиус поиска кандидатов: учитываются только рёбра сети в пределах этого расстояния от измерения. Обязательный."
              },
              "max_candidates": {
                "label": "Макс. кандидатов",
                "description": "Максимальное число рёбер-кандидатов, сохраняемых для каждого измерения (по умолчанию 5)."
              }
            }
          },
          "solar_radiation": {
            "name": "Солнечная радиация",
            "description": "Приходящая солнечная радиация (Вт·ч/м²) по DEM за диапазон дат: прямая + рассеянная, с учётом уклона/экспозиции, затенения горизонтом и положения Солнца во времени — подобно ArcGIS Raster Solar Radiation.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр высот (в проекции, метры — для уклона и горизонта нужны реальные расстояния)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр суммарной радиации (Вт·ч/м²). Если не указан, сохраняется в памяти."
              },
              "direct_output": {
                "label": "Выход прямой радиации",
                "description": "Необязательный выходной растр для компоненты прямой радиации (Вт·ч/м²)."
              },
              "diffuse_output": {
                "label": "Выход рассеянной радиации",
                "description": "Необязательный выходной растр для компоненты рассеянной радиации (Вт·ч/м²)."
              },
              "start_day": {
                "label": "День начала",
                "description": "Первый день года (1-365) или дата в формате ISO (YYYY-MM-DD). По умолчанию 1."
              },
              "end_day": {
                "label": "День окончания",
                "description": "Последний день года (1-365) или дата в формате ISO. По умолчанию 365."
              },
              "day_interval": {
                "label": "Интервал дней",
                "description": "Шаг выборки в днях по всему диапазону (каждая выборка представляет столько дней). По умолчанию: диапазон/12 (около 12 выборок)."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Интервал в часах между выборками положения солнца в течение суток. По умолчанию 0.5."
              },
              "latitude": {
                "label": "Широта",
                "description": "Широта в градусах. По умолчанию: вычисляется по центру DEM для EPSG:4326 / 3857."
              },
              "transmittivity": {
                "label": "Прозрачность атмосферы",
                "description": "Пропускание атмосферы (0-1) для единичной воздушной массы. По умолчанию 0.6."
              },
              "diffuse_proportion": {
                "label": "Доля рассеянной радиации",
                "description": "Доля внеатмосферной горизонтальной облучённости, считаемая рассеянной радиацией неба (0-1). По умолчанию 0.3."
              },
              "horizon_distance": {
                "label": "Расстояние горизонта",
                "description": "Максимальная длина луча горизонта в ячейках (ограничивает расчёт теней). По умолчанию 100."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала DEM (с 1) (по умолчанию 1)."
              }
            }
          },
          "sort_features": {
            "name": "Сортировка объектов",
            "description": "Переупорядочивает векторный слой по полям атрибутов или вдоль заполняющей пространство кривой Гильберта (пространственная сортировка), подобно ArcGIS Sort — упорядочение Гильберта группирует пространственно близкие записи, улучшая отсечение в GeoParquet и локальность в PMTiles.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой в новом порядке. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'hilbert' (порядок по пространственной кривой; по умолчанию) или 'attribute' (по списку 'fields')."
              },
              "fields": {
                "label": "Поля",
                "description": "режим attribute: разделённые запятыми поля с необязательным направлением, например 'pop:desc,name:asc'."
              },
              "index_field": {
                "label": "Поле индекса",
                "description": "Необязательное имя поля для хранения расстояния каждого объекта вдоль кривой Гильберта."
              }
            }
          },
          "space_time_kernel_density": {
            "name": "Пространственно-временная плотность ядра",
            "description": "Пространственно-временная плотность ядра точек с метками времени: один канал плотности на временной срез (многоканальный растр) из разделимого пространственного (Епанечникова/квартического) x временного (треугольного/Епанечникова) ядра, так что каждый канал агрегирует точки, близкие и в пространстве, и во времени, подобно ArcGIS Space Time Kernel Density. Учитывающий время компаньон встроенного 2D heat_map.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой. Для географических данных (EPSG:4326/непомеченные lon-lat) используются метры по формуле гаверсинуса; для проекционных — единицы CRS. Для неточечных геометрий используется первая/представительная вершина."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного многоканального растра (по одному каналу на временной срез; драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: числовое поле (в собственных единицах) или строка даты/даты-времени ISO-8601."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Интервал среза: простое число (числовое time_field) или длительность вида '1w', '7d', '12h', '1M'. По умолчанию '1w'."
              },
              "temporal_bandwidth": {
                "label": "Временная ширина полосы",
                "description": "Полуширина временного ядра, те же единицы и синтаксис длительности, что и у time_step. По умолчанию: равна time_step."
              },
              "spatial_bandwidth": {
                "label": "Пространственная ширина полосы",
                "description": "Радиус пространственного ядра, в метрах для географического входа или в единицах CRS для проекционного. По умолчанию: максимальный экстент / 20."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS (градусы для географических). По умолчанию: максимальный экстент / 200."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Необязательное числовое поле с весом каждой точки. По умолчанию: каждая точка считается за 1."
              },
              "spatial_kernel": {
                "label": "Пространственное ядро",
                "description": "Форма пространственного ядра: 'epanechnikov' (по умолчанию) или 'quartic'."
              },
              "temporal_kernel": {
                "label": "Временное ядро",
                "description": "Форма временного ядра: 'triangular' (по умолчанию) или 'epanechnikov'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG для выходного растра (по умолчанию: из входного слоя)."
              }
            }
          },
          "spatial_association_between_zones": {
            "name": "Пространственная ассоциация между зонами",
            "description": "Измеряет, насколько сильно соответствуют друг другу два категориальных растра зон через V-меру (однородность/полнота) и оценки ассоциации по каждой зоне.",
            "params": {
              "zones1": {
                "label": "Зоны 1",
                "description": "Первый категориальный растр зон (например, земной покров). Та же сетка, что и у zones2."
              },
              "zones2": {
                "label": "Зоны 2",
                "description": "Второй категориальный растр зон (например, экорегионы) на той же сетке, что и zones1."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательная CSV-таблица по классам zones1 (класс, количество, ассоциация, доминирующий класс zones2 и его доля). Общие метрики всегда возвращаются в результате."
              },
              "band1": {
                "label": "Канал 1",
                "description": "Номер читаемого канала zones1 (с 1) (по умолчанию 1)."
              },
              "band2": {
                "label": "Канал 2",
                "description": "Номер читаемого канала zones2 (с 1) (по умолчанию 1)."
              }
            }
          },
          "spatial_eigenvector_filtering": {
            "name": "Пространственная фильтрация собственными векторами (MESF)",
            "description": "Генерирует собственные векторы Морана (пространственные фильтры) из матрицы пространственных весов и добавляет автокоррелированные компоненты как поля объясняющих переменных (MEV1, MEV2, …), подобно ArcGIS Decompose Spatial Structure / Create Spatial Component Explanatory Variables. Строит симметричную матрицу связности (смежность или симметризованный KNN), дважды центрирует её (M C M) и выполняет разложение по собственным значениям чистым Rust-решателем циклического метода Якоби; сохраняет собственные векторы, у которых индекс Морана I ≥ min_autocorrelation, ранжированные по убыванию и ограниченные max_components.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (точки/линии/полигоны; методы смежности требуют полигонов)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора — входные объекты с добавленными сохранёнными собственными векторами MEV1, MEV2, …. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "Концептуализация пространственных отношений: 'contiguity_edges' (rook), 'contiguity_edges_corners' (queen) или 'knn' (симметризованный). По умолчанию 'contiguity_edges_corners'."
              },
              "number_of_neighbors": {
                "label": "Число соседей",
                "description": "Число ближайших соседей k для method = knn. По умолчанию 8."
              },
              "min_autocorrelation": {
                "label": "Мин. автокорреляция",
                "description": "Минимальный индекс Морана I, необходимый для сохранения собственного вектора (положительная пространственная автокорреляция). По умолчанию 0.25."
              },
              "max_components": {
                "label": "Макс. компонент",
                "description": "Максимальное число выводимых собственных векторов, отбираемых по убыванию индекса Морана I. По умолчанию 15."
              }
            }
          },
          "spatial_outlier_detection": {
            "name": "Обнаружение пространственных выбросов",
            "description": "Оценивает точки по их локальному фактору выброса (LOF) — насколько изолирована каждая точка относительно локальной плотности её k ближайших соседей — и помечает главные выбросы, аналогично ArcGIS Spatial Outlier Detection. Заполняет пробел, оставленный бинарной меткой шума DBSCAN.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Выходные точки с оценкой LOF и признаком выброса. Если не указан, сохраняется в памяти."
              },
              "neighbors": {
                "label": "Соседи",
                "description": "Число ближайших соседей k (по умолчанию 20)."
              },
              "percent_outlier": {
                "label": "Процент выбросов",
                "description": "Помечать как выбросы указанный процент точек с наибольшим LOF (по умолчанию 5). Игнорируется, если задан 'threshold'."
              },
              "threshold": {
                "label": "Порог",
                "description": "Явный порог LOF: точки с LOF выше этого значения считаются выбросами (переопределяет percent_outlier)."
              }
            }
          },
          "spatially_constrained_multivariate_clustering": {
            "name": "Пространственно ограниченная многомерная кластеризация",
            "description": "Разбивает объекты на пространственно связные, однородные по атрибутам регионы алгоритмом SKATER (минимальное остовное дерево по графу смежности, разрезаемое для максимизации межкластерной дисперсии), с необязательными ограничениями размера/баланса. Каждый кластер связен по построению, в отличие от multivariate_clustering. Аналог ArcGIS Spatially Constrained Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные полигональные (или точечные) объекты."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выхода для входных объектов с добавленным полем CLUSTER_ID. Если не указан, сохраняется в памяти."
              },
              "analysis_fields": {
                "label": "Поля анализа",
                "description": "Разделённые запятыми или точками с запятой имена числовых полей для кластеризации."
              },
              "number_of_clusters": {
                "label": "Число кластеров",
                "description": "Целевое число кластеров (по умолчанию 5)."
              },
              "neighborhood": {
                "label": "Окрестность",
                "description": "'contiguity_edges' (rook, по умолчанию), 'contiguity_edges_corners' (queen) или 'knn'."
              },
              "number_of_neighbors": {
                "label": "Число соседей",
                "description": "Число соседей для окрестности 'knn' (по умолчанию 8)."
              },
              "constraint": {
                "label": "Ограничение",
                "description": "'none' (по умолчанию), 'feature_count' или 'attribute_value'."
              },
              "constraint_field": {
                "label": "Поле ограничения",
                "description": "Поле, суммируемое по каждому кластеру, когда 'constraint' равно 'attribute_value'."
              },
              "min_constraint": {
                "label": "Мин. ограничение",
                "description": "Минимальное число объектов или сумма атрибута на кластер; разрезы, нарушающие это условие, пропускаются."
              },
              "max_constraint": {
                "label": "Макс. ограничение",
                "description": "Максимальное число объектов или сумма атрибута на кластер; кластеры, превышающие его, делятся дальше даже сверх 'number_of_clusters'."
              },
              "scale_data": {
                "label": "Масштабировать данные",
                "description": "Выполнять z-стандартизацию полей анализа перед кластеризацией (по умолчанию true)."
              },
              "output_table": {
                "label": "Выходная таблица",
                "description": "Необязательный путь для сводки по кластерам (средние значения, R-квадрат по каждой переменной, псевдо-F)."
              }
            }
          },
          "spectral_index": {
            "name": "Спектральный индекс",
            "description": "Вычисляет спектральный индекс (NDVI, NDWI, NDBI, NBR, EVI, SAVI) по многоканальному растру.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь к файлу входного многоканального растра."
              },
              "index": {
                "label": "Индекс",
                "description": "Вычисляемый индекс: ndvi, ndwi, ndbi, nbr, evi или savi."
              },
              "red": {
                "label": "Красный",
                "description": "Номер красного канала (с 1)."
              },
              "nir": {
                "label": "NIR",
                "description": "Номер ближнего инфракрасного канала (с 1)."
              },
              "green": {
                "label": "Зелёный",
                "description": "Номер зелёного канала (с 1)."
              },
              "blue": {
                "label": "Синий",
                "description": "Номер синего канала (с 1)."
              },
              "swir": {
                "label": "SWIR",
                "description": "Номер коротковолнового инфракрасного канала (с 1)."
              },
              "soil_factor": {
                "label": "Почвенный фактор",
                "description": "Коэффициент коррекции почвы L для SAVI (по умолчанию 0.5)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, результат хранится в памяти."
              }
            }
          },
          "split_by_attributes": {
            "name": "Разделение по атрибутам",
            "description": "Разделяет векторный слой на один выходной файл для каждого уникального значения (или комбинации) заданных полей, аналогично ArcGIS Split By Attributes.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой."
              },
              "output_dir": {
                "label": "Выходной каталог",
                "description": "Выходной каталог; сюда записывается по одному файлу на группу (создаётся при необходимости)."
              },
              "fields": {
                "label": "Поля",
                "description": "Разделённые запятыми имена полей для разделения (составной ключ объединяет значения через '__')."
              },
              "format": {
                "label": "Формат",
                "description": "Расширение выходного формата: geojson (по умолчанию), fgb, parquet, shp."
              }
            }
          },
          "split_by_features": {
            "name": "Разделение по объектам",
            "description": "Обрезает входной слой по каждой зоне полигонального слоя разделения, записывая один выходной файл на каждое уникальное значение поля разделения. Зоны с общим значением предварительно сливаются, пустые зоны пропускаются. Аналог ArcGIS Split (Analysis).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Разделяемые объекты (точки, линии или полигоны)."
              },
              "split_features": {
                "label": "Объекты разделения",
                "description": "Полигональный слой, объекты которого задают зоны разделения."
              },
              "split_field": {
                "label": "Поле разделения",
                "description": "Поле слоя 'split_features', задающее имя каждого выходного файла."
              },
              "output_dir": {
                "label": "Выходной каталог",
                "description": "Каталог, в который записывается по одному выходному файлу на каждое уникальное значение разделения."
              },
              "output_format": {
                "label": "Выходной формат",
                "description": "Расширение/драйвер выходного файла: 'geojson' (по умолчанию), 'shp', 'gpkg', 'parquet', 'csv'."
              }
            }
          },
          "split_line_at_point": {
            "name": "Разделение линии в точке",
            "description": "Разделяет полилинейные объекты в местах точечных объектов, попадающих в радиус поиска, вставляя узел в каждой привязанной точке и выдавая один объект на каждый полученный подсегмент (атрибуты родителя сохраняются) — аналог ArcGIS Split Line At Point.",
            "params": {
              "input_lines": {
                "label": "Входные линии",
                "description": "Входной полилинейный векторный слой для разделения."
              },
              "point_features": {
                "label": "Точечные объекты",
                "description": "Точечный (или мультиточечный) векторный слой, положения которого задают узлы разделения."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Максимальное расстояние в единицах CRS линий между точкой и линией, при котором точка разделяет эту линию. Обязательный, положительный."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного линейного вектора (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              }
            }
          },
          "split_raster": {
            "name": "Разделение растра",
            "description": "Разделяет растр на отдельные тайлы по числу тайлов, фиксированному размеру в пикселях или полигональным объектам, с необязательным перекрытием в пикселях — аналог ArcGIS Split Raster. Каждый тайл сохраняет CRS и геопривязку.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр."
              },
              "output_dir": {
                "label": "Выходной каталог",
                "description": "Выходной каталог для файлов тайлов (создаётся при необходимости)."
              },
              "base_name": {
                "label": "Базовое имя",
                "description": "Префикс имён выходных файлов (по умолчанию 'tile')."
              },
              "split_method": {
                "label": "Метод разделения",
                "description": "'count' (сетка N×M, по умолчанию), 'size' (тайлы фиксированного размера в пикселях) или 'polygons' (одна обрезка на объект)."
              },
              "num_x": {
                "label": "Число по X",
                "description": "Число столбцов тайлов для 'count' (по умолчанию 2)."
              },
              "num_y": {
                "label": "Число по Y",
                "description": "Число строк тайлов для 'count' (по умолчанию 2)."
              },
              "tile_size_x": {
                "label": "Размер тайла X",
                "description": "Ширина тайла в пикселях для 'size' (по умолчанию 256)."
              },
              "tile_size_y": {
                "label": "Размер тайла Y",
                "description": "Высота тайла в пикселях для 'size' (по умолчанию 256)."
              },
              "polygons": {
                "label": "Полигоны",
                "description": "Полигональный векторный слой для режима 'polygons' (один тайл на объект)."
              },
              "overlap": {
                "label": "Перекрытие",
                "description": "Перекрытие в пикселях, добавляемое к каждому тайлу со всех сторон (по умолчанию 0)."
              },
              "format": {
                "label": "Формат",
                "description": "Расширение/драйвер выходного файла: 'tif' (по умолчанию) или 'png'."
              }
            }
          },
          "stack_profile": {
            "name": "Профиль стека",
            "description": "Выбирает значения нескольких растров поверхностей вдоль одной полилинии и выдаёт одну таблицу в длинном формате (LINE_ID, FIRST_DIST, FIRST_Z, SRC_ID, SRC_NAME), чтобы поверхности можно было сравнить в сечении по общей оси расстояний. Аналог ArcGIS Stack Profile.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входные линейные объекты для построения профиля."
              },
              "surfaces": {
                "label": "Поверхности",
                "description": "Разделённый запятыми или точками с запятой список путей к растрам поверхностей, опрашиваемым в указанном порядке."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходной таблицы профиля. Если не указан, сохраняется в памяти."
              },
              "sample_distance": {
                "label": "Расстояние выборки",
                "description": "Шаг между пикетами в единицах карты (по умолчанию: наименьший размер входной ячейки)."
              },
              "line_id_field": {
                "label": "Поле ID линии",
                "description": "Необязательное поле, задающее LINE_ID; по умолчанию используется индекс объекта."
              },
              "method": {
                "label": "Метод",
                "description": "Выборка по поверхности: 'bilinear' (по умолчанию) или 'nearest'."
              }
            }
          },
          "storage_capacity": {
            "name": "Ёмкость хранения",
            "description": "Перебирает уровни водной поверхности по DEM и сообщает площадь затопления и объём накопления на каждом уровне (кривая уровень-площадь-объём) по зонам анализа или по всей DEM, аналогично ArcGIS Storage Capacity.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Входной растр DEM (высоты)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV (zone_id, level, elevation, area, volume)."
              },
              "zones": {
                "label": "Зоны",
                "description": "Необязательный полигональный слой; одна кривая «уровень-площадь-объём» на полигон. Если не указан, вся DEM считается одной зоной."
              },
              "zone_id_field": {
                "label": "Поле ID зоны",
                "description": "Поле с именем каждой зоны в выходных данных (по умолчанию: индекс объекта)."
              },
              "num_levels": {
                "label": "Число уровней",
                "description": "Число шагов по высоте между минимумом и максимумом каждой зоны (по умолчанию 20). Игнорируется, если задан 'increment'."
              },
              "increment": {
                "label": "Инкремент",
                "description": "Фиксированный шаг по высоте между уровнями (единицы карты). Переопределяет 'num_levels'."
              },
              "min_elevation": {
                "label": "Мин. отметка",
                "description": "Необязательная нижняя граница высоты для перебора (по умолчанию: минимальная высота рельефа каждой зоны)."
              },
              "max_elevation": {
                "label": "Макс. отметка",
                "description": "Необязательная верхняя граница высоты для перебора (по умолчанию: максимальная высота рельефа каждой зоны)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала DEM (с 1) (по умолчанию 1)."
              }
            }
          },
          "strip_map_index_features": {
            "name": "Объекты индекса ленточной карты",
            "description": "Проходит вдоль каждой входной линии и выдаёт нумерованную последовательность повёрнутых перекрывающихся прямоугольников страниц, ориентированных по локальному пеленгу маршрута, для ленточных атласов вдоль шоссе, реки, трубопровода или тропы — аналог ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной линейный векторный слой для индексирования."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального вектора со страницами индекса (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "page_length": {
                "label": "Длина страницы",
                "description": "Длина каждой страницы вдоль маршрута, в единицах CRS. Обязательный."
              },
              "page_width": {
                "label": "Ширина страницы",
                "description": "Ширина каждой страницы поперёк маршрута, в единицах CRS. Обязательный."
              },
              "overlap": {
                "label": "Перекрытие",
                "description": "Доля [0, 1) от page_length, на которую соседние страницы перекрываются вдоль маршрута. По умолчанию 0."
              },
              "orientation": {
                "label": "Ориентация",
                "description": "along_line (по умолчанию): поворачивать каждую страницу по локальному азимуту хорды. horizontal/vertical: привязывать поворот к ближайшей оси запад-восток/север-юг."
              },
              "start_page": {
                "label": "Начальная страница",
                "description": "Номер первой присваиваемой страницы. По умолчанию 1."
              }
            }
          },
          "subdivide_polygon": {
            "name": "Разбиение полигона",
            "description": "Делит каждый полигон на равновеликие части (заданное число частей или целевая площадь каждой) прямыми параллельными разрезами под заданным углом, аналогично ArcGIS Subdivide Polygon.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной полигональный векторный слой (используйте проекционную/равновеликую CRS для действительно равных площадей)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного полигонального векторного слоя (драйвер определяется по расширению). Если не указан, результат хранится в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'equal_parts' (num_parts полос равной площади, по умолчанию) или 'equal_areas' (полосы площадью target_area, остаток в последней)."
              },
              "num_parts": {
                "label": "Число частей",
                "description": "Число равновеликих частей (для method=equal_parts). По умолчанию 2."
              },
              "target_area": {
                "label": "Целевая площадь",
                "description": "Площадь каждой части в единицах CRS (обязательна для method=equal_areas)."
              },
              "angle": {
                "label": "Угол",
                "description": "Ориентация разрезов в градусах (0 = вертикальные разрезы / горизонтальные полосы). По умолчанию 0."
              }
            }
          },
          "subset_features": {
            "name": "Подмножество объектов",
            "description": "Случайно разделяет слой объектов на обучающее подмножество и его дополнение (тестовое подмножество) по проценту или абсолютному числу, используя детерминированный генератор с заданным зерном. При необходимости стратифицируется по полю группы. Аналог ArcGIS Subset Features.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (любого типа геометрии)."
              },
              "output_training": {
                "label": "Выход обучающей выборки",
                "description": "Путь выхода для обучающей выборки. Если не указан, сохраняется в памяти."
              },
              "output_test": {
                "label": "Выход тестовой выборки",
                "description": "Необязательный путь выхода для дополняющей (тестовой) выборки. Если не указан, тестовая выборка сохраняется в памяти."
              },
              "size": {
                "label": "Размер",
                "description": "Размер обучающей выборки: процент (0-100) или абсолютное число объектов, согласно 'size_method' (по умолчанию 50)."
              },
              "size_method": {
                "label": "Метод размера",
                "description": "'percentage' (по умолчанию) или 'absolute'."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для воспроизводимого разделения (по умолчанию фиксированная константа)."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Необязательное поле для стратификации: каждая группа вносит свою пропорциональную долю в обучающую выборку."
              }
            }
          },
          "subset_multidimensional_raster": {
            "name": "Подмножество многомерного растра",
            "description": "Сужает многомерный растровый куб до подмножества его срезов по диапазону координат измерения, явным индексам или шагу (ArcGIS Subset Multidimensional Raster / Select By Dimension). Все кубические инструменты раунда 18 принимают весь куб, так что не было способа проанализировать окно исследования без повторной генерации входа вне каталога.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Многомерный растр или разделённый запятыми список совмещённых растров, каналы которых объединяются в один куб."
              },
              "dimension_values": {
                "label": "Значения измерения",
                "description": "Необязательные строго возрастающие координаты срезов (даты, глубины, длины волн), по одной на срез. Требуются для 'dimension_range'."
              },
              "dimension": {
                "label": "Измерение",
                "description": "Имя измерения, используется только в отчётах (по умолчанию 'slice')."
              },
              "dimension_range": {
                "label": "Диапазон измерения",
                "description": "Включающий диапазон координат в виде 'min,max'. Требует 'dimension_values'. Несовместим с 'indices'."
              },
              "indices": {
                "label": "Индексы",
                "description": "Явные индексы срезов (с 0), например '0,2,5'. Несовместимы с 'dimension_range'."
              },
              "step": {
                "label": "Шаг",
                "description": "Сохранять каждый N-й срез после применения остальных фильтров (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр-куб, по одному каналу на каждый сохранённый срез. Если не указан, сохраняется в памяти."
              }
            }
          },
          "summarize_categorical_raster": {
            "name": "Сводка по категориальному растру",
            "description": "Табулирует число ячеек, площадь и долю каждого класса категориального растра, по одной строке на срез для многоканальных/многомерных стеков, при необходимости ограничиваясь областью интереса (ArcGIS Summarize Categorical Raster). Встроенный raster_area записывает итоги по классам обратно в ячейки растра, а не в таблицу, и работает только с одним каналом, так что не может построить ряд площадей классов по датам, необходимый для анализа изменений растительного покрова. Для географических растров площадь ячейки интегрируется по строкам.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной категориальный растр (одно- или многоканальный)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы. Если не указан, результат сохраняется в памяти."
              },
              "aoi": {
                "label": "AOI",
                "description": "Необязательный полигональный слой, ограничивающий сводку областью интереса."
              },
              "aoi_id_field": {
                "label": "Поле ID AOI",
                "description": "Поле слоя 'aoi', идентифицирующее каждую область; если задано, сводка формируется по каждому объекту AOI."
              },
              "area_units": {
                "label": "Единицы площади",
                "description": "Единицы площади: map_units (по умолчанию), hectares или square_kilometers."
              },
              "include_nodata": {
                "label": "Включать NoData",
                "description": "Если true, NoData выводится отдельной строкой класса (по умолчанию false)."
              },
              "bands": {
                "label": "Каналы",
                "description": "Разделённый запятыми список каналов (с 1) для сводки (по умолчанию: все каналы)."
              }
            }
          },
          "summarize_nearby": {
            "name": "Сводка по окрестности",
            "description": "Буферизует входные объекты на одном или нескольких прямолинейных расстояниях и обобщает второй слой внутри каждого буфера: число объектов, площадь пересечения (полигоны), обрезанная длина (линии) и взвешенные по мере сумма/среднее числовых полей.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой, объекты которого буферизуются (точки, линии или полигоны), формат определяется автоматически (или дескриптор в памяти)."
              },
              "summary_features": {
                "label": "Сводные объекты",
                "description": "Векторный слой для сводки внутри каждого буфера (полигоны суммируются по площади пересечения, линии — по обрезанной длине, точки — по количеству)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "distances": {
                "label": "Расстояния",
                "description": "Разделённый запятыми список расстояний буферов в единицах CRS, например \"1000,2000,5000\". Сортируется по возрастанию; дубликаты и неположительные значения отбрасываются."
              },
              "sum_fields": {
                "label": "Суммируемые поля",
                "description": "Необязательные разделённые запятыми числовые поля слоя сводки для агрегирования. Каждое даёт столбцы sum_<field> и mean_<field> (взвешенные по площади для полигонов, по длине для линий, обычные для точек)."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Необязательное поле входного слоя, идентифицирующее каждый исходный объект в выходных данных. По умолчанию используется индекс входного объекта."
              }
            }
          },
          "summarize_percent_change": {
            "name": "Сводка процентного изменения",
            "description": "Подсчитывает инциденты текущего и предыдущего периода внутри каждого площадного объекта и сообщает разность количеств, процентное изменение и класс изменения. Процентное изменение пусто (класс new) там, где предыдущее количество равно нулю. Аналог ArcGIS Summarize Percent Change.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Площадные объекты (участки, кварталы, ячейки сетки), в которые выполняется сводка."
              },
              "current_features": {
                "label": "Текущие объекты",
                "description": "Точечные объекты инцидентов за текущий период."
              },
              "previous_features": {
                "label": "Предыдущие объекты",
                "description": "Точечные объекты инцидентов за предыдущий период."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выхода для областей с полями изменений. Если не указан, сохраняется в памяти."
              },
              "search_radius": {
                "label": "Радиус поиска",
                "description": "Необязательное расстояние в единицах карты; учитываются также инциденты в пределах этого расстояния от области, а не только находящиеся внутри неё. Обратите внимание, что положительный радиус приводит к перекрытию зон охвата, поэтому один инцидент может быть учтён несколькими областями (итоговые суммы по всему набору остаются без дублирования)."
              }
            }
          },
          "summarize_within": {
            "name": "Сводка внутри",
            "description": "Обобщает атрибуты слоя внутри существующего полигонального слоя, взвешивая частично перекрывающиеся объекты по площади или длине пересечения, аналогично ArcGIS Summarize Within.",
            "params": {
              "polygons": {
                "label": "Полигоны",
                "description": "Полигональный слой, в который выполняется сводка. Его объекты и атрибуты сохраняются."
              },
              "input": {
                "label": "Вход",
                "description": "Слой, по которому выполняется сводка (точечный, линейный или полигональный)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходных полигонов. Если не указан, результат сохраняется в памяти."
              },
              "fields": {
                "label": "Поля",
                "description": "Разделённые запятыми пары 'field:statistic', например 'pop:sum,income:mean'. Статистики: sum, mean, min, max, stddev, count."
              },
              "keep_all": {
                "label": "Сохранять все",
                "description": "Сохранять полигоны без пересекающихся объектов (по умолчанию true). При false пустые полигоны отбрасываются."
              },
              "shape_sum": {
                "label": "Сумма форм",
                "description": "Добавлять суммарное количество / длину / площадь пересечённой входной геометрии (по умолчанию true)."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Необязательное поле слоя, по которому выполняется сводка; выводит по одной сгруппированной строке сводки на каждое уникальное значение."
              }
            }
          },
          "summary_statistics": {
            "name": "Сводная статистика",
            "description": "GROUP BY в стиле SQL по одному или нескольким полям случаев: для каждой уникальной комбинации полей случаев вычисляет список агрегатов (поле, статистика) (count/sum/mean/min/max/std/first/last) плюс число записей группы. Выход — чистая таблица атрибутов. Без поля случаев даёт одну строку общего итога (аналог ArcGIS Summary Statistics; только count воспроизводит Frequency).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой или таблица атрибутов для агрегирования."
              },
              "statistics": {
                "label": "Статистика",
                "description": "Разделённый точками с запятой или запятыми список пар 'field statistic' (также принимается 'field:statistic'), например 'population sum; population mean; elev max'. Статистики: count, sum, mean, min, max, std, first, last."
              },
              "case_fields": {
                "label": "Поля случаев",
                "description": "Необязательные разделённые запятыми или точками с запятой имена полей группировки (GROUP BY). Если не указаны, формируется одна строка сводки по всей таблице."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы (драйвер определяется её расширением; GeoParquet или CSV). Если не указан, таблица сохраняется в памяти. Столбцы: поля группировки, число записей 'count', затем по одному столбцу '<field>_<statistic>' на каждую запрошенную пару."
              }
            }
          },
          "sun_shadow_volume": {
            "name": "Объём солнечной тени",
            "description": "Выдавливает 3D-тела вдоль солнечного вектора до земли для получения замкнутых тел объёма тени для заданных даты и времени (ArcGIS Sun Shadow Volume). shadow_image, shadow_animation и time_in_daylight работают с растровой DSM и выдают растры, а solar_radiation вычисляет облучённость — ни один не создаёт геометрию тени, так что на вопросы вроде «затенено ли это окно» или «какая часть воздушного пространства участка в тени» ответить нельзя. Выход сочетается с inside_3d, intersect_3d и union_3d.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Трёхмерные тела зданий или выдавленные контуры (MultiPolygon в виде треугольной сетки с координатой Z)."
              },
              "output": {
                "label": "Выход",
                "description": "Замкнутые тела объёмов теней. Если не указан, сохраняется в памяти."
              },
              "datetime": {
                "label": "Дата и время",
                "description": "Местные дата и время положения солнца в формате 'YYYY-MM-DDTHH:MM' или 'YYYY-MM-DD HH:MM'. Задаются параметром, а не берутся из системных часов, чтобы результаты были воспроизводимыми."
              },
              "latitude": {
                "label": "Широта",
                "description": "Широта в градусах, используемая для расчёта геометрии солнца. Обязательна: её невозможно вычислить без модуля проекций."
              },
              "utc_offset": {
                "label": "Смещение UTC",
                "description": "Смещение указанного местного времени от UTC в часах (по умолчанию 0)."
              },
              "adjusted_for_dst": {
                "label": "С учётом летнего времени",
                "description": "Считать указанное время переведённым на летнее, вычитая час перед солнечным расчётом (по умолчанию false), как в ArcGIS."
              },
              "ground_elevation": {
                "label": "Высота поверхности земли",
                "description": "Постоянная высота Z земной поверхности, на которую проецируется тень. По умолчанию: собственный минимум Z каждого объекта."
              },
              "max_length": {
                "label": "Макс. длина",
                "description": "Ограничение длины протягивания в единицах CRS, чтобы низкое солнце не создавало призму длиной в километры. По умолчанию: без ограничения."
              }
            }
          },
          "surface_difference": {
            "name": "Разность поверхностей",
            "description": "Выделяет полигонами, где одна поверхность лежит выше, ниже или на уровне другой, каждый с классом, площадью, объёмом и статистикой разности (ArcGIS Surface Difference). cut_fill измеряет те же величины, но выдаёт только растр меток регионов и CSV, так что у его регионов нет геометрии для оверлея, обрезки или соединения; surface_volume и polygon_volume измеряют относительно плоскости или внутри уже имеющихся полигонов, а не находят их.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Классифицируемый растр поверхности."
              },
              "reference": {
                "label": "Эталон",
                "description": "Опорная поверхность: путь к совмещённому растру или постоянная высота для сравнения с плоской поверхностью отсчёта."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой классифицированных регионов. Если не указан, сохраняется в памяти."
              },
              "output_raster": {
                "label": "Выходной растр",
                "description": "Выходной растр знаковой разности (вход минус опорная поверхность). Создаётся всегда; при отсутствии пути сохраняется в памяти."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Разности, отличающиеся от нуля не более чем на это значение, считаются совпадающими (по умолчанию 0.0)."
              },
              "min_area": {
                "label": "Мин. площадь",
                "description": "Отбрасывать регионы площадью меньше указанной в квадратных единицах карты."
              },
              "include_coincident": {
                "label": "Включать совпадающие",
                "description": "Выводить полигоны и для класса без изменений (по умолчанию false). Отключено по умолчанию, поскольку на большинстве сцен это один огромный фоновый полигон."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала входной поверхности (с 1) (по умолчанию 1)."
              },
              "reference_band": {
                "label": "Опорный канал",
                "description": "Номер канала опорной поверхности (с 1) (по умолчанию 1)."
              }
            }
          },
          "surface_parameters": {
            "name": "Параметры поверхности",
            "description": "Уклон, экспозиция или кривизна (mean/profile/tangential/plan/gaussian/casorati/contour_geodesic_torsion) по DEM через локальную квадратичную/биквадратичную подгонку поверхности методом наименьших квадратов по выбранному расстоянию окрестности, аналогично ArcGIS Surface Parameters — масштабно-адаптивный аналог встроенных инструментов рельефа с фиксированным окном 3×3.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр высот (DEM)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра. Если не указан, сохраняется в памяти."
              },
              "parameter": {
                "label": "Параметр",
                "description": "Вычисляемый параметр: slope (по умолчанию), aspect, mean_curvature, profile_curvature, tangential_curvature, plan_curvature, gaussian_curvature, casorati_curvature, contour_geodesic_torsion."
              },
              "fit": {
                "label": "Подгонка",
                "description": "Модель поверхности: 'quadratic' (6-членная, по умолчанию) или 'biquadratic' (9-членная)."
              },
              "neighborhood_distance": {
                "label": "Расстояние окрестности",
                "description": "Радиус окрестности в единицах карты (по умолчанию = размер одной ячейки, то есть окно 3×3)."
              },
              "neighborhood_type": {
                "label": "Тип окрестности",
                "description": "'fixed' (по умолчанию) использует полный радиус повсюду; 'adaptive' сужает окно до 1 ячейки рядом с пропусками данных и краями."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "surface_volume": {
            "name": "Объём поверхности",
            "description": "Интегрирует растровую поверхность относительно горизонтальной опорной плоскости, сообщая 2D-площадь, площадь 3D-поверхности и объём для части выше и/или ниже плоскости (аналог ArcGIS Surface Volume). Выемка/насыпь земляных работ и анализ ёмкости водохранилищ.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр поверхности высот."
              },
              "reference_plane": {
                "label": "Опорная плоскость",
                "description": "Высота опорной плоскости, относительно которой выполняется интегрирование (по умолчанию 0)."
              },
              "direction": {
                "label": "Направление",
                "description": "С какой стороны плоскости выполнять интегрирование: 'above', 'below' или 'both' (по умолчанию 'above')."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1) (по умолчанию 1)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного CSV для таблицы результатов. Если не указан, результаты возвращаются только в результате выполнения."
              }
            }
          },
          "table_to_geometry": {
            "name": "Таблица в геометрию",
            "description": "Строит линейные или эллиптические объекты из табличных полей: пары начальных/конечных координат (XY To Line), начало + пеленг + расстояние (Bearing Distance To Line) или центр + большая/малая ось + азимут (Table To Ellipse) — с построением плоских, геодезических линий и локсодромий.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входная таблица атрибутов или точечный векторный слой."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "mode": {
                "label": "Режим",
                "description": "'xy_to_line', 'bearing_distance' или 'ellipse'."
              },
              "line_type": {
                "label": "Тип линии",
                "description": "'geodesic' (по умолчанию, кратчайший путь по эллипсоиду WGS84), 'rhumb' (постоянный азимут) или 'planar' (прямые декартовы отрезки в единицах входных данных)."
              },
              "vertex_spacing": {
                "label": "Шаг вершин",
                "description": "Шаг уплотнения для кривых линий (geodesic/rhumb) и шаг выборки контура эллипса, в метрах для geodesic/rhumb или в единицах CRS для planar. По умолчанию: фиксированное число отрезков."
              },
              "polygon_output": {
                "label": "Выход полигонов",
                "description": "только для mode=ellipse: выводить заполненный полигон вместо замкнутого линейного контура. По умолчанию false."
              },
              "start_x": {
                "label": "Начало X",
                "description": "mode=xy_to_line: поле с начальной координатой X / долготой."
              },
              "start_y": {
                "label": "Начало Y",
                "description": "mode=xy_to_line: поле с начальной координатой Y / широтой."
              },
              "end_x": {
                "label": "Конец X",
                "description": "mode=xy_to_line: поле с конечной координатой X / долготой."
              },
              "end_y": {
                "label": "Конец Y",
                "description": "mode=xy_to_line: поле с конечной координатой Y / широтой."
              },
              "x": {
                "label": "X",
                "description": "mode=bearing_distance/ellipse: поле с координатой X / долготой начальной точки или центра."
              },
              "y": {
                "label": "Y",
                "description": "mode=bearing_distance/ellipse: поле с координатой Y / широтой начальной точки или центра."
              },
              "bearing": {
                "label": "Пеленг",
                "description": "mode=bearing_distance: поле с азимутом в градусах по часовой стрелке от севера."
              },
              "distance": {
                "label": "Расстояние",
                "description": "mode=bearing_distance: поле с расстоянием перемещения (метры для geodesic/rhumb, единицы CRS для planar)."
              },
              "major": {
                "label": "Большая ось",
                "description": "mode=ellipse: поле с длиной большой полуоси (метры для geodesic/rhumb, единицы CRS для planar)."
              },
              "minor": {
                "label": "Малая ось",
                "description": "mode=ellipse: поле с длиной малой полуоси (те же единицы, что и у большой)."
              },
              "azimuth": {
                "label": "Азимут",
                "description": "mode=ellipse: поле с направлением большой оси в градусах по часовой стрелке от севера."
              }
            }
          },
          "tabulate_intersection": {
            "name": "Табуляция пересечений",
            "description": "Зональная сводка вектор-по-вектору: распределяет слой классов (полигоны по площади, линии по длине пересечения, точки по количеству) по полигонам зон, сообщая меру пересечения, процент зоны и поля сумм, взвешенных по мере.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Полигональный слой зон, формат определяется автоматически (или дескриптор в памяти)."
              },
              "class_features": {
                "label": "Объекты классов",
                "description": "Векторный слой классов для распределения по зонам (полигоны суммируются по площади, линии — по длине пересечения, точки — по количеству)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "class_field": {
                "label": "Поле класса",
                "description": "Необязательное категориальное поле слоя классов; результаты группируются по зоне и этому значению. Не указывайте, чтобы все объекты слоя считались одним классом."
              },
              "sum_fields": {
                "label": "Суммируемые поля",
                "description": "Необязательные разделённые запятыми числовые поля слоя классов для распределения по каждой зоне (взвешенные по площади для полигонов, по длине для линий, суммируемые для точек)."
              },
              "zone_field": {
                "label": "Поле зоны",
                "description": "Необязательное поле, идентифицирующее каждую зону в выходных данных. По умолчанию используется индекс объекта зоны."
              }
            }
          },
          "thin_road_network": {
            "name": "Прореживание дорожной сети",
            "description": "Генерализует дорожную сеть для мелкомасштабного отображения: скрывает короткие дороги низкой иерархии, сохраняя связность, помечая каждую дорогу как видимую/прореженную (без разрушения данных), аналогично ArcGIS Thin Road Network.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной дорожный (линейный) векторный слой, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "min_length": {
                "label": "Мин. длина",
                "description": "Дороги короче этого значения (единицы CRS) становятся кандидатами на прореживание. Более длинные дороги сохраняются всегда."
              },
              "hierarchy_field": {
                "label": "Поле иерархии",
                "description": "Необязательное числовое поле класса дороги; меньшее значение = более важная (сохраняется дольше). Кандидаты прореживаются начиная с наибольшего номера класса."
              },
              "visibility_field": {
                "label": "Поле видимости",
                "description": "Имя выходного поля признака видимости (1 = сохранена, 0 = прорежена). По умолчанию 'visible'."
              },
              "keep_only": {
                "label": "Сохранять только",
                "description": "Если true, выводить только видимые дороги вместо пометки всех. По умолчанию false (без изменения данных)."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Расстояние, в пределах которого конечные точки дорог считаются одним пересечением. По умолчанию 1e-6."
              }
            }
          },
          "tile_grid_polygons": {
            "name": "Полигоны сетки тайлов",
            "description": "Выдаёт границы тайлов веб-карт в виде полигонов для уровня зума (или диапазона) и экстента, каждый с z/x/y и quadkey (ArcGIS Map Server Cache Tiling Scheme To Polygons, Create Vector Tile Index, Generate Tile Cache Tiling Scheme). Встроенные инструменты прямоугольных/гексагональных сеток строят произвольные сетки во входной CRS и не могут совпадать с квадродеревом WebMercator, которое используют инструменты PMTiles и raster_to_tiles.",
            "params": {
              "zoom": {
                "label": "Зум",
                "description": "Уровень масштабирования. Используйте вместе с 'max_zoom' для вывода пирамиды уровней."
              },
              "max_zoom": {
                "label": "Макс. зум",
                "description": "Необязательный максимальный уровень масштабирования; если задан, выводятся все уровни от 'zoom' до 'max_zoom'."
              },
              "extent": {
                "label": "Экстент",
                "description": "Необязательный растровый или векторный слой, границы которого обрезают сетку. Без него — весь мир на этом уровне масштабирования (с учётом 'max_tiles')."
              },
              "bbox": {
                "label": "Ограничивающий прямоугольник",
                "description": "Необязательный явный экстент в виде 'min_lon,min_lat,max_lon,max_lat' в градусах. Имеет приоритет над 'extent'."
              },
              "scheme": {
                "label": "Схема",
                "description": "'xyz' (по умолчанию, Google/OSM, y отсчитывается вниз от севера) или 'tms' (y отсчитывается вверх от юга)."
              },
              "output_crs": {
                "label": "Выходная CRS",
                "description": "'EPSG:3857' (по умолчанию, квадратные тайлы) или 'EPSG:4326' (четырёхугольники в градусах долготы/широты)."
              },
              "max_tiles": {
                "label": "Макс. тайлов",
                "description": "Жёсткое ограничение числа тайлов (по умолчанию 1000000); его превышение вызывает ошибку с указанием вычисленного количества."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой. Если не указан, сохраняется в памяти."
              }
            }
          },
          "time_series_clustering": {
            "name": "Кластеризация временных рядов",
            "description": "Кластеризует ячейки пространственно-временного куба H3 по сходству их временных рядов (значение, z-нормализованный профиль или корреляция) детерминированным методом k-медоидов, чтобы места, развивающиеся одинаково, группировались вместе, аналогично ArcGIS Time Series Clustering.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой в EPSG:4326 (долгота/широта) с полем временной метки."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле временной метки (числовое либо дата/время в формате ISO-8601)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой H3 с полями cluster_id/is_medoid. Если не указан, сохраняется в памяти."
              },
              "num_clusters": {
                "label": "Число кластеров",
                "description": "Число кластеров k (по умолчанию 4)."
              },
              "characteristic": {
                "label": "Характеристика",
                "description": "Расстояние между временными рядами: 'value' (исходные значения), 'profile' (z-нормализованные, по умолчанию) или 'correlation' (1 − r)."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Ширина временного шага: простое число (числовое time_field) или длительность вида '1w', '7d', '12h'. По умолчанию '1w'."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Необязательное числовое поле, суммируемое по каждой ячейке. По умолчанию: количество точек в ячейке."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 от 0 (самое грубое) до 15 (самое детальное); по умолчанию 7 (ячейки ~5 км²)."
              },
              "seed": {
                "label": "Зерно",
                "description": "Начальное значение генератора случайных чисел для воспроизводимой инициализации медоидов (по умолчанию 1)."
              }
            }
          },
          "time_series_cross_correlation": {
            "name": "Кросс-корреляция временных рядов",
            "description": "Поячеечная лаговая кросс-корреляция между двумя выровненными пространственно-временными стеками растров (аналог ArcGIS Time Series Cross Correlation / Multidimensional Raster Correlation): для каждой ячейки при необходимости удаляет тренд/сезонность, затем коррелирует ряд A с рядом B по лагам min_lag..=max_lag и сообщает лучший лаг и его корреляцию Пирсона, плюс необязательную корреляцию при нулевом лаге и псевдо-p-значение по эффективному размеру выборки Пайпера-Питермана. Двухпеременное дополнение с учётом лагов к однорядовым кубическим инструментам generate_trend_raster / change_point_detection — ничто встроенное не связывает две переменные во времени.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Стек A: многоканальный растр (по одному каналу на временной шаг) ИЛИ разделённый запятыми список путей к совмещённым одноканальным растрам в хронологическом порядке."
              },
              "secondary": {
                "label": "Вторичный",
                "description": "Стек B: та же форма и длина, что и у 'input' (многоканальный растр или список одноканальных растров через запятую)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр наилучшего лага (целочисленный лаг, максимизирующий |корреляцию|). Если не указан, сохраняется в памяти."
              },
              "corr_output": {
                "label": "Выход корреляции",
                "description": "Необязательный выходной растр (знаковой) корреляции Пирсона при наилучшем лаге."
              },
              "corr0_output": {
                "label": "Выход корреляции при нулевом лаге",
                "description": "Необязательный выходной растр корреляции при лаге 0 (одновременной)."
              },
              "pvalue_output": {
                "label": "Выход p-значения",
                "description": "Необязательный выходной растр псевдодвустороннего p-значения при наилучшем лаге (эффективный размер выборки Pyper-Peterman + z-преобразование Фишера)."
              },
              "min_lag": {
                "label": "Мин. лаг",
                "description": "Минимальный лаг в шагах времени (по умолчанию -6). A[t] сопоставляется с B[t+lag]."
              },
              "max_lag": {
                "label": "Макс. лаг",
                "description": "Максимальный лаг в шагах времени (по умолчанию 6). Должен быть >= min_lag."
              },
              "detrend": {
                "label": "Удалять тренд",
                "description": "Если true, вычитает линейный тренд OLS для каждого ряда перед вычислением корреляции (по умолчанию false)."
              },
              "deseasonalize": {
                "label": "Удалять сезонность",
                "description": "Если true, вычитает аддитивный сезонный цикл с периодом 'season_length' для каждого ряда перед вычислением корреляции (по умолчанию false)."
              },
              "season_length": {
                "label": "Длина сезона",
                "description": "Сезонный период (шаги времени), используемый, если 'deseasonalize' равно true (по умолчанию 12)."
              },
              "min_valid": {
                "label": "Мин. допустимых",
                "description": "Минимальное число допустимых перекрывающихся пар, необходимое для вычисления корреляции при лаге (по умолчанию 5)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер читаемого канала (с 1), когда стек задан списком одноканальных растров через запятую (по умолчанию 1). Игнорируется для многоканальных стеков."
              }
            }
          },
          "time_series_forecast": {
            "name": "Прогноз временных рядов",
            "description": "Прогнозирование по местоположениям на пространственно-временном кубе H3 (аналог ArcGIS Exponential Smoothing / Curve Fit Forecast): прогнозирует ряд каждой ячейки вперёд экспоненциальным сглаживанием Хольта или полиномиальной подгонкой кривых, выбирая для каждой ячейки модель с наименьшей RMSE на отложенной выборке, с прогнозами следующего/последнего шага и полушириной 90% доверительного интервала. Временное прогнозирование, которого не может дать встроенный пространственный trend_surface.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой событий с метками времени (долгота/широта)."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, содержащее время каждой точки: число или метка времени ISO-8601."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной полигональный слой H3 с атрибутами прогноза. Если не указан, сохраняется в памяти."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле для агрегирования по ячейкам (по умолчанию: количество точек)."
              },
              "steps": {
                "label": "Шаги",
                "description": "Число шагов времени для прогноза вперёд (по умолчанию 3)."
              },
              "model": {
                "label": "Модель",
                "description": "'auto' (наименьшее RMSE на отложенной выборке; по умолчанию), 'exp_smoothing', 'linear' или 'parabolic'."
              },
              "holdout": {
                "label": "Отложенная выборка",
                "description": "Число шагов времени, отложенных для проверки и выбора модели (по умолчанию 3)."
              },
              "time_step": {
                "label": "Шаг времени",
                "description": "Ширина шага времени в единицах time_field (по умолчанию 1)."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 0..15 (по умолчанию 7)."
              }
            }
          },
          "time_series_smoothing": {
            "name": "Сглаживание временных рядов",
            "description": "Сглаживает внутривыборочный временной ряд по местоположениям (аналог ArcGIS Time Series Smoothing): группирует объекты по id_field, упорядочивает каждую группу по time_field и добавляет сглаженное значение через скользящее среднее назад/центрированное/вперёд или локально-линейный проход с адаптивной шириной полосы (LOESS). Геометрия и все исходные атрибуты сохраняются. Дополняет time_series_forecast, который проецирует вперёд, а не сглаживает наблюдённый ряд.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной слой объектов с наблюдениями, имеющими временные метки."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Числовое поле, ряд значений которого сглаживается."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле, упорядочивающее каждый ряд: число или временная метка ISO-8601."
              },
              "id_field": {
                "label": "Поле ID",
                "description": "Поле, идентифицирующее каждое местоположение или ряд. Если не указано, все объекты образуют один ряд."
              },
              "method": {
                "label": "Метод",
                "description": "'moving_average' (по умолчанию) или 'local_linear' (LOESS с адаптивной шириной окна)."
              },
              "window": {
                "label": "Окно",
                "description": "moving_average: число точек в окне усреднения (по умолчанию 3)."
              },
              "bandwidth": {
                "label": "Ширина полосы",
                "description": "local_linear: число ближайших по времени точек, используемых в каждой локальной подгонке (по умолчанию 5)."
              },
              "alignment": {
                "label": "Выравнивание",
                "description": "Положение окна moving_average: 'backward', 'centered' (по умолчанию) или 'forward'."
              },
              "output_field": {
                "label": "Выходное поле",
                "description": "Имя добавляемого поля со сглаженными значениями (по умолчанию 'smoothed')."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного слоя. Если не указан, сохраняется в памяти."
              }
            }
          },
          "topo_to_raster": {
            "name": "Топо в растр",
            "description": "Интерполирует гидрологически корректную DEM по изолиниям, точкам отметок высот и необязательным линиям водотоков с помощью релаксации минимальной кривизны (тонкая пластина) с принудительным дренажом — аналог ArcGIS Topo To Raster (ANUDEM). В отличие от встроенных интерполяторов IDW/TIN/сплайна не создаёт террасы по изолиниям и удаляет ложные замкнутые понижения.",
            "params": {
              "contours": {
                "label": "Изолинии",
                "description": "Входной векторный слой горизонталей (высота считывается из elevation_field). Требуется хотя бы один из слоёв contours или points."
              },
              "points": {
                "label": "Точки",
                "description": "Входной точечный векторный слой отметок высот (высота считывается из elevation_field)."
              },
              "streams": {
                "label": "Водотоки",
                "description": "Необязательный линейный векторный слой водотоков, используемый для обеспечения дренажа (врезается в поверхность перед удалением стоков)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного растра DEM (драйвер определяется расширением). Если не указан, сохраняется в памяти."
              },
              "elevation_field": {
                "label": "Поле высоты",
                "description": "Имя числового поля высоты в слоях горизонталей и точек. По умолчанию: определяется автоматически (HEIGHT/ELEV/ELEVATION/Z, иначе первое числовое поле)."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS. По умолчанию: подбирается так, чтобы длинная ось сетки составляла около 400 ячеек."
              },
              "tension": {
                "label": "Натяжение",
                "description": "Жёсткость поверхности в диапазоне [0,1]: 0 = чистая тонкая пластина (наиболее гладкая), 1 = натянутая мембрана. По умолчанию 0.35."
              },
              "iterations": {
                "label": "Итерации",
                "description": "Максимальное число итераций SOR (по умолчанию 2000). Итерации прекращаются досрочно, когда максимальное изменение в ячейке падает ниже допуска."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Допуск сходимости: остановка, когда наибольшее изменение в ячейке за итерацию меньше этого значения (единицы высоты CRS). По умолчанию 0.01."
              },
              "enforce_drainage": {
                "label": "Обеспечивать дренаж",
                "description": "Удаляет ложные внутренние стоки после интерполяции, чтобы DEM дренировалась к своим краям (по умолчанию true)."
              },
              "stream_burn": {
                "label": "Врезка водотоков",
                "description": "Глубина (единицы высоты), на которую понижаются ячейки водотоков перед удалением стоков, чтобы направить по ним поток. По умолчанию 0 (авто = 1% перепада высот, если водотоки заданы)."
              }
            }
          },
          "trace_proximity_events": {
            "name": "Трассировка событий близости",
            "description": "Находит интервалы, когда два движущихся трека находились в пределах расстояния друг от друга в течение не менее минимальной длительности (события близости), и при необходимости трассирует транзитивные последующие контакты от затравочных сущностей, аналогично ArcGIS Trace Proximity Events.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Точечный слой с временными метками (используйте проекционную CRS; расстояния указаны в единицах карты)."
              },
              "track_field": {
                "label": "Поле трека",
                "description": "Поле, идентифицирующее каждый движущийся объект или трек."
              },
              "time_field": {
                "label": "Поле времени",
                "description": "Поле временной метки (числовые секунды или ISO-8601)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной линейный слой событий сближения. Если не указан, сохраняется в памяти."
              },
              "search_distance": {
                "label": "Расстояние поиска",
                "description": "Максимальное расстояние между двумя треками, при котором они считаются сблизившимися (единицы карты)."
              },
              "min_duration": {
                "label": "Мин. длительность",
                "description": "Минимальное время сближения, считающееся событием: секунды или длительность вида '5m', '1h' (по умолчанию 0)."
              },
              "entities": {
                "label": "Сущности",
                "description": "Необязательный список начальных идентификаторов треков через запятую, от которых прослеживаются последующие контакты (отслеживание контактов)."
              },
              "depth": {
                "label": "Глубина",
                "description": "Максимальное число поколений прослеживания от начальных треков (по умолчанию не ограничено)."
              }
            }
          },
          "transform_features": {
            "name": "Трансформация объектов",
            "description": "Применяет аффинное преобразование (сдвиг, поворот вокруг якоря, масштаб по осям, отражение) к каждой геометрии векторного слоя.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "dx": {
                "label": "Dx",
                "description": "Сдвиг по X, применяемый после масштабирования, отражения и поворота, в единицах CRS. По умолчанию 0."
              },
              "dy": {
                "label": "Dy",
                "description": "Сдвиг по Y, применяемый после масштабирования, отражения и поворота, в единицах CRS. По умолчанию 0."
              },
              "angle": {
                "label": "Угол",
                "description": "Поворот против часовой стрелки вокруг опорной точки, в градусах. По умолчанию 0."
              },
              "scale_x": {
                "label": "Масштаб X",
                "description": "Коэффициент масштабирования относительно опорной точки вдоль X. По умолчанию 1."
              },
              "scale_y": {
                "label": "Масштаб Y",
                "description": "Коэффициент масштабирования относительно опорной точки вдоль Y. По умолчанию 1."
              },
              "mirror_axis": {
                "label": "Ось отражения",
                "description": "Отражение относительно опорной точки: NONE (по умолчанию), X (отражение Y относительно горизонтальной оси) или Y (отражение X относительно вертикальной оси)."
              },
              "anchor": {
                "label": "Якорь",
                "description": "Опорная точка для масштабирования, отражения и поворота: CENTROID (центр ограничивающего прямоугольника, по умолчанию), ORIGIN (0,0) или XY (используются anchor_x/anchor_y)."
              },
              "anchor_x": {
                "label": "Якорь X",
                "description": "Координата X опорной точки; требуется, когда anchor=XY."
              },
              "anchor_y": {
                "label": "Якорь Y",
                "description": "Координата Y опорной точки; требуется, когда anchor=XY."
              }
            }
          },
          "transform_fields": {
            "name": "Трансформация полей",
            "description": "Стандартизирует, преобразует и кодирует поля атрибутов (аналог ArcGIS Standardize/Transform/Encode Field): z-оценка, min-max, робастная, log/log1p/sqrt/boxcox/обратная, биннирование равными интервалами/квантилями/ст. откл. и one-hot кодирование.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой (или таблица) с полями для преобразования."
              },
              "fields": {
                "label": "Поля",
                "description": "Имена полей для преобразования через запятую; одно и то же преобразование применяется к каждому из них."
              },
              "transform": {
                "label": "Трансформация",
                "description": "Применяемое преобразование: zscore, minmax, robust, log, log1p, sqrt, boxcox, inverse, bin, onehot."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной векторный слой с добавленными преобразованными полями. Если не указан, сохраняется в памяти."
              },
              "bins": {
                "label": "Бины",
                "description": "Число классов для 'bin' (по умолчанию 5)."
              },
              "bin_method": {
                "label": "Метод биннирования",
                "description": "Метод классификации для 'bin': equal_interval (по умолчанию), quantile или std_dev."
              },
              "boxcox_lambda": {
                "label": "Лямбда Бокса-Кокса",
                "description": "Фиксированная лямбда для 'boxcox'; если не указана, подбирается методом максимального правдоподобия (поиск золотым сечением)."
              },
              "suffix": {
                "label": "Суффикс",
                "description": "Суффикс имени выходного поля (по умолчанию зависит от преобразования, например '_z' для zscore)."
              },
              "drop_input": {
                "label": "Удалять вход",
                "description": "Если true, удаляет исходные поля из выхода после преобразования (по умолчанию false)."
              }
            }
          },
          "transform_route_events": {
            "name": "Трансформация событий маршрута",
            "description": "Переносит точечные события, измеренные относительно исходной системы маршрутов, на целевую систему маршрутов: восстанавливает XY каждого события по его исходному маршруту и мере, затем перемещает его на ближайший целевой маршрут в пределах допуска кластеризации, выдавая ID целевого маршрута и меру — аналог ArcGIS Transform Route Events.",
            "params": {
              "source_events": {
                "label": "Исходные события",
                "description": "Входной точечный слой событий. Каждый объект содержит идентификатор маршрута (route_id_field) и меру (measure_field)."
              },
              "source_routes": {
                "label": "Исходные маршруты",
                "description": "Исходная система маршрутов: линейный слой, объекты которого идентифицируются по route_id_field. Меры представляют собой расстояние от первой вершины каждого маршрута."
              },
              "target_routes": {
                "label": "Целевые маршруты",
                "description": "Целевая система маршрутов: линейный слой, на который переносятся события. Идентификаторы маршрутов берутся из target_id_field."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного точечного вектора (драйвер определяется расширением). Если не указан, результат сохраняется в памяти."
              },
              "route_id_field": {
                "label": "Поле ID маршрута",
                "description": "Поле с идентификатором маршрута в source_events и source_routes (по умолчанию 'route_id'). Если поле отсутствует, используется индекс объекта исходного маршрута."
              },
              "measure_field": {
                "label": "Поле меры",
                "description": "Числовое поле в source_events, содержащее меру исходной системы (по умолчанию 'measure')."
              },
              "target_id_field": {
                "label": "Поле ID цели",
                "description": "Поле с идентификатором маршрута в target_routes (по умолчанию: то же, что и route_id_field). Если поле отсутствует, используется индекс объекта целевого маршрута."
              },
              "cluster_tolerance": {
                "label": "Допуск кластеризации",
                "description": "Максимальное расстояние по XY (единицы CRS) от восстановленного местоположения события до целевого маршрута, при котором событие переносится. Значение 0 или отсутствие значения означает отсутствие ограничения (всегда выполняется привязка к ближайшему целевому маршруту)."
              }
            }
          },
          "transpose_fields": {
            "name": "Транспонирование полей",
            "description": "Преобразует широкую таблицу атрибутов в длинный формат: каждый перечисленный столбец значений становится отдельной строкой с меткой столбца, из которого он взят (ArcGIS Transpose Fields). pivot_table работает только из длинного в широкий формат, так что таблицы с одним столбцом на период нельзя было подать в инструменты временных рядов, которым нужна одна строка на наблюдение.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной векторный слой или таблица."
              },
              "transpose_fields": {
                "label": "Транспонирование полей",
                "description": "Столбцы значений для развёртывания, разделённые запятыми или точками с запятой."
              },
              "value_field": {
                "label": "Поле значений",
                "description": "Имя выходного столбца, содержащего значение ячейки (по умолчанию 'VALUE')."
              },
              "transposed_field": {
                "label": "Транспонированное поле",
                "description": "Имя выходного столбца, содержащего имя исходного столбца (по умолчанию 'FIELD')."
              },
              "field_labels": {
                "label": "Подписи полей",
                "description": "Необязательные метки, записываемые в 'transposed_field' вместо исходных имён столбцов, например '2000,2010,2020'. Должны иметь ту же длину, что и 'transpose_fields'."
              },
              "retain_fields": {
                "label": "Сохраняемые поля",
                "description": "Атрибуты, копируемые в каждую выходную строку. По умолчанию все неразвёрнутые поля."
              },
              "drop_nulls": {
                "label": "Отбрасывать пустые",
                "description": "Пропускает выходные строки, значение которых равно null (по умолчанию false)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной слой. Если не указан, сохраняется в памяти."
              }
            }
          },
          "trim_line": {
            "name": "Обрезка линии",
            "description": "Удаляет короткие висячие сегменты линий (выступы и отростки) короче допуска длины, сохраняя истинные пересечения и длинные линии.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного линейного векторного файла, формат определяется автоматически (или дескриптор в памяти)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходного вектора (драйвер по расширению). Если не указан, хранится в памяти."
              },
              "dangle_length": {
                "label": "Длина висячего конца",
                "description": "Допуск длины в единицах CRS. Висячий сегмент короче этого значения обрезается; более длинные висячие сегменты сохраняются. Должен быть положительным."
              },
              "keep_short": {
                "label": "Сохранять короткие",
                "description": "Если true (по умолчанию), короткие сегменты, не соединённые с обоих концов (изолированные), сохраняются; если false, они также удаляются. Сегменты, висящие ровно одним концом, всегда обрезаются, если они короткие."
              },
              "snap_tolerance": {
                "label": "Допуск привязки",
                "description": "Конечные точки, находящиеся в пределах этого расстояния (в единицах CRS), считаются одним узлом. По умолчанию 1e-6."
              }
            }
          },
          "union_3d": {
            "name": "3D-объединение",
            "description": "Вычисляет объединённый объём перекрывающихся замкнутых 3D-тел без двойного учёта их пересечений, плюс объёмы перекрытия по парам (ArcGIS Union 3D). Ни в одном реестре нет 3D-оверлея, так что суммирование капсул buffer_3d или оболочек minimum_bounding_volume сегодня дважды учитывает каждое перекрытие; polygon_volume и surface_volume измеряют только относительно опорной плоскости. Объёмы тел точны (суммирование тетраэдров со знаком); объединение оценивается по заполнению вокселей с указанным разрешением.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Замкнутые 3D-объёмные объекты (мультиполигоны в виде треугольных сеток с Z, какие выдают buffer_3d и minimum_bounding_volume)."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы объёмов по группам. Если не указан, сохраняется в памяти."
              },
              "group_field": {
                "label": "Поле группировки",
                "description": "Необязательное поле; тела объединяются в пределах каждого значения группы, а не по всему слою."
              },
              "output_overlap_table": {
                "label": "Выходная таблица перекрытий",
                "description": "Необязательный путь для объёмов перекрытия по парам. Если не указан, сохраняется в памяти (результат всё равно возвращается)."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Число воксельных отсчётов на ось, используемых для оценки объёма объединения, от 4 до 512 (по умолчанию 96). Большее значение точнее и медленнее."
              }
            }
          },
          "unwrap_phase": {
            "name": "Развёртывание фазы",
            "description": "Преобразует свёрнутую интерферометрическую фазу в (-pi, pi] в непрерывное абсолютное поле методом взвешенных наименьших квадратов, решаемым предобусловленным методом сопряжённых градиентов, с необязательным взвешиванием и маскированием по когерентности (ArcGIS Unwrap Phase). Ничто в обоих реестрах не разворачивает фазу — raster_calculator не может выразить глобальное решение, а встроенные спекл-фильтры сглаживают, а не разворачивают — так что выход фазы sar_coherence и flatten_interferogram пока не имеют непрерывной конечной точки.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Растр свёрнутой фазы в радианах или двухканальная интерферограмма I/Q."
              },
              "output": {
                "label": "Выход",
                "description": "Растр развёрнутой непрерывной фазы. Если не указан, сохраняется в памяти."
              },
              "method": {
                "label": "Метод",
                "description": "'least_squares_pcg' (по умолчанию), соответствует методу, поддерживаемому в ArcGIS."
              },
              "coherence": {
                "label": "Когерентность",
                "description": "Необязательный совмещённый растр когерентности, используемый как веса рёбер при решении, чтобы пиксели с низкой когерентностью меньше влияли на решение."
              },
              "coherence_threshold": {
                "label": "Порог когерентности",
                "description": "Маскирует пиксели, когерентность которых ниже этого значения (по умолчанию 0.3). Игнорируется, если растр когерентности не задан. Маскирование, разделяющее допустимые пиксели на несвязные компоненты, оставляет каждой компоненте, кроме той, что содержит опорный пиксель, собственную произвольную аддитивную константу."
              },
              "max_iterations": {
                "label": "Макс. итераций",
                "description": "Предельное число итераций PCG (по умолчанию 500)."
              },
              "tolerance": {
                "label": "Допуск",
                "description": "Относительная невязка, при которой решение останавливается (по умолчанию 1e-8)."
              },
              "reference_row": {
                "label": "Опорная строка",
                "description": "Строка пикселя, фиксируемого нулём, что задаёт аддитивную константу решения. По умолчанию: первый допустимый пиксель."
              },
              "reference_col": {
                "label": "Опорный столбец",
                "description": "Столбец фиксируемого пикселя. По умолчанию: первый допустимый пиксель."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), содержащего фазу. Не указывайте его для одноканального растра фазы или двухканальной интерферограммы I/Q (они определяются автоматически); задайте его, чтобы читать действительную фазу из конкретного канала многоканального стека. Для растра более чем с двумя каналами этот параметр ОБЯЗАТЕЛЕН, поскольку три и более каналов не образуют пару I/Q, а догадка вернула бы правдоподобную, но неверную фазу."
              }
            }
          },
          "validate_flow_direction": {
            "name": "Проверка направления стока",
            "description": "Сообщает о ячейках, делающих растр направления стока непригодным — коды, не являющиеся направлениями D8, внутренние ячейки без выхода, сток в NoData, сток за край и ячейки на циклическом пути стока — в виде точечного слоя проблем (ArcGIS Validate Flow Direction). Встроенный гидрологический набор повсюду использует растры указателей (d8_flow_accumulation, watershed, basins, trace_downslope_flowpaths), но ничто их не проверяет, так что растр, повреждённый передискретизацией, переклассификацией или обрезкой, даёт правдоподобный неверный ответ вместо ошибки, а цикл маршрутизации может зависнуть.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Проверяемый растр направлений стока (указателей)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной точечный слой, по одной точке на проблемную ячейку. Если не указан, сохраняется в памяти."
              },
              "flow_direction_type": {
                "label": "Тип направления стока",
                "description": "'d8' (по умолчанию) для одиночных кодов — степеней двойки, или 'mfd', где значение может быть суммой нескольких направлений."
              },
              "report_edge_outflow": {
                "label": "Сообщать о краевом оттоке",
                "description": "Сообщает о ячейках, сток из которых выходит за пределы растра (по умолчанию false). Это нормально на настоящей границе, но является реальным дефектом на обрезанной внутренней области."
              },
              "check_circular": {
                "label": "Проверять цикличность",
                "description": "Обнаруживает круговые пути стока (по умолчанию true)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер канала (с 1), содержащего направления (по умолчанию 1)."
              }
            }
          },
          "vector_convert": {
            "name": "Преобразование вектора",
            "description": "Преобразует векторный набор данных в другой формат (расширение выхода определяет драйвер).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла (формат определяется автоматически) или дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора; драйвер определяется его расширением (.geojson, .fgb, .shp, .gpkg, .parquet, ...). Если не указан, слой сохраняется в памяти."
              }
            }
          },
          "vector_to_h3": {
            "name": "Вектор в бины H3",
            "description": "Группирует векторный слой в ячейки дискретной глобальной сетки H3, подсчитывая объекты в каждой ячейке.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла (должен быть в географических координатах долгота/широта, EPSG:4326) или дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного вектора; драйвер определяется расширением (.geojson, .fgb, .parquet, ...). Если не указан, слой сохраняется в памяти."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Разрешение H3 от 0 (самое грубое) до 15 (самое детальное); по умолчанию 8 (ячейки ~0,7 км²)."
              }
            }
          },
          "vector_to_pmtiles": {
            "name": "Вектор в PMTiles",
            "description": "Упаковывает векторный слой в единый архив PMTiles (пирамида Mapbox Vector Tile).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла (GeoJSON, Shapefile, GeoPackage, FlatGeobuf, GeoParquet, ...)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла PMTiles (например /work/roads.pmtiles)."
              },
              "min_zoom": {
                "label": "Мин. зум",
                "description": "Минимальный уровень масштаба (по умолчанию 0)."
              },
              "max_zoom": {
                "label": "Макс. зум",
                "description": "Максимальный уровень масштаба (по умолчанию 14, максимум 18)."
              },
              "layer_name": {
                "label": "Имя слоя",
                "description": "Имя слоя внутри тайлов, используемое при оформлении (по умолчанию: имя входного слоя)."
              },
              "simplify": {
                "label": "Упрощать",
                "description": "Упрощает геометрию для каждого уровня масштаба (по умолчанию true)."
              },
              "drop_rate": {
                "label": "Доля отбрасывания",
                "description": "Скорость отбрасывания объектов на малых масштабах, как в tippecanoe (по умолчанию: без отбрасывания)."
              }
            }
          },
          "voxel_isosurface": {
            "name": "Изоповерхность вокселей",
            "description": "Извлекает триангулированную изоповерхность при одном или нескольких пороговых значениях из 3D-воксельного поля методом марширующих тетраэдров (ArcGIS Export Voxel Isosurface). Весь набор построения изолиний в обоих реестрах двумерен — линии из плоскости; это объёмный аналог, превращающий выход idw_3d или многомерного растра в отображаемую геометрию. Выдаёт соглашение о треугольных сетках, используемое buffer_3d и minimum_bounding_volume, так что результаты напрямую подаются в inside_3d.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Воксельное поле в виде многоканального растра: канал k — это Z-срез на высоте z_min + k * z_spacing."
              },
              "values": {
                "label": "Значения",
                "description": "Пороговое значение или значения: число, массив чисел в формате JSON или строка со значениями через запятую. По одной поверхности на каждое значение."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выхода для поверхностей из треугольной сетки. Если не указан, сохраняется в памяти."
              },
              "z_min": {
                "label": "Мин. Z",
                "description": "Координата Z первого среза (по умолчанию 0)."
              },
              "z_spacing": {
                "label": "Шаг Z",
                "description": "Вертикальный интервал между срезами (по умолчанию 1)."
              },
              "close_boundaries": {
                "label": "Замыкать границы",
                "description": "Закрывает поверхности крышками там, где они выходят на границу объёма, чтобы результат ограничивал замкнутое тело (по умолчанию true). Реализовано за счёт обхода дополнительной оболочки ниже изоуровня, поэтому крышка приварена к поверхности; она лежит между граничной плоскостью и одной ячейкой за ней. Это герметизирует только ВНЕШНИЕ грани: ячейки, соприкасающиеся с внутренними значениями NoData, пропускаются, поэтому область NoData, пересекающая извлечённую поверхность, всё равно оставляет открытый край (область, полностью лежащая внутри или снаружи контура, никогда не соприкасается с сеткой)."
              },
              "smooth": {
                "label": "Сглаживание",
                "description": "Число итераций лапласова сглаживания, применяемых к извлечённой сетке (по умолчанию 0)."
              }
            }
          },
          "warp_raster": {
            "name": "Деформация растра",
            "description": "Выполняет геопривязку растра по наземным опорным точкам (аналог ArcGIS Warp): подбирает полином порядка 1/2/3 по парам GCP исходный пиксель → мировые координаты и передискретизирует в новую геопривязанную сетку (ближайший/билинейно), сообщая остатки по каждой GCP и RMS-ошибку. Растровая половина конфляции, векторную половину которой уже покрывает rubbersheet_features.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной растр (его пиксельная сетка является исходным координатным пространством)."
              },
              "gcps": {
                "label": "Опорные точки GCP",
                "description": "Опорные точки в виде четвёрок 'col,row,x,y', разделённых ';' (>= 3 для порядка 1, 6 для порядка 2, 10 для порядка 3)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр с географической привязкой. Если не указан, сохраняется в памяти."
              },
              "transform": {
                "label": "Трансформация",
                "description": "Порядок полинома: 'poly1' (аффинный; по умолчанию), 'poly2' или 'poly3'."
              },
              "resampling": {
                "label": "Передискретизация",
                "description": "'nearest' (по умолчанию) или 'bilinear'."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах реального мира (по умолчанию: ширина входного растра, отображённая на целевой экстент)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG для указания выходной CRS (необязательно)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер трансформируемого канала (с 1) (по умолчанию 1)."
              }
            }
          },
          "weighted_voronoi": {
            "name": "Взвешенная диаграмма Вороного",
            "description": "Растр взвешенного распределения Вороного (рыночные зоны/зоны доминирования): назначает каждую ячейку объекту с наименьшим взвешенным расстоянием — мультипликативным (d/w, Аполлоний), аддитивным (d-w) или степенным (d²-w²) — аналог ArcGIS Generate Weighted Voronoi. Версия встроенного невзвешенного voronoi_diagram для неравнозначных объектов.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Входной точечный слой пунктов."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр распределения (индекс пункта с 1 для каждой ячейки). Если не указан, сохраняется в памяти."
              },
              "weight_field": {
                "label": "Поле веса",
                "description": "Числовое поле, задающее вес или привлекательность каждого пункта (по умолчанию: вес всех пунктов равен 1)."
              },
              "weight_type": {
                "label": "Тип весов",
                "description": "'multiplicative' (d/w; по умолчанию), 'additive' (d-w) или 'power' (d²-w²)."
              },
              "cell_size": {
                "label": "Размер ячейки",
                "description": "Размер выходной ячейки в единицах CRS (по умолчанию: экстент / 400)."
              },
              "margin": {
                "label": "Поле отступа",
                "description": "Доля экстента пунктов, на которую расширяется растр (по умолчанию 0.1)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Код EPSG для указания выхода (по умолчанию: из входного слоя)."
              }
            }
          },
          "write_geoparquet": {
            "name": "Запись GeoParquet",
            "description": "Преобразует векторный набор данных (GeoJSON, Shapefile, FlatGeobuf, GeoPackage, ...) в GeoParquet, по умолчанию с сортировкой Гильберта и сжатием ZSTD.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного векторного файла (формат определяется автоматически) или дескриптор в памяти."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла GeoParquet (например /work/data.parquet)."
              },
              "compression": {
                "label": "Сжатие",
                "description": "Сжатие столбцов: zstd (по умолчанию), snappy, gzip или uncompressed."
              },
              "hilbert_sort": {
                "label": "Сортировка Гильберта",
                "description": "Сортирует объекты вдоль кривой Гильберта для пространственной локальности (по умолчанию true)."
              }
            }
          },
          "write_pmtiles": {
            "name": "Растр в PMTiles",
            "description": "Визуализирует растр в единый архив PMTiles (пирамида тайлов PNG в Web Mercator).",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Путь входного растрового файла. Должен содержать исходную CRS (EPSG или WKT)."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла PMTiles (например /work/dem.pmtiles)."
              },
              "min_zoom": {
                "label": "Мин. зум",
                "description": "Минимальный уровень масштабирования (по умолчанию: один собственный уровень, соответствующий разрешению растра)."
              },
              "max_zoom": {
                "label": "Макс. зум",
                "description": "Максимальный уровень масштабирования (по умолчанию: как min_zoom)."
              },
              "band": {
                "label": "Канал",
                "description": "Номер визуализируемого канала (с 1) (по умолчанию 1)."
              },
              "colormap": {
                "label": "Цветовая карта",
                "description": "Цветовая карта: viridis (по умолчанию), magma, turbo, terrain или grayscale."
              },
              "method": {
                "label": "Метод",
                "description": "Метод передискретизации: bilinear (по умолчанию), nearest, cubic."
              },
              "min": {
                "label": "Min",
                "description": "Значение, отображаемое на нижний край цветовой карты (по умолчанию: минимум канала)."
              },
              "max": {
                "label": "Max",
                "description": "Значение, отображаемое на верхний край цветовой карты (по умолчанию: максимум канала)."
              }
            }
          },
          "zonal_characterization": {
            "name": "Зональная характеристика",
            "description": "Вычисляет статистику по нескольким растрам значений по одному растру зон за один проход, со статистикой для каждого растра и произвольными перцентилями, аналогично ArcGIS Zonal Characterization.",
            "params": {
              "zones": {
                "label": "Зоны",
                "description": "Растр зон; каждое отличающееся значение задаёт зону."
              },
              "rasters": {
                "label": "Растры",
                "description": "Записи вида 'path:statistic[:name]' через запятую, например 'dem.tif:mean,ndvi.tif:median'. Растры значений используют канал 1. Статистики: mean, sum, min, max, range, stddev, median, majority, minority, variety, count, percentile."
              },
              "output": {
                "label": "Выход",
                "description": "Необязательный путь выходной таблицы статистик. Если не указан, сохраняется в памяти."
              },
              "percentile": {
                "label": "Перцентиль",
                "description": "Процентиль (0-100), применяемый к любому растру со статистикой 'percentile' (по умолчанию 50)."
              },
              "zone_band": {
                "label": "Канал зон",
                "description": "Номер читаемого канала растра зон (с 1) (по умолчанию 1)."
              },
              "ignore_nodata": {
                "label": "Игнорировать NoData",
                "description": "Пропускает ячейки NoData в растрах значений (по умолчанию true). Если false, любая ячейка NoData в зоне делает статистику этой зоны равной null."
              }
            }
          },
          "zonal_fill": {
            "name": "Зональное заполнение",
            "description": "Заполняет каждую зону категориального растра минимальным значением растра весов, найденным вдоль границы этой зоны (аналог ArcGIS Zonal Fill) — строительный блок для ограниченных поверхностей, отсутствующий во встроенном наборе (fill основан на стоке, zonal_statistics только обобщает).",
            "params": {
              "zones": {
                "label": "Зоны",
                "description": "Категориальный растр зон (каждое отличающееся целое значение — это одна зона)."
              },
              "weight": {
                "label": "Вес",
                "description": "Совмещённый растр весов, минимум которого на границе заполняет каждую зону."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр. Если не указан, сохраняется в памяти."
              }
            }
          },
          "zonal_geometry": {
            "name": "Зональная геометрия",
            "description": "Геометрические меры по зонам из категориального растра зон (аналог ArcGIS Zonal Geometry): площадь, периметр, толщина, центроид и большая/малая ось + ориентация эллипса стандартного отклонения — аналог для формы зон, которого не дают встроенные zonal_statistics и zonal_histogram на основе значений.",
            "params": {
              "zones": {
                "label": "Зоны",
                "description": "Категориальный растр зон (каждое отличающееся целое значение — это одна зона)."
              },
              "output": {
                "label": "Выход",
                "description": "Выходной растр (режим растра) или путь CSV (режим as_table). Если не указан, сохраняется в памяти или возвращается только в результате."
              },
              "measure": {
                "label": "Мера",
                "description": "Измеряемая величина в режиме растра: 'area' (по умолчанию), 'perimeter', 'thickness', 'centroid_x', 'centroid_y', 'major_axis', 'minor_axis' или 'orientation'."
              },
              "as_table": {
                "label": "Как таблица",
                "description": "Если true, выводит по одной строке на зону со всеми величинами вместо растра по ячейкам (по умолчанию false)."
              }
            }
          },
          "zonal_histogram": {
            "name": "Зональная гистограмма",
            "description": "Табулирует распределение ячеек растра значений внутри каждой зоны: подсчёты классов (категориальный) или частоты по бинам (непрерывный) в виде кросс-таблицы зоны × классы.",
            "params": {
              "zones": {
                "label": "Зоны",
                "description": "Путь файла растра зон (целочисленные или категориальные идентификаторы зон)."
              },
              "value": {
                "label": "Значение",
                "description": "Путь файла растра значений; должен иметь ту же сетку, что и 'zones'."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного CSV: по одной строке на зону, по одному столбцу на класс или интервал."
              },
              "mode": {
                "label": "Режим",
                "description": "'classes' (по умолчанию) рассматривает каждое округлённое значение как отдельный класс, для целочисленных или категориальных растров значений. 'bins' группирует непрерывные значения в интервалы равной ширины."
              },
              "bins": {
                "label": "Бины",
                "description": "Число интервалов равной ширины для режима 'bins'. По умолчанию 10."
              },
              "percent": {
                "label": "Процент",
                "description": "Выводит долю каждого класса в процентах от допустимых ячеек зоны вместо количества ячеек. По умолчанию false."
              },
              "zone_band": {
                "label": "Канал зон",
                "description": "Номер читаемого канала (с 1) из 'zones'. По умолчанию 1."
              },
              "value_band": {
                "label": "Канал значений",
                "description": "Номер читаемого канала (с 1) из 'value'. По умолчанию 1."
              },
              "long_output": {
                "label": "Длинный формат выхода",
                "description": "Необязательный путь CSV для варианта в длинном формате (zone,class,count,percent)."
              }
            }
          },
          "extract_cog_subset": {
            "name": "Извлечение подмножества COG",
            "description": "Извлекает подмножество по ограничивающему прямоугольнику из локального или HTTP Cloud Optimized GeoTIFF.",
            "params": {
              "input": {
                "label": "Вход",
                "description": "Локальный файл COG. Укажите либо input, либо url."
              },
              "url": {
                "label": "URL",
                "description": "URL файла COG по HTTP(S). Укажите либо url, либо input; для источников HTTP используются запросы диапазонов байтов."
              },
              "bbox": {
                "label": "Ограничивающий прямоугольник",
                "description": "Ограничивающий прямоугольник в виде minX,minY,maxX,maxY в bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS ограничивающего прямоугольника",
                "description": "Код EPSG координат ограничивающего прямоугольника."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла COG."
              },
              "level": {
                "label": "Уровень",
                "description": "Читаемый уровень обзорных изображений COG; 0 — полное разрешение."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Целевой размер выходного пикселя. Используются единицы output_crs, если output_crs задан; иначе единицы bbox_crs. Если уровень не указан, выбирается ближайшее обзорное изображение COG."
              },
              "output_crs": {
                "label": "Выходная CRS",
                "description": "Необязательный выходной код EPSG. Если задан, выборка перепроецируется в эту CRS. Для исходных CRS, которые не могут быть записаны как метаданные EPSG, по умолчанию используется bbox_crs."
              },
              "nodata": {
                "label": "NoData",
                "description": "Необязательное выходное значение NoData. Используется как заполнитель при перепроецировании и записывается в метаданные выхода как значение NoData."
              }
            }
          },
          "extract_wms_subset": {
            "name": "Извлечение подмножества WMS",
            "description": "Запрашивает подмножество по ограничивающему прямоугольнику у конечной точки WMS GetMap и записывает его как COG со сжатием Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "URL конечной точки WMS."
              },
              "layers": {
                "label": "Слои",
                "description": "Имя или имена слоёв WMS через запятую."
              },
              "styles": {
                "label": "Стили",
                "description": "Имя или имена стилей WMS через запятую. По умолчанию пусто."
              },
              "bbox": {
                "label": "Ограничивающий прямоугольник",
                "description": "Ограничивающий прямоугольник в виде minX,minY,maxX,maxY в bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS ограничивающего прямоугольника",
                "description": "Код EPSG координат ограничивающего прямоугольника."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла COG."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Целевой размер выходного пикселя в единицах output_crs, если output_crs задан; иначе в единицах bbox_crs."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина запрашиваемого изображения в пикселях. Используется, если не указано разрешение."
              },
              "height": {
                "label": "Высота",
                "description": "Высота запрашиваемого изображения в пикселях. Используется, если не указано разрешение."
              },
              "output_crs": {
                "label": "Выходная CRS",
                "description": "Необязательный код EPSG выхода или запроса. По умолчанию bbox_crs."
              },
              "format": {
                "label": "Формат",
                "description": "Формат изображения WMS. По умолчанию image/geotiff."
              },
              "version": {
                "label": "Версия",
                "description": "Версия WMS. По умолчанию 1.1.1."
              },
              "nodata": {
                "label": "NoData",
                "description": "Необязательное выходное значение NoData."
              }
            }
          },
          "extract_xyz_tile_subset": {
            "name": "Извлечение подмножества тайлов XYZ",
            "description": "Загружает растровые тайлы XYZ для ограничивающего прямоугольника, собирает их в мозаику и записывает RGB COG со сжатием Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "Шаблон URL тайлов XYZ, например https://.../{z}/{x}/{y}.png."
              },
              "zoom": {
                "label": "Зум",
                "description": "Уровень масштаба XYZ."
              },
              "bbox": {
                "label": "Ограничивающий прямоугольник",
                "description": "Ограничивающий прямоугольник в виде minX,minY,maxX,maxY в bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS ограничивающего прямоугольника",
                "description": "Код EPSG координат ограничивающего прямоугольника."
              },
              "output": {
                "label": "Выход",
                "description": "Путь выходного файла COG."
              },
              "resolution": {
                "label": "Разрешение",
                "description": "Целевой размер выходного пикселя в единицах output_crs. По умолчанию используется собственное разрешение тайлов."
              },
              "width": {
                "label": "Ширина",
                "description": "Ширина выхода в пикселях. Используется, если не указано разрешение."
              },
              "height": {
                "label": "Высота",
                "description": "Высота выхода в пикселях. Используется, если не указано разрешение."
              },
              "output_crs": {
                "label": "Выходная CRS",
                "description": "Необязательный выходной код EPSG. По умолчанию bbox_crs."
              },
              "tile_size": {
                "label": "Размер тайла",
                "description": "Размер тайла в пикселях. По умолчанию 256."
              },
              "subdomains": {
                "label": "Поддомены",
                "description": "Необязательные буквы поддоменов для {s}, например abc."
              },
              "nodata": {
                "label": "NoData",
                "description": "Необязательное выходное значение NoData, используемое для отсутствующих или прозрачных пикселей."
              }
            }
          }
        }
      },
      "whitebox": {
        "categories": {
          "conversion": "Преобразование",
          "conversionGeometryTopology": "Преобразование - Геометрия и топология",
          "conversionRasterVectorConversion": "Преобразование - Растр/вектор",
          "conversionVectorTableIO": "Преобразование - Ввод-вывод векторов и таблиц",
          "hydrology": "Гидрология",
          "hydrologyDepressionsStorage": "Гидрология - Понижения и накопление",
          "hydrologyFlowRouting": "Гидрология - Маршрутизация стока",
          "hydrologyHydrologicIndices": "Гидрология - Гидрологические индексы",
          "hydrologyStreamsLongitudinalAnalysis": "Гидрология - Водотоки - Продольный анализ",
          "hydrologyStreamsNetworkExtraction": "Гидрология - Водотоки - Извлечение сети",
          "hydrologyStreamsOrderingMetrics": "Гидрология - Водотоки - Показатели порядка",
          "hydrologyWatershedsBasins": "Гидрология - Водосборы и бассейны",
          "lidarAnalysisMetrics": "LiDAR - Метрики анализа",
          "lidarFilteringClassification": "LiDAR - Фильтрация и классификация",
          "lidarIOManagement": "LiDAR - Ввод-вывод и управление",
          "lidarInterpolationGridding": "LiDAR - Интерполяция и построение сетки",
          "projectionAndGeoreferencing": "Проекции и геопривязка",
          "raster": "Растр",
          "rasterDistanceCost": "Растр - Расстояние и стоимость",
          "rasterLocalNeighborhood": "Растр - Локальная окрестность",
          "rasterOverlayMath": "Растр - Оверлейная алгебра",
          "rasterReclassifyMask": "Растр - Переклассификация и маска",
          "rasterSpatialStatistics": "Растр - Пространственная статистика",
          "remoteSensingChangeDetection": "Дистанционное зондирование - Выявление изменений",
          "remoteSensingClassification": "Дистанционное зондирование - Классификация",
          "remoteSensingEdgeFeatureDetection": "Дистанционное зондирование - Обнаружение границ и объектов",
          "remoteSensingEnhancementContrast": "Дистанционное зондирование - Улучшение и контраст",
          "remoteSensingFilters": "Дистанционное зондирование - Фильтры",
          "remoteSensingObia": "Дистанционное зондирование - OBIA",
          "remoteSensingRadiometricCorrection": "Дистанционное зондирование - Радиометрическая коррекция",
          "remoteSensingSar": "Дистанционное зондирование - SAR",
          "remoteSensingSpectralAnalytics": "Дистанционное зондирование - Спектральная аналитика",
          "remoteSensingThermalEmissivity": "Дистанционное зондирование - Тепловые данные и излучательная способность",
          "terrain": "Рельеф",
          "terrainDerivatives": "Рельеф - Производные",
          "terrainLandformIndices": "Рельеф - Индексы форм рельефа",
          "terrainMultiscaleSignatures": "Рельеф - Многомасштабные сигнатуры",
          "terrainRoughnessTexture": "Рельеф - Шероховатость и текстура",
          "terrainVisibility": "Рельеф - Видимость",
          "terrainWorkflowProducts": "Рельеф - Результаты рабочих процессов",
          "vector": "Вектор",
          "vectorAttributeAnalysis": "Вектор - Анализ атрибутов",
          "vectorGeometryProcessing": "Вектор - Обработка геометрии",
          "vectorLinearReferencing": "Вектор - Линейная привязка",
          "vectorNetworkAnalysis": "Вектор - Сетевой анализ",
          "vectorOnlineData": "Вектор - Онлайн-данные",
          "vectorOverlayAnalysis": "Вектор - Оверлейный анализ",
          "vectorSamplingGridding": "Вектор - Выборка и построение сетки",
          "vectorShapeMetrics": "Вектор - Метрики формы",
          "vectorSpatialStatistics": "Вектор - Пространственная статистика"
        },
        "menuTool": {
          "calculate_transit_service_frequency": "Вычисление частоты транзитного обслуживания",
          "excel_to_table": "Excel в таблицу",
          "extract_scanned_features": "Извлечение отсканированных объектов",
          "features_to_gpx": "Объекты в GPX",
          "features_to_gtfs": "Объекты в GTFS",
          "gpx_to_features": "GPX в объекты",
          "gtfs_to_features": "GTFS в объекты",
          "h3_to_vector": "Ячейки H3 в полигоны",
          "h3_polyfill": "Заполнение H3",
          "kml_to_features": "KML в объекты",
          "pmtiles_extract": "Извлечение из PMTiles",
          "raster_to_h3": "Растр в бины H3",
          "write_pmtiles": "Растр в PMTiles",
          "raster_to_tiles": "Растр в тайлы XYZ",
          "read_geoparquet": "Чтение GeoParquet",
          "vector_convert": "Преобразование вектора",
          "vector_to_h3": "Вектор в бины H3",
          "vector_to_pmtiles": "Вектор в PMTiles",
          "write_geoparquet": "Запись GeoParquet",
          "fix_dangling_arcs": "Исправление висячих дуг",
          "lines_to_polygons": "Линии в полигоны",
          "multipart_to_singlepart": "Составные в простые",
          "polygons_to_lines": "Полигоны в линии",
          "remove_polygon_holes": "Удаление отверстий полигонов",
          "singlepart_to_multipart": "Простые в составные",
          "topology_rule_autofix": "Автоисправление правил топологии",
          "topology_rule_validate": "Проверка правил топологии",
          "topology_validation_report": "Отчёт о проверке топологии",
          "convert_nodata_to_zero": "Преобразование NoData в ноль",
          "modify_nodata_value": "Изменение значения NoData",
          "new_raster_from_base_raster": "Новый растр по базовому растру",
          "new_raster_from_base_vector": "Новый растр по базовому вектору",
          "raster_to_vector_lines": "Растр в векторные линии",
          "raster_to_vector_points": "Растр в векторные точки",
          "raster_to_vector_polygons": "Растр в векторные полигоны",
          "remove_raster_polygon_holes": "Удаление отверстий растровых полигонов",
          "set_nodata_value": "Установка значения NoData",
          "vector_lines_to_raster": "Векторные линии в растр",
          "vector_points_to_raster": "Векторные точки в растр",
          "vector_polygons_to_raster": "Векторные полигоны в растр",
          "add_point_coordinates_to_table": "Добавление координат точек в таблицу",
          "clean_vector": "Очистка вектора",
          "csv_points_to_vector": "Точки CSV в вектор",
          "export_table_to_csv": "Экспорт таблицы в CSV",
          "join_tables": "Соединение таблиц",
          "merge_table_with_csv": "Слияние таблицы с CSV",
          "merge_vectors": "Слияние векторов",
          "reinitialize_attribute_table": "Переинициализация таблицы атрибутов",
          "vector_summary_statistics": "Сводная статистика вектора",
          "delineate_depressions": "Выделение понижений",
          "delineate_mounts": "Выделение возвышенностей",
          "enforce_river_monotonicity": "Обеспечение монотонности рек",
          "extract_sinks": "Извлечение стоков",
          "fill_spill_merge": "Заполнение-перелив-слияние",
          "topo_to_raster": "Топо в растр",
          "breach_depressions_least_cost": "Прорыв понижений по наименьшей стоимости",
          "breach_single_cell_pits": "Прорыв одноячеечных ям",
          "burn_streams": "Врезка водотоков",
          "burn_streams_at_roads": "Врезка водотоков у дорог",
          "depth_in_sink": "Глубина в стоке",
          "fill_burn": "Заполнение и врезка",
          "fill_depressions": "Заполнение понижений",
          "fill_depressions_planchon_and_darboux": "Заполнение понижений (Planchon и Darboux)",
          "fill_depressions_wang_and_liu": "Заполнение понижений (Wang и Liu)",
          "fill_pits": "Заполнение ям",
          "flatten_lakes": "Выравнивание озёр",
          "impoundment_size_index": "Индекс размера водохранилища",
          "insert_dams": "Вставка плотин",
          "raise_walls": "Поднятие стенок",
          "sink": "Сток",
          "stochastic_depression_analysis": "Стохастический анализ понижений",
          "topological_breach_burn": "Топологический прорыв и врезка",
          "upslope_depression_storage": "Ёмкость понижений вверх по склону",
          "average_flowpath_slope": "Средний уклон пути стока",
          "average_upslope_flowpath_length": "Средняя длина пути стока вверх по склону",
          "d8_flow_accum": "Аккумуляция стока D8",
          "d8_mass_flux": "Массовый поток D8",
          "d8_pointer": "Указатель D8",
          "dinf_flow_accum": "Аккумуляция стока D-infinity",
          "dinf_mass_flux": "Массовый поток D-infinity",
          "dinf_pointer": "Указатель D-infinity",
          "downslope_flowpath_length": "Длина пути стока вниз по склону",
          "fd8_flow_accum": "Аккумуляция стока FD8",
          "fd8_pointer": "Указатель FD8",
          "flow_accum_full_workflow": "Полный рабочий процесс аккумуляции стока",
          "flow_length_diff": "Разность длин стока",
          "max_upslope_flowpath_length": "Максимальная длина пути стока вверх по склону",
          "max_upslope_value": "Максимальное значение вверх по склону",
          "mdinf_flow_accum": "Аккумуляция стока MD-infinity",
          "minimal_dispersion_flow_algorithm": "Алгоритм стока с минимальной дисперсией",
          "num_inflowing_neighbours": "Число притекающих соседей",
          "qin_flow_accumulation": "Аккумуляция стока Qin",
          "quinn_flow_accumulation": "Аккумуляция стока Quinn",
          "rho8_flow_accum": "Аккумуляция стока Rho8",
          "rho8_pointer": "Указатель Rho8",
          "trace_downslope_flowpaths": "Трассировка путей стока вниз по склону",
          "depth_to_water": "Глубина до воды",
          "distance_to_outlet": "Расстояние до устья",
          "downslope_distance_to_stream": "Расстояние до водотока вниз по склону",
          "downslope_index": "Индекс нисходящего склона",
          "edge_contamination": "Краевое загрязнение",
          "elev_relative_to_watershed_min_max": "Высота относительно мин./макс. водосбора",
          "elevation_above_stream": "Высота над водотоком",
          "elevation_above_stream_euclidean": "Высота над водотоком (евклидова)",
          "find_noflow_cells": "Поиск ячеек без стока",
          "find_parallel_flow": "Поиск параллельного стока",
          "hydrologic_connectivity": "Гидрологическая связность",
          "relative_stream_power_index": "Индекс относительной мощности потока",
          "sediment_transport_index": "Индекс транспорта наносов",
          "wetness_index": "Индекс влажности",
          "farthest_channel_head": "Самый дальний исток",
          "find_main_stem": "Поиск главного русла",
          "length_of_upstream_channels": "Длина вышележащих русел",
          "long_profile": "Продольный профиль",
          "long_profile_from_points": "Продольный профиль из точек",
          "extract_streams": "Извлечение водотоков",
          "extract_valleys": "Извлечение долин",
          "prune_vector_streams": "Обрезка векторных водотоков",
          "raster_streams_to_vector": "Растровые водотоки в вектор",
          "rasterize_streams": "Растеризация водотоков",
          "remove_short_streams": "Удаление коротких водотоков",
          "repair_stream_vector_topology": "Исправление топологии векторных водотоков",
          "river_centerlines": "Осевые линии рек",
          "hack_stream_order": "Порядок водотоков по Хаку",
          "horton_ratios": "Коэффициенты Хортона",
          "horton_stream_order": "Порядок водотоков по Хортону",
          "shreve_stream_magnitude": "Магнитуда водотоков по Шриву",
          "strahler_order_basins": "Бассейны по порядку Стралера",
          "strahler_stream_order": "Порядок водотоков по Стралеру",
          "stream_link_class": "Класс звена водотока",
          "stream_link_identifier": "Идентификатор звена водотока",
          "stream_link_length": "Длина звена водотока",
          "stream_link_slope": "Уклон звена водотока",
          "stream_slope_continuous": "Непрерывный уклон водотока",
          "topological_stream_order": "Топологический порядок водотоков",
          "tributary_identifier": "Идентификатор притока",
          "vector_stream_network_analysis": "Анализ векторной сети водотоков",
          "basins": "Бассейны",
          "flood_order": "Порядок затопления",
          "hillslopes": "Склоны",
          "isobasins": "Изобассейны",
          "jenson_snap_pour_points": "Привязка точек стока (Jenson)",
          "longest_flowpath": "Самый длинный путь стока",
          "max_branch_length": "Максимальная длина ветви",
          "snap_pour_points": "Привязка точек стока",
          "subbasins": "Суббассейны",
          "unnest_basins": "Развёртывание бассейнов",
          "watershed": "Водосбор",
          "watershed_from_raster_pour_points": "Водосбор по растровым точкам стока",
          "assign_projection_lidar": "Назначение проекции LiDAR",
          "colourize_based_on_class": "Окрашивание по классу",
          "colourize_based_on_point_returns": "Окрашивание по отражениям точек",
          "find_flightline_edge_points": "Поиск краевых точек маршрутов съёмки",
          "individual_tree_detection": "Обнаружение отдельных деревьев",
          "lidar_eigenvalue_features": "Признаки собственных значений LiDAR",
          "lidar_histogram": "Гистограмма LiDAR",
          "lidar_info": "Информация о LiDAR",
          "lidar_kappa": "Каппа LiDAR",
          "lidar_point_density": "Плотность точек LiDAR",
          "lidar_point_return_analysis": "Анализ отражений точек LiDAR",
          "lidar_point_stats": "Статистика точек LiDAR",
          "lidar_ransac_planes": "Плоскости LiDAR методом RANSAC",
          "lidar_rooftop_analysis": "Анализ крыш по LiDAR",
          "normal_vectors": "Векторы нормалей",
          "classify_buildings_in_lidar": "Классификация зданий в LiDAR",
          "classify_lidar": "Классификация LiDAR",
          "classify_overlap_points": "Классификация перекрывающихся точек",
          "clip_lidar_to_polygon": "Обрезка LiDAR по полигону",
          "erase_polygon_from_lidar": "Стирание полигона из LiDAR",
          "filter_lidar": "Фильтрация LiDAR",
          "filter_lidar_by_percentile": "Фильтрация LiDAR по перцентилю",
          "filter_lidar_by_reference_surface": "Фильтрация LiDAR по опорной поверхности",
          "filter_lidar_classes": "Фильтрация классов LiDAR",
          "filter_lidar_noise": "Фильтрация шума LiDAR",
          "filter_lidar_scan_angles": "Фильтрация LiDAR по углам сканирования",
          "height_above_ground": "Высота над землёй",
          "improved_ground_point_filter": "Улучшенный фильтр наземных точек",
          "individual_tree_segmentation": "Сегментация отдельных деревьев",
          "lidar_classify_subset": "Классификация подмножества LiDAR",
          "lidar_elevation_slice": "Срез LiDAR по высоте",
          "lidar_remove_outliers": "Удаление выбросов LiDAR",
          "lidar_segmentation": "Сегментация LiDAR",
          "lidar_segmentation_based_filter": "Фильтр LiDAR на основе сегментации",
          "modify_lidar": "Изменение LiDAR",
          "normalize_lidar": "Нормализация LiDAR",
          "remove_duplicates": "Удаление дубликатов",
          "ascii_to_las": "ASCII в LAS",
          "las_to_ascii": "LAS в ASCII",
          "las_to_shapefile": "LAS в Shapefile",
          "lidar_colourize": "Окрашивание LiDAR",
          "lidar_join": "Объединение LiDAR",
          "lidar_shift": "Сдвиг LiDAR",
          "lidar_tile": "Разбиение LiDAR на тайлы",
          "lidar_tophat_transform": "Преобразование Top-hat для LiDAR",
          "recover_flightline_info": "Восстановление информации о маршрутах съёмки",
          "select_tiles_by_polygon": "Выбор тайлов по полигону",
          "sort_lidar": "Сортировка LiDAR",
          "split_lidar": "Разделение LiDAR",
          "flightline_overlap": "Перекрытие маршрутов съёмки",
          "lidar_block_maximum": "Блочный максимум LiDAR",
          "lidar_block_minimum": "Блочный минимум LiDAR",
          "lidar_construct_vector_tin": "Построение векторной TIN из LiDAR",
          "lidar_contour": "Изолинии из LiDAR",
          "lidar_digital_surface_model": "Цифровая модель поверхности из LiDAR",
          "lidar_hex_bin": "Гексагональное биннирование LiDAR",
          "lidar_hillshade": "Отмывка рельефа из LiDAR",
          "lidar_idw_interpolation": "Интерполяция IDW из LiDAR",
          "lidar_nearest_neighbour_gridding": "Построение сетки LiDAR методом ближайшего соседа",
          "lidar_radial_basis_function_interpolation": "Интерполяция LiDAR радиальными базисными функциями",
          "lidar_sibson_interpolation": "Интерполяция LiDAR методом Сибсона",
          "lidar_thin": "Прореживание LiDAR",
          "lidar_thin_high_density": "Прореживание LiDAR высокой плотности",
          "lidar_tile_footprint": "Контур тайла LiDAR",
          "lidar_tin_gridding": "Построение сетки LiDAR по TIN",
          "build_network_topology": "Построение топологии сети",
          "closest_facility_network": "Ближайший объект обслуживания в сети",
          "generate_network_nodes": "Создание узлов сети",
          "k_shortest_paths_network": "K кратчайших путей в сети",
          "location_allocation_network": "Размещение и распределение в сети",
          "map_matching_v1": "Сопоставление с картой V1",
          "multimodal_od_cost_matrix": "Мультимодальная матрица стоимости OD",
          "multimodal_routes_from_od": "Мультимодальные маршруты из OD",
          "multimodal_shortest_path": "Мультимодальный кратчайший путь",
          "network_accessibility_metrics": "Метрики доступности сети",
          "network_centrality_metrics": "Метрики центральности сети",
          "network_connected_components": "Связные компоненты сети",
          "network_node_degree": "Степень узлов сети",
          "network_od_cost_matrix": "Матрица стоимости OD сети",
          "network_routes_from_od": "Маршруты сети из OD",
          "network_service_area": "Зона обслуживания сети",
          "network_topology_audit": "Аудит топологии сети",
          "od_sensitivity_analysis": "Анализ чувствительности OD",
          "shortest_path_network": "Кратчайший путь в сети",
          "snap_points_to_network": "Привязка точек к сети",
          "split_lines_at_intersections": "Разделение линий на пересечениях",
          "transfer_attributes": "Перенос атрибутов",
          "travelling_salesman_problem": "Задача коммивояжёра",
          "vehicle_routing_cvrp": "Маршрутизация транспорта CVRP",
          "vehicle_routing_pickup_delivery": "Маршрутизация транспорта с подбором и доставкой",
          "vehicle_routing_vrptw": "Маршрутизация транспорта VRPTW",
          "georeference_raster_from_control_points": "Геопривязка растра по опорным точкам",
          "orthorectification": "Ортотрансформирование",
          "reproject_lidar": "Перепроецирование LiDAR",
          "reproject_vector": "Перепроецирование вектора",
          "aggregate_multidimensional_raster": "Агрегирование многомерного растра",
          "analyze_changes_ccdc": "Анализ изменений методом CCDC",
          "apply_radiometric_calibration": "Применение радиометрической калибровки",
          "assign_projection_raster": "Назначение проекции растру",
          "band_collection_statistics": "Статистика набора каналов",
          "block_statistics": "Блочная статистика",
          "boundary_clean": "Очистка границ",
          "cell_position_statistics": "Статистика положения ячеек",
          "cell_statistics": "Статистика ячеек",
          "classification_accuracy_assessment": "Оценка точности классификации",
          "combine": "Объединять",
          "composite_bands": "Композит каналов",
          "compute_sar_indices": "Вычисление индексов SAR",
          "contour_with_barriers": "Изолинии с барьерами",
          "convert_sar_units": "Преобразование единиц SAR",
          "coregister_rasters": "Совмещение растров",
          "corridor": "Коридор",
          "cost_back_link": "Обратная связь стоимости",
          "cut_fill": "Выемка и насыпь",
          "darcy_flow": "Поток Дарси",
          "dem_filter": "Фильтр DEM",
          "detect_image_anomalies": "Обнаружение аномалий изображения",
          "diffusion_interpolation_with_barriers": "Диффузионная интерполяция с барьерами",
          "dimensional_moving_statistics": "Размерная скользящая статистика",
          "empirical_bayesian_kriging": "Эмпирический байесовский кригинг",
          "euclidean_direction": "Евклидово направление",
          "expand_shrink": "Расширение / Сжатие",
          "extract_cog_subset": "Извлечение подмножества COG",
          "extract_ocean_winds": "Извлечение океанских ветров",
          "extract_spectra_from_image": "Извлечение спектров из изображения",
          "extract_wms_subset": "Извлечение подмножества WMS",
          "extract_xyz_tile_subset": "Извлечение подмножества тайлов XYZ",
          "find_argument_statistics": "Поиск статистики аргумента",
          "flatten_interferogram": "Выравнивание интерферограммы",
          "focal_flow": "Фокальный сток",
          "focal_statistics": "Фокальная статистика",
          "frequency_comparison": "Сравнение частот",
          "fuzzy_overlay": "Нечёткий оверлей",
          "gaussian_geostatistical_simulations": "Гауссово геостатистическое моделирование",
          "multidimensional_anomaly": "Создание многомерной аномалии",
          "generate_trend_raster": "Создание растра тренда",
          "goldstein_phase_filter": "Фазовый фильтр Goldstein",
          "idw_3d": "IDW 3D",
          "interpolate_from_spatiotemporal_points": "Интерполяция по пространственно-временным точкам",
          "interpolate_with_barriers": "Интерполяция с барьерами",
          "kernel_density_ratio": "Отношение плотности ядра",
          "kernel_interpolation_with_barriers": "Ядерная интерполяция с барьерами",
          "landtrendr": "LandTrendr",
          "las_height_metrics": "Метрики высот LAS",
          "line_density": "Плотность линий",
          "line_statistics": "Статистика линий",
          "local_polynomial_interpolation": "Локальная полиномиальная интерполяция",
          "locate_regions": "Локализация регионов",
          "matched_filter_target_detection": "Обнаружение целей согласованным фильтром (CEM/ACE)",
          "maximum_likelihood_classification": "Классификация максимального правдоподобия",
          "merge_multidimensional_rasters": "Слияние многомерных растров",
          "multicriteria_overlay": "Многокритериальный оверлей",
          "multidimensional_principal_components": "Многомерные главные компоненты",
          "multidimensional_raster_correlation": "Корреляция многомерных растров",
          "multilook": "Мультилукинг",
          "multitemporal_coherence": "Многовременная когерентность",
          "observer_points": "Точки наблюдения",
          "optimal_interpolation": "Оптимальная интерполяция",
          "path_distance": "Путевое расстояние",
          "percentile_contours": "Перцентильные изолинии",
          "point_statistics": "Статистика точек",
          "porous_puff": "Пористый выброс",
          "predict_using_trend_raster": "Предсказание по растру тренда",
          "presence_only_prediction": "Предсказание только по присутствию",
          "pycnophylactic_interpolation": "Пикнофилактическая интерполяция",
          "radiometric_terrain_flattening": "Радиометрическое выравнивание рельефа",
          "raster_normalize": "Нормализация растра",
          "regression_kriging": "Регрессионный кригинг",
          "remove_thermal_noise": "Удаление теплового шума",
          "render_raster_png": "Визуализация растра в PNG",
          "reproject_raster": "Перепроецирование растра",
          "rescale_by_function": "Масштабирование по функции",
          "sar_coherence": "Когерентность SAR",
          "slice_raster": "Нарезка растра",
          "solar_radiation": "Солнечная радиация",
          "space_time_kernel_density": "Пространственно-временная плотность ядра",
          "spatial_association_between_zones": "Пространственная ассоциация между зонами",
          "spectral_index": "Спектральный индекс",
          "split_raster": "Разделение растра",
          "storage_capacity": "Ёмкость хранения",
          "subset_multidimensional_raster": "Подмножество многомерного растра",
          "summarize_categorical_raster": "Сводка по категориальному растру",
          "surface_parameters": "Параметры поверхности",
          "surface_volume": "Объём поверхности",
          "time_series_cross_correlation": "Кросс-корреляция временных рядов",
          "unwrap_phase": "Развёртывание фазы",
          "warp_raster": "Деформация растра",
          "weighted_voronoi": "Взвешенная диаграмма Вороного",
          "zonal_characterization": "Зональная характеристика",
          "zonal_fill": "Зональное заполнение",
          "zonal_geometry": "Зональная геометрия",
          "zonal_histogram": "Зональная гистограмма",
          "abs": "Модуль",
          "aggregate_raster": "Агрегирование растра",
          "anova": "ANOVA",
          "arccos": "Arccos",
          "arcosh": "Arcosh",
          "arcsin": "Arcsin",
          "arctan": "Arctan",
          "arsinh": "Arsinh",
          "artanh": "Artanh",
          "atan2": "Atan2",
          "block_maximum": "Блочный максимум",
          "block_minimum": "Блочный минимум",
          "boundary_shape_complexity": "Сложность формы границы",
          "ceil": "Округление вверх",
          "centroid_raster": "Центроид (растр)",
          "clip_raster_to_polygon": "Обрезка растра по полигону",
          "clump": "Группировка",
          "cos": "Cos",
          "cosh": "Cosh",
          "create_plane": "Создание плоскости",
          "crispness_index": "Индекс чёткости",
          "cross_tabulation": "Кросс-табуляция",
          "cumulative_distribution": "Кумулятивное распределение",
          "dbscan": "DBSCAN",
          "decrement": "Декремент",
          "edge_proportion": "Доля краёв",
          "equal_to": "Равно",
          "erase_polygon_from_raster": "Стирание полигона из растра",
          "exp": "Exp",
          "exp2": "Exp2",
          "fft_random_field": "Случайное поле FFT",
          "filter_raster_features_by_area": "Фильтрация растровых объектов по площади",
          "find_patch_edge_cells": "Поиск краевых ячеек участков",
          "floor": "Округление вниз",
          "greater_than": "Больше",
          "greater_than_or_equal_to": "Больше или равно",
          "heat_map": "Тепловая карта",
          "idw_interpolation": "Интерполяция IDW",
          "image_autocorrelation": "Автокорреляция изображения",
          "image_correlation": "Корреляция изображений",
          "image_regression": "Регрессия изображений",
          "increment": "Инкремент",
          "inplace_add": "Сложение на месте",
          "inplace_divide": "Деление на месте",
          "inplace_multiply": "Умножение на месте",
          "inplace_subtract": "Вычитание на месте",
          "integer_division": "Целочисленное деление",
          "inverse_pca": "Обратный PCA",
          "is_nodata": "Является NoData",
          "kappa_index": "Индекс каппа",
          "ks_normality_test": "Тест нормальности KS",
          "less_than": "Меньше",
          "less_than_or_equal_to": "Меньше или равно",
          "list_unique_values_raster": "Список уникальных значений растра",
          "ln": "Ln",
          "log10": "Log10",
          "log2": "Log2",
          "map_features": "Картографирование объектов",
          "max": "Max",
          "min": "Min",
          "modified_shepard_interpolation": "Модифицированная интерполяция Шепарда",
          "narrowness_index": "Индекс узости",
          "negate": "Отрицание",
          "nibble": "Заполнение (Nibble)",
          "not_equal_to": "Не равно",
          "ordinary_cokriging": "Ординарный кокригинг",
          "paired_sample_t_test": "Парный t-тест",
          "phi_coefficient": "Коэффициент фи",
          "principal_component_analysis": "Анализ главных компонент",
          "print_geotiff_tags": "Печать тегов GeoTIFF",
          "quantiles": "Квантили",
          "radial_basis_function_interpolation": "Интерполяция радиальными базисными функциями",
          "radius_of_gyration": "Радиус инерции",
          "random_field": "Случайное поле",
          "random_forest_classification_fit": "Классификация случайным лесом - Обучение",
          "random_forest_classification_predict": "Классификация случайным лесом - Предсказание",
          "random_forest_regression_fit": "Регрессия случайным лесом - Обучение",
          "random_forest_regression_predict": "Регрессия случайным лесом - Предсказание",
          "random_sample": "Случайная выборка",
          "raster_area": "Площадь растра",
          "raster_calculator": "Растровый калькулятор",
          "raster_cell_assignment": "Назначение значений ячеек растра",
          "raster_histogram": "Гистограмма растра",
          "raster_perimeter": "Периметр растра",
          "raster_summary_stats": "Сводная статистика растра",
          "reciprocal": "Обратная величина",
          "rescale_value_range": "Масштабирование диапазона значений",
          "root_mean_square_error": "Среднеквадратическая ошибка",
          "round": "Округление",
          "shape_complexity_index_raster": "Индекс сложности формы (растр)",
          "sieve": "Просеивание",
          "sin": "Sin",
          "sinh": "Sinh",
          "sqrt": "Sqrt",
          "square": "Квадрат",
          "tan": "Tan",
          "tanh": "Tanh",
          "tin_interpolation": "Интерполяция TIN",
          "to_degrees": "В градусы",
          "to_radians": "В радианы",
          "trend_surface": "Поверхность тренда",
          "trend_surface_vector_points": "Поверхность тренда по векторным точкам",
          "truncate": "Усечение",
          "turning_bands_simulation": "Моделирование вращающимися полосами",
          "two_sample_ks_test": "Двухвыборочный тест KS",
          "wilcoxon_signed_rank_test": "Тест знаковых рангов Уилкоксона",
          "z_scores": "Z-оценки",
          "zonal_statistics": "Зональная статистика",
          "buffer_raster": "Буфер растра",
          "cost_allocation": "Распределение по стоимости",
          "cost_distance": "Стоимостное расстояние",
          "cost_pathway": "Стоимостной путь",
          "euclidean_allocation": "Евклидово распределение",
          "euclidean_distance": "Евклидово расстояние",
          "image_correlation_neighbourhood_analysis": "Корреляция изображений по окрестности",
          "natural_neighbour_interpolation": "Интерполяция естественного соседа",
          "nearest_neighbour_interpolation": "Интерполяция ближайшего соседа",
          "add": "Сложение",
          "average_overlay": "Оверлей среднего",
          "bool_and": "Логическое И",
          "bool_not": "Логическое НЕ",
          "bool_or": "Логическое ИЛИ",
          "bool_xor": "Логическое исключающее ИЛИ",
          "count_if": "Подсчёт по условию",
          "divide": "Деление",
          "highest_position": "Позиция наибольшего",
          "lowest_position": "Позиция наименьшего",
          "max_absolute_overlay": "Оверлей максимума по модулю",
          "max_overlay": "Оверлей максимума",
          "min_absolute_overlay": "Оверлей минимума по модулю",
          "min_overlay": "Оверлей минимума",
          "modulo": "Остаток от деления",
          "multiply": "Умножение",
          "multiply_overlay": "Оверлей произведения",
          "percent_equal_to": "Процент равных",
          "percent_greater_than": "Процент больших",
          "percent_less_than": "Процент меньших",
          "pick_from_list": "Выбор из списка",
          "power": "Степень",
          "standard_deviation_overlay": "Оверлей стандартного отклонения",
          "subtract": "Вычитание",
          "sum_overlay": "Оверлей суммы",
          "update_nodata_cells": "Обновление ячеек NoData",
          "weighted_overlay": "Взвешенный оверлей",
          "weighted_sum": "Взвешенная сумма",
          "conditional_evaluation": "Условная оценка",
          "reclass": "Переклассификация",
          "reclass_equal_interval": "Переклассификация равными интервалами",
          "geographically_weighted_regression_raster": "Географически взвешенная регрессия для растра",
          "getis_ord_gi_star_raster": "Getis-Ord Gi* для растра",
          "inhomogeneous_intensity_raster": "Растр неоднородной интенсивности",
          "local_kriging": "Локальный кригинг",
          "local_morans_i_lisa_raster": "Локальный индекс Морана I (LISA) для растра",
          "ordinary_kriging": "Ординарный кригинг",
          "simple_kriging": "Простой кригинг",
          "spacetime_kriging": "Пространственно-временной кригинг",
          "spatial_error_regression_raster": "Регрессия с пространственной ошибкой для растра",
          "spatial_lag_regression_raster": "Регрессия с пространственным лагом для растра",
          "universal_kriging": "Универсальный кригинг",
          "change_vector_analysis": "Анализ вектора изменений",
          "image_difference_change_detection": "Выявление изменений по разности изображений",
          "pca_based_change_detection": "Выявление изменений на основе PCA",
          "post_classification_change": "Постклассификационные изменения",
          "write_function_memory_insertion": "Вставка функции памяти записи",
          "evaluate_training_sites": "Оценка обучающих участков",
          "fuzzy_knn_classification": "Нечёткая классификация KNN",
          "generalize_classified_raster": "Генерализация классифицированного растра",
          "generalize_with_similarity": "Генерализация по сходству",
          "k_means_clustering": "Кластеризация K-средних",
          "knn_classification": "Классификация KNN",
          "knn_regression": "Регрессия KNN",
          "logistic_regression": "Логистическая регрессия",
          "min_dist_classification": "Классификация по минимальному расстоянию",
          "modified_k_means_clustering": "Модифицированная кластеризация K-средних",
          "nnd_classification": "Классификация NND",
          "otsu_thresholding": "Пороговая сегментация Оцу",
          "parallelepiped_classification": "Классификация параллелепипедом",
          "random_forest_classification": "Классификация случайным лесом",
          "random_forest_regression": "Регрессия случайным лесом",
          "svm_classification": "Классификация SVM",
          "svm_regression": "Регрессия SVM",
          "canny_edge_detection": "Детектор границ Canny",
          "corner_detection": "Обнаружение углов",
          "laplacian_filter": "Фильтр Лапласа",
          "laplacian_of_gaussians_filter": "Фильтр лапласиана гауссиана",
          "prewitt_filter": "Фильтр Prewitt",
          "roberts_cross_filter": "Фильтр Roberts Cross",
          "sobel_filter": "Фильтр Sobel",
          "balance_contrast_enhancement": "Сбалансированное усиление контраста",
          "create_colour_composite": "Создание цветового композита",
          "direct_decorrelation_stretch": "Прямое декорреляционное растяжение",
          "false_colour_composite": "Композит в ложных цветах",
          "gamma_correction": "Гамма-коррекция",
          "gaussian_contrast_stretch": "Гауссово растяжение контраста",
          "histogram_equalization": "Выравнивание гистограммы",
          "histogram_matching": "Подбор гистограммы",
          "histogram_matching_two_images": "Подбор гистограмм двух изображений",
          "ihs_to_rgb": "IHS в RGB",
          "min_max_contrast_stretch": "Растяжение контраста Min-Max",
          "mosaic": "Мозаика",
          "mosaic_with_feathering": "Мозаика с растушёвкой",
          "normalized_difference_index": "Нормализованный разностный индекс",
          "panchromatic_sharpening": "Панхроматическое повышение резкости",
          "percentage_contrast_stretch": "Процентное растяжение контраста",
          "piecewise_contrast_stretch": "Кусочное растяжение контраста",
          "resample": "Передискретизация",
          "rgb_to_ihs": "RGB в IHS",
          "sigmoidal_contrast_stretch": "Сигмоидальное растяжение контраста",
          "split_colour_composite": "Разделение цветового композита",
          "standard_deviation_contrast_stretch": "Растяжение контраста по стандартному отклонению",
          "true_colour_composite": "Композит в естественных цветах",
          "adaptive_filter": "Адаптивный фильтр",
          "anisotropic_diffusion_filter": "Фильтр анизотропной диффузии",
          "bilateral_filter": "Билатеральный фильтр",
          "closing": "Закрытие",
          "conservative_smoothing_filter": "Консервативный сглаживающий фильтр",
          "diff_of_gaussians_filter": "Фильтр разности гауссиан",
          "diversity_filter": "Фильтр разнообразия",
          "edge_preserving_mean_filter": "Сглаживающий фильтр с сохранением границ",
          "emboss_filter": "Фильтр рельефности",
          "fast_almost_gaussian_filter": "Быстрый почти гауссов фильтр",
          "flip_image": "Отражение изображения",
          "frangi_filter": "Фильтр Frangi",
          "gabor_filter_bank": "Банк фильтров Габора",
          "gaussian_filter": "Гауссов фильтр",
          "glcm_texture": "Текстура GLCM",
          "guided_filter": "Управляемый фильтр",
          "high_pass_bilateral_filter": "Высокочастотный билатеральный фильтр",
          "high_pass_filter": "Высокочастотный фильтр",
          "high_pass_median_filter": "Высокочастотный медианный фильтр",
          "integral_image_transform": "Преобразование интегрального изображения",
          "k_nearest_mean_filter": "Фильтр K ближайших средних",
          "kuwahara_filter": "Фильтр Kuwahara",
          "lee_filter": "Фильтр Ли",
          "lidar_ground_point_filter": "Фильтр наземных точек LiDAR",
          "line_detection_filter": "Фильтр обнаружения линий",
          "line_thinning": "Утончение линий",
          "majority_filter": "Мажоритарный фильтр",
          "maximum_filter": "Фильтр максимума",
          "mean_filter": "Фильтр среднего",
          "median_filter": "Медианный фильтр",
          "minimum_filter": "Фильтр минимума",
          "non_local_means_filter": "Фильтр нелокальных средних",
          "olympic_filter": "Олимпийский фильтр",
          "opening": "Открытие",
          "percentile_filter": "Перцентильный фильтр",
          "range_filter": "Фильтр размаха",
          "remove_spurs": "Удаление отростков",
          "savitzky_golay_2d_filter": "2D-фильтр Savitzky-Golay",
          "scharr_filter": "Фильтр Scharr",
          "standard_deviation_filter": "Фильтр стандартного отклонения",
          "thicken_raster_line": "Утолщение растровых линий",
          "tophat_transform": "Преобразование Top-hat",
          "total_filter": "Фильтр суммы",
          "unsharp_masking": "Нерезкое маскирование",
          "user_defined_weights_filter": "Фильтр с пользовательскими весами",
          "wiener_filter": "Фильтр Винера",
          "build_object_hierarchy_multiscale": "Многомасштабное построение иерархии объектов",
          "classify_objects_ensemble_pro": "Классификация объектов ансамблем (Pro)",
          "classify_objects_random_forest": "Классификация объектов случайным лесом",
          "classify_objects_rules_basic": "Классификация объектов базовыми правилами",
          "classify_objects_rules_hierarchical": "Классификация объектов иерархическими правилами",
          "classify_objects_svm": "Классификация объектов SVM",
          "evaluate_object_classification_accuracy": "Оценка точности классификации объектов",
          "evaluate_segmentation_quality_pro": "Оценка качества сегментации (Pro)",
          "image_segmentation": "Сегментация изображения",
          "image_slider": "Слайдер изображений",
          "image_stack_profile": "Профиль стека изображений",
          "obia_audit_report_pro": "Отчёт аудита OBIA (Pro)",
          "obia_batch_orchestrator_pro": "Пакетный оркестратор OBIA (Pro)",
          "obia_pipeline_basic": "Базовый конвейер OBIA",
          "object_class_probability_maps": "Карты вероятностей классов объектов",
          "object_features_context_neighbors": "Признаки объектов - Контекст соседей",
          "object_features_shape_basic": "Признаки объектов - Форма (базовые)",
          "object_features_spectral_basic": "Признаки объектов - Спектр (базовые)",
          "object_features_texture_glcm_basic": "Признаки объектов - Текстура GLCM (базовые)",
          "object_features_topology_relations": "Признаки объектов - Топологические отношения",
          "object_uncertainty_diagnostics_pro": "Диагностика неопределённости объектов (Pro)",
          "objects_boundary_refinement_pro": "Уточнение границ объектов (Pro)",
          "objects_enforce_min_mapping_unit": "Минимальная картографируемая единица объектов",
          "polygons_to_segments": "Полигоны в сегменты",
          "propagate_labels_across_hierarchy": "Распространение меток по иерархии",
          "segment_graph_felzenszwalb": "Сегментация графа (Felzenszwalb)",
          "segment_multiresolution_hierarchical": "Многоразрешающая иерархическая сегментация",
          "segment_scale_parameter_optimizer": "Оптимизатор параметра масштаба сегментации",
          "segment_slic_superpixels": "Сегментация суперпикселей SLIC",
          "segment_watershed_markers": "Сегментация водоразделом по маркерам",
          "segments_merge_small_regions": "Слияние мелких сегментов",
          "segments_split_low_cohesion": "Разделение сегментов с низкой связностью",
          "segments_to_polygons": "Сегменты в полигоны",
          "brdf_normalization": "Нормализация BRDF",
          "correct_vignetting": "Коррекция виньетирования",
          "dark_object_subtraction": "Вычитание тёмного объекта",
          "dn_to_toa_reflectance": "DN в отражательную способность TOA",
          "terrain_corrected_optical_analytics": "Оптическая аналитика с коррекцией рельефа",
          "cloude_pottier_decomposition": "Декомпозиция Cloude-Pottier",
          "enhanced_lee_filter": "Улучшенный фильтр Ли",
          "freeman_durden_decomposition": "Декомпозиция Freeman-Durden",
          "frost_filter": "Фильтр Frost",
          "gamma_map_filter": "Фильтр Gamma MAP",
          "h_alpha_wisart_classification": "Классификация H-Alpha Wishart",
          "kuan_filter": "Фильтр Kuan",
          "refined_lee_filter": "Уточнённый фильтр Ли",
          "wisart_iterative_clustering": "Итеративная кластеризация Wishart",
          "yamaguchi_4component_decomposition": "4-компонентная декомпозиция Yamaguchi",
          "continuum_removal": "Удаление континуума",
          "linear_spectral_unmixing": "Линейное спектральное разделение",
          "minimum_noise_fraction": "Минимальная доля шума",
          "spectral_angle_mapper": "Спектральный угловой картограф",
          "spectral_library_matching": "Сопоставление со спектральной библиотекой",
          "land_surface_temperature_single_channel": "Температура поверхности (одноканальный метод)",
          "land_surface_temperature_split_window": "Температура поверхности (метод расщеплённого окна)",
          "ndvi_based_emissivity": "Излучательная способность на основе NDVI",
          "assess_route": "Оценка маршрута",
          "breakline_mapping": "Картографирование линий перегиба",
          "convergence_index": "Индекс конвергенции",
          "dem_void_filling": "Заполнение пустот DEM",
          "deviation_from_mean_elevation": "Отклонение от средней высоты",
          "difference_from_mean_elevation": "Разность со средней высотой",
          "directional_relief": "Направленный рельеф",
          "elev_above_pit": "Высота над ямой",
          "elev_above_pit_dist": "Высота над ямой (расстояние)",
          "elevation_percentile": "Перцентиль высоты",
          "embankment_mapping": "Картографирование насыпей",
          "exposure_towards_wind_flux": "Экспозиция к потоку ветра",
          "feature_preserving_smoothing": "Сглаживание с сохранением деталей",
          "feature_preserving_smoothing_multiscale": "Многомасштабное сглаживание с сохранением деталей",
          "fetch_analysis": "Анализ разгона волн",
          "fill_missing_data": "Заполнение пропущенных данных",
          "find_ridges": "Поиск гребней",
          "hillshade": "Отмывка рельефа",
          "hypsometrically_tinted_hillshade": "Гипсометрически тонированная отмывка",
          "local_hypsometric_analysis": "Локальный гипсометрический анализ",
          "low_points_on_headwater_divides": "Низкие точки на водоразделах верховий",
          "map_off_terrain_objects": "Картографирование объектов над рельефом",
          "max_downslope_elev_change": "Макс. изменение высоты вниз по склону",
          "max_upslope_elev_change": "Макс. изменение высоты вверх по склону",
          "min_downslope_elev_change": "Мин. изменение высоты вниз по склону",
          "multidirectional_hillshade": "Многонаправленная отмывка рельефа",
          "num_downslope_neighbours": "Число соседей вниз по склону",
          "num_upslope_neighbours": "Число соседей вверх по склону",
          "profile": "Профиль",
          "remove_off_terrain_objects": "Удаление объектов над рельефом",
          "ridge_and_valley_vectors": "Векторы гребней и долин",
          "slope_vs_aspect_plot": "График уклона и экспозиции",
          "slope_vs_elev_plot": "График уклона и высоты",
          "smooth_vegetation_residual": "Сглаживание остаточной растительности",
          "surface_area_ratio": "Отношение площади поверхности",
          "topographic_hachures": "Топографическая штриховка",
          "accumulation_curvature": "Аккумуляционная кривизна",
          "aspect": "Экспозиция",
          "casorati_curvature": "Кривизна Казорати",
          "curvedness": "Искривлённость",
          "difference_curvature": "Разностная кривизна",
          "gaussian_curvature": "Гауссова кривизна",
          "generating_function": "Порождающая функция",
          "horizontal_excess_curvature": "Горизонтальная избыточная кривизна",
          "maximal_curvature": "Максимальная кривизна",
          "mean_curvature": "Средняя кривизна",
          "minimal_curvature": "Минимальная кривизна",
          "plan_curvature": "Плановая кривизна",
          "principal_curvature_direction": "Направление главной кривизны",
          "profile_curvature": "Профильная кривизна",
          "relative_aspect": "Относительная экспозиция",
          "ring_curvature": "Кольцевая кривизна",
          "rotor": "Ротор",
          "shape_index": "Индекс формы",
          "slope": "Уклон",
          "tangential_curvature": "Тангенциальная кривизна",
          "total_curvature": "Полная кривизна",
          "unsphericity": "Несферичность",
          "vertical_excess_curvature": "Вертикальная избыточная кривизна",
          "elev_relative_to_min_max": "Высота относительно мин./макс.",
          "geomorphons": "Геоморфоны",
          "hypsometric_analysis": "Гипсометрический анализ",
          "multiscale_topographic_position_class": "Многомасштабный класс топографического положения",
          "pennock_landform_classification": "Классификация форм рельефа по Пенноку",
          "percent_elev_range": "Процент диапазона высот",
          "relative_topographic_position": "Относительное топографическое положение",
          "max_anisotropy_dev": "Макс. отклонение анизотропии",
          "max_anisotropy_dev_signature": "Сигнатура макс. отклонения анизотропии",
          "max_difference_from_mean": "Макс. разность со средним",
          "max_elev_dev_signature": "Сигнатура макс. отклонения высоты",
          "max_elevation_deviation": "Макс. отклонение высоты",
          "multiscale_curvatures": "Многомасштабные кривизны",
          "multiscale_elevated_index": "Многомасштабный индекс возвышенности",
          "multiscale_elevation_percentile": "Многомасштабный перцентиль высоты",
          "multiscale_low_lying_index": "Многомасштабный индекс низин",
          "multiscale_roughness": "Многомасштабная шероховатость",
          "multiscale_roughness_signature": "Сигнатура многомасштабной шероховатости",
          "multiscale_std_dev_normals": "Многомасштабное стандартное отклонение нормалей",
          "multiscale_std_dev_normals_signature": "Сигнатура многомасштабного стандартного отклонения нормалей",
          "multiscale_topographic_position_image": "Многомасштабное изображение топографического положения",
          "topographic_position_animation": "Анимация топографического положения",
          "average_normal_vector_angular_deviation": "Среднее угловое отклонение векторов нормалей",
          "circular_variance_of_aspect": "Круговая дисперсия экспозиции",
          "edge_density": "Плотность границ",
          "ruggedness_index": "Индекс пересечённости",
          "spherical_std_dev_of_normals": "Сферическое стандартное отклонение нормалей",
          "standard_deviation_of_slope": "Стандартное отклонение уклона",
          "average_horizon_distance": "Среднее расстояние до горизонта",
          "horizon_angle": "Угол горизонта",
          "horizon_area": "Площадь горизонта",
          "openness": "Открытость",
          "shadow_animation": "Анимация теней",
          "shadow_image": "Изображение теней",
          "sky_view_factor": "Фактор обзора неба",
          "skyline_analysis": "Анализ линии горизонта",
          "time_in_daylight": "Время под солнцем",
          "viewshed": "Зона видимости",
          "visibility_index": "Индекс видимости",
          "topo_render": "Визуализация рельефа",
          "add_surface_information": "Добавление информации о поверхности",
          "add_z_information": "Добавление информации о Z",
          "adjust_3d_z": "Корректировка 3D Z",
          "adjust_stream_to_raster": "Корректировка водотоков по растру",
          "aggregate_points": "Агрегирование точек",
          "aggregate_polygons": "Агрегирование полигонов",
          "align_features": "Выравнивание объектов",
          "apportion_polygon": "Пропорциональное распределение по полигонам",
          "areal_interpolation": "Площадная интерполяция",
          "assign_projection_vector": "Назначение проекции вектору",
          "attribute_uncertainty": "Неопределённость атрибутов",
          "bivariate_spatial_association": "Двумерная пространственная ассоциация",
          "buffer_3d": "3D-буфер",
          "build_balanced_zones": "Построение сбалансированных зон",
          "build_seamlines": "Построение линий сшивки",
          "calculate_adjacent_fields": "Вычисление смежных полей",
          "calculate_central_meridian_and_parallels": "Вычисление центрального меридиана и параллелей",
          "calculate_composite_index": "Вычисление составного индекса",
          "calculate_distance_band": "Вычисление полосы расстояний",
          "calculate_end_time": "Вычисление времени окончания",
          "calculate_grid_convergence_angle": "Вычисление угла сближения меридианов",
          "calculate_missing_z_values": "Вычисление пропущенных значений Z",
          "calculate_motion_statistics": "Вычисление статистики движения",
          "calculate_polygon_main_angle": "Вычисление главного угла полигона",
          "calculate_rates": "Вычисление показателей",
          "calculate_transformation_errors": "Вычисление ошибок трансформации",
          "calculate_utm_zone": "Вычисление зоны UTM",
          "cartogram": "Картограмма",
          "causal_inference_analysis": "Анализ причинно-следственных связей",
          "cell_records_to_sectors": "Записи ячеек в секторы",
          "central_feature": "Центральный объект / Линейное направленное среднее",
          "change_point_detection": "Обнаружение точек изменения",
          "collapse_dual_lines_to_centerline": "Свёртывание двойных линий в осевую",
          "collapse_hydro_polygon": "Свёртывание гидрографических полигонов",
          "collapse_road_detail": "Свёртывание деталей дорог",
          "collect_events": "Сбор событий",
          "colocation_analysis": "Анализ совместного размещения",
          "color_polygons": "Раскраска полигонов",
          "compare_spatial_weights": "Сравнение пространственных весов",
          "compute_accuracy_for_object_detection": "Вычисление точности обнаружения объектов",
          "construct_sight_lines": "Построение линий видимости",
          "contiguous_cartogram": "Непрерывная картограмма",
          "contour_list": "Список изолиний",
          "convert_coordinate_notation": "Преобразование формата записи координат",
          "cost_connectivity": "Стоимостная связность",
          "count_overlapping_features": "Подсчёт перекрывающихся объектов",
          "create_accuracy_assessment_points": "Создание точек оценки точности",
          "create_cartographic_partitions": "Создание картографических разделов",
          "create_overpass": "Создание путепровода",
          "create_routes": "Создание маршрутов",
          "create_spatial_sampling_locations": "Создание точек пространственной выборки",
          "create_spatially_balanced_points": "Создание пространственно сбалансированных точек",
          "create_underpass": "Создание подземного перехода",
          "cul_de_sac_masks": "Маски тупиков",
          "delineate_built_up_areas": "Выделение застроенных территорий",
          "dendrogram": "Дендрограмма",
          "densify_sampling_network": "Уплотнение сети выборки",
          "detect_bright_ocean_objects": "Обнаружение ярких объектов в океане",
          "detect_dark_ocean_areas": "Обнаружение тёмных областей океана",
          "detect_feature_changes": "Обнаружение изменений объектов",
          "detect_graphic_conflict": "Обнаружение графических конфликтов",
          "detect_incidents": "Обнаружение инцидентов",
          "dice": "Кости",
          "difference_3d": "3D-разность",
          "dimension_reduction": "Снижение размерности",
          "directional_distribution": "Направленное распределение",
          "directional_trend": "Направленный тренд",
          "disperse_markers": "Рассеивание маркеров",
          "dissolve_route_events": "Слияние событий маршрута по атрибутам",
          "edgematch_features": "Сшивка краёв объектов",
          "eighty_twenty_analysis": "Анализ 80/20",
          "eliminate_polygon_part": "Удаление части полигона",
          "eliminate_polygons": "Удаление полигонов",
          "emerging_hot_spot_analysis": "Анализ возникающих горячих точек",
          "enclose_multipatch": "Замыкание мультипатча",
          "estimate_time_to_event": "Оценка времени до события",
          "evaluate_bin_sizes": "Оценка размеров бинов",
          "evaluate_variable_influence": "Оценка влияния переменных",
          "exploratory_interpolation": "Исследовательская интерполяция",
          "exploratory_regression": "Исследовательская регрессия",
          "extract_locations_from_text": "Извлечение местоположений из текста",
          "extract_water_sar": "Извлечение воды (SAR)",
          "extrude_between": "Выдавливание между",
          "feature_outline_masks": "Маски контуров объектов",
          "feature_to_line": "Объект в линию",
          "feature_vertices_to_points": "Вершины объектов в точки",
          "features_to_kml": "Объекты в KML",
          "fence_diagram": "Диаграмма-ограждение",
          "fill_missing_values": "Заполнение пропущенных значений",
          "find_dwell_locations": "Поиск мест остановок",
          "find_identical": "Поиск идентичных",
          "find_meeting_locations": "Поиск мест встреч",
          "find_space_time_matches": "Поиск пространственно-временных совпадений",
          "flip_line": "Разворот линии",
          "forest_based_forecast": "Прогноз на основе лесов",
          "generalized_linear_regression": "Обобщённая линейная регрессия",
          "generate_breach_lines": "Создание линий прорыва",
          "generate_near_table": "Создание таблицы близости",
          "generate_network_swm": "Создание сетевой SWM",
          "generate_od_links": "Создание связей источник-назначение",
          "generate_points_along_3d_lines": "Создание точек вдоль 3D-линий",
          "generate_spatial_weights_matrix": "Создание матрицы пространственных весов",
          "generate_subset_polygons": "Создание полигонов подмножеств",
          "generate_transects_along_lines": "Создание трансект вдоль линий",
          "geodetic_densify": "Геодезическое уплотнение",
          "geographically_weighted_regression": "Географически взвешенная регрессия",
          "geotagged_photos_to_points": "Фотографии с геотегами в точки",
          "graphic_buffer": "Графический буфер",
          "grid_index_features": "Объекты индекса сетки",
          "group_by_proximity": "Группировка по близости",
          "hdbscan": "Кластеризация HDBSCAN",
          "getis_ord_general_g": "Кластеризация высоких/низких значений (общий G Getis-Ord)",
          "hot_spot_analysis_comparison": "Сравнение анализа горячих точек",
          "identify_narrow_polygons": "Определение узких полигонов",
          "incremental_spatial_autocorrelation": "Инкрементальная пространственная автокорреляция",
          "inside_3d": "Внутри 3D",
          "integrate": "Интеграция",
          "interpolate_shape": "Интерполяция формы",
          "intersect_3d": "3D-пересечение",
          "intersect_3d_line_with_surface": "Пересечение 3D-линии с поверхностью",
          "intersecting_layers_masks": "Маски пересекающихся слоёв",
          "intervisibility": "Взаимная видимость",
          "is_closed_3d": "Замкнуто в 3D",
          "line_of_sight": "Линия видимости",
          "local_bivariate_relationships": "Локальные двумерные отношения",
          "local_outlier_analysis": "Анализ локальных выбросов",
          "locate_lines_along_routes": "Локализация линий вдоль маршрутов",
          "median_center": "Медианный центр",
          "merge_divided_roads": "Слияние разделённых дорог",
          "merge_lines_by_pseudo_node": "Слияние линий по псевдоузлам",
          "minimum_bounding_volume": "Минимальный ограничивающий объём",
          "multipatch_footprint": "Контур мультипатча",
          "multipatch_to_mesh": "Мультипатч в сетку",
          "multiple_ring_buffer": "Многокольцевой буфер",
          "mgwr": "Многомасштабная географически взвешенная регрессия",
          "multivariate_clustering": "Многомерная кластеризация",
          "near_3d": "Ближайший 3D",
          "neighborhood_summary_statistics": "Сводная статистика окрестности",
          "non_maximum_suppression": "Подавление немаксимумов",
          "optics_clustering": "Кластеризация OPTICS",
          "optimal_corridor_connections": "Оптимальные соединения коридоров",
          "optimal_path_as_line": "Оптимальный путь как линия",
          "optimized_hot_spot_analysis": "Оптимизированный анализ горячих точек",
          "optimized_outlier_analysis": "Оптимизированный анализ выбросов",
          "pairwise_comparison_weights": "Веса парного сравнения",
          "pivot_table": "Сводная таблица",
          "points_to_line": "Точки в линию",
          "points_to_path": "Точки в путь",
          "polygon_neighbors": "Соседи полигонов",
          "polygon_volume": "Объём полигона",
          "propagate_displacement": "Распространение смещения",
          "raster_domain": "Домен растра",
          "raster_to_weighted_points": "Растр во взвешенные точки",
          "reclassify_field": "Переклассификация поля",
          "reconstruct_tracks": "Реконструкция треков",
          "reduce_point_density": "Снижение плотности точек",
          "regularize_adjacent_building_footprint": "Регуляризация смежных контуров зданий",
          "regularize_building_footprints": "Регуляризация контуров зданий",
          "remove_overlap_multiple": "Удаление перекрытий (несколько)",
          "render_vector_png": "Визуализация вектора в PNG",
          "repair_geometry": "Исправление геометрии",
          "resolve_building_conflicts": "Разрешение конфликтов зданий",
          "resolve_road_conflicts": "Разрешение конфликтов дорог",
          "ripleys_k": "K Рипли",
          "rubbersheet_features": "Резиновая трансформация объектов",
          "semivariogram_sensitivity": "Чувствительность семивариограммы",
          "similarity_search": "Поиск по сходству",
          "simplify_3d_line": "Упрощение 3D-линии",
          "simplify_building": "Упрощение зданий",
          "simplify_by_circular_arcs": "Упрощение дугами окружностей",
          "simplify_by_tangent_segments": "Упрощение касательными сегментами",
          "simplify_shared_edges": "Упрощение общих рёбер",
          "smooth_natural_features": "Сглаживание природных объектов",
          "smooth_shared_edges": "Сглаживание общих рёбер",
          "snap_tracks": "Привязка треков",
          "sort_features": "Сортировка объектов",
          "spatial_eigenvector_filtering": "Пространственная фильтрация собственными векторами (MESF)",
          "spatial_outlier_detection": "Обнаружение пространственных выбросов",
          "spatially_constrained_multivariate_clustering": "Пространственно ограниченная многомерная кластеризация",
          "split_by_attributes": "Разделение по атрибутам",
          "split_by_features": "Разделение по объектам",
          "split_line_at_point": "Разделение линии в точке",
          "stack_profile": "Профиль стека",
          "strip_map_index_features": "Объекты индекса ленточной карты",
          "subdivide_polygon": "Разбиение полигона",
          "subset_features": "Подмножество объектов",
          "summarize_nearby": "Сводка по окрестности",
          "summarize_percent_change": "Сводка процентного изменения",
          "summarize_within": "Сводка внутри",
          "summary_statistics": "Сводная статистика",
          "sun_shadow_volume": "Объём солнечной тени",
          "surface_difference": "Разность поверхностей",
          "table_to_geometry": "Таблица в геометрию",
          "tabulate_intersection": "Табуляция пересечений",
          "thin_road_network": "Прореживание дорожной сети",
          "tile_grid_polygons": "Полигоны сетки тайлов",
          "time_series_clustering": "Кластеризация временных рядов",
          "time_series_forecast": "Прогноз временных рядов",
          "time_series_smoothing": "Сглаживание временных рядов",
          "trace_proximity_events": "Трассировка событий близости",
          "transform_features": "Трансформация объектов",
          "transform_fields": "Трансформация полей",
          "transform_route_events": "Трансформация событий маршрута",
          "transpose_fields": "Транспонирование полей",
          "trim_line": "Обрезка линии",
          "union_3d": "3D-объединение",
          "validate_flow_direction": "Проверка направления стока",
          "voxel_isosurface": "Изоповерхность вокселей",
          "buffer_vector": "Буфер вектора",
          "directional_variogram": "Анализ направленной вариограммы",
          "estimate_variogram": "Оценка вариограммы",
          "fit_variogram": "Подбор модели вариограммы",
          "add_field": "Добавление поля",
          "add_geometry_attributes": "Добавление атрибутов геометрии",
          "attribute_correlation": "Корреляция атрибутов",
          "attribute_histogram": "Гистограмма атрибута",
          "attribute_scattergram": "Диаграмма рассеяния атрибутов",
          "delete_field": "Удаление поля",
          "extract_by_attribute": "Извлечение по атрибуту",
          "field_calculator": "Калькулятор полей",
          "filter_vector_features_by_area": "Фильтрация векторных объектов по площади",
          "list_unique_values": "Список уникальных значений",
          "rename_field": "Переименование поля",
          "centroid_vector": "Центроид (вектор)",
          "concave_hull": "Вогнутая оболочка",
          "densify_features": "Уплотнение объектов",
          "eliminate_coincident_points": "Удаление совпадающих точек",
          "extend_vector_lines": "Продление векторных линий",
          "merge_line_segments": "Слияние сегментов линий",
          "minimum_bounding_box": "Минимальный ограничивающий прямоугольник",
          "minimum_bounding_circle": "Минимальная ограничивающая окружность",
          "minimum_bounding_envelope": "Минимальный ограничивающий экстент",
          "minimum_convex_hull": "Минимальная выпуклая оболочка",
          "polygonize": "Полигонизация",
          "representative_point_vector": "Репрезентативная точка (вектор)",
          "simplify_features": "Упрощение объектов",
          "smooth_vectors": "Сглаживание векторов",
          "snap_endnodes": "Привязка конечных узлов",
          "split_vector_lines": "Разделение векторных линий",
          "split_with_lines": "Разделение линиями",
          "locate_points_along_routes": "Локализация точек вдоль маршрутов",
          "points_along_lines": "Точки вдоль линий",
          "route_calibrate": "Калибровка маршрута",
          "route_event_lines_from_layer": "Линейные события маршрута из слоя",
          "route_event_lines_from_table": "Линейные события маршрута из таблицы",
          "route_event_merge": "Слияние событий маршрута",
          "route_event_overlay": "Оверлей событий маршрута",
          "route_event_points_from_layer": "Точечные события маршрута из слоя",
          "route_event_points_from_table": "Точечные события маршрута из таблицы",
          "route_event_split": "Разделение событий маршрута",
          "route_measure_qa": "Контроль качества измерений маршрута",
          "route_recalibrate": "Перекалибровка маршрута",
          "snap_events_to_routes": "Привязка событий к маршрутам",
          "download_osm_vector": "Загрузка векторных данных OSM",
          "clip": "Обрезка",
          "difference": "Разность",
          "dissolve": "Слияние",
          "erase": "Стирание",
          "identity": "Тождество",
          "intersect": "Пересечение",
          "line_intersections": "Пересечения линий",
          "line_polygon_clip": "Обрезка линий полигоном",
          "near": "Ближайший",
          "select_by_location": "Выбор по местоположению",
          "spatial_join": "Пространственное соединение",
          "symmetrical_difference": "Симметрическая разность",
          "union": "Объединение",
          "update": "Обновление",
          "construct_vector_tin": "Построение векторной TIN",
          "contours_from_points": "Изолинии из точек",
          "contours_from_raster": "Изолинии из растра",
          "extract_nodes": "Извлечение узлов",
          "extract_raster_values_at_points": "Извлечение значений растра в точках",
          "find_lowest_or_highest_points": "Поиск самых низких или высоких точек",
          "hexagonal_grid_from_raster_base": "Гексагональная сетка по базовому растру",
          "hexagonal_grid_from_vector_base": "Гексагональная сетка по базовому вектору",
          "layer_footprint_raster": "Контур слоя (растр)",
          "layer_footprint_vector": "Контур слоя (вектор)",
          "medoid": "Медоид",
          "random_points_in_polygon": "Случайные точки в полигоне",
          "rectangular_grid_from_raster_base": "Прямоугольная сетка по базовому растру",
          "rectangular_grid_from_vector_base": "Прямоугольная сетка по базовому вектору",
          "vector_hex_binning": "Векторное гексагональное биннирование",
          "voronoi_diagram": "Диаграмма Вороного",
          "compactness_ratio": "Коэффициент компактности",
          "deviation_from_regional_direction": "Отклонение от регионального направления",
          "elongation_ratio": "Коэффициент вытянутости",
          "hole_proportion": "Доля отверстий",
          "linearity_index": "Индекс линейности",
          "narrowness_index_vector": "Индекс узости (вектор)",
          "patch_orientation": "Ориентация участка",
          "perimeter_area_ratio": "Отношение периметра к площади",
          "polygon_area": "Площадь полигона",
          "polygon_long_axis": "Длинная ось полигона",
          "polygon_perimeter": "Периметр полигона",
          "polygon_short_axis": "Короткая ось полигона",
          "related_circumscribing_circle": "Отношение к описанной окружности",
          "shape_complexity_index_vector": "Индекс сложности формы (вектор)",
          "envelope_test": "Тест огибающей",
          "getis_ord_gi_star": "Getis-Ord Gi*",
          "global_morans_i": "Глобальный индекс Морана I",
          "hotspot_vs_process": "Горячие точки и процесс",
          "inhomogeneous_baseline": "Неоднородная базовая интенсивность",
          "local_morans_i_lisa": "Локальный индекс Морана I (LISA)",
          "nearest_neighbour_index": "Индекс ближайшего соседа",
          "point_pattern_envelope": "Огибающая точечного паттерна",
          "point_process_residuals": "Остатки точечного процесса",
          "point_process_residuals_comparison": "Сравнение остатков точечных процессов",
          "quadrat_count_test": "Тест подсчёта квадратов",
          "ripleys_k_function": "K-функция Рипли",
          "ripleys_k_test": "Тест K-функции Рипли",
          "spatial_error_regression": "Регрессия с пространственной ошибкой",
          "spatial_lag_regression": "Регрессия с пространственным лагом"
        },
        "menuSubcategory": {
          "geolibre_wasm": "GeoLibre (WASM)",
          "geometry_topology": "Геометрия и топология",
          "raster_vector_conversion": "Растр/вектор",
          "vector_table_i_o": "Ввод-вывод векторов и таблиц",
          "depressions_storage": "Понижения и накопление",
          "flow_routing": "Маршрутизация стока",
          "hydrologic_indices": "Гидрологические индексы",
          "streams_longitudinal_analysis": "Водотоки - Продольный анализ",
          "streams_network_extraction": "Водотоки - Извлечение сети",
          "streams_ordering_metrics": "Водотоки - Показатели порядка",
          "watersheds_basins": "Водосборы и бассейны",
          "analysis_metrics": "Метрики анализа",
          "filtering_classification": "Фильтрация и классификация",
          "i_o_management": "Ввод-вывод и управление",
          "interpolation_gridding": "Интерполяция и построение сетки",
          "network_analysis": "Сетевой анализ",
          "general": "Общее",
          "distance_cost": "Расстояние и стоимость",
          "local_neighborhood": "Локальная окрестность",
          "overlay_math": "Оверлейная алгебра",
          "reclassify_mask": "Переклассификация и маска",
          "spatial_statistics": "Пространственная статистика",
          "change_detection": "Выявление изменений",
          "classification": "Классификация",
          "edge_feature_detection": "Обнаружение границ и объектов",
          "enhancement_contrast": "Улучшение и контраст",
          "filters": "Фильтры",
          "obia": "OBIA",
          "radiometric_correction": "Радиометрическая коррекция",
          "sar": "SAR",
          "spectral_analytics": "Спектральная аналитика",
          "thermal_emissivity": "Тепловые данные и излучательная способность",
          "derivatives": "Производные",
          "landform_indices": "Индексы форм рельефа",
          "multiscale_signatures": "Многомасштабные сигнатуры",
          "roughness_texture": "Шероховатость и текстура",
          "visibility": "Видимость",
          "workflow_products": "Результаты рабочих процессов",
          "attribute_analysis": "Анализ атрибутов",
          "geometry_processing": "Обработка геометрии",
          "linear_referencing": "Линейная привязка",
          "online_data": "Онлайн-данные",
          "overlay_analysis": "Оверлейный анализ",
          "sampling_gridding": "Выборка и построение сетки",
          "shape_metrics": "Метрики формы"
        }
      }
    }
  }
}
