{
  "format": "geolibre-language-pack",
  "formatVersion": 1,
  "scope": "whitebox",
  "locale": "vi",
  "name": "Gói ngôn ngữ tiếng Việt cho Whitebox",
  "updatedAt": "2026-09-25T16:57:57.898Z",
  "translations": {
    "processing": {
      "toolMeta": {
        "whitebox": {
          "build_object_hierarchy_multiscale": {
            "name": "Xây dựng phân cấp đối tượng đa tỉ lệ",
            "description": "Mạng đối tượng phân cấp được xây dựng thông qua quá trình gộp lặp qua nhiều thang phân đoạn, dần dần hợp nhất các phân đoạn mịn hơn dựa trên độ tương đồng phổ và sự kề nhau về không gian. Xây dựng cấu trúc cây trong đó các nút lá đại diện cho các phân đoạn thang mịn và nút gốc đại diện cho toàn bộ ảnh. Các quan hệ bao chứa mã hóa phân cấp đối tượng cha-con (bộ phận-tổng thể), cho phép phân tích đa độ phân giải và truy vấn đối tượng thích ứng theo thang trên các cấp phân cấp. Tính năng chính: Phân cấp phân đoạn đa thang; theo dõi quan hệ bộ phận-tổng thể; hỗ trợ truy vấn đối tượng lồng nhau; cho phép phân tích thích ứng theo thang; biểu diễn phân cấp tiết kiệm bộ nhớ; hỗ trợ phân loại theo tầng. Trường hợp sử dụng: Lập bản đồ lớp phủ đất phân cấp; trích xuất công trình phức hợp từ các thành phần; phát hiện thửa ruộng nông nghiệp; phân tích tầng thực vật; khoanh vẽ khu đô thị; lập bản đồ đất ngập nước với phân loại thành phần con. Diễn giải đầu ra: Đầu ra là cơ sở dữ liệu đối tượng phân cấp mã hóa cấu trúc phụ thuộc thang. Truy vấn đối tượng ở các thang cụ thể; các thang trung gian cho thấy các thang đối tượng chuyển tiếp cân bằng giữa chi tiết và khái quát hóa. Quan hệ cha-con cho thấy cấu trúc cấu thành. Các phân bố thống kê theo cấp thang đặc trưng hóa các thuộc tính kích thước/hình dạng của đối tượng ở mỗi cấp phân cấp, cho phép lựa chọn chiến lược phân loại tối ưu theo thang.",
            "params": {
              "coarse_segments": {
                "label": "Phân đoạn thô",
                "description": "Raster phân đoạn thô."
              },
              "fine_segments": {
                "label": "Phân đoạn mịn",
                "description": "Raster phân đoạn mịn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV phân cấp đầu ra."
              }
            }
          },
          "classify_objects_ensemble_pro": {
            "name": "Phân loại đối tượng tổ hợp (Pro)",
            "description": "Chạy một cấu hình phân loại đối tượng kiểu tổ hợp (ensemble) được tinh chỉnh để đạt độ ổn định cao hơn trên các cảnh không đồng nhất.",
            "params": {
              "features": {
                "label": "Đặc trưng",
                "description": "CSV đặc trưng đối tượng đầu vào (phải có segment_id và các cột đặc trưng dạng số)."
              },
              "training": {
                "label": "Huấn luyện",
                "description": "CSV huấn luyện có các cột segment_id và nhãn class."
              },
              "segment_id_field": {
                "label": "Trường ID phân đoạn",
                "description": "Tên trường mã phân đoạn (mặc định segment_id)."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường nhãn lớp trong CSV huấn luyện (mặc định class)."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây (mặc định 200)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV dự đoán đầu ra."
              }
            }
          },
          "classify_objects_random_forest": {
            "name": "Phân loại đối tượng bằng rừng ngẫu nhiên",
            "description": "Huấn luyện bộ phân loại tổ hợp Random Forest trên các mẫu huấn luyện phân đoạn đã gán nhãn, sử dụng các đặc trưng phổ, hình thái và kết cấu làm biến dự báo. Xây dựng nhiều cây quyết định thông qua lấy mẫu bootstrap và ngẫu nhiên hóa đặc trưng, sau đó tổng hợp các dự đoán bằng biểu quyết đa số. Việc phân loại hoạt động trên các vector đặc trưng theo từng phân đoạn, gán nhãn lớp đối tượng theo xác suất dựa trên sự đồng thuận của tổ hợp, cho phép phân loại đối tượng đa lớp mạnh mẽ từ các đặc trưng OBIA. Các tính năng chính bao gồm học tổ hợp kết hợp nhiều cây quyết định để phân loại mạnh mẽ, xử lý không gian đặc trưng nhiều chiều điển hình của OBIA đa phổ, ước lượng độ tin cậy và xác suất phân loại, xếp hạng mức độ quan trọng của đặc trưng để xác định các thuộc tính có tính phân biệt, xử lý tự nhiên các tương tác phi tuyến giữa các đặc trưng, và khả năng chống chịu nhiễu và dư thừa đặc trưng. Các trường hợp sử dụng bao gồm phân loại lớp phủ đất đa lớp từ các phân đoạn OBIA (đô thị, nông nghiệp, rừng, nước), phân loại có giám sát ở cấp đối tượng được tinh chỉnh thông qua lựa chọn mẫu huấn luyện, phân loại phát hiện biến động trên các chuỗi phân đoạn theo thời gian, phân loại phân cấp (các kiểu sinh cảnh thô được tinh chỉnh thành các loại chi tiết), và tích hợp với các mẫu huấn luyện thủ công từ giải đoán trực quan. Nhãn lớp dự đoán ở đầu ra xác định kiểu đối tượng chính; xác suất tin cậy cho biết mức độ chắc chắn của phân loại; độ tin cậy thấp gợi ý các đối tượng trung gian không rõ ràng; mức độ quan trọng của đặc trưng xác định những thuộc tính phổ/hình thái nào chi phối các quyết định phân loại; bản đồ phân loại trực tiếp thể hiện phân bố kiểu đối tượng; sự nhầm lẫn giữa các lớp tương tự giúp định hướng tinh chỉnh dữ liệu huấn luyện; đầu ra xác suất cho phép định lượng độ bất định.",
            "params": {
              "features": {
                "label": "Đặc trưng",
                "description": "CSV đặc trưng đối tượng đầu vào (phải có segment_id và các cột đặc trưng dạng số)."
              },
              "training": {
                "label": "Huấn luyện",
                "description": "CSV huấn luyện có các cột segment_id và nhãn class."
              },
              "segment_id_field": {
                "label": "Trường ID phân đoạn",
                "description": "Tên trường mã phân đoạn (mặc định segment_id)."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường nhãn lớp trong CSV huấn luyện (mặc định class)."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây (mặc định 200)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV dự đoán đầu ra."
              }
            }
          },
          "classify_objects_rules_basic": {
            "name": "Phân loại đối tượng theo quy tắc cơ bản",
            "description": "Áp dụng phân loại đối tượng minh bạch dựa trên quy tắc từ tệp CSV quy tắc đặc trưng-toán tử-ngưỡng. Logic quyết định hoàn toàn có thể diễn giải, phù hợp cho quy trình làm việc của chuyên gia lĩnh vực và việc tuân thủ quy định.",
            "params": {
              "features": {
                "label": "Đặc trưng",
                "description": "CSV đặc trưng đối tượng đầu vào."
              },
              "rules": {
                "label": "Quy tắc",
                "description": "CSV quy tắc với các cột: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Lớp mặc định",
                "description": "Lớp dự phòng khi không quy tắc nào khớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV dự đoán đầu ra."
              }
            }
          },
          "classify_objects_rules_hierarchical": {
            "name": "Phân loại đối tượng theo quy tắc phân cấp",
            "description": "Áp dụng phân loại đối tượng phân cấp dựa trên quy tắc; hiện sử dụng các quy tắc có thứ tự với phương án dự phòng tất định.",
            "params": {
              "features": {
                "label": "Đặc trưng",
                "description": "CSV đặc trưng đối tượng đầu vào."
              },
              "rules": {
                "label": "Quy tắc",
                "description": "CSV quy tắc với các cột: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Lớp mặc định",
                "description": "Lớp dự phòng khi không quy tắc nào khớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV dự đoán đầu ra."
              }
            }
          },
          "classify_objects_svm": {
            "name": "Phân loại đối tượng bằng SVM",
            "description": "Phân loại đối tượng bằng quy trình kiểu SVM (được triển khai thông qua các thiết lập mặc định của backend phân loại đối tượng mạnh mẽ).",
            "params": {
              "features": {
                "label": "Đặc trưng",
                "description": "CSV đặc trưng đối tượng đầu vào (phải có segment_id và các cột đặc trưng dạng số)."
              },
              "training": {
                "label": "Huấn luyện",
                "description": "CSV huấn luyện có các cột segment_id và nhãn class."
              },
              "segment_id_field": {
                "label": "Trường ID phân đoạn",
                "description": "Tên trường mã phân đoạn (mặc định segment_id)."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường nhãn lớp trong CSV huấn luyện (mặc định class)."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây (mặc định 200)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV dự đoán đầu ra."
              }
            }
          },
          "evaluate_object_classification_accuracy": {
            "name": "Đánh giá độ chính xác phân loại đối tượng",
            "description": "Tính toán các chỉ số độ chính xác phân loại bằng cách so sánh nhãn đối tượng dự đoán với nhãn tham chiếu thực địa hoặc nhãn kiểm định. Tạo ma trận nhầm lẫn ghi nhận các mẫu thống nhất/không thống nhất phân loại theo từng lớp, tính độ chính xác tổng thể (tổng số dự đoán đúng), độ chính xác của người sản xuất theo từng lớp (tỷ lệ phát hiện), độ chính xác của người dùng (độ tin cậy), điểm F1 (trung bình điều hòa), hệ số kappa (mức thống nhất đã hiệu chỉnh theo ngẫu nhiên), và phân tích sai số theo từng lớp nhằm xác định các mẫu phân loại sai có hệ thống. Các tính năng chính bao gồm đánh giá độ chính xác toàn diện trên tất cả các lớp, các chỉ số hiệu năng theo từng lớp cho phép chẩn đoán riêng từng lớp, ma trận nhầm lẫn cho thấy các mẫu phân loại sai có hệ thống, kiểm định ý nghĩa thống kê thông qua hệ số kappa, xử lý tự nhiên các phân bố lớp mất cân bằng, và xác định các vấn đề về mức độ đầy đủ của dữ liệu huấn luyện. Các trường hợp sử dụng bao gồm kiểm định mô hình phân loại và định lượng hiệu năng, so sánh các phương pháp và tham số phân loại khác nhau, xác định các lớp đối tượng có vấn đề cần thêm dữ liệu huấn luyện, đánh giá mức độ phù hợp của phân loại cho các ứng dụng vận hành, lựa chọn mô hình và tinh chỉnh siêu tham số dựa trên độ chính xác, đảm bảo chất lượng trong các quy trình lập bản đồ tự động, và báo cáo các chỉ số độ chính xác chuẩn hóa phục vụ bình duyệt. Độ chính xác tổng thể ở đầu ra thể hiện độ tin cậy phân loại trên tất cả các đối tượng; độ chính xác của người sản xuất cho biết mức độ phát hiện đầy đủ theo từng lớp; độ chính xác của người dùng cho biết độ tin cậy của dự đoán; kappa cao (>0.8) cho thấy mức thống nhất mạnh vượt trên ngẫu nhiên; ma trận nhầm lẫn cho thấy những lớp nào bị nhầm lẫn với nhau; ưu thế đường chéo cho thấy khả năng phân tách lớp tốt; các phần tử ngoài đường chéo chỉ ra nguồn gốc phân loại sai; các chỉ số theo từng lớp định hướng việc cải thiện dữ liệu huấn luyện có mục tiêu.",
            "params": {
              "predictions": {
                "label": "Dự đoán",
                "description": "CSV dự đoán chứa segment_id và predicted_class."
              },
              "reference": {
                "label": "Tham chiếu",
                "description": "CSV tham chiếu chứa segment_id và class."
              },
              "segment_id_field": {
                "label": "Trường ID phân đoạn",
                "description": "Tên trường mã phân đoạn (mặc định segment_id)."
              },
              "predicted_field": {
                "label": "Trường dự đoán",
                "description": "Trường lớp dự đoán (mặc định predicted_class)."
              },
              "reference_field": {
                "label": "Trường tham chiếu",
                "description": "Trường lớp tham chiếu (mặc định class)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo JSON đầu ra."
              }
            }
          },
          "evaluate_segmentation_quality_pro": {
            "name": "Đánh giá chất lượng phân đoạn (Pro)",
            "description": "Tính toán các chẩn đoán chất lượng phân đoạn, bao gồm số lượng đối tượng và thống kê chồng lấp nhãn chiếm ưu thế.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "reference": {
                "label": "Tham chiếu",
                "description": "Raster nhãn tham chiếu tùy chọn cho chẩn đoán dựa trên chồng lấp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo JSON đầu ra."
              }
            }
          },
          "image_segmentation": {
            "name": "Phân đoạn ảnh",
            "description": "Phân đoạn các chồng raster đa kênh thành các vùng đồng nhất liền kề bằng phương pháp phát triển vùng từ hạt giống.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh (mỗi kênh một raster)."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng khoảng cách cho phép loang vùng trong không gian đặc trưng đã chuẩn hóa (mặc định 0.5)."
              },
              "steps": {
                "label": "Số bước",
                "description": "Số kênh ưu tiên hạt giống (mặc định 10)."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Diện tích vùng tối thiểu tùy chọn cho bước dọn dẹp sau khi gộp (mặc định 4)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "image_slider": {
            "name": "Thanh trượt ảnh",
            "description": "Image Slider là một công cụ trực quan hóa tương tác cho phép so sánh trực tiếp ở cấp điểm ảnh giữa các tập dữ liệu raster đã đồng đăng ký thông qua các đường phân chia chồng phủ ngang hoặc dọc có thể kéo. Thuật toán: duy trì hai tập dữ liệu raster đã căn chỉnh trong bộ nhớ, hiển thị khung nhìn kết hợp với vị trí đường phân chia có thể điều chỉnh để kiểm soát khả năng hiển thị của lớp, tương tác của người dùng điều chỉnh động đường phân chia tạo hiệu ứng chia đôi màn hình. Hỗ trợ cả hướng phân chia ngang và dọc. Tính năng chính: so sánh tương tác theo thời gian thực, duy trì trực quan hóa ở độ phân giải đầy đủ, giao diện người dùng trực quan không đòi hỏi kỹ năng phân tích, hoạt động với raster đa phổ và raster chỉ mục, hỗ trợ các tập dữ liệu lớn nhờ kết xuất hiệu quả. Khả năng: trực quan hóa phát hiện biến động, so sánh trước/sau, phân tích đa thời gian, đánh giá chuẩn hóa bức xạ, kiểm tra trực quan độ chính xác phân loại. Trường hợp sử dụng: phát hiện biến động ảnh giữa các thời điểm, so sánh kết quả phân loại với dữ liệu tham chiếu, đánh giá hiệu quả tiền xử lý, phát hiện biến động trực quan trong phân tích chuỗi thời gian. Ứng dụng: đánh giá thiệt hại trong ứng phó thảm họa, giám sát đô thị hóa lan tỏa, phát hiện nhiễu loạn rừng, giám sát biến động nông nghiệp, kiểm soát chất lượng đầu ra xử lý ảnh. Diễn giải đầu ra: sự khác biệt trực quan cho thấy mức độ và vị trí biến động; các cạnh sắc nét cho thấy biến động đáng kể; các chuyển tiếp dần dần gợi ý sai lệch đăng ký hoặc sự biến đổi dần theo thời gian; các khác biệt có hệ thống trên toàn ảnh cho thấy các lỗi xử lý có hệ thống.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster ảnh bên trái hoặc đối tượng raster có kiểu."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster ảnh bên phải hoặc đối tượng raster có kiểu."
              },
              "label1": {
                "label": "Nhãn 1",
                "description": "Nhãn tùy chọn hiển thị cho ảnh bên trái."
              },
              "left_palette": {
                "label": "Bảng màu bên trái",
                "description": "Bảng màu cho ảnh không phải RGB bên trái (mặc định grey)."
              },
              "left_reverse_palette": {
                "label": "Đảo bảng màu bên trái",
                "description": "Đảo ngược bảng màu bên trái."
              },
              "label2": {
                "label": "Nhãn 2",
                "description": "Nhãn tùy chọn hiển thị cho ảnh bên phải."
              },
              "right_palette": {
                "label": "Bảng màu bên phải",
                "description": "Bảng màu cho ảnh không phải RGB bên phải (mặc định grey)."
              },
              "right_reverse_palette": {
                "label": "Đảo bảng màu bên phải",
                "description": "Đảo ngược bảng màu bên phải."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao hiển thị tính bằng điểm ảnh (mặc định 600)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn HTML đầu ra."
              }
            }
          },
          "image_stack_profile": {
            "name": "Hồ sơ chồng ảnh",
            "description": "Trích xuất hồ sơ theo từng điểm qua một chồng raster có thứ tự và tùy chọn ghi báo cáo HTML.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu phẩy/chấm phẩy."
              },
              "points": {
                "label": "Điểm",
                "description": "Đường dẫn vector điểm (hoặc đối tượng vector có kiểu) chứa các vị trí lấy mẫu."
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              }
            }
          },
          "obia_audit_report_pro": {
            "name": "Báo cáo kiểm toán OBIA (Pro)",
            "description": "Xây dựng báo cáo kiểm toán cho các sản phẩm của quy trình OBIA, bao gồm siêu dữ liệu về sự tồn tại, kích thước và dấu thời gian của tệp.",
            "params": {
              "artifacts": {
                "label": "Sản phẩm trung gian",
                "description": "Mảng đường dẫn các sản phẩm cần kiểm toán."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn JSON báo cáo kiểm toán đầu ra."
              }
            }
          },
          "obia_batch_orchestrator_pro": {
            "name": "Điều phối xử lý hàng loạt OBIA (Pro)",
            "description": "Chạy nhiều tác vụ pipeline OBIA trong một yêu cầu và trả về báo cáo tác vụ tổng hợp.",
            "params": {
              "jobs": {
                "label": "Tác vụ",
                "description": "Mảng các đối tượng công việc với inputs, training, output_prefix và segment_method tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo JSON đầu ra tùy chọn."
              }
            }
          },
          "obia_pipeline_basic": {
            "name": "Quy trình OBIA cơ bản",
            "description": "Thực thi quy trình OBIA hoàn chỉnh từ đầu đến cuối: phân đoạn (SLIC/Graph), hợp nhất vùng nhỏ, trích xuất đặc trưng phổ/hình dạng và phân loại random forest trong một thao tác duy nhất.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh dùng cho phân đoạn/đặc trưng."
              },
              "training": {
                "label": "Huấn luyện",
                "description": "CSV huấn luyện có các cột segment_id và class."
              },
              "output_prefix": {
                "label": "Tiền tố đầu ra",
                "description": "Tiền tố đường dẫn đầu ra cho các sản phẩm được tạo."
              },
              "segment_method": {
                "label": "Phương pháp phân đoạn",
                "description": "Phương pháp phân đoạn: slic hoặc graph (mặc định slic)."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Kích thước phân đoạn tối thiểu cho bước gộp dọn dẹp (mặc định 10)."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Tên trường lớp huấn luyện (mặc định class)."
              }
            }
          },
          "object_class_probability_maps": {
            "name": "Bản đồ xác suất lớp đối tượng",
            "description": "Chuyển đổi các dự đoán thành bản đồ xác suất theo từng lớp, cho phép trực quan hóa độ bất định dựa trên raster và lọc dựa trên độ tin cậy. Hỗ trợ phân ngưỡng độ tin cậy ở các bước sau và các kịch bản đa nhãn.",
            "params": {
              "predictions": {
                "label": "Dự đoán",
                "description": "CSV dự đoán có segment_id và predicted_class."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV xác suất đầu ra."
              }
            }
          },
          "object_features_context_neighbors": {
            "name": "Đặc trưng đối tượng: ngữ cảnh lân cận",
            "description": "Tính toán các đặc trưng ngữ cảnh không gian: số đối tượng kề nhau, chiều dài ranh giới chung và các chỉ số mức độ cô lập. Cho phép phân loại có xét đến lân cận, nắm bắt quan hệ giữa các đối tượng trong cảnh quan.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "object_features_shape_basic": {
            "name": "Đặc trưng đối tượng: hình dạng cơ bản",
            "description": "Tính toán các bộ mô tả hình dạng hình học và hình thái cho mỗi phân đoạn, bao gồm diện tích (số điểm ảnh), chu vi (chiều dài ranh giới), độ chặt (độ tròn chuẩn hóa theo chu vi), độ giãn dài (tỷ lệ dài-rộng), hệ số hình dạng (độ đều đặn hình dạng chuẩn hóa) và độ đặc (hiệu suất bao lồi). Các bộ mô tả hình dạng nắm bắt đặc điểm cấu trúc độc lập với nội dung phổ, cho phép phân loại hình học đối tượng và nhận dạng mẫu hình thái. Các tính năng chính bao gồm bộ chỉ số hình dạng toàn diện bao quát diện tích, chu vi, độ đều đặn và độ giãn dài, các thuật toán dò ranh giới hiệu quả về mặt tính toán, các chỉ số bất biến với phép quay và tịnh tiến, khả năng áp dụng trên nhiều dải thang, và khả năng phân loại đối tượng theo hình thái (ví dụ: đường giao thông kéo dài so với công trình nhỏ gọn). Các trường hợp sử dụng bao gồm phân loại dấu chân công trình và phân tích cấu trúc đô thị, trích xuất đối tượng dạng tuyến (đường giao thông, sông, ranh giới), đặc trưng hóa mảng thực vật và phân tích phân mảnh, kiểm soát chất lượng thông qua lọc dựa trên hình dạng, nhận dạng đối tượng phân cấp kết hợp thuộc tính hình dạng và phổ, và định lượng cấu trúc cảnh quan trong giám sát sinh thái. Diện tích ở đầu ra định lượng kích thước phân đoạn theo điểm ảnh; chu vi xác định độ phức tạp của ranh giới; độ chặt gần 1.0 cho thấy hình dạng tròn/đều đặn, giá trị thấp hơn cho thấy các đối tượng không đều/kéo dài; độ giãn dài >1 cho thấy đối tượng dạng tuyến, gần 1 cho thấy đối tượng nhỏ gọn; hệ số hình dạng kết hợp nhiều thuộc tính hình dạng để phân loại hình dạng tích hợp; các chỉ số hình dạng cho phép lọc hình thái để tách riêng các kiểu đối tượng mục tiêu.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "object_features_spectral_basic": {
            "name": "Đặc trưng đối tượng: phổ cơ bản",
            "description": "Tính toán các bản tóm tắt thống kê đơn biến toàn diện về giá trị phản xạ phổ trong mỗi phân đoạn trên tất cả các kênh ảnh. Các phép tính theo từng phân đoạn bao gồm phản xạ trung bình, độ lệch chuẩn (độ đồng nhất), giới hạn phản xạ nhỏ nhất và lớn nhất, các giá trị phân vị cho ước lượng vững, và thống kê theo từng kênh, cho phép định lượng kết cấu đa phổ và đặc trưng hóa hồ sơ phổ vốn là nền tảng của các quy trình phân loại OBIA. Các tính năng chính bao gồm tạo thống kê phổ theo từng kênh cho ảnh đa phổ và siêu phổ, các thước đo thống kê vững nắm bắt xu hướng trung tâm và độ phân tán, xác định các dị thường phổ và giá trị ngoại lai trong phân đoạn, tóm tắt raster sang vector hiệu quả, và đầu ra cung cấp trực tiếp cho các pipeline phân loại học máy. Các trường hợp sử dụng bao gồm trích xuất đặc trưng cho phân loại hướng đối tượng dùng các chỉ số phổ, nhận dạng kiểu lớp phủ đất thông qua phân tích đặc trưng phổ, phát hiện biến động thông qua so sánh thống kê phổ qua các chuỗi thời gian, đánh giá chất lượng dữ liệu và phát hiện giá trị ngoại lai, giám sát môi trường thông qua phân tích chuỗi thời gian phổ, và các ứng dụng nông nghiệp chính xác đòi hỏi đặc trưng hóa phản hồi phổ chuẩn hóa. Giá trị trung bình ở đầu ra thể hiện phản hồi phổ điển hình của vật liệu trong phân đoạn; độ lệch chuẩn định lượng tính không đồng nhất bên trong (thấp = bề mặt đồng nhất, cao = vật liệu hỗn hợp hoặc bóng); giới hạn nhỏ nhất/lớn nhất xác định các cực trị phổ trong phân đoạn; hồ sơ phổ cho phép so sánh với các đặc trưng phổ tham chiếu; các thống kê tạo nền tảng cho vector đặc trưng phân loại; phân tích theo từng kênh làm rõ các chỉ số phổ và khả năng phân biệt vật liệu.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh dùng cho các đặc trưng phổ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "object_features_texture_glcm_basic": {
            "name": "Đặc trưng đối tượng: kết cấu GLCM cơ bản",
            "description": "Trích xuất các đặc tính kết cấu bằng phân tích Ma trận đồng xuất hiện mức xám (GLCM) được tính từ phân bố cường độ theo từng kênh trong mỗi phân đoạn. GLCM định lượng sự đồng xuất hiện không gian của các mức tông, tạo ra các bộ mô tả bao gồm độ tương phản (biến thiên cục bộ), độ đồng nhất (tính đều đặn không gian), năng lượng (tính trật tự), entropy (tính hỗn loạn) và các chỉ số độ bất tương đồng, nắm bắt các mẫu kết cấu độc lập với độ sáng phổ tổng thể. Các tính năng chính bao gồm các chỉ số kết cấu dựa trên GLCM nắm bắt các mẫu không gian cục bộ trong phân đoạn, phân tích đa hướng (ngang, dọc, chéo) để đặc trưng hóa kết cấu không phụ thuộc hướng, khả năng áp dụng cho mọi kênh ảnh cho phép lấy dấu kết cấu, phân biệt bề mặt có kết cấu với bề mặt nhẵn, và phân tích khả thi về mặt tính toán ở cấp phân đoạn. Các trường hợp sử dụng bao gồm phân loại vật liệu dựa trên độ nhám bề mặt và kết cấu (nhựa đường so với bê tông, phân biệt loại cây trồng), đặc trưng hóa cấu trúc và mật độ rừng thông qua kết cấu tán cây, giải đoán ảnh SAR và phân tích kết cấu cấu trúc đô thị, phân biệt bề mặt chất lượng tốt với bề mặt xuống cấp, đánh giá sức khỏe cây trồng thông qua các chỉ số kết cấu tán, và phát hiện mây và bóng thông qua dị thường kết cấu. Độ tương phản cao ở đầu ra cho thấy kết cấu thô/biến động, thấp cho thấy bề mặt nhẵn; độ đồng nhất cao cho thấy các mẫu không gian đều đặn, thấp cho thấy kết cấu hỗn loạn; năng lượng cao cho thấy kết cấu có tổ chức, thấp cho thấy nhiễu ngẫu nhiên; entropy định lượng tính hỗn loạn của kết cấu; độ bất tương đồng nắm bắt tính không đều của mẫu không gian; hồ sơ kết cấu cho phép phân loại theo vật liệu cụ thể; kết hợp với đặc trưng phổ giúp cải thiện khả năng phân biệt kiểu đối tượng.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Raster cường độ một kênh dùng cho phân tích kết cấu."
              },
              "levels": {
                "label": "Số mức",
                "description": "Số mức lượng tử hóa cho GLCM (mặc định 16)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "object_features_topology_relations": {
            "name": "Đặc trưng đối tượng: quan hệ tô pô",
            "description": "Tính toán các đặc trưng tô pô đồ thị: bậc của đối tượng (số lân cận), cường độ lân cận chiếm ưu thế và cờ điểm khớp nối. Nắm bắt vị trí cấu trúc trong mạng đối tượng phục vụ phân loại phân cấp.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "object_uncertainty_diagnostics_pro": {
            "name": "Chẩn đoán độ bất định đối tượng (Pro)",
            "description": "Tính toán các chẩn đoán độ bất định tổng hợp từ đầu ra xác suất của đối tượng.",
            "params": {
              "probabilities": {
                "label": "Xác suất",
                "description": "CSV xác suất đầu vào có các cột xác suất và độ bất định."
              },
              "low_conf_threshold": {
                "label": "Ngưỡng độ tin cậy thấp",
                "description": "Ngưỡng độ tin cậy thấp trên xác suất (mặc định 0.7)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn JSON chẩn đoán đầu ra."
              }
            }
          },
          "objects_boundary_refinement_pro": {
            "name": "Tinh chỉnh ranh giới đối tượng (Pro)",
            "description": "Tinh chỉnh ranh giới đối tượng bằng cách làm sạch lặp các vùng nhỏ với việc hợp nhất có xét đến lân cận.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp tinh chỉnh (mặc định 2)."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Ngưỡng kích thước đối tượng tối thiểu (mặc định 6)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đã tinh chỉnh đầu ra."
              }
            }
          },
          "objects_enforce_min_mapping_unit": {
            "name": "Áp đặt đơn vị bản đồ tối thiểu cho đối tượng",
            "description": "Áp đặt đơn vị bản đồ tối thiểu bằng cách hợp nhất các phân đoạn đối tượng có kích thước quá nhỏ.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Kích thước phân đoạn tối thiểu tính bằng ô (mặc định 5)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp gộp: longest, largest, nearest (mặc định longest)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "polygons_to_segments": {
            "name": "Đa giác thành phân đoạn",
            "description": "Raster hóa các đa giác đã chỉnh sửa trở lại raster nhãn phân đoạn, giữ nguyên ID đối tượng hoặc giá trị thuộc tính. Cho phép các quy trình OBIA lặp kết hợp phân đoạn tự động với tinh chỉnh thủ công.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đa giác đầu vào."
              },
              "base": {
                "label": "Nền",
                "description": "Raster nền xác định lưới đầu ra."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số tùy chọn để khắc (mặc định FID)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster phân đoạn đầu ra."
              }
            }
          },
          "propagate_labels_across_hierarchy": {
            "name": "Lan truyền nhãn qua phân cấp",
            "description": "Truyền nhãn lớp ở cấp thô xuống các đối tượng con ở cấp mịn thông qua ánh xạ phân cấp. Cho phép gán nhãn hiệu quả cho các phân cấp lồng nhau và các quy trình tinh chỉnh dựa trên kế thừa.",
            "params": {
              "hierarchy": {
                "label": "Phân cấp",
                "description": "CSV phân cấp có fine_segment_id và coarse_segment_id."
              },
              "parent_labels": {
                "label": "Nhãn cha",
                "description": "CSV nhãn cha có coarse_segment_id và class."
              },
              "child_labels": {
                "label": "Nhãn con",
                "description": "CSV nhãn con tùy chọn có fine_segment_id và class."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV nhãn đã lan truyền đầu ra."
              }
            }
          },
          "segment_graph_felzenszwalb": {
            "name": "Phân đoạn đồ thị Felzenszwalb",
            "description": "Phương pháp phân đoạn dựa trên đồ thị của Felzenszwalb coi ảnh là một đồ thị vô hướng có trọng số, trong đó các điểm ảnh là nút và các cạnh nối các điểm ảnh kề nhau với trọng số thể hiện độ bất tương đồng phổ. Các phân đoạn được hợp nhất lặp bằng cách so sánh trọng số cạnh trong các thành phần với các ngưỡng động; các cạnh có trọng số dưới ngưỡng được hợp nhất, tạo ra các phân đoạn có đặc tính phổ đồng nhất cục bộ. Cách tiếp cận phân cấp này tạo ra các kết quả phân đoạn có ý nghĩa về mặt tri giác, nhạy với biến thiên tương phản cục bộ và các gián đoạn màu sắc/kết cấu tự nhiên. Tính năng chính: Phân đoạn phân cấp dựa trên đồ thị; độ phức tạp tính toán O(n log n) hiệu quả; nhạy với biến thiên tương phản cục bộ; tạo ra các phân đoạn có ý nghĩa về mặt tri giác; hỗ trợ dữ liệu đa phổ/siêu phổ; tạo các vùng có kích thước thay đổi, bảo toàn ranh giới tự nhiên. Trường hợp sử dụng: Phân đoạn ảnh đa phổ; lập bản đồ sinh cảnh tự nhiên; trích xuất đối tượng đô thị; khoanh vẽ tán rừng; tiền xử lý phát hiện biến động; phân đoạn dữ liệu siêu phổ. Diễn giải đầu ra: Đầu ra là raster đã gán nhãn; mỗi điểm ảnh được gán một ID phân đoạn. Kích thước phân đoạn thay đổi tỷ lệ nghịch với độ tương phản phổ cục bộ; các ranh giới có độ tương phản cao tạo ra nhiều phân đoạn nhỏ hơn; các vùng đồng nhất hợp nhất thành các phân đoạn lớn hơn. Độ nhạy với tham số k (thang ngưỡng) cho phép tạo ra kết quả phân đoạn thô hơn hoặc mịn hơn. Ranh giới phân đoạn tương ứng với các gián đoạn phổ tự nhiên.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "k": {
                "label": "K",
                "description": "Tham số tỉ lệ phân đoạn (mặc định 500.0)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Gợi ý làm trơn tùy chọn (mặc định 0.8)."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Diện tích tối thiểu cho bước dọn dẹp sau khi gộp (mặc định 20)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster phân đoạn đầu ra tùy chọn."
              }
            }
          },
          "segment_multiresolution_hierarchical": {
            "name": "Phân đoạn đa độ phân giải phân cấp",
            "description": "Tạo các kết quả phân đoạn phân cấp đa thang (thô và mịn) với ánh xạ cha-con tường minh. Cho phép trích xuất đặc trưng phụ thuộc thang và các quy trình phân loại đa cấp.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "coarse_k": {
                "label": "K thô",
                "description": "Tham số tỉ lệ thô (mặc định 800)."
              },
              "fine_k": {
                "label": "K mịn",
                "description": "Tham số tỉ lệ mịn (mặc định 250)."
              },
              "output_prefix": {
                "label": "Tiền tố đầu ra",
                "description": "Tiền tố đầu ra cho các sản phẩm được tạo."
              }
            }
          },
          "segment_scale_parameter_optimizer": {
            "name": "Tối ưu hóa tham số tỉ lệ phân đoạn",
            "description": "Tìm kiếm các tham số thang phân đoạn ứng viên để xác định thang tối ưu phù hợp với số lượng đối tượng mục tiêu. Việc lựa chọn thang tự động loại bỏ tinh chỉnh thủ công để đạt chất lượng phân đoạn nhất quán.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "candidate_scales": {
                "label": "Tỉ lệ ứng viên",
                "description": "Danh sách các giá trị tỉ lệ (k) ứng viên."
              },
              "target_objects": {
                "label": "Số đối tượng mục tiêu",
                "description": "Số đối tượng mong muốn. Mặc định là sqrt(total_cells)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn JSON báo cáo tối ưu hóa tùy chọn."
              }
            }
          },
          "segment_slic_superpixels": {
            "name": "Phân đoạn siêu điểm ảnh SLIC",
            "description": "SLIC (Simple Linear Iterative Clustering) thực hiện phân cụm điểm ảnh lặp trong không gian đặc trưng 5 chiều kết hợp tọa độ không gian và giá trị màu/phổ, hội tụ các siêu điểm ảnh về phía tính đồng nhất cục bộ. Thuật toán khởi tạo một lưới đều các tâm cụm và gán điểm ảnh cho các tâm gần nhất, lặp lại việc cập nhật tâm và thu hẹp vùng tìm kiếm. Điều này tạo ra các siêu điểm ảnh nhỏ gọn, có hình dạng đều đặn với mức vi phạm ranh giới tối thiểu so với các phương pháp thay thế như watershed hoặc mean-shift, mang lại khả năng bám theo các cạnh tự nhiên vượt trội. Tính năng chính: Tạo ra các siêu điểm ảnh đồng đều, nhỏ gọn; hiệu quả tính toán với độ phức tạp thời gian tuyến tính; tham số độ chặt do người dùng cấu hình cân bằng giữa tính đều đặn không gian và tính nhất quán phổ; vượt ranh giới tối thiểu; hỗ trợ ảnh đa phổ. Trường hợp sử dụng: Tiền xử lý phân loại hướng đối tượng; phân tích vùng phân cấp; phân đoạn ảnh SAR và ảnh quang học; lập bản đồ đô thị; khoanh vẽ thực vật; xác định ranh giới sử dụng đất. Diễn giải đầu ra: Đầu ra là raster đã gán nhãn trong đó giá trị điểm ảnh thể hiện ID siêu điểm ảnh được gán. Ranh giới siêu điểm ảnh khớp với các cạnh chiếm ưu thế và các chuyển tiếp màu sắc. Các siêu điểm ảnh nhỏ hơn (độ chi tiết cao hơn) nắm bắt chi tiết mịn hơn nhưng làm tăng tải tính toán; các siêu điểm ảnh lớn hơn (độ chi tiết thấp hơn) hợp nhất các vùng tương tự, cải thiện hiệu quả. Độ chính xác ranh giới phụ thuộc vào việc tinh chỉnh tham số độ chặt và mức độ phân tách giữa các kênh đa phổ.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "region_size": {
                "label": "Kích thước vùng",
                "description": "Kích thước siêu điểm ảnh mục tiêu tính bằng điểm ảnh (mặc định 20)."
              },
              "compactness": {
                "label": "Độ chặt",
                "description": "Điều khiển độ nén chặt (mặc định 10.0)."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Diện tích tối thiểu cho bước gộp dọn dẹp (mặc định suy ra từ region_size)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster phân đoạn đầu ra tùy chọn."
              }
            }
          },
          "segment_watershed_markers": {
            "name": "Phân đoạn watershed theo điểm đánh dấu",
            "description": "Phân đoạn kiểu watershed dựa trên marker, tách các đối tượng xung quanh các vùng hạt giống marker đã xác định. Chú trọng bảo toàn ranh giới đồng thời kiểm soát kích thước phân đoạn cho các quy trình OBIA phân cấp.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "gradient_weight": {
                "label": "Trọng số gradient",
                "description": "Điều khiển mức nhấn ranh giới (mặc định 1.0)."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Kích thước phân đoạn tối thiểu (mặc định 12)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster phân đoạn đầu ra tùy chọn."
              }
            }
          },
          "segments_merge_small_regions": {
            "name": "Gộp vùng nhỏ của phân đoạn",
            "description": "Hợp nhất phân đoạn thực hiện việc gộp phân cấp thông qua phân tích sự kề nhau về không gian và các tiêu chí hợp nhất do người dùng xác định. Đánh giá mỗi phân đoạn có kích thước quá nhỏ so với các vùng lân cận bằng ngưỡng kích thước, thước đo độ tương đồng phổ hoặc các tiêu chí hình thái tùy chỉnh; dần dần hợp nhất các phân đoạn ứng viên vào các lân cận hấp thụ theo hàng đợi ưu tiên dựa trên chi phí hợp nhất, bảo toàn tính liên thông của phân đoạn và tránh vi phạm tô pô. Các tính năng chính bao gồm chính quy hóa hậu xử lý cho ảnh bị phân đoạn quá mức, tiêu chí hợp nhất do người dùng cấu hình (kích thước tối thiểu, ngưỡng tương đồng phổ, thuộc tính hình thái), bảo toàn tính toàn vẹn ranh giới phân đoạn trong quá trình hợp nhất, tạo ra các bản đồ phân đoạn nhỏ gọn và đơn giản hóa, và tinh chỉnh phân cấp mà không cần phân đoạn lại toàn bộ. Các trường hợp sử dụng bao gồm làm sạch kết quả OBIA bị phân đoạn quá mức nhằm giảm phân mảnh và nhiễu, đơn giản hóa phân đoạn để cải thiện độ ổn định phân loại, loại bỏ các phân đoạn nhỏ giả tạo từ lần phân đoạn ban đầu, chuẩn hóa thuộc tính phân đoạn để trích xuất đặc trưng đồng nhất ở các bước sau, và tinh chỉnh đảm bảo chất lượng cho các phân cấp phân đoạn đa thang. Đầu ra có số phân đoạn giảm phản ánh việc gộp; các phân đoạn đã hợp nhất kế thừa thống kê phổ từ các thành phần bị hấp thụ; ranh giới trở nên mượt hơn với độ phức tạp giảm; các vùng đã hợp nhất duy trì tính toàn vẹn không gian nhưng có tính không đồng nhất phổ bên trong tăng nhẹ; đầu ra được tối ưu hóa cho phân loại và độ ổn định đặc trưng ở các bước sau.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster nhãn phân đoạn đầu vào."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Kích thước phân đoạn tối thiểu tính bằng ô (mặc định 5)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp gộp: longest, largest, nearest (mặc định longest)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "segments_split_low_cohesion": {
            "name": "Tách phân đoạn có độ liên kết thấp",
            "description": "Phân đoạn lại các đối tượng hiện có có độ kết dính thấp bằng các thiết lập thang mịn hơn để cải thiện độ đồng nhất phổ. Tinh chỉnh thích ứng cho các vùng có vấn đề mà không ảnh hưởng đến các đối tượng đã hình thành tốt.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster phân đoạn hiện có."
              },
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào dùng để phân đoạn lại."
              },
              "split_scale": {
                "label": "Tỉ lệ tách",
                "description": "Tham số tỉ lệ tách mịn hơn (mặc định 120)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "segments_to_polygons": {
            "name": "Phân đoạn thành đa giác",
            "description": "Chuyển đổi nhãn phân đoạn raster thành đa giác vector để chỉnh sửa tương tác, kiểm soát chất lượng và tích hợp GIS. Cho phép chuyển đổi liền mạch giữa các biểu diễn OBIA dạng raster và vector.",
            "params": {
              "segments": {
                "label": "Phân đoạn",
                "description": "Raster phân đoạn đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "evaluate_training_sites": {
            "name": "Đánh giá vùng mẫu huấn luyện",
            "description": "Đánh giá khả năng phân tách lớp trong các đa giác huấn luyện đa kênh và ghi báo cáo HTML với thống kê phân bố theo từng kênh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh (mỗi kênh phổ một raster), dưới dạng đường dẫn hoặc chuỗi có dấu phân tách."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn tới dữ liệu huấn luyện dạng đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Tên trường lớp trong các thuộc tính của training_data."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp HTML đầu ra."
              }
            }
          },
          "fuzzy_knn_classification": {
            "name": "Phân loại KNN mờ",
            "description": "Thực hiện phân loại k láng giềng gần nhất mờ (fuzzy k-nearest-neighbor) và xuất ra độ tin cậy thành viên lớp.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm/đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường lớp trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Số lân cận (mặc định 5)."
              },
              "m": {
                "label": "M",
                "description": "Tham số số mũ mờ (> 1; mặc định 2.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đã phân loại đầu ra tùy chọn."
              },
              "probability_output": {
                "label": "Đầu ra xác suất",
                "description": "Đường dẫn raster xác suất thành viên tùy chọn."
              }
            }
          },
          "generalize_classified_raster": {
            "name": "Tổng quát hóa raster đã phân loại",
            "description": "Generalize Classified Raster đơn giản hóa các bản đồ phân loại bằng cách loại bỏ các mảng nhỏ bị cô lập thông qua lọc giá trị yếu vị (mode) lặp, hợp nhất các thành phần phân mảnh một điểm ảnh hoặc nhiều điểm ảnh vào các lớp lân cận chiếm ưu thế về không gian. Thuật toán: áp dụng bộ lọc yếu vị hình thái giữ lại lớp chiếm ưu thế trong các cửa sổ di động, loại bỏ hoặc gộp các điểm ảnh bị cô lập khỏi ngữ cảnh không gian, tinh chỉnh lặp kết quả phân loại thông qua phân tích thành phần liên thông, hấp thụ các lớp nhỏ vào các lớp lân cận chiếm ưu thế. Kích thước cửa sổ và kích thước mảng tối thiểu có thể cấu hình kiểm soát cường độ khái quát hóa. Tính năng chính: giảm phân mảnh phân loại, cải thiện tính nhất quán không gian, loại bỏ các mảng cô lập do nhiễu gây ra, duy trì ranh giới lớp thông qua lọc có chọn lọc, xử lý thành phần liên thông hiệu quả về mặt tính toán. Khả năng: cường độ khái quát hóa thay đổi được, bảo toàn các mảng liền kề lớn, áp dụng cho dữ liệu chỉ mục hoặc dữ liệu phân loại. Trường hợp sử dụng: tinh chỉnh sau phân loại loại bỏ hiệu ứng muối tiêu, gộp các kết quả phân loại bị phân mảnh, chuẩn bị các sản phẩm phân loại cuối cùng, khái quát hóa theo một đơn vị bản đồ tối thiểu cụ thể. Ứng dụng: hoàn thiện bản đồ lớp phủ đất, loại bỏ các phân loại một điểm ảnh giả tạo, cải thiện tính liên tục không gian của phân loại. Diễn giải đầu ra: sự giảm phân mảnh lớp cho thấy việc khử đốm hiệu quả; các ranh giới được bảo toàn cho thấy tham số khái quát hóa phù hợp; khái quát hóa quá mức cho thấy tham số cửa sổ quá lớn; sự cải thiện tính nhất quán không gian gợi ý rằng nhiễu phân loại chủ yếu là các lỗi một điểm ảnh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đã phân loại đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Kích thước đối tượng tối thiểu tính bằng ô; các mảng nhỏ hơn sẽ được gán lại (mặc định 5)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp tổng quát hóa: 'longest' (mặc định), 'largest', hoặc 'nearest'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "generalize_with_similarity": {
            "name": "Tổng quát hóa theo độ tương đồng",
            "description": "Khái quát hóa các mảng nhỏ trong raster đã phân loại bằng cách hợp nhất chúng vào mảng lân cận tương đồng nhất về phổ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đã phân loại đầu vào."
              },
              "similarity": {
                "label": "Độ tương đồng",
                "description": "Mảng các raster tương đồng dùng để tính độ tương đồng với tâm đối tượng."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Kích thước đối tượng tối thiểu tính bằng điểm ảnh; các đối tượng nhỏ hơn sẽ được gộp (mặc định 5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "k_means_clustering": {
            "name": "Phân cụm K-means",
            "description": "Phân cụm K-means thực hiện phân loại phổ không giám sát bằng cách lặp lại việc phân chia các điểm ảnh thành K cụm phổ, cực tiểu hóa phương sai trong cụm và phát hiện các nhóm phổ tự nhiên trong ảnh đa phổ mà không cần mẫu huấn luyện hay định nghĩa lớp tiên nghiệm. Thuật toán khởi tạo K tâm cụm ngẫu nhiên, lặp lại việc gán điểm ảnh cho các tâm gần nhất và tính lại tâm bằng trung bình cụm cho đến khi hội tụ, xuất ra kết quả gán cụm và các tâm cuối cùng. K-means hiệu quả về mặt tính toán, có khả năng mở rộng cho các chồng ảnh đa phổ lớn, và phát hiện các mẫu phổ dựa trên dữ liệu, hữu ích cho phân tích thăm dò và nhận dạng lớp tự nhiên. Các tính năng chính bao gồm số cụm K do người dùng chỉ định cho phép cân bằng linh hoạt giữa chi tiết phổ và khả năng diễn giải đầu ra, tiêu chí hội tụ với giới hạn số lần lặp và ngưỡng dịch chuyển tâm có thể cấu hình, tùy chọn kiểm soát hạt giống ngẫu nhiên đảm bảo phân cụm có thể tái lập phục vụ kiểm thử và kiểm định, và song song hóa hiệu quả để xử lý ảnh lớn. Các ứng dụng bao gồm phân loại lớp phủ đất không giám sát phát hiện các lớp phổ tự nhiên, phát hiện dị thường xác định các điểm ảnh bất thường về phổ, phân đoạn ảnh cho phân loại có giám sát tiếp theo, và phân tích phổ thăm dò làm rõ các mẫu phổ chiếm ưu thế. Đầu ra K-means xác định các nhóm phổ tự nhiên. Đầu ra tạo ra raster thành viên cụm với các số nguyên từ 0 đến K-1, tệp tâm cụm với phổ trung bình theo từng cụm, và tùy chọn phương sai trong cụm định lượng độ chặt; việc trực quan hóa chồng các lớp cụm lên ảnh tổ hợp màu thật làm rõ các mẫu không gian và tính liên tục của cụm.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu phẩy/chấm phẩy."
              },
              "classes": {
                "label": "Lớp",
                "description": "Số lớp mục tiêu (k)."
              },
              "max_iterations": {
                "label": "Số lần lặp tối đa",
                "description": "Số lần lặp tối đa (mặc định 10)."
              },
              "class_change": {
                "label": "Thay đổi lớp",
                "description": "Dừng khi phần trăm ô hợp lệ bị thay đổi giảm xuống dưới ngưỡng này (mặc định 2.0)."
              },
              "initialize": {
                "label": "Khởi tạo",
                "description": "Chiến lược khởi tạo trọng tâm: 'diagonal' (mặc định) hoặc 'random'."
              },
              "min_class_size": {
                "label": "Kích thước lớp tối thiểu",
                "description": "Kích thước lớp tối thiểu dùng khi cập nhật trọng tâm (mặc định 10)."
              },
              "out_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster lớp đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "knn_classification": {
            "name": "Phân loại KNN",
            "description": "Phân loại K láng giềng gần nhất gán điểm ảnh vào các lớp dựa trên biểu quyết đa số giữa K mẫu huấn luyện gần nhất trong không gian phổ, cho phép phân loại phi tuyến linh hoạt mà không cần huấn luyện mô hình tường minh. KNN tính khoảng cách (Euclid, góc phổ hoặc Mahalanobis) từ mỗi điểm ảnh đến tất cả các mẫu huấn luyện, xác định K mẫu huấn luyện gần nhất, áp dụng biểu quyết đa số có trọng số hoặc không trọng số để xác định lớp, và trả về nhãn lớp cùng tùy chọn điểm tin cậy. KNN đặc biệt hiệu quả khi dữ liệu huấn luyện hạn chế, ranh giới lớp phi tuyến mạnh, và phân bố phổ của lớp không đồng nhất, những trường hợp mà các mô hình tham số gặp khó khăn. Các tính năng chính bao gồm các thước đo khoảng cách có thể lựa chọn (Euclid, góc phổ, Mahalanobis) phù hợp với các đặc tính phổ và cấu trúc tương quan khác nhau, giá trị K do người dùng chỉ định cho phép cân bằng giữa độ chính xác và độ phức tạp, tùy chọn biểu quyết có trọng số nhấn mạnh các mẫu ở gần, và ngưỡng tin cậy tùy chọn cho phép loại bỏ các phân loại không rõ ràng. Các ứng dụng bao gồm phân loại viễn thám độ chính xác cao với mẫu huấn luyện thu thập thực địa, phân loại với mẫu nhỏ khi dữ liệu thực địa hạn chế, phân loại địa hình khó với đặc trưng phổ biến động mạnh, và phân loại có xét đến độ tin cậy loại bỏ các quyết định ở ranh giới. Phân loại KNN cho phép đạt kết quả độ chính xác cao với dữ liệu huấn luyện linh hoạt. Đầu ra bao gồm raster nhãn lớp với ID lớp số nguyên khớp với nhãn mẫu huấn luyện, raster tin cậy tùy chọn ghi nhận tỷ lệ phần trăm biểu quyết hoặc điểm tin cậy có trọng số theo khoảng cách, và độ chính xác phân loại có thể vượt các phương pháp khác khi chọn K tối ưu và có đủ mẫu huấn luyện.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm/đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường lớp trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Số lân cận (mặc định 5)."
              },
              "clip": {
                "label": "Cắt",
                "description": "Nếu true, loại bỏ các mẫu huấn luyện bị phân loại sai bằng một lượt tiền xử lý leave-one-out."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "knn_regression": {
            "name": "Hồi quy KNN",
            "description": "Thực hiện hồi quy k láng giềng gần nhất có giám sát trên các raster đầu vào đa kênh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm."
              },
              "field": {
                "label": "Trường",
                "description": "Trường mục tiêu dạng số trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Số lân cận (mặc định 5)."
              },
              "distance_weighted": {
                "label": "Trọng số theo khoảng cách",
                "description": "Nếu true, dùng trung bình có trọng số nghịch đảo khoảng cách."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "logistic_regression": {
            "name": "Hồi quy logistic",
            "description": "Thực hiện phân loại hồi quy logistic có giám sát trên các raster đầu vào đa kênh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm/đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường lớp trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Trọng số chính quy hóa L2 (mặc định 0.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "min_dist_classification": {
            "name": "Phân loại khoảng cách tối thiểu",
            "description": "Thực hiện phân loại khoảng cách tối thiểu có giám sát trên các raster đa phổ sử dụng dữ liệu huấn luyện dạng đa giác.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh (mỗi kênh phổ một raster), dưới dạng đường dẫn hoặc chuỗi có dấu phân tách."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn tới tệp vector đa giác chứa các vùng huấn luyện."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Tên của trường thuộc tính trong dữ liệu huấn luyện chứa mã định danh lớp."
              },
              "dist_threshold": {
                "label": "Ngưỡng khoảng cách",
                "description": "Ngưỡng z-score tùy chọn; các điểm ảnh xa hơn giá trị này so với trung bình lớp gần nhất sẽ không được phân loại. Mặc định: không có ngưỡng (phân loại tất cả)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ qua, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "modified_k_means_clustering": {
            "name": "Phân cụm K-means cải tiến",
            "description": "Phân cụm K-means cải tiến nâng cấp K-means tiêu chuẩn với tiền xử lý phổ, lựa chọn K thích ứng tự động và tiêu chí hội tụ nâng cao để phân loại đa phổ không giám sát vững chắc và chính xác hơn. Thuật toán áp dụng tiền xử lý tùy chọn bao gồm chuẩn hóa phổ loại bỏ ảnh hưởng của thang đo, biến đổi thành phần chính nhấn mạnh các hướng phương sai chiếm ưu thế, và lọc nhiễu loại bỏ các biến thiên phổ giả tạo. Lựa chọn K thích ứng sử dụng phương pháp khuỷu tay (elbow) hoặc phân tích silhouette để tự động phát hiện số cụm tối ưu thay vì yêu cầu chỉ định thủ công. Các tính năng chính bao gồm tiền xử lý phổ giảm độ nhạy với thang đo và nhấn mạnh các hướng biến thiên phổ chiếm ưu thế, lựa chọn K tự động phát hiện số cụm tối ưu một cách khách quan, tiêu chí hội tụ nâng cao bao gồm ngưỡng dịch chuyển tâm tương đối và các thước đo tương đồng góc phổ, và hậu xử lý tùy chọn hợp nhất các cụm tương tự hoặc tách các cụm phân tán. Các ứng dụng bao gồm phân loại lớp phủ đất thăm dò được cải thiện, tự động xử lý các thang phổ, phát hiện dị thường vững chắc tách tín hiệu khỏi nhiễu thông qua tiền xử lý, phân đoạn ảnh thích ứng tự động phát hiện mức độ chi tiết phù hợp, và tích hợp đa cảm biến chuẩn hóa các thang phổ của các cảm biến khác nhau. Đầu ra K-means cải tiến làm rõ các lớp phổ tự nhiên vững chắc. Đầu ra tạo ra raster thành viên cụm đã tối ưu với số lớp được xác định tự động, các tâm cụm kèm tài liệu về các phép biến đổi tiền xử lý, và các thống kê chẩn đoán định lượng chất lượng, mức độ phân tách và sự hội tụ của cụm; các khuyến nghị lựa chọn K thích ứng định hướng việc cân bằng giữa khả năng diễn giải và mức độ chi tiết.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu phẩy/chấm phẩy."
              },
              "start_clusters": {
                "label": "Số cụm khởi đầu",
                "description": "Số cụm ban đầu trước khi gộp (mặc định 1000)."
              },
              "merge_dist": {
                "label": "Khoảng cách gộp",
                "description": "Ngưỡng khoảng cách gộp cụm (Euclid)."
              },
              "max_iterations": {
                "label": "Số lần lặp tối đa",
                "description": "Số lần lặp tối đa (mặc định 10)."
              },
              "class_change": {
                "label": "Thay đổi lớp",
                "description": "Dừng khi phần trăm ô hợp lệ bị thay đổi giảm xuống dưới ngưỡng này (mặc định 2.0)."
              },
              "out_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster lớp đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "nnd_classification": {
            "name": "Phân loại NND",
            "description": "Thực hiện phân loại theo khoảng cách chuẩn hóa gần nhất với tùy chọn loại bỏ giá trị ngoại lai.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm/đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường lớp trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "z_threshold": {
                "label": "Ngưỡng Z",
                "description": "Z-score khoảng cách chuẩn hóa tối đa được chấp nhận trước khi đánh dấu ngoại lai (mặc định 1.96)."
              },
              "outlier_is_zero": {
                "label": "Ngoại lai bằng 0",
                "description": "Nếu true, các ngoại lai được gán giá trị lớp 0; nếu không thì gán NoData."
              },
              "k": {
                "label": "K",
                "description": "Kích thước lân cận cho ước lượng khoảng cách lớp (mặc định 25)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "otsu_thresholding": {
            "name": "Phân ngưỡng Otsu",
            "description": "Phân ngưỡng Otsu là một phương pháp phân đoạn ảnh tự động xác định giá trị ngưỡng toàn cục tối ưu bằng cách cực đại hóa phương sai giữa các lớp trong biểu đồ tần suất cường độ điểm ảnh. Thuật toán: xem xét biểu đồ tần suất của ảnh xám hoặc ảnh một kênh, lần lượt kiểm tra tất cả các giá trị ngưỡng có thể, tính phương sai giữa các lớp cho mỗi ngưỡng, chọn giá trị cực đại hóa mức phân tách phương sai giữa lớp tiền cảnh và lớp nền. Phi tham số, không cần chỉ định ngưỡng thủ công. Tính năng chính: xác định ngưỡng hoàn toàn tự động, chống chịu tốt với biến thiên chiếu sáng, cách tiếp cận dựa trên biểu đồ tần suất cho phép tính toán nhanh, không có tham số bên ngoài, cung cấp một ngưỡng toàn cục duy nhất. Khả năng: phân đoạn nhị phân, tối ưu hóa biểu đồ tần suất đơn đỉnh và hai đỉnh, xử lý ảnh có dải động hẹp hoặc độ tương phản cao. Trường hợp sử dụng: phân đoạn ảnh tự động không cần can thiệp của người dùng, nhị phân hóa tài liệu, trích xuất thủy vực, phát hiện mây trong ảnh vệ tinh, lập bản đồ băng/tuyết. Ứng dụng: tiền xử lý phát hiện biến động, phân loại lớp phủ đất đơn giản, tạo mặt nạ nước, phân đoạn sơ bộ trước khi phân loại nâng cao. Diễn giải đầu ra: các điểm ảnh dưới ngưỡng được phân vào một lớp, trên ngưỡng vào lớp còn lại; tính hai đỉnh của biểu đồ tần suất cho biết chất lượng phân tách; biểu đồ tần suất phân tách kém cho thấy không phù hợp cho phân loại nhị phân; các thước đo thống kê như phương sai giữa các lớp và độ đồng đều cho biết chất lượng phân đoạn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "parallelepiped_classification": {
            "name": "Phân loại hình hộp",
            "description": "Thực hiện phân loại hình hộp (parallelepiped) có giám sát trên các raster đa phổ sử dụng dữ liệu huấn luyện dạng đa giác.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh (mỗi kênh phổ một raster), dưới dạng đường dẫn hoặc chuỗi có dấu phân tách."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn tới tệp vector đa giác chứa các vùng huấn luyện."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Tên của trường thuộc tính trong dữ liệu huấn luyện chứa mã định danh lớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ qua, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "random_forest_classification": {
            "name": "Phân loại rừng ngẫu nhiên",
            "description": "Phân loại Random Forest gán nhãn thông qua một tổ hợp cây quyết định được huấn luyện trên các mẫu bootstrap với các tập con đặc trưng được chọn ngẫu nhiên. Mỗi cây phát triển độc lập mà không cắt tỉa, nắm bắt các quan hệ phi tuyến phức tạp và tương tác giữa các đặc trưng. Việc phân loại tổng hợp phiếu bầu từ thường là 100-1000 cây; lớp cuối cùng là kết quả biểu quyết đa số. Huấn luyện bootstrap và lựa chọn đặc trưng ngẫu nhiên giúp giảm quá khớp trong khi vẫn nắm bắt được các mẫu nhiều chiều. Mức độ quan trọng của đặc trưng có thể được tính từ sự thay đổi sai số ngoài túi (out-of-bag), xác định các kênh phổ chẩn đoán hoặc các đặc trưng dẫn xuất liên quan nhất đến phân loại. Các tính năng chính bao gồm xếp hạng mức độ quan trọng của biến để xác định các đặc trưng phân loại then chốt, độ tin cậy phân loại theo từng điểm ảnh từ sự đồng thuận phiếu bầu giữa các cây trong tổ hợp, tự động xử lý dữ liệu siêu phổ nhiều chiều, khả năng chống chịu giá trị ngoại lai phổ và nhiễu, cùng khả năng song song hóa việc huấn luyện và dự đoán. Công cụ xử lý hiệu quả các bài toán đa lớp với tập huấn luyện mất cân bằng. Các ứng dụng bao gồm phân loại lớp phủ đất từ dữ liệu đa phổ và siêu phổ, phát hiện biến động xác định các chuyển đổi phổ giữa các bản đồ, phân loại loại cây trồng từ ảnh vệ tinh đa thời gian, phân loại vật liệu đô thị phân biệt các kiểu công trình và bề mặt, và phát hiện dị thường xác định các giá trị ngoại lai phổ. Random forest liên tục đạt độ chính xác cao trong các ứng dụng viễn thám với lượng dữ liệu huấn luyện tương đối khiêm tốn. Diễn giải đầu ra: Số phiếu bầu cung cấp độ tin cậy phân loại; phiếu bầu nhất trí hoặc đa số mạnh (>80%) cho thấy phân loại đáng tin cậy, trong khi chênh lệch sít sao gợi ý sự không rõ ràng do điểm ảnh hỗn hợp. Xếp hạng mức độ quan trọng của đặc trưng xác định các kênh phổ hoặc chỉ số dẫn xuất có giá trị chẩn đoán cao nhất cho phân loại. Sai số ngoài túi ước lượng hiệu năng tổng quát hóa mà không cần kiểm định bằng tập giữ lại. Các tương tác đặc trưng là ngầm định; độ chính xác cao từ các tổ hợp kênh cụ thể gợi ý các quan hệ phổ phi tuyến.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm/đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường lớp trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây trong rừng (mặc định 200)."
              },
              "min_samples_leaf": {
                "label": "Số mẫu tối thiểu ở lá",
                "description": "Số mẫu tối thiểu cần có tại một nút lá (mặc định 1)."
              },
              "min_samples_split": {
                "label": "Số mẫu tối thiểu để tách",
                "description": "Số mẫu tối thiểu cần có để tách một nút trong (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "random_forest_regression": {
            "name": "Hồi quy rừng ngẫu nhiên",
            "description": "Thực hiện hồi quy random forest có giám sát trên các raster đầu vào đa kênh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm."
              },
              "field": {
                "label": "Trường",
                "description": "Trường mục tiêu dạng số trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây trong rừng (mặc định 200)."
              },
              "min_samples_leaf": {
                "label": "Số mẫu tối thiểu ở lá",
                "description": "Số mẫu tối thiểu cần có tại một nút lá (mặc định 1)."
              },
              "min_samples_split": {
                "label": "Số mẫu tối thiểu để tách",
                "description": "Số mẫu tối thiểu cần có để tách một nút trong (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "svm_classification": {
            "name": "Phân loại SVM",
            "description": "Phân loại Support Vector Machine (SVM) áp dụng các thuật toán học máy Support Vector Machine cho dữ liệu viễn thám đa phổ, phân tách các lớp huấn luyện thông qua việc đặt siêu phẳng tối ưu trong không gian đặc trưng phổ nhiều chiều. Thuật toán: biến đổi các vector đặc trưng phổ sang không gian nhiều chiều thông qua các hàm kernel (tuyến tính, RBF, đa thức), xác định siêu phẳng có lề cực đại phân tách các lớp huấn luyện, phân loại các điểm ảnh mới theo vị trí so với siêu phẳng; các tham số dung sai và việc lựa chọn kernel kiểm soát khả năng tổng quát hóa. Xử lý hiệu quả việc phân tách lớp phi tuyến. Tính năng chính: chống chịu tốt với dữ liệu phổ nhiều chiều, khả năng tổng quát hóa xuất sắc với số mẫu huấn luyện hạn chế, sự linh hoạt của kernel phù hợp với các phân bố phổ đa dạng, cung cấp ước lượng xác suất/độ tin cậy. Khả năng: phân loại đa lớp, dung sai lề mềm, tự động cân bằng trọng số lớp. Trường hợp sử dụng: phân loại đất chi tiết với dữ liệu huấn luyện thưa, tích hợp đặc trưng phổ-không gian, phát hiện biến động, nông nghiệp chính xác, lập bản đồ đô thị. Ứng dụng: phân loại ảnh siêu phổ, lập bản đồ hệ sinh thái phức tạp, khoanh vẽ loại cây trồng, phân loại cơ sở hạ tầng. Diễn giải đầu ra: thành viên lớp cho biết loại được dự đoán, với tính nhất quán không gian phản ánh chất lượng phân loại; ước lượng xác suất định lượng độ tin cậy ở cấp điểm ảnh; các mẫu phân loại sai cho thấy thiếu sót trong dữ liệu huấn luyện hoặc vấn đề chồng lấn phổ.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm/đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường lớp trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Loại kernel: linear (mặc định) hoặc rbf."
              },
              "c": {
                "label": "C",
                "description": "Tham số chính quy hóa SVM (mặc định 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Tham số gamma của kernel RBF; mặc định là 1 / số đặc trưng."
              },
              "epoch": {
                "label": "Số epoch",
                "description": "Số kỳ huấn luyện (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "svm_regression": {
            "name": "Hồi quy SVM",
            "description": "Thực hiện hồi quy support vector machine có giám sát trên các raster đầu vào đa kênh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm."
              },
              "field": {
                "label": "Trường",
                "description": "Trường mục tiêu dạng số trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Loại kernel: linear (mặc định) hoặc rbf."
              },
              "c": {
                "label": "C",
                "description": "Tham số chính quy hóa SVM (mặc định 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Tham số gamma của kernel RBF; mặc định là 1 / số đặc trưng."
              },
              "eps": {
                "label": "Eps",
                "description": "Độ rộng hàm mất mát không nhạy epsilon (mặc định 0.1)."
              },
              "tol": {
                "label": "Dung sai",
                "description": "Dung sai của bộ tối ưu hóa (mặc định 1e-3)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "change_vector_analysis": {
            "name": "Phân tích vector biến động",
            "description": "Thực hiện phân tích vector biến động trên các tập dữ liệu đa phổ hai thời điểm và trả về các raster độ lớn và hướng.",
            "params": {
              "date1": {
                "label": "Ngày 1",
                "description": "Danh sách raster thời điểm sớm hơn dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu phẩy/chấm phẩy."
              },
              "date2": {
                "label": "Ngày 2",
                "description": "Danh sách raster thời điểm muộn hơn dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu phẩy/chấm phẩy."
              },
              "magnitude_output": {
                "label": "Đầu ra độ lớn",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ lớn vector."
              },
              "direction_output": {
                "label": "Đầu ra hướng",
                "description": "Đường dẫn đầu ra tùy chọn cho raster mã hướng."
              }
            }
          },
          "image_difference_change_detection": {
            "name": "Phát hiện biến động bằng hiệu ảnh",
            "description": "Phát hiện biến động bằng hiệu ảnh xác định các thay đổi lớp phủ đất bằng cách tính hiệu đa phổ theo từng điểm ảnh giữa các lần thu nhận ảnh vệ tinh đa thời gian đã đồng đăng ký, làm nổi bật các khu vực có đặc trưng phổ thay đổi đủ lớn để vượt quá biến thiên nền thống kê. Thuật toán đồng đăng ký các ảnh về lưới điểm ảnh chung, tính hiệu ở các kênh hoặc chỉ số thực vật được chọn (ví dụ: hiệu NDVI), áp dụng phân ngưỡng thống kê sử dụng hiệu tuyệt đối trung bình và khoảng tin cậy để phân biệt biến động với nhiễu, và xuất ra mặt nạ biến động nhị phân hoặc raster độ lớn hiệu liên tục. Phương pháp hiệu ảnh đơn giản về mặt tính toán, dễ diễn giải và hiệu quả trong việc phát hiện các thay đổi lớn về thực vật, phát triển đô thị hoặc thủy vực. Các tính năng chính bao gồm lựa chọn kênh linh hoạt cho phép phát hiện biến động có mục tiêu trong các miền phổ cụ thể, phân ngưỡng thống kê với mức tin cậy tự động hoặc thủ công, tiền xử lý tùy chọn (chuẩn hóa, tính chỉ số) giúp cải thiện tỷ số tín hiệu biến động trên nhiễu, và xử lý nhanh cho phép phát hiện biến động trên quy mô lớn. Các ứng dụng bao gồm lập bản đồ mất rừng và giám sát suy giảm rừng, theo dõi mở rộng đô thị từ chuỗi thời gian ảnh vệ tinh đa phổ, lập bản đồ ngập lụt trước/sau sự kiện từ dữ liệu SAR hoặc quang học, và phát hiện biến động nông nghiệp theo dõi sự chuyển đổi cây trồng. Đầu ra hiệu ảnh làm nổi bật các khu vực biến động. Đầu ra bao gồm raster mặt nạ biến động (nhị phân có/không biến động) với ngưỡng có thể cấu hình, raster độ lớn hiệu liên tục định lượng cường độ biến động, và raster lớp biến động tùy chọn phân biệt kiểu biến động (tăng, giảm); việc tổng hợp theo thời gian cho phép theo dõi biến động qua các giai đoạn nhiều năm.",
            "params": {
              "t1_inputs": {
                "label": "Đầu vào T1",
                "description": "Mảng đường dẫn raster thời điểm 1."
              },
              "t2_inputs": {
                "label": "Đầu vào T2",
                "description": "Mảng đường dẫn raster thời điểm 2; phải khớp với t1_inputs về số lượng và thứ tự."
              },
              "mode": {
                "label": "Chế độ",
                "description": "Chế độ hiệu: magnitude (mặc định) hoặc signed."
              },
              "threshold_sigma": {
                "label": "Ngưỡng sigma",
                "description": "Ngưỡng sigma tùy chọn để tạo mặt nạ biến động nhị phân."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với t1_inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn cho ảnh hiệu."
              },
              "output_absolute": {
                "label": "Đầu ra trị tuyệt đối",
                "description": "Đường dẫn raster đầu ra tùy chọn cho hiệu có dấu lấy trị tuyệt đối (|mean(t2-t1)|)."
              },
              "output_signed": {
                "label": "Đầu ra có dấu",
                "description": "Đường dẫn raster đầu ra tùy chọn cho hiệu có dấu mean(t2-t1)."
              },
              "output_mask": {
                "label": "Đầu ra mặt nạ",
                "description": "Đường dẫn raster đầu ra tùy chọn cho mặt nạ biến động nhị phân đã lấy ngưỡng."
              }
            }
          },
          "pca_based_change_detection": {
            "name": "Phát hiện biến động dựa trên PCA",
            "description": "Phát hiện biến động bằng phân tích thành phần chính xác định các thay đổi lớp phủ đất bằng cách tính các thành phần chính từ dữ liệu phổ đa thời gian được xếp chồng, trong đó các thành phần đầu nắm bắt các mẫu chung theo thời gian và các thành phần sau tách riêng các biến động theo thời gian. Thuật toán xếp chồng dữ liệu đa phổ đa thời gian (đã đồng đăng ký về lưới chung), tính PCA để biến đổi thành các thành phần phổ-thời gian trực giao không tương quan, diễn giải các PC sau là nhạy với biến động, và áp dụng phân ngưỡng thống kê cho hệ số tải/điểm số PC để phát hiện biến động. Phát hiện dựa trên PCA đặc biệt hiệu quả khi tín hiệu biến động tinh tế về phổ, vì PCA cực đại hóa phương sai và tách các mẫu phổ nhất quán theo thời gian (các PC đầu) khỏi biến thiên theo thời gian (các PC sau). Các tính năng chính bao gồm hợp nhất dữ liệu đa thời điểm xử lý số lượng ảnh thay đổi và yêu cầu đồng đăng ký, tự động cực đại hóa phương sai nhấn mạnh các mẫu phổ-thời gian quan trọng, thống kê đa biến cải thiện khả năng phân biệt biến động so với phương pháp hiệu đơn biến, và lọc không gian tùy chọn giảm nhiễu điểm ảnh. Các ứng dụng bao gồm phát hiện căng thẳng thực vật tinh tế trước khi có thể nhận biết bằng mắt, phát hiện biến động đô thị đa phổ theo dõi sự phát triển qua nhiều thập kỷ, đánh giá tác động thiên tai thông qua lập bản đồ thiệt hại nhanh, và giám sát môi trường phát hiện các chuyển đổi trạng thái hệ sinh thái. Đầu ra phát hiện dựa trên PCA phân biệt các mẫu theo thời gian. Đầu ra bao gồm ảnh thành phần chính với các hệ số tải phổ-thời gian có thể diễn giải, raster xác suất biến động suy ra từ điểm số của các thành phần sau, và phân loại biến động tùy chọn phân biệt các kiểu biến động; các mẫu không gian của PC cho phép nhận dạng mẫu trực quan bổ sung cho phát hiện thống kê.",
            "params": {
              "t1_inputs": {
                "label": "Đầu vào T1",
                "description": "Mảng đường dẫn raster thời điểm 1."
              },
              "t2_inputs": {
                "label": "Đầu vào T2",
                "description": "Mảng đường dẫn raster thời điểm 2; phải khớp với t1_inputs về số lượng và thứ tự."
              },
              "component": {
                "label": "Thành phần",
                "description": "Chỉ số thành phần chính (đánh số từ 1) cần xuất ra (mặc định 1)."
              },
              "standardized": {
                "label": "Chuẩn hóa",
                "description": "Nếu true, dùng PCA trên ma trận tương quan của các vector biến động (mặc định false)."
              },
              "threshold_sigma": {
                "label": "Ngưỡng sigma",
                "description": "Ngưỡng sigma tùy chọn trên trị tuyệt đối điểm số PC để xuất mặt nạ nhị phân."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với t1_inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn cho trị tuyệt đối điểm số PC đã chọn."
              },
              "output_mask": {
                "label": "Đầu ra mặt nạ",
                "description": "Đường dẫn raster đầu ra tùy chọn cho mặt nạ nhị phân đã lấy ngưỡng (0/1)."
              },
              "output_report": {
                "label": "Báo cáo đầu ra",
                "description": "Đường dẫn báo cáo JSON đầu ra tùy chọn cho các giá trị riêng, phương sai giải thích và trọng số thành phần."
              }
            }
          },
          "post_classification_change": {
            "name": "Biến động sau phân loại",
            "description": "Phát hiện biến động sau phân loại định lượng các chuyển đổi lớp phủ đất/sử dụng đất (LULC) bằng cách so sánh trực tiếp các bản đồ được phân loại độc lập từ các giai đoạn khác nhau. So sánh lớp theo từng điểm ảnh xác định các chuyển đổi thể hiện lớp \"từ\" và lớp \"đến\". Các ma trận bảng chéo (ma trận nhầm lẫn) định lượng tần suất chuyển đổi, làm rõ các lộ trình biến động chiếm ưu thế. Phương pháp yêu cầu hệ thống phân loại nhất quán giữa các thời điểm; độ chính xác phụ thuộc vào chất lượng phân loại ở mỗi bước thời gian. Tính năng chính: Lập bản đồ chuyển đổi trực tiếp giữa các lớp; tính độc lập của từng lần phân loại; cho phép kết hợp các cảm biến không đồng nhất; định lượng tần suất chuyển đổi; xác định các điểm nóng biến động. Trường hợp sử dụng: Giám sát mất rừng; lập bản đồ tăng trưởng đô thị; theo dõi sử dụng đất nông nghiệp; phát hiện suy giảm đất ngập nước; đánh giá phân mảnh sinh cảnh. Diễn giải đầu ra: Ma trận chuyển đổi thể hiện các giá trị không biến động trên đường chéo và tần suất chuyển đổi ngoài đường chéo. Bản đồ biến động làm nổi bật các điểm ảnh bị thay đổi; đầu ra mã hóa chuyển đổi mã hóa cả lớp nguồn và lớp đích, cho phép diễn giải. Độ chính xác cao đòi hỏi kết quả phân loại có chất lượng; sai số phân loại ở bất kỳ thời điểm nào đều lan truyền thành sai số phát hiện biến động. Việc tổng hợp chuyển đổi làm rõ các mẫu chiếm ưu thế (ví dụ: rừng→nông nghiệp, đồng cỏ→đô thị). Các chuyển đổi dưới mức điểm ảnh không thể phát hiện bằng phương pháp sau phân loại; các biến động ở thang mịn có thể bị bỏ sót.",
            "params": {
              "t1_classified": {
                "label": "T1 đã phân loại",
                "description": "Đường dẫn raster đã phân loại thời điểm 1."
              },
              "t2_classified": {
                "label": "T2 đã phân loại",
                "description": "Đường dẫn raster đã phân loại thời điểm 2."
              },
              "transition_scale": {
                "label": "Tỉ lệ chuyển đổi",
                "description": "Hệ số tỉ lệ mã hóa chuyển đổi (mặc định 1000): code = class1 * scale + class2."
              },
              "t1_class_remap": {
                "label": "Ánh xạ lại lớp T1",
                "description": "Bảng ánh xạ lại tùy chọn cho các lớp thời điểm 1 dưới dạng đối tượng {\"old\": new, ...}."
              },
              "t2_class_remap": {
                "label": "Ánh xạ lại lớp T2",
                "description": "Bảng ánh xạ lại tùy chọn cho các lớp thời điểm 2 dưới dạng đối tượng {\"old\": new, ...}."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại t2_classified sang hệ tọa độ của t1_classified khi cần."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster mã hóa chuyển đổi đầu ra tùy chọn."
              }
            }
          },
          "write_function_memory_insertion": {
            "name": "Chèn bộ nhớ hàm ghi",
            "description": "Tạo ảnh tổ hợp RGB đóng gói để trực quan hóa biến động từ hai hoặc ba thời điểm một kênh.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster một kênh thời điểm thứ nhất."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster một kênh thời điểm thứ hai."
              },
              "input3": {
                "label": "Đầu vào 3",
                "description": "Raster một kênh thời điểm thứ ba tùy chọn; nếu bỏ qua, input2 sẽ được dùng cho kênh xanh lam."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "brdf_normalization": {
            "name": "Chuẩn hóa BRDF",
            "description": "Chuẩn hóa BRDF cho một cảnh đơn lẻ sử dụng phương pháp hiệu chỉnh C (C-correction) hoặc Minnaert với hình học độ dốc/hướng dốc từ DEM.",
            "params": {
              "input_raster": {
                "label": "Raster đầu vào",
                "description": "Raster phản xạ đầu vào cần chuẩn hóa (một kênh hoặc chồng đa kênh)."
              },
              "input_dem": {
                "label": "DEM đầu vào",
                "description": "Raster DEM đã đồng đăng ký với đầu vào (cùng lưới hoặc sẽ được lấy mẫu lại cho khớp)."
              },
              "solar_zenith_deg": {
                "label": "Góc thiên đỉnh mặt trời (độ)",
                "description": "Góc thiên đỉnh mặt trời tính bằng độ tại thời điểm thu nhận."
              },
              "solar_azimuth_deg": {
                "label": "Góc phương vị mặt trời (độ)",
                "description": "Góc phương vị mặt trời tính bằng độ (theo chiều kim đồng hồ từ hướng bắc) tại thời điểm thu nhận."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp hiệu chỉnh: c_correction (mặc định) hoặc minnaert."
              },
              "minnaert_k": {
                "label": "Hằng số Minnaert k",
                "description": "Hệ số k Minnaert trong [0,1] (mặc định 0.5). Chỉ dùng khi method=minnaert."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số phóng đại theo phương thẳng đứng khi tính độ dốc/hướng dốc từ DEM (mặc định 1.0)."
              },
              "output_prefix": {
                "label": "Tiền tố đầu ra",
                "description": "Tiền tố cho các tệp đầu ra (mặc định brdf_normalized)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho raster đã chuẩn hóa (ghi đè output_prefix ở chế độ một đầu ra)."
              }
            }
          },
          "correct_vignetting": {
            "name": "Hiệu chỉnh tối góc ảnh",
            "description": "Hiệu chỉnh hiện tượng tối góc (vignetting) của ống kính loại bỏ các lỗi bức xạ gây ra bởi đặc tính quang học ngoài trục của ống kính, khiến các cạnh ảnh nhận ít ánh sáng hơn tâm ảnh, tạo ra các gradient độ sáng giả tạo không phụ thuộc vào biến thiên phản xạ bề mặt. Hiệu chỉnh tối góc áp dụng các hệ số nhân thay đổi theo không gian được tính từ các mô hình hồ sơ tối góc (dạng Gauss hoặc định luật cosin mũ bốn) được hiệu chuẩn theo đặc tính cảm biến, khôi phục phản hồi bức xạ đồng đều trên toàn trường nhìn của ảnh. Bước tiền xử lý này rất quan trọng đối với viễn thám đa phổ và siêu phổ, nơi hiện tượng tối góc sẽ làm sai lệch phân tích phổ và gây ra sai số hệ thống trong các quy trình phân loại và phát hiện biến động. Các tính năng chính bao gồm tự động ước lượng hồ sơ tối góc từ thống kê ảnh hoặc từ các tham số hiệu chuẩn do người dùng chỉ định, các hệ số hiệu chỉnh thay đổi theo không gian được áp dụng cho từng điểm ảnh mà không gây lỗi nội suy, tùy chọn che các điểm ảnh ngoại vi bị hiệu chỉnh quá mức để tránh khuếch đại các cạnh nhiễu, và hiệu chỉnh riêng theo từng kênh để xử lý mức tối góc khác nhau giữa các kênh phổ. Các ứng dụng bao gồm tiền xử lý cho các thuật toán phân loại phổ nhạy với tính nhất quán bức xạ, chuẩn bị ghép ảnh khi ranh giới tối góc gây ra các gián đoạn dễ nhận thấy, so sánh bức xạ chính xác trên toàn khung ảnh, và phân tích siêu phổ đòi hỏi phản hồi chiếu sáng đồng đều. Ảnh đã hiệu chỉnh tối góc có độ sáng đồng đều trên toàn trường nhìn. Đầu ra loại bỏ hiện tượng tối ở cạnh với phản hồi bức xạ đồng đều từ tâm đến các cạnh ảnh; các điểm ảnh ngoại vi có thể có nhiễu cao hơn nếu bị hiệu chỉnh mạnh; ảnh đã hiệu chỉnh tích hợp liền mạch vào các quy trình phân tích đa phổ mà không có lỗi bức xạ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Ảnh raster đầu vào."
              },
              "pp": {
                "label": "Điểm chính",
                "description": "Đường dẫn vector điểm (hoặc đối tượng vector có kiểu) chứa điểm chính."
              },
              "focal_length": {
                "label": "Tiêu cự",
                "description": "Tiêu cự máy ảnh tính bằng mm (mặc định 304.8)."
              },
              "image_width": {
                "label": "Chiều rộng ảnh",
                "description": "Khoảng cách giữa mép trái và mép phải của ảnh tính bằng mm (mặc định 228.6)."
              },
              "n": {
                "label": "N",
                "description": "Số mũ n của mô hình cosin (mặc định 4.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "dark_object_subtraction": {
            "name": "Trừ đối tượng tối",
            "description": "Trừ đối tượng tối (DOS) là một phương pháp heuristic đơn giản nhưng hiệu quả để loại bỏ mù khí quyển mà không cần dữ liệu khí tượng bổ trợ hay các mô hình truyền bức xạ phức tạp. Kỹ thuật này khai thác nguyên lý rằng phản xạ bằng không phải tạo ra tín hiệu phản xạ bằng không (bỏ qua tán xạ Rayleigh); mọi tín hiệu quan sát được từ các bề mặt đen về mặt quang học (nước sâu, bóng rừng rậm, nhựa đường đô thị) được quy cho bức xạ đường truyền khí quyển do tán xạ sol khí gây ra. Công cụ này xác định giá trị số nhỏ nhất ở mỗi kênh trên toàn ảnh, diễn giải giá trị này là mù khí quyển, và trừ nó khỏi tất cả các điểm ảnh như một độ lệch hằng số theo từng kênh; các biến thể phức tạp hơn (DOS2, DOS3, DOS4) tính đến tán xạ Rayleigh và độ dày quang học sol khí thay đổi bằng cách sử dụng các chỉ số thực vật hoặc phân cụm điểm ảnh tối. Các khả năng chính bao gồm phân tích biểu đồ tần suất để tách riêng các đối tượng tối và phân biệt mù phụ thuộc cảnh với phản xạ bằng không thực sự, tùy chọn che các đối tượng có phản xạ cao đã biết (đô thị, tuyết, mây) có thể làm sai lệch việc xác định đối tượng tối, hiệu chỉnh mù theo từng kênh, và tính toán nhanh phù hợp cho xử lý thời gian thực hoặc quy mô lớn. Các trường hợp sử dụng bao gồm ước lượng phản xạ xem nhanh, giám sát thực vật và chất lượng nước khi hiệu chuẩn tuyệt đối ít quan trọng hơn biến động tương đối, lập bản đồ ứng phó thảm họa nhanh, và dữ liệu lưu trữ cũ khi không có thông tin sol khí chính xác. Đầu vào bao gồm phản xạ đỉnh khí quyển hoặc bức xạ đã hiệu chuẩn, mặt nạ lớp phủ đất tùy chọn để loại trừ các đối tượng sáng, và siêu dữ liệu cảnh. Đầu ra là phản xạ đã hiệu chỉnh mù, ước lượng bức xạ đường truyền khí quyển theo từng kênh, và các cờ chất lượng cho biết độ tin cậy trong việc xác định đối tượng tối (ví dụ: ít điểm ảnh tối, cảnh chủ yếu là đô thị). Mặc dù thô sơ so với các mô hình truyền bức xạ, DOS vẫn thiết thực cho phân tích đa thời gian và lập bản đồ phủ toàn cầu khi dữ liệu khí quyển phức tạp không có sẵn.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Chồng raster đầu vào (một hoặc nhiều raster)."
              },
              "percentile": {
                "label": "Phân vị",
                "description": "Phân vị đối tượng tối theo từng kênh (mặc định 1.0)."
              },
              "clamp_non_negative": {
                "label": "Chặn giá trị không âm",
                "description": "Nếu true, kẹp các giá trị đã hiệu chỉnh nhỏ hơn không về không (mặc định true)."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các đầu vào để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              },
              "output_diagnostic_offsets": {
                "label": "Đầu ra độ lệch chẩn đoán",
                "description": "Đường dẫn raster đầu ra tùy chọn cho chẩn đoán độ lệch đối tượng tối theo từng kênh."
              }
            }
          },
          "dn_to_toa_reflectance": {
            "name": "DN sang phản xạ TOA",
            "description": "Chuyển đổi giá trị số sang phản xạ đỉnh khí quyển biến đổi các giá trị số thô của cảm biến thành các giá trị phản xạ phổ có ý nghĩa vật lý bằng cách áp dụng các hệ số hiệu chuẩn bức xạ theo từng kênh lấy từ siêu dữ liệu vệ tinh. Phép chuyển đổi áp dụng tái tỷ lệ bức xạ, hiệu chỉnh bức xạ phổ mặt trời ngoài khí quyển, bù góc thiên đỉnh mặt trời, và tùy chọn chuẩn hóa khoảng cách Trái Đất-Mặt Trời để tạo ra các giá trị phản xạ có thể so sánh trực tiếp giữa các cảm biến, thời điểm thu nhận và vị trí địa lý. Phản xạ đỉnh khí quyển thể hiện tỷ lệ năng lượng mặt trời tới bị các mục tiêu trên bề mặt Trái Đất phản xạ tại cảm biến trước các ảnh hưởng khí quyển, đóng vai trò làm cơ sở cho phân tích viễn thám định lượng. Các tính năng chính bao gồm áp dụng hệ số hiệu chuẩn theo từng kênh với khả năng phân tích đầy đủ siêu dữ liệu từ các sản phẩm vệ tinh tiêu chuẩn, tự động tính hình học mặt trời từ dấu thời gian và vị trí thu nhận, tùy chọn hiệu chỉnh khoảng cách Trái Đất-Mặt Trời cho biến thiên theo mùa, và xử lý linh hoạt nhiều loại cảm biến với định dạng hệ số chuẩn hóa. Các ứng dụng bao gồm phát hiện biến động định lượng sử dụng các đơn vị vật lý nhất quán, so sánh bức xạ tuyệt đối giữa các lần thu nhận đa thời gian và các cảm biến khác nhau, tính các chỉ số thực vật phổ đòi hỏi phản xạ chính xác, và kiểm định chéo cảm biến trong công việc với chòm vệ tinh. Phản xạ TOA cho phép các quy trình phân tích chặt chẽ và kết quả có cơ sở khoa học vững chắc. Giá trị phản xạ đầu ra nằm trong khoảng 0-1 (đôi khi được biểu diễn là 0-10000 để có độ chính xác số nguyên), thể hiện các tỷ lệ không thứ nguyên; siêu dữ liệu nhúng các hệ số hiệu chuẩn đã sử dụng và các tham số hình học cảm biến; giá trị âm cho thấy vấn đề chất lượng dữ liệu cần được che trước khi phân tích.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Chồng raster DN đầu vào (một hoặc nhiều raster)."
              },
              "reflectance_mult": {
                "label": "Hệ số nhân phản xạ",
                "description": "(Các) hệ số nhân theo từng kênh, dạng vô hướng hoặc mảng có kích thước bằng số đầu vào."
              },
              "reflectance_add": {
                "label": "Hệ số cộng phản xạ",
                "description": "(Các) hệ số cộng theo từng kênh, dạng vô hướng hoặc mảng có kích thước bằng số đầu vào (mặc định 0)."
              },
              "sensor_bundle_root": {
                "label": "Thư mục gốc gói cảm biến",
                "description": "Thư mục gốc của gói Landsat/Sentinel-2 tùy chọn dùng để tự suy ra các hệ số khi không cung cấp hệ số tường minh."
              },
              "sun_elevation_deg": {
                "label": "Góc cao mặt trời (độ)",
                "description": "Góc cao mặt trời tùy chọn tính bằng độ cho hiệu chỉnh cosin. Được tự suy ra từ siêu dữ liệu của gói khi có sẵn."
              },
              "apply_solar_correction": {
                "label": "Áp dụng hiệu chỉnh mặt trời",
                "description": "Nếu true (mặc định), chia cho sin(sun_elevation)."
              },
              "clamp_unit_interval": {
                "label": "Chặn trong khoảng đơn vị",
                "description": "Nếu true (mặc định), kẹp đầu ra vào khoảng [0, 1]."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các đầu vào để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "terrain_corrected_optical_analytics": {
            "name": "Phân tích quang học hiệu chỉnh địa hình",
            "description": "Hiệu chỉnh địa hình C (C-correction) cho các kênh quang học đa phổ sử dụng DEM đã đồng đăng ký. Xuất ra chồng phản xạ bề mặt, hệ số hiệu chỉnh, mặt nạ mây/bóng và độ tin cậy chất lượng.",
            "params": {
              "input_dem": {
                "label": "DEM đầu vào",
                "description": "Raster DEM đã đồng đăng ký với các kênh quang học."
              },
              "bundle_root": {
                "label": "Thư mục gốc gói",
                "description": "Thư mục gốc gói cảm biến quang học tùy chọn (hiện hỗ trợ Sentinel-2 SAFE, Landsat, hoặc DIMAP SPOT/Pleiades) dùng để tự xác định các kênh cần thiết, dữ liệu QA khi có sẵn và siêu dữ liệu mặt trời khi không cung cấp đầu vào tường minh."
              },
              "input_red": {
                "label": "Kênh đỏ đầu vào",
                "description": "Raster kênh đỏ (tùy chọn khi đã cung cấp bundle_root)."
              },
              "input_nir": {
                "label": "Kênh NIR đầu vào",
                "description": "Raster kênh cận hồng ngoại (tùy chọn khi đã cung cấp bundle_root)."
              },
              "input_green": {
                "label": "Kênh lục đầu vào",
                "description": "Raster kênh lục (tùy chọn)."
              },
              "input_blue": {
                "label": "Kênh lam đầu vào",
                "description": "Raster kênh lam (tùy chọn). Được tự xác định từ siêu dữ liệu của gói khi đã cung cấp bundle_root."
              },
              "solar_mode": {
                "label": "Chế độ mặt trời",
                "description": "Chế độ xác định góc mặt trời: auto, manual, metadata, datetime_location."
              },
              "solar_zenith_deg": {
                "label": "Góc thiên đỉnh mặt trời (độ)",
                "description": "Góc thiên đỉnh mặt trời tính bằng độ (bắt buộc ở chế độ manual)."
              },
              "solar_azimuth_deg": {
                "label": "Góc phương vị mặt trời (độ)",
                "description": "Phương vị mặt trời tính bằng độ (theo chiều kim đồng hồ từ hướng bắc, bắt buộc ở chế độ manual)."
              },
              "acquisition_datetime_utc": {
                "label": "Thời điểm thu nhận (UTC)",
                "description": "Dấu thời gian thu nhận theo RFC3339 UTC cho chế độ datetime_location."
              },
              "latitude": {
                "label": "Vĩ độ",
                "description": "Vĩ độ tùy chọn cho chế độ datetime_location."
              },
              "longitude": {
                "label": "Kinh độ",
                "description": "Kinh độ tùy chọn cho chế độ datetime_location."
              },
              "profile": {
                "label": "Hồ sơ",
                "description": "Hồ sơ xử lý: conservative, balanced, fast."
              },
              "cloud_threshold": {
                "label": "Ngưỡng mây",
                "description": "Ngưỡng mây tùy chọn theo đơn vị của kênh nguồn. Được tự suy ra khi bỏ qua."
              },
              "shadow_threshold": {
                "label": "Ngưỡng bóng",
                "description": "Ngưỡng bóng mây tùy chọn theo đơn vị của kênh nguồn. Được tự suy ra khi bỏ qua."
              },
              "qa_mask": {
                "label": "Mặt nạ QA",
                "description": "Đường dẫn raster mặt nạ QA tùy chọn."
              },
              "qa_mask_format": {
                "label": "Định dạng mặt nạ QA",
                "description": "Cách mã hóa mặt nạ QA: auto, landsat_qa_pixel, sentinel2_scl, sentinel2_qa60, binary."
              },
              "mask_strategy": {
                "label": "Chiến lược mặt nạ",
                "description": "Chiến lược tạo mặt nạ: auto, qa_only, heuristic_only, qa_plus_heuristic."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số phóng đại theo phương thẳng đứng khi tính độ dốc/hướng dốc."
              },
              "output_prefix": {
                "label": "Tiền tố đầu ra",
                "description": "Tiền tố cho mọi sản phẩm đầu ra."
              }
            }
          },
          "land_surface_temperature_single_channel": {
            "name": "Nhiệt độ bề mặt đất kênh đơn",
            "description": "Truy xuất nhiệt độ bề mặt đất từ một kênh hồng ngoại nhiệt duy nhất ước lượng nhiệt độ bức xạ bề mặt thông qua nghịch đảo phương trình truyền bức xạ. Các giá trị số của cảm biến được chuyển đổi thành bức xạ phổ bằng các hệ số hiệu chuẩn riêng của cảm biến; bức xạ được nghịch đảo thành nhiệt độ độ sáng thông qua hàm Planck sử dụng các hằng số nhiệt riêng của kênh; nhiệt độ độ sáng được chuyển đổi thành LST vật lý thông qua các hiệu chỉnh độ phát xạ thực nghiệm. Độ phát xạ được suy ra từ các chỉ số thực vật hoặc được cung cấp trực tiếp, hiệu chỉnh cho các biến thiên độ phát xạ nhiệt phụ thuộc vật liệu. Tính năng chính: Chỉ cần một kênh nhiệt; xử lý bức xạ đơn giản; tính toán nhanh; không yêu cầu đa kênh; ước lượng độ phát xạ từ chỉ số thực vật; đầu ra nhiệt độ vật lý trực tiếp. Trường hợp sử dụng: Lập bản đồ đảo nhiệt đô thị; giám sát căng thẳng do hạn hán; phát hiện đối tượng địa nhiệt; theo dõi dấu hiệu nhiệt của cháy rừng; quản lý nước nông nghiệp. Diễn giải đầu ra: Đầu ra là nhiệt độ bức xạ bề mặt tính bằng Kelvin (hoặc độ C nếu được chuyển đổi). Phương pháp truy xuất một kênh không thể loại bỏ hoàn toàn ảnh hưởng của hơi nước khí quyển; sai lệch khí quyển còn lại thường là 2-5 K. Sai số độ phát xạ lan truyền trực tiếp: sai số độ phát xạ ±0.05 ≈ sai số nhiệt độ ±1-2 K. Độ phát xạ dựa trên thực vật thay đổi theo NDVI; đất trống có độ phát xạ thấp hơn thực vật. LST theo chuỗi thời gian làm rõ các xu hướng nóng lên/lạnh đi; các dị thường LST > nền ± 5K cho thấy các đối tượng nhiệt.",
            "params": {
              "thermal_input": {
                "label": "Đầu vào kênh nhiệt",
                "description": "Đường dẫn raster nhiệt (mặc định là DN, hoặc nhiệt độ sáng nếu input_is_brightness_temp=true)."
              },
              "input_is_brightness_temp": {
                "label": "Đầu vào là nhiệt độ sáng",
                "description": "Nếu true, thermal_input đã là nhiệt độ sáng tính bằng Kelvin (mặc định false)."
              },
              "emissivity_input": {
                "label": "Đầu vào độ phát xạ",
                "description": "Đường dẫn raster độ phát xạ tùy chọn đã căn chỉnh với thermal_input."
              },
              "emissivity_constant": {
                "label": "Hằng số độ phát xạ",
                "description": "Độ phát xạ dự phòng khi không cung cấp emissivity_input (mặc định 0.98)."
              },
              "sensor_bundle_root": {
                "label": "Thư mục gốc gói cảm biến",
                "description": "Thư mục gốc gói Landsat tùy chọn dùng để suy ra bức xạ nhiệt và các hằng số Planck."
              },
              "thermal_band_number": {
                "label": "Số kênh nhiệt",
                "description": "Số hiệu kênh nhiệt để tra cứu siêu dữ liệu (mặc định 10)."
              },
              "radiance_mult": {
                "label": "Hệ số nhân bức xạ",
                "description": "Hệ số nhân bức xạ nhiệt cho phép chuyển đổi DN->bức xạ."
              },
              "radiance_add": {
                "label": "Hệ số cộng bức xạ",
                "description": "Hệ số cộng bức xạ nhiệt cho phép chuyển đổi DN->bức xạ."
              },
              "k1_constant": {
                "label": "Hằng số K1",
                "description": "Hằng số nhiệt Planck K1."
              },
              "k2_constant": {
                "label": "Hằng số K2",
                "description": "Hằng số nhiệt Planck K2."
              },
              "wavelength_um": {
                "label": "Bước sóng (µm)",
                "description": "Bước sóng nhiệt hiệu dụng tính bằng micromet (mặc định được suy ra từ thermal_band_number)."
              },
              "output_units": {
                "label": "Đơn vị đầu ra",
                "description": "Đơn vị đầu ra: celsius (mặc định) hoặc kelvin."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại emissivity_input sang hệ tọa độ của thermal_input khi cần."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "land_surface_temperature_split_window": {
            "name": "Nhiệt độ bề mặt đất cửa sổ tách",
            "description": "Truy xuất LST bằng phương pháp cửa sổ tách (split-window) sử dụng hai kênh hồng ngoại nhiệt để đồng thời ước lượng nhiệt độ bề mặt và độ phát xạ thông qua nghịch đảo phương trình truyền bức xạ. Sự khác biệt về hấp thụ khí quyển giữa hai kênh (thường trong vùng 10-12 μm) cho phép hiệu chỉnh hơi nước khí quyển, cải thiện độ chính xác so với các phương pháp một kênh. Nhiệt độ độ sáng từ cả hai kênh được nghịch đảo với tham số hóa độ phát xạ dựa trên tỷ lệ phủ thực vật hoặc các lưới độ phát xạ do người dùng cung cấp. Tính năng chính: Yêu cầu hai kênh nhiệt; hiệu chỉnh khí quyển thông qua hấp thụ vi sai; truy xuất đồng thời nhiệt độ/độ phát xạ; các thuật toán đã công bố cho các cảm biến tiêu chuẩn; bù khí quyển vượt trội so với phương pháp một kênh. Trường hợp sử dụng: Lập bản đồ đảo nhiệt đô thị; phát hiện hạn hán nông nghiệp; phát hiện đối tượng địa nhiệt; nghiên cứu tương tác đất-khí quyển; phát hiện dị thường núi lửa/nhiệt. Diễn giải đầu ra: Đầu ra là nhiệt độ bức xạ bề mặt với hiệu chỉnh khí quyển được cải thiện. Truy xuất cửa sổ tách giảm sai lệch do hơi nước khí quyển xuống <1-2 K so với sai số 2-5 K của phương pháp một kênh. Sự đánh đổi giữa nhiệt độ/độ phát xạ vẫn tồn tại: các khu vực có chỉ số thực vật cao có độ phát xạ thấp, đòi hỏi diễn giải cẩn thận. Các bề mặt không đồng nhất (thực vật/đất hỗn hợp) có giá trị trung gian. Tính nhất quán theo thời gian cải thiện độ tin cậy của phát hiện biến động; các xu hướng LST > ±3K cho thấy biến động nhiệt đáng kể.",
            "params": {
              "thermal1_input": {
                "label": "Đầu vào kênh nhiệt 1",
                "description": "Đường dẫn raster nhiệt thứ nhất (ví dụ Landsat B10)."
              },
              "thermal2_input": {
                "label": "Đầu vào kênh nhiệt 2",
                "description": "Đường dẫn raster nhiệt thứ hai (ví dụ Landsat B11)."
              },
              "input_is_brightness_temp": {
                "label": "Đầu vào là nhiệt độ sáng",
                "description": "Nếu true, các đầu vào nhiệt đã là nhiệt độ sáng tính bằng Kelvin (mặc định false)."
              },
              "emissivity_mean_input": {
                "label": "Đầu vào độ phát xạ trung bình",
                "description": "Đường dẫn raster độ phát xạ trung bình tùy chọn."
              },
              "emissivity_delta_input": {
                "label": "Đầu vào hiệu độ phát xạ",
                "description": "Đường dẫn raster chênh lệch độ phát xạ tùy chọn (epsilon1 - epsilon2)."
              },
              "emissivity_mean_constant": {
                "label": "Hằng số độ phát xạ trung bình",
                "description": "Hằng số độ phát xạ trung bình dự phòng khi không có emissivity_mean_input (mặc định 0.98)."
              },
              "emissivity_delta_constant": {
                "label": "Hằng số hiệu độ phát xạ",
                "description": "Hằng số chênh lệch độ phát xạ dự phòng khi không có emissivity_delta_input (mặc định 0.0)."
              },
              "sensor_bundle_root": {
                "label": "Thư mục gốc gói cảm biến",
                "description": "Thư mục gốc gói Landsat tùy chọn dùng để suy ra bức xạ nhiệt và các hằng số Planck."
              },
              "thermal_band1_number": {
                "label": "Số kênh nhiệt 1",
                "description": "Số hiệu kênh để tra cứu siêu dữ liệu của thermal1_input (mặc định 10)."
              },
              "thermal_band2_number": {
                "label": "Số kênh nhiệt 2",
                "description": "Số hiệu kênh để tra cứu siêu dữ liệu của thermal2_input (mặc định 11)."
              },
              "radiance1_mult": {
                "label": "Hệ số nhân bức xạ 1",
                "description": "Hệ số nhân bức xạ của kênh 1."
              },
              "radiance1_add": {
                "label": "Hệ số cộng bức xạ 1",
                "description": "Hệ số cộng bức xạ của kênh 1."
              },
              "k1_1": {
                "label": "K1 1",
                "description": "Hằng số Planck K1 của kênh 1."
              },
              "k2_1": {
                "label": "K2 1",
                "description": "Hằng số Planck K2 của kênh 1."
              },
              "radiance2_mult": {
                "label": "Hệ số nhân bức xạ 2",
                "description": "Hệ số nhân bức xạ của kênh 2."
              },
              "radiance2_add": {
                "label": "Hệ số cộng bức xạ 2",
                "description": "Hệ số cộng bức xạ của kênh 2."
              },
              "k1_2": {
                "label": "K1 2",
                "description": "Hằng số Planck K1 của kênh 2."
              },
              "k2_2": {
                "label": "K2 2",
                "description": "Hằng số Planck K2 của kênh 2."
              },
              "coeff_a0": {
                "label": "Hệ số A0",
                "description": "Hệ số cửa sổ tách a0 (mặc định 0.0)."
              },
              "coeff_a1": {
                "label": "Hệ số A1",
                "description": "Hệ số cửa sổ tách a1 cho số hạng T1 (mặc định 1.0)."
              },
              "coeff_a2": {
                "label": "Hệ số A2",
                "description": "Hệ số cửa sổ tách a2 cho số hạng (T1-T2) (mặc định 0.0)."
              },
              "coeff_a3": {
                "label": "Hệ số A3",
                "description": "Hệ số cửa sổ tách a3 cho số hạng (T1-T2)^2 (mặc định 0.0)."
              },
              "coeff_a4": {
                "label": "Hệ số A4",
                "description": "Hệ số cửa sổ tách a4 cho số hạng (1-emissivity_mean) (mặc định 0.0)."
              },
              "coeff_a5": {
                "label": "Hệ số A5",
                "description": "Hệ số cửa sổ tách a5 cho số hạng emissivity_delta (mặc định 0.0)."
              },
              "output_units": {
                "label": "Đơn vị đầu ra",
                "description": "Đơn vị đầu ra: celsius (mặc định) hoặc kelvin."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster bổ sung để khớp với hệ tọa độ của thermal1_input khi cần."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "ndvi_based_emissivity": {
            "name": "Độ phát xạ dựa trên NDVI",
            "description": "Ước lượng độ phát xạ bề mặt đất dựa trên NDVI suy ra độ phát xạ nhiệt băng rộng từ tỷ lệ phủ thực vật được tính từ NDVI, cho phép hiệu chỉnh truyền bức xạ nhiệt để truy xuất nhiệt độ bề mặt đất từ dữ liệu vệ tinh hồng ngoại nhiệt. Thuật toán tính NDVI từ phản xạ đỏ và cận hồng ngoại, biến đổi NDVI thành tỷ lệ phủ thực vật, sau đó áp dụng các quan hệ thực nghiệm giữa tỷ lệ phủ thực vật và độ phát xạ đã được kiểm định qua đo đạc thực địa và mô phỏng truyền bức xạ. Thực vật ảnh hưởng đáng kể đến độ phát xạ nhiệt; càng nhiều thực vật thì độ phát xạ càng tăng về gần ~0.99, trong khi độ phát xạ của đất trống nằm trong khoảng ~0.90-0.98 tùy thuộc vào thành phần đất và độ nhám bề mặt. Các tính năng chính bao gồm tự động tính tỷ lệ phủ thực vật từ NDVI mà không cần hiệu chuẩn thực địa, các quan hệ thực nghiệm tiêu chuẩn dựa trên lý thuyết truyền bức xạ vật lý, tùy chọn phân tích độ nhạy khảo sát biến thiên độ phát xạ, và tương thích trực tiếp với dữ liệu vệ tinh hồng ngoại nhiệt. Các ứng dụng bao gồm truy xuất nhiệt độ bề mặt đất từ dữ liệu vệ tinh nhiệt đòi hỏi hiệu chỉnh độ phát xạ chính xác (Landsat, MODIS, Sentinel-3), phân tích đảo nhiệt đô thị có hiệu chỉnh cho thảm thực vật biến động, mô hình hóa nhiệt trong các ứng dụng tài nguyên nước và nông nghiệp, và các ứng dụng khí hậu đòi hỏi tập dữ liệu nhiệt toàn cầu nhất quán. Độ phát xạ dựa trên NDVI cho phép hiệu chỉnh nhiệt chính xác. Đầu ra tạo ra raster độ phát xạ (0-1) phù hợp cho hiệu chỉnh truyền bức xạ nhiệt, sản phẩm trung gian tỷ lệ phủ thực vật hỗ trợ diễn giải, và siêu dữ liệu ghi nhận các quan hệ thực nghiệm cùng các thuộc tính đất/bề mặt được giả định; giá trị độ phát xạ định hướng việc đánh giá độ bất định của hiệu chỉnh nhiệt và mức độ phù hợp cho các ứng dụng cụ thể.",
            "params": {
              "red_input": {
                "label": "Kênh đỏ đầu vào",
                "description": "Đường dẫn raster kênh đỏ."
              },
              "nir_input": {
                "label": "Kênh NIR đầu vào",
                "description": "Đường dẫn raster kênh cận hồng ngoại."
              },
              "ndvi_soil": {
                "label": "NDVI đất",
                "description": "Ngưỡng NDVI cho tỉ lệ đất trống (mặc định 0.2)."
              },
              "ndvi_vegetation": {
                "label": "NDVI thực vật",
                "description": "Ngưỡng NDVI cho tỉ lệ thực vật che phủ hoàn toàn (mặc định 0.5)."
              },
              "emissivity_soil": {
                "label": "Độ phát xạ đất",
                "description": "Độ phát xạ giả định của đất (mặc định 0.97)."
              },
              "emissivity_vegetation": {
                "label": "Độ phát xạ thực vật",
                "description": "Độ phát xạ giả định của thực vật (mặc định 0.99)."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại nir_input sang hệ tọa độ của red_input khi cần."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "continuum_removal": {
            "name": "Loại bỏ đường liên tục",
            "description": "Loại bỏ đường liên tục (continuum removal) chuẩn hóa phổ đa phổ bằng cách ước lượng bao lồi trên (đường liên tục) bao quanh phổ và chia mỗi kênh cho giá trị đường liên tục tương ứng. Loại bỏ độ dốc phổ tổng thể và các biến thiên độ sáng, cho phép trực quan hóa tốt hơn các đặc trưng hấp thụ (dải, độ sâu). Độ sâu và vị trí hấp thụ được chuẩn hóa, cho phép nhận dạng khoáng vật/vật liệu thông qua thư viện phổ. Đường liên tục được tính bằng thuật toán bao lồi nối các cực đại cục bộ trên toàn dải phổ. Tính năng chính: Loại bỏ đường liên tục phổ; tăng cường các đặc trưng hấp thụ; chuẩn hóa theo biến thiên độ sáng; cho phép đối sánh với thư viện phổ; chuẩn hóa hình dạng phổ. Trường hợp sử dụng: Nhận dạng khoáng vật; phân loại vật liệu; phân tích phổ thực vật; phát hiện dị thường phổ; lập bản đồ đặc trưng hấp thụ. Diễn giải đầu ra: Phổ đã loại bỏ đường liên tục thể hiện các đặc trưng hấp thụ (giá trị <1.0) cho biết các dải đặc thù của vật liệu. Độ sâu hấp thụ cho biết cường độ đặc trưng; các đặc trưng nông (<0.2) cho thấy thành phần phụ; các đặc trưng sâu (>0.5) cho thấy các vùng hấp thụ chiếm ưu thế. Vị trí đặc trưng trong không gian bước sóng cho phép nhận dạng vật liệu thông qua thư viện tham chiếu. Phổ đã loại bỏ đường liên tục phẳng (gần 1.0) cho thấy vật liệu trung tính về phổ.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Chồng raster đầu vào (mỗi kênh một raster)."
              },
              "wavelengths": {
                "label": "Bước sóng",
                "description": "Mảng bước sóng tăng nghiêm ngặt tùy chọn có số phần tử bằng số đầu vào."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đa kênh đầu ra tùy chọn."
              }
            }
          },
          "linear_spectral_unmixing": {
            "name": "Phân tách phổ tuyến tính",
            "description": "Tách trộn phổ tuyến tính phân rã vector đa phổ của mỗi điểm ảnh thành tổ hợp tuyến tính không âm của các phổ thành phần thuần (endmember) đại diện cho đặc trưng của vật liệu thuần. Tối ưu hóa bình phương tối thiểu không âm giải bài toán min ||y - Ax||² với ràng buộc x ≥ 0, trong đó y là phổ điểm ảnh, A chứa các đặc trưng endmember, và x biểu diễn tỷ lệ phần phong phú. Ràng buộc tổng bằng một được áp đặt để đảm bảo các giá trị phong phú biểu diễn tỷ lệ vật lý. Các endmember được suy ra từ dữ liệu huấn luyện, cơ sở dữ liệu thư viện, hoặc được trích xuất bằng các thuật toán trích xuất endmember. Tính năng chính: Ước lượng vật liệu dưới mức điểm ảnh; tỷ lệ phong phú có diễn giải vật lý; hỗ trợ nhiều endmember; đầu ra bị ràng buộc trong khoảng hợp lệ [0,1]; cho phép phát hiện biến động vật liệu. Trường hợp sử dụng: Lập bản đồ độ phong phú lớp phủ đất; ước lượng thành phần khoáng vật; kiểm kê vật liệu đô thị; tỷ lệ thực vật/đất/bề mặt không thấm; phân loại dựa trên thư viện phổ. Diễn giải đầu ra: Các bản đồ độ phong phú đầu ra thể hiện tỷ lệ vật liệu theo từng điểm ảnh có tổng bằng 1.0. Độ phong phú <0.1 cho thấy thành phần phụ; độ phong phú >0.7 cho thấy vật liệu chiếm ưu thế. Sai số dư cho biết chất lượng tách trộn; sai số dư thấp cho thấy khớp phổ tốt; sai số dư cao cho thấy endmember không phù hợp hoặc điểm ảnh phức tạp.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Chồng raster đầu vào (mỗi kênh một raster)."
              },
              "endmembers": {
                "label": "Thành phần cuối",
                "description": "Các chữ ký phần tử đầu mút dưới dạng mảng đối tượng {name, values} hoặc mảng số."
              },
              "sum_to_one": {
                "label": "Tổng bằng 1",
                "description": "Nếu true (mặc định), chuẩn hóa các tỉ lệ không âm sao cho tổng bằng một."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp gradient chiếu (mặc định 80)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước nhảy của gradient chiếu (mặc định 0.05)."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster tỉ lệ đa kênh đầu ra tùy chọn."
              },
              "output_residual": {
                "label": "Đầu ra phần dư",
                "description": "Đường dẫn raster RMS phần dư đầu ra tùy chọn."
              }
            }
          },
          "minimum_noise_fraction": {
            "name": "Phân số nhiễu tối thiểu",
            "description": "Phân số nhiễu tối thiểu (Minimum Noise Fraction) biến đổi dữ liệu siêu phổ thông qua quy trình hai bước: ước lượng hiệp phương sai nhiễu, sau đó làm trắng nhiễu và phân tích thành phần chính. Làm trắng nhiễu khử tương quan nhiễu giữa các kênh; PCA trong không gian đã làm trắng xác định các hướng do tín hiệu chi phối. Các thành phần đầu ra được sắp xếp theo tỷ số tín hiệu trên nhiễu, với các thành phần đầu biểu diễn tín hiệu và các thành phần sau biểu diễn nhiễu. Cho phép giảm nhiễu thông qua cắt bớt thành phần mà không gây lỗi làm trơn thông thường. Tính năng chính: Tách tín hiệu khỏi nhiễu; nhiễu tập trung ở các thành phần sau; lựa chọn thành phần cho phép lọc nhiễu; bảo toàn độ trung thực phổ; cho phép giảm chiều dữ liệu. Trường hợp sử dụng: Khử nhiễu ảnh siêu phổ; giảm chiều cho phân loại; tăng cường tín hiệu; đặc trưng hóa nhiễu; đánh giá chất lượng ảnh. Diễn giải đầu ra: 1-3 thành phần MNF đầu tiên thường chứa 70-90% tín hiệu; các thành phần sau ngày càng nhiễu hơn. Cắt bớt thành phần (giữ lại N thành phần đầu tiên) loại bỏ nhiễu đồng thời bảo toàn thông tin phổ thiết yếu. Ảnh thành phần MNF cho phép đánh giá nhiễu trực quan; độ lệch chuẩn của các thành phần sau cho biết mức nhiễu.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Chồng raster đầu vào (mỗi kênh một raster)."
              },
              "num_components": {
                "label": "Số thành phần",
                "description": "Số thành phần MNF đầu ra (mặc định: tất cả các kênh)."
              },
              "noise_mode": {
                "label": "Chế độ nhiễu",
                "description": "Chế độ ước lượng nhiễu: 'difference_x' (mặc định) hoặc 'difference_y'."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster thành phần MNF đa kênh đầu ra tùy chọn."
              },
              "output_inverse": {
                "label": "Đầu ra nghịch đảo",
                "description": "Đường dẫn raster đa kênh tái tạo tùy chọn từ các thành phần MNF được giữ lại."
              }
            }
          },
          "spectral_angle_mapper": {
            "name": "Ánh xạ góc phổ",
            "description": "Ánh xạ góc phổ (Spectral Angle Mapping) phân loại điểm ảnh bằng cách tính góc phổ giữa phổ của mỗi điểm ảnh và các phổ trong thư viện tham chiếu, gán điểm ảnh cho phổ thư viện có góc nhỏ nhất, thể hiện độ tương đồng phổ lớn nhất không phụ thuộc vào cường độ chiếu sáng. SAM coi mỗi điểm ảnh và phổ tham chiếu là các vector trong không gian phổ N chiều, tính góc giữa các vector bằng phép tích vô hướng và biến đổi cosin ngược. Phân loại dựa trên góc phổ này bất biến với các ảnh hưởng chiếu sáng và địa hình vốn làm thay đổi tỷ lệ độ sáng tổng thể nhưng giữ nguyên hình dạng phổ, khiến nó vững chắc cho địa hình phức tạp và điều kiện thu nhận thay đổi. Các tính năng chính bao gồm tự động xác định ngưỡng góc phổ cho phép đánh giá độ tin cậy phân loại theo xác suất, nhập thư viện tham chiếu hỗ trợ các đặc trưng phổ do người dùng cung cấp từ mẫu thực địa hoặc thư viện phổ, tính bất biến chiếu sáng xử lý điều kiện ánh sáng thay đổi trong khi vẫn duy trì khả năng phân biệt phổ, và tính toán nhanh cho phép phân loại thời gian thực các ảnh lớn. Các ứng dụng phổ biến bao gồm nhận dạng vật liệu và lập bản đồ địa chất sử dụng thư viện phổ USGS, phân loại loài thực vật kết hợp dữ liệu vệ tinh đa phổ với phổ thu thập thực địa, thăm dò khoáng sản trong các khảo sát siêu phổ hàng không, và đánh giá độ chính xác so sánh phổ ảnh với các đặc trưng tham chiếu thu thập trên mặt đất. Đầu ra SAM cho phép nhận dạng vật liệu đáng tin cậy dựa trên đặc trưng hình dạng phổ. Đầu ra phân loại tạo ra ảnh một kênh với nhãn lớp số nguyên tương ứng với các mục trong thư viện; raster tin cậy tùy chọn ghi nhận góc phổ nhỏ nhất cho mỗi điểm ảnh, cho phép lọc dựa trên ngưỡng; đầu ra cho phép nhận dạng vật liệu trực tiếp và lọc dựa trên độ tin cậy.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Chồng raster đầu vào (mỗi kênh một raster)."
              },
              "endmembers": {
                "label": "Thành phần cuối",
                "description": "Các chữ ký phần tử đầu mút dưới dạng mảng đối tượng {name, values} hoặc mảng số."
              },
              "threshold_angle_deg": {
                "label": "Ngưỡng góc (độ)",
                "description": "Góc phổ tối đa được chấp nhận tùy chọn tính bằng độ; các điểm ảnh không khớp thuộc lớp 0."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster lớp đầu ra tùy chọn."
              },
              "output_angle": {
                "label": "Đầu ra góc",
                "description": "Đường dẫn raster đầu ra tùy chọn cho góc phổ nhỏ nhất (độ)."
              }
            }
          },
          "spectral_library_matching": {
            "name": "Đối sánh thư viện phổ",
            "description": "Đối sánh thư viện phổ thực hiện phân loại bằng cách so sánh phổ điểm ảnh với phổ trong thư viện tham chiếu sử dụng nhiều thước đo tương đồng, bao gồm góc phổ (góc giữa các vector phổ), khoảng cách Euclid (chênh lệch độ lớn) và độ phân kỳ thông tin phổ. Thuật toán nhận thư viện phổ tham chiếu do người dùng cung cấp với phổ của các vật liệu/lớp đã biết, tính các thước đo tương đồng giữa mỗi điểm ảnh và các mục trong thư viện, xác định phổ thư viện khớp nhất (góc nhỏ nhất, khoảng cách nhỏ nhất hoặc độ phân kỳ nhỏ nhất), và xuất ra nhãn lớp cùng tùy chọn điểm tin cậy/tương đồng. Đối sánh thư viện cho phép nhận dạng vật liệu mà không cần mẫu huấn luyện thực địa bằng cách tận dụng phổ tham chiếu từ USGS, khảo sát thực địa hoặc quang phổ học phòng thí nghiệm. Các tính năng chính bao gồm nhiều thước đo tương đồng cho phép lựa chọn thước đo phù hợp với đặc tính phổ và phân bố lớp cụ thể, khả năng nhập thư viện linh hoạt hỗ trợ nhiều định dạng thư viện phổ, tùy chọn định lượng độ tin cậy/độ bất định, và đầu ra vật liệu có thể nhận dạng trực tiếp. Các ứng dụng bao gồm lập bản đồ địa chất sử dụng thư viện phổ USGS cho khoáng vật học, phân loại thực vật sử dụng thư viện phổ tham chiếu thực vật, nhận dạng vật liệu xây dựng trong khu vực đô thị, và phân tích khảo sát siêu phổ hàng không. Đối sánh thư viện phổ cho phép nhận dạng vật liệu tự động. Đầu ra bao gồm bản đồ đã phân loại với ID mục thư viện làm nhãn lớp, raster tương đồng/tin cậy định lượng chất lượng khớp, và tùy chọn chồng đầy đủ góc phổ/khoảng cách cho mỗi mục thư viện cho phép lọc dựa trên ngưỡng; siêu dữ liệu ghi nhận nguồn thư viện tham chiếu và thước đo tương đồng đã sử dụng.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Chồng raster đầu vào (mỗi kênh một raster)."
              },
              "library": {
                "label": "Thư viện",
                "description": "Các mục của thư viện phổ dưới dạng mảng đối tượng {name, values} hoặc mảng số."
              },
              "library_csv": {
                "label": "CSV thư viện",
                "description": "Đường dẫn CSV thư viện phổ tùy chọn (các hàng name,b1,b2,... hoặc b1,b2,...). Được dùng khi không cung cấp 'library'."
              },
              "metric": {
                "label": "Độ đo",
                "description": "Độ đo đối sánh: 'sam' (mặc định), 'euclidean', hoặc 'sid'."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster lớp đầu ra tùy chọn."
              },
              "output_score": {
                "label": "Đầu ra điểm số",
                "description": "Đường dẫn raster điểm số khớp tốt nhất đầu ra tùy chọn (góc hoặc khoảng cách)."
              }
            }
          },
          "canny_edge_detection": {
            "name": "Phát hiện biên Canny",
            "description": "Áp dụng phát hiện biên đa giai đoạn Canny (làm mờ Gauss → gradient Sobel → triệt tiêu không cực đại → ngưỡng kép → trễ).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào (một kênh hoặc RGB đóng gói)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Độ lệch chuẩn của kernel làm trơn Gauss tính bằng điểm ảnh. Mặc định: 0.5."
              },
              "low_threshold": {
                "label": "Ngưỡng thấp",
                "description": "Ngưỡng trễ thấp (tỉ lệ 0–1 của gradient lớn nhất). Mặc định: 0.05."
              },
              "high_threshold": {
                "label": "Ngưỡng cao",
                "description": "Ngưỡng trễ cao (tỉ lệ 0–1 của gradient lớn nhất). Mặc định: 0.15."
              },
              "add_back": {
                "label": "Cộng lại",
                "description": "Nếu true, các điểm ảnh biên được đưa về không trong ảnh gốc thay vì tạo ra một bản đồ biên nhị phân. Mặc định: false."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ qua, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "corner_detection": {
            "name": "Phát hiện góc",
            "description": "Xác định các mẫu góc trong raster nhị phân bằng các mẫu hit-and-miss.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "laplacian_filter": {
            "name": "Bộ lọc Laplace",
            "description": "Bộ lọc Laplacian tính đạo hàm không gian bậc hai của cường độ ảnh, cung cấp khả năng phát hiện biên mạnh mẽ thông qua đo gradient đẳng hướng (mọi hướng). Việc triển khai áp dụng một kernel cố định xấp xỉ toán tử Laplace (tổng các đạo hàm bậc hai theo hướng x và y), nắm bắt các thay đổi cường độ bất kể hướng của biên. Không giống các bộ lọc có hướng, cách tiếp cận này xử lý mọi hướng biên như nhau, khiến nó lý tưởng cho việc phát hiện đối tượng đòi hỏi tính độc lập với hướng. Nền tảng toán học dựa trên phép xấp xỉ rời rạc: ∇²I ≈ I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4·I(x,y). Các tính năng chính bao gồm khả năng phát hiện điểm qua không (biên thực sự xuất hiện nơi đầu ra đổi dấu qua giá trị không), không nhạy với hướng biên, và khả năng phát hiện các chuyển tiếp từ sáng sang tối và từ tối sang sáng như nhau. Lọc Laplacian đặc biệt hiệu quả trong lập bản đồ địa chất, nơi ranh giới cấu trúc xuất hiện dưới dạng điểm qua không, khoanh vẽ ranh giới thực vật, trích xuất mạng lưới đường giao thông từ ảnh độ phân giải cao, và phát hiện dấu chân công trình. Việc diễn giải đầu ra tập trung vào hiểu các chuyển đổi dấu: giá trị dương mạnh cho thấy cực tiểu tối cục bộ, giá trị âm cho thấy cực đại sáng cục bộ, và các điểm qua không đánh dấu biên thực sự. Đầu ra điển hình nằm trong khoảng -1000 đến +1000 đối với ảnh nguồn 8-bit tùy thuộc vào độ tương phản cục bộ. Độ lớn đầu ra cao cho thấy biên sắc nét, rõ ràng; độ lớn thấp gợi ý chuyển tiếp dần dần. Phát hiện điểm qua không đòi hỏi lựa chọn ngưỡng cẩn thận. Lưu ý rằng Laplacian nhạy với nhiễu (khuếch đại nhiễu tần số cao), vì vậy thường nên lọc trước bằng làm trơn Gauss trước khi áp dụng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "variant": {
                "label": "Biến thể",
                "description": "Biến thể kernel: 3x3(1), 3x3(2), 3x3(3), 3x3(4), 5x5(1), 5x5(2)."
              },
              "clip_amount": {
                "label": "Mức cắt",
                "description": "Phần trăm cắt đuôi đối xứng tùy chọn (0-40)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "laplacian_of_gaussians_filter": {
            "name": "Bộ lọc Laplace của Gauss",
            "description": "Thực hiện tăng cường biên Laplacian-of-Gaussians (LoG) kết hợp làm trơn Gauss với phát hiện biên Laplacian. Được xấp xỉ tính toán thông qua hiệu Gauss (DoG). Đầu tiên làm trơn ảnh (giảm nhiễu), sau đó áp dụng Laplacian (phát hiện biên). Là kỹ thuật phát hiện biên đa thang kinh điển. Phát hiện điểm qua không trên đầu ra LoG xác định vị trí biên chính xác. LoG là tiêu chuẩn cho phát hiện biên trong không gian thang: Gauss loại bỏ nhiễu, Laplacian khuếch đại biên. Tham số sigma kiểm soát thang của biên được phát hiện: sigma nhỏ phát hiện biên mịn, sigma lớn phát hiện biên rộng. LoG được xấp xỉ bằng DoG để đạt hiệu quả. Nhiều giá trị sigma cho phép phát hiện biên đa thang (xác định đối tượng ở các thang khác nhau). Ứng dụng: (1) Phát hiện biên vững chắc (chống nhiễu), (2) Phát hiện biên đa thang (sử dụng nhiều sigma), (3) Định vị biên bằng điểm qua không, (4) Tiền xử lý cho phân đoạn, (5) Phát hiện đốm (blob) thông qua điểm qua không của LoG. Quy trình: áp dụng LoG→xác định điểm qua không→dò biên→vector hóa hoặc xử lý tiếp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma Gauss dùng bởi kernel LoG (0.5-20.0, mặc định 0.75)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "prewitt_filter": {
            "name": "Bộ lọc Prewitt",
            "description": "Toán tử Prewitt thực hiện phát hiện biên dựa trên gradient tương tự Sobel, sử dụng các trọng số kernel thay thế được tối ưu hóa cho các đặc tính nhiễu khác nhau. Việc triển khai sử dụng hai kernel tích chập 3×3 tính đạo hàm theo hướng x và y với trọng số đồng đều ở hàng/cột trung tâm và các hàng/cột kề, khác với cách tiếp cận thiên về trung tâm của Sobel. Độ lớn gradient kết hợp các thành phần có hướng thông qua √(Gx² + Gy²), cung cấp phản hồi đồng đều theo hướng. Nền tảng toán học dựa trên các phép xấp xỉ vi phân rời rạc đánh trọng số như nhau cho mọi điểm ảnh đóng góp thay vì nhấn mạnh vào trung tâm. Các tính năng chính bao gồm phản hồi nhiễu hơi khác so với Sobel (đôi khi vượt trội trong ảnh cực kỳ nhiễu), phân rã độ lớn/hướng thực sự cho phép phân tích biên tinh vi, hiệu quả tính toán chỉ đòi hỏi các phép tích chập tiêu chuẩn, và hiệu quả đã được chứng minh trên ảnh radar, quang học và nhiệt. Lọc Prewitt đặc biệt hiệu quả trong phân tích ảnh SAR, nơi trọng số đồng đều giảm lỗi nhiễu đốm tốt hơn Sobel, phát hiện dị thường nhiệt nhấn mạnh các đối tượng dạng tuyến, và trích xuất biên đa phổ đòi hỏi xử lý không phụ thuộc hướng. Diễn giải đầu ra tương tự Sobel: độ lớn cho biết cường độ biên (cao hơn = sắc nét hơn), hướng được tính bằng atan2(Gy, Gx) cung cấp hướng biên tính bằng radian. Độ lớn điển hình nằm trong khoảng 0-256 đối với đầu vào 8-bit; độ lớn vượt quá 80 thường cho thấy biên đáng kể. Giá trị hướng nằm trong khoảng -π đến +π; 0 radian cho thấy biên thuần ngang, ±π/2 cho thấy biên thuần dọc. Trọng số kernel đồng đều thường tạo ra phản hồi gradient mượt hơn một chút so với Sobel, có thể tốt hơn cho các đối tượng ảnh thưa hoặc mịn. Áp dụng thêm lọc trung vị để giảm dương tính giả do nhiễu. Kết hợp đầu ra có hướng với lựa chọn ngưỡng cho các quy trình liên kết biên và trích xuất ranh giới vốn rất quan trọng đối với các pipeline phân đoạn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "clip_tails": {
                "label": "Cắt đuôi",
                "description": "Phần trăm cắt đuôi đối xứng tùy chọn (0-40)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "roberts_cross_filter": {
            "name": "Bộ lọc Roberts Cross",
            "description": "Bộ lọc Roberts Cross là một trong những toán tử phát hiện biên sớm nhất, sử dụng mẫu kernel chéo đường chéo 2×2 đơn giản nhưng hiệu quả để tính gradient ảnh với chi phí tính toán tối thiểu. Toán tử này sử dụng hai ma trận 2×2 trực giao được xoay 45° so với phương ngang-dọc, tạo ra các mặt nạ tích chập hình chữ thập phát hiện biên, nhấn mạnh các góc và chuyển tiếp chéo. Bộ lọc áp dụng các kernel riêng biệt cho gradient X và Y, tính độ lớn thông qua tổng các giá trị tuyệt đối hoặc chuẩn Euclid. Các tính năng chính bao gồm hiệu quả tính toán vượt trội nhờ kích thước kernel 2×2 nhỏ, yêu cầu bộ nhớ tối thiểu, và xử lý nhanh trên các tập dữ liệu raster lớn. Roberts Cross đặc biệt hiệu quả trong việc phát hiện các đối tượng ở thang mịn và các chuyển tiếp sắc nét trong ảnh độ phân giải cao. Các trường hợp sử dụng chính bao gồm phát hiện biên nhanh trong các ứng dụng yêu cầu thời gian nghiêm ngặt, xử lý luồng video thời gian thực, phát hiện ranh giới sơ bộ trước các thuật toán nâng cao, và các môi trường hạn chế tài nguyên. Các ứng dụng bao gồm tiền xử lý khảo sát hàng không, đánh giá chất lượng ảnh vệ tinh, trích xuất đặc trưng cho các pipeline học máy, và triển khai GIS trên thiết bị di động. Diễn giải đầu ra cho thấy vị trí biên là các điểm ảnh có độ lớn cao nơi xảy ra thay đổi phổ trong vùng lân cận 2×2. Các vùng nền thường có giá trị gần bằng không; biên xuất hiện dưới dạng các đối tượng tuyến sáng cho biết ranh giới giữa các lớp phủ đất khác biệt. Đầu ra vốn thưa, chỉ chứa biên ở những nơi gradient vượt quá ngưỡng độ chính xác tính toán. Đối với ảnh đa phổ, hãy áp dụng độc lập cho từng kênh hoặc tính chỉ số hiệu chuẩn hóa trước. Hậu xử lý làm mảnh biên thường được thực hiện sau khi áp dụng Roberts để tinh chỉnh đầu ra cho các quy trình chuyển đổi sang vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "clip_amount": {
                "label": "Mức cắt",
                "description": "Phần trăm cắt đuôi đối xứng tùy chọn (0-50)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "sobel_filter": {
            "name": "Bộ lọc Sobel",
            "description": "Toán tử Sobel phát hiện biên thông qua ước lượng gradient có hướng theo cả hướng x (ngang) và y (dọc), kết hợp các kernel đạo hàm trực giao thành một biểu diễn độ lớn thống nhất. Việc triển khai áp dụng độc lập hai kernel tích chập 3×3 (một nhấn mạnh biên ngang, một nhấn mạnh biên dọc), sau đó kết hợp kết quả thông qua chuẩn Euclid: độ lớn = √(Gx² + Gy²). Cách tiếp cận tách được này giảm chi phí tính toán trong khi vẫn duy trì độ chính xác phát hiện biên. Cơ sở toán học xuất phát từ các phép xấp xỉ rời rạc của gradient ảnh, với trọng số kernel thiên về các điểm ảnh trung tâm để cải thiện khả năng chống nhiễu. Các tính năng chính bao gồm đo gradient có hướng cho phép xác định hướng biên, chi phí tính toán tương đối thấp, hiệu quả đã được chứng minh trên ảnh vệ tinh và ảnh hàng không, và yêu cầu tinh chỉnh tham số tối thiểu. Lọc Sobel được ứng dụng rộng rãi trong tính toán độ dốc và hướng dốc địa hình, trích xuất ranh giới đối tượng cho các quy trình phát hiện đối tượng, khoanh vẽ mạng lưới sông từ dữ liệu DEM, và lập bản đồ cơ sở hạ tầng (đường giao thông, công trình, đường dây điện) từ ảnh độ phân giải cao. Diễn giải đầu ra cho thấy độ lớn biểu thị cường độ biên (giá trị cao hơn = chuyển tiếp sắc nét hơn), trong khi các thành phần có hướng (Gx, Gy) cho phép phân tích hướng. Độ lớn gradient điển hình nằm trong khoảng 0-256 đối với ảnh 8-bit; giá trị vượt quá 100 thường cho thấy biên đáng kể. Tỷ số Gx/Gy cung cấp thông tin hướng biên: tỷ số gần 1 cho thấy biên 45 độ, tỷ số >>1 cho thấy đối tượng ngang, tỷ số <<1 cho thấy đối tượng dọc. Dương tính giả thường xuất hiện ở các vùng nhiễu; lọc trung vị hoặc các phép toán hình thái giúp giảm hiệu quả các phát hiện giả. Kết hợp với phân ngưỡng để tạo mặt nạ biên nhị phân phù hợp cho các pipeline phân đoạn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "variant": {
                "label": "Biến thể",
                "description": "Biến thể kích thước kernel: 3x3 (mặc định) hoặc 5x5."
              },
              "clip_tails": {
                "label": "Cắt đuôi",
                "description": "Phần trăm cắt đuôi đối xứng tùy chọn (0-40)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "balance_contrast_enhancement": {
            "name": "Tăng cường tương phản cân bằng",
            "description": "Giảm sai lệch màu trong ảnh RGB đóng gói bằng các phép kéo giãn parabol theo từng kênh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "band_mean": {
                "label": "Trung bình kênh",
                "description": "Độ sáng trung bình đầu ra mong muốn cho mỗi kênh (mặc định 100.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "create_colour_composite": {
            "name": "Tạo ảnh tổ hợp màu",
            "description": "Tạo ảnh tổ hợp màu RGB đóng gói từ các raster đỏ, lục, lam và raster độ mờ đục tùy chọn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "red": {
                "label": "Đỏ",
                "description": "Đường dẫn raster kênh đỏ hoặc đối tượng raster có kiểu."
              },
              "green": {
                "label": "Lục",
                "description": "Đường dẫn raster kênh lục hoặc đối tượng raster có kiểu."
              },
              "blue": {
                "label": "Lam",
                "description": "Đường dẫn raster kênh lam hoặc đối tượng raster có kiểu."
              },
              "opacity": {
                "label": "Độ mờ",
                "description": "Đường dẫn raster độ mờ đục tùy chọn hoặc đối tượng raster có kiểu."
              },
              "enhance": {
                "label": "Tăng cường",
                "description": "Áp dụng tăng cường tương phản cân bằng sau khi tổ hợp (mặc định true)."
              },
              "treat_zeros_as_nodata": {
                "label": "Coi giá trị 0 là NoData",
                "description": "Coi các giá trị không trong đầu vào RGB là NoData/nền (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "direct_decorrelation_stretch": {
            "name": "Kéo giãn giải tương quan trực tiếp",
            "description": "Cải thiện độ bão hòa màu của ảnh RGB đóng gói bằng cách giảm thành phần vô sắc và kéo giãn tuyến tính các kênh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "achromatic_factor": {
                "label": "Hệ số vô sắc",
                "description": "Hệ số giảm thành phần xám từ 0 đến 1 (mặc định 0.5)."
              },
              "clip_percent": {
                "label": "Phần trăm cắt",
                "description": "Phần trăm cắt đuôi cho phép co giãn tuyến tính sau khi kéo giãn (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "false_colour_composite": {
            "name": "Ảnh tổ hợp màu giả",
            "description": "Xây dựng raster tổ hợp màu giả (NIR/Red/Green) từ một bộ dữ liệu cảm biến quang học được hỗ trợ.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đầu ra"
              }
            }
          },
          "gamma_correction": {
            "name": "Hiệu chỉnh gamma",
            "description": "Hiệu chỉnh gamma áp dụng điều chỉnh độ sáng phi tuyến thông qua phép biến đổi lũy thừa nhằm tối ưu hóa độ tương phản ảnh, độ trung thực hiển thị và phân bố độ chói theo cảm nhận. Phép biến đổi toán học là I_corrected = I^(1/γ), trong đó γ (gamma) là số mũ do người dùng chỉ định kiểm soát hướng và mức độ điều chỉnh độ sáng. Giá trị γ > 1 làm tối ảnh (bù cho màn hình làm sáng), trong khi γ < 1 làm sáng ảnh (bù cho màn hình làm tối). Việc triển khai hoạt động độc lập trên từng điểm ảnh hoặc từng kênh phổ, bảo toàn các quan hệ không gian trong khi điều chỉnh tỷ lệ cường độ. Các tính năng chính bao gồm bảo toàn cấu trúc ảnh trong khi phân bố lại các giá trị tông màu, hiệu quả tính toán chỉ đòi hỏi bảng tra cứu, khả năng áp dụng cho mọi dữ liệu bức xạ bao gồm ảnh 16/32-bit, và tính khả nghịch cho phép hiệu chỉnh ngược. Hiệu chỉnh gamma có ứng dụng thiết yếu trong việc chuẩn bị ảnh vệ tinh cho giải đoán trực quan bằng cách bù đặc tính cảm biến, chuẩn hóa độ sáng ảnh trực giao giữa các dải bay hoặc loại cảm biến, tăng cường ảnh nhiệt để đối tượng dễ nhận thấy, và tiền xử lý dữ liệu đa phổ cho các pipeline học máy nơi việc chuẩn hóa đầu vào cải thiện sự hội tụ. Diễn giải đầu ra cho thấy các giá trị đã hiệu chỉnh tuân theo tỷ lệ lũy thừa: các tông trung bình chịu điều chỉnh tương đối lớn nhất, trong khi các giá trị cực trị bị nén ít hơn. Đối với đầu vào 8-bit (0-255), gamma điển hình 0.4-0.6 làm sáng ảnh đáng kể; gamma 1.4-1.6 làm tối ảnh đáng kể. Hình dạng biểu đồ tần suất biến đổi theo cách có thể dự đoán: biểu đồ tần suất lệch trái (ảnh tối) có lợi khi dùng γ < 1, trong khi biểu đồ tần suất lệch phải (ảnh sáng) có lợi khi dùng γ > 1. Kiểm tra đầu ra đã hiệu chỉnh bằng trực quan hóa biểu đồ tần suất và kiểm tra bằng mắt. Áp dụng nhất quán trên các bộ sưu tập ảnh đòi hỏi tiền xử lý đồng đều. Quy trình phổ biến đặt hiệu chỉnh gamma trước bước lựa chọn ngưỡng hoặc phân loại để đảm bảo khả năng nhận thấy đối tượng cân bằng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Số mũ gamma trong [0, 4], mặc định 0.5."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "gaussian_contrast_stretch": {
            "name": "Kéo giãn tương phản Gauss",
            "description": "Kéo giãn độ tương phản bằng cách khớp với một phân bố Gauss tham chiếu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "num_tones": {
                "label": "Số tông",
                "description": "Số tông màu đầu ra (mặc định 256)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "histogram_equalization": {
            "name": "Cân bằng lược đồ",
            "description": "Áp dụng cân bằng biểu đồ tần suất để cải thiện độ tương phản ảnh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "num_tones": {
                "label": "Số tông",
                "description": "Số tông màu đầu ra (mặc định 256)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "histogram_matching": {
            "name": "Đối sánh lược đồ",
            "description": "Khớp biểu đồ tần suất của ảnh với một biểu đồ tần suất tham chiếu được cung cấp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "histogram": {
                "label": "Lược đồ",
                "description": "Lược đồ tham chiếu dưới dạng [[value, frequency], ...] hoặc [{x, y}, ...]."
              },
              "is_cumulative": {
                "label": "Tích lũy",
                "description": "True nếu các giá trị lược đồ được cung cấp đã là tích lũy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "histogram_matching_two_images": {
            "name": "Đối sánh lược đồ hai ảnh",
            "description": "Khớp biểu đồ tần suất của ảnh đầu vào với biểu đồ tần suất của một ảnh tham chiếu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "reference": {
                "label": "Tham chiếu",
                "description": "Đường dẫn raster tham chiếu hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "ihs_to_rgb": {
            "name": "IHS sang RGB",
            "description": "Phép biến đổi ngược IHS sang RGB chuyển các thành phần Cường độ-Sắc độ-Độ bão hòa trở lại không gian màu đỏ-lục-lam, cho phép khôi phục màu tự nhiên từ dữ liệu viễn thám đã phân rã. Các công thức nghịch đảo hoạt động trên tọa độ cực trụ, chuyển góc sắc độ và độ lớn bão hòa cùng cường độ trở lại tọa độ RGB Descartes trong khi vẫn duy trì độ ổn định số và giảm thiểu lỗi lượng tử hóa. Phép biến đổi này là phần bổ sung quan trọng cho các phép RGB sang IHS, đặc biệt trong các quy trình làm sắc nét toàn sắc (pan-sharpening) nơi cường độ đã được thay thế bằng dữ liệu toàn sắc độ phân giải cao. Các tính năng chính bao gồm nghịch đảo toán học chính xác của phép biến đổi thuận đảm bảo tính nhất quán trong các thao tác khứ hồi, tự động xử lý các điểm ảnh vô sắc không xác định sắc độ để ngăn lan truyền lỗi số, độ ổn định số ở các giá trị bão hòa cực trị gần không, và hiệu quả tính toán cho phép tích hợp liền mạch vào các pipeline xử lý nhanh. Phép biến đổi ngược hoàn tất các quy trình làm sắc nét toàn sắc bằng cách khôi phục ảnh màu tự nhiên sau khi thay thế cường độ bằng dữ liệu toàn sắc, cho phép trực quan hóa màu của dữ liệu đã tăng cường độ phân giải, hỗ trợ tái tạo phổ từ các thành phần đã phân rã, và kiểm định tính nhất quán của phép biến đổi trong các quy trình kiểm soát chất lượng. Đầu ra IHS sang RGB tạo ra ảnh màu tự nhiên ba kênh với độ phân giải không gian kế thừa từ kênh cường độ đầu vào, phù hợp cho trực quan hóa trực tiếp và phân tích tiếp theo. Các kênh đầu ra biểu diễn các kênh đỏ, lục và lam theo thứ tự tiêu chuẩn; màu sắc thể hiện chi tiết không gian được tăng cường nếu cường độ đã được thay thế bằng dữ liệu toàn sắc độ phân giải cao hơn, đồng thời bảo toàn các đặc tính phổ từ các thành phần sắc độ và độ bão hòa ban đầu.",
            "params": {
              "intensity": {
                "label": "Cường độ",
                "description": "Raster kênh cường độ (0–1)."
              },
              "hue": {
                "label": "Sắc độ",
                "description": "Raster kênh sắc màu (0–2π radian)."
              },
              "saturation": {
                "label": "Độ bão hòa",
                "description": "Raster kênh độ bão hòa (0–1)."
              },
              "red_output": {
                "label": "Đầu ra đỏ",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh đỏ."
              },
              "green_output": {
                "label": "Đầu ra lục",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh lục."
              },
              "blue_output": {
                "label": "Đầu ra lam",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh lam."
              }
            }
          },
          "min_max_contrast_stretch": {
            "name": "Kéo giãn tương phản min-max",
            "description": "Kéo giãn tuyến tính các giá trị giữa giá trị nhỏ nhất và lớn nhất do người dùng chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_val": {
                "label": "Giá trị nhỏ nhất",
                "description": "Giá trị đầu vào nhỏ nhất dùng để co giãn."
              },
              "max_val": {
                "label": "Giá trị lớn nhất",
                "description": "Giá trị đầu vào lớn nhất dùng để co giãn."
              },
              "num_tones": {
                "label": "Số tông",
                "description": "Số tông màu đầu ra (mặc định 256)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "mosaic": {
            "name": "Ghép ảnh",
            "description": "Ghép ảnh kết hợp nhiều raster chồng lấp thành đầu ra liền mạch thông qua đăng ký hình học, lấy mẫu lại về phép chiếu và lưới điểm ảnh chung, và hòa trộn biên để giảm thiểu gián đoạn. Thuật toán đăng ký các raster bằng tọa độ địa lý hoặc điểm khống chế mặt đất, lấy mẫu lại theo độ phân giải và phạm vi đích, và áp dụng hòa trộn có trọng số (hòa trộn Feather hoặc trọng số hàm mũ) trên các vùng chồng lấp. Các điểm ảnh chồng lấp được hòa trộn bằng trung bình có trọng số theo khoảng cách từ cạnh raster, tạo ra chuyển tiếp mượt mà trong khi vẫn bảo toàn độ chính xác của các điểm ảnh bên trong. Điều này tạo ra các ảnh ghép raster liền mạch quy mô lục địa hoặc toàn cầu, loại bỏ lỗi ở biên và các gián đoạn bức xạ. Các tính năng chính bao gồm căn chỉnh hình học nhiều raster về một phép chiếu chung, lựa chọn phương pháp lấy mẫu lại (song tuyến, bậc ba, láng giềng gần nhất), hòa trộn biên loại bỏ đường nối, chuẩn hóa bức xạ bù cho sự khác biệt về cảm biến hoặc chiếu sáng, và hỗ trợ hàng nghìn raster đầu vào. Công cụ tự động quản lý mức ưu tiên raster, tránh các khoảng trống nhờ các chiến lược lấp đầy thông minh. Các ứng dụng bao gồm tạo ảnh ghép vệ tinh quy mô lục địa từ các bộ sưu tập cảnh ảnh, tạo mô hình số độ cao liền mạch từ nhiều dải bay, tạo ảnh ghép quang học tổ hợp từ ảnh đa thời gian, xây dựng ảnh trực giao ghép từ các khảo sát bằng thiết bị bay không người lái (UAV), và tạo bản đồ nền cho các khu vực rộng lớn từ các cảnh ảnh vệ tinh chồng lấp. Ghép ảnh là thiết yếu cho các quy trình phân tích quy mô lục địa và toàn cầu. Diễn giải đầu ra: Raster đầu ra kế thừa phép chiếu và độ phân giải đầu vào; các vùng hòa trộn thể hiện giá trị nội suy cân bằng giữa các raster đầu vào. Lỗi ở biên cho thấy độ chồng lấp không đủ hoặc chuẩn hóa bức xạ kém; việc đánh giá xem xét các đường nối và tính nhất quán màu sắc qua các ranh giới ảnh ghép. Việc xử lý NoData ở các cạnh ảnh ghép đòi hỏi chú ý đến giá trị lấp đầy và định nghĩa phạm vi. Đánh giá chất lượng bao gồm kiểm tra hình học thông qua điểm khống chế mặt đất và đánh giá bức xạ so sánh giá trị ảnh ghép với các raster đầu vào.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu phẩy/chấm phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp lấy mẫu lại: 'nn' (mặc định), 'bilinear', hoặc 'cc'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "mosaic_with_feathering": {
            "name": "Ghép ảnh có làm mờ biên",
            "description": "Ghép hai raster và hòa trộn mờ biên các ô chồng lấp bằng trọng số khoảng cách đến cạnh.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp lấy mẫu lại: 'cc' (mặc định), 'nn', hoặc 'bilinear'."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Số mũ trọng số khoảng cách dùng để làm mờ biên vùng chồng lấp (mặc định 4.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "normalized_difference_index": {
            "name": "Chỉ số hiệu chuẩn hóa",
            "description": "Tính (band1 - band2) / (band1 + band2) từ một raster đa kênh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "band1": {
                "label": "Kênh 1",
                "description": "Chỉ số kênh thứ nhất (đánh số từ 1, mặc định 1)."
              },
              "band2": {
                "label": "Kênh 2",
                "description": "Chỉ số kênh thứ hai (đánh số từ 1, mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "panchromatic_sharpening": {
            "name": "Tăng độ nét bằng kênh toàn sắc",
            "description": "Làm sắc nét toàn sắc hợp nhất ảnh toàn sắc độ phân giải cao với dữ liệu đa phổ độ phân giải thấp hơn bằng phương pháp Brovey, một kỹ thuật nhân phổ giúp tăng cường chi tiết không gian trong khi vẫn bảo toàn thông tin phổ. Phương pháp hoạt động bằng cách trước tiên lấy mẫu lại các kênh đa phổ để khớp với độ phân giải toàn sắc, sau đó tính tỷ số cường độ giữa ảnh toàn sắc và cường độ đa phổ đã tính để điều chỉnh tỷ lệ mỗi kênh tương ứng. Cách tiếp cận này duy trì độ trung thực phổ đồng thời cải thiện đáng kể độ phân giải không gian. Các tính năng chính bao gồm bảo toàn các đặc tính phổ ban đầu, hiệu quả đại số tuyến tính cho phép xử lý nhanh ảnh lớn, tự động lấy mẫu lại tương thích với các đầu vào đã đăng ký kênh, và tự động chuẩn hóa để đạt tính nhất quán bức xạ giữa các cảm biến không đồng nhất. Kỹ thuật này được sử dụng rộng rãi trong tăng cường ảnh vệ tinh cho các ứng dụng lập bản đồ bao gồm quy hoạch đô thị, giám sát nông nghiệp và thăm dò tài nguyên, nơi cả chi tiết phổ và không gian đều quan trọng. Làm sắc nét toàn sắc tạo ra đầu ra đa phổ được tăng cường với độ rõ nét không gian vượt trội, phù hợp cho giải đoán trực quan và lập bản đồ chi tiết. Các kênh đầu ra giữ nguyên thứ tự kênh đa phổ ban đầu nhưng với độ phân giải ở mức toàn sắc, cho phép tích hợp liền mạch vào các quy trình phân tích ảnh tiêu chuẩn và hệ thống GIS. Độ phân giải không gian tăng lên khớp với độ phân giải toàn sắc đầu vào, cho phép trích xuất đối tượng ở thang mịn hơn so với dữ liệu đa phổ ban đầu.",
            "params": {
              "red": {
                "label": "Đỏ",
                "description": "Raster kênh đỏ (bắt buộc trừ khi đã cung cấp 'composite')."
              },
              "green": {
                "label": "Lục",
                "description": "Raster kênh lục (bắt buộc trừ khi đã cung cấp 'composite')."
              },
              "blue": {
                "label": "Lam",
                "description": "Raster kênh lam (bắt buộc trừ khi đã cung cấp 'composite')."
              },
              "composite": {
                "label": "Ảnh tổ hợp",
                "description": "Ảnh tổ hợp đa phổ RGB đóng gói (loại trừ lẫn nhau với red/green/blue)."
              },
              "pan": {
                "label": "Kênh toàn sắc",
                "description": "Kênh raster toàn sắc."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp hợp nhất: 'brovey' (mặc định) hoặc 'ihs'."
              },
              "output_mode": {
                "label": "Chế độ đầu ra",
                "description": "Cách mã hóa đầu ra: 'packed' (mặc định) hoặc 'bands' (raster RGB 3 kênh)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "percentage_contrast_stretch": {
            "name": "Kéo giãn tương phản theo phần trăm",
            "description": "Kéo giãn độ tương phản theo phần trăm thực hiện tăng cường độ tương phản tuyến tính bằng cách loại bỏ các tỷ lệ phần trăm giá trị cực trị (đuôi) được chỉ định khỏi biểu đồ tần suất trước khi kéo giãn ra toàn bộ dải động. Thuật toán: loại bỏ các giá trị phân vị dưới và trên độc lập cho từng kênh, ánh xạ tuyến tính dải còn lại sang dải đầu ra (thường là 0-255 hoặc toàn bộ độ sâu bit), loại bỏ các giá trị bức xạ cực trị gây ra độ tương phản kém. Việc chọn phân vị (thường là 2-3%) cân bằng giữa tăng cường độ tương phản và bảo toàn tính toàn vẹn dữ liệu. Tính năng chính: tự động loại bỏ giá trị ngoại lai bức xạ, ngăn nén độ tương phản do các giá trị bất thường, áp dụng được theo từng kênh hoặc toàn cục, phép biến đổi tuyến tính hiệu quả về mặt tính toán, thao tác khả nghịch. Khả năng: xử lý lỗi bức xạ, tăng cường khả năng nhận thấy các đối tượng tinh tế, thích ứng với các dải đầu vào khác nhau. Trường hợp sử dụng: tiền xử lý trước phân loại hoặc hợp nhất, tăng cường dải động chưa được tận dụng, chuẩn bị cho hiển thị đa phổ, chuẩn hóa bức xạ giữa các cảnh. Ứng dụng: tăng cường ảnh vệ tinh cho giải đoán trực quan, tiền xử lý phát hiện sạt lở đất dựa trên ảnh vệ tinh, chuẩn hóa trước phân loại, khắc phục ảnh lưu trữ. Diễn giải đầu ra: ảnh được tăng cường hiển thị độ tương phản cải thiện; các giá trị cực trị bị cắt; các đối tượng tinh tế trước đây bị ẩn trở nên dễ thấy; giá trị cắt theo từng kênh cho biết chất lượng phân bố bức xạ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "clip": {
                "label": "Cắt",
                "description": "Phần trăm cắt theo phân vị (mặc định 1.0)."
              },
              "tail": {
                "label": "Đuôi",
                "description": "Chế độ cắt đuôi: both (mặc định), upper, hoặc lower."
              },
              "num_tones": {
                "label": "Số tông",
                "description": "Số tông màu đầu ra (mặc định 256)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "piecewise_contrast_stretch": {
            "name": "Kéo giãn tương phản từng đoạn",
            "description": "Thực hiện kéo giãn độ tương phản tuyến tính từng đoạn sử dụng các điểm ngắt do người dùng chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "function": {
                "label": "Hàm",
                "description": "Chuỗi khai báo các điểm gãy, ví dụ '(50,0.1);(120,0.6);(180,0.85)'."
              },
              "greytones": {
                "label": "Số mức xám",
                "description": "Số tông màu đầu ra cho các raster không phải RGB (mặc định 1024)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "resample": {
            "name": "Lấy mẫu lại",
            "description": "Lấy mẫu lại ảnh thay đổi độ phân giải điểm ảnh bằng các phương pháp nội suy bao gồm láng giềng gần nhất (nhanh nhất, làm trơn ít nhất), song tuyến (nội suy tuyến tính giữa các điểm ảnh kề nhau), song bậc ba (khớp đa thức bậc ba) và spline bậc ba (nội suy liên tục mượt mà). Lấy mẫu lại là thiết yếu cho đăng ký hình học, tạo các chồng ảnh đa phổ có độ phân giải đồng nhất từ các cảm biến có độ phân giải khác nhau, và tích hợp dữ liệu bổ trợ ở các thang khác nhau. Mỗi phương pháp bao gồm việc khớp các kernel nội suy cục bộ với giá trị điểm ảnh gốc, đánh giá kernel tại các vị trí điểm ảnh mới, và trả về các giá trị nội suy. Láng giềng gần nhất bảo toàn giá trị bức xạ (phù hợp cho dữ liệu phân loại); các phương pháp bậc cao hơn làm trơn cạnh và giảm răng cưa nhưng làm mờ các ranh giới sắc nét. Các tính năng chính bao gồm các phương pháp nội suy có thể lựa chọn để tối ưu hóa cân bằng giữa tốc độ và độ chính xác, chỉ định độ phân giải đầu ra thông qua kích thước điểm ảnh đích hoặc kích thước ảnh, tự động xử lý giá trị nền cho các khu vực nằm ngoài phạm vi đầu vào, và tùy chọn lọc khử răng cưa giảm lỗi lấy mẫu lại. Các ứng dụng bao gồm đăng ký ảnh căn chỉnh dữ liệu về lưới chung, hài hòa độ phân giải thống nhất các chồng ảnh đa phổ có độ phân giải gốc khác nhau, giảm mẫu để giảm khối lượng dữ liệu trong khi vẫn bảo toàn các mẫu không gian, và tăng mẫu để cải thiện chi tiết hình ảnh khi trực quan hóa. Đầu ra lấy mẫu lại tích hợp ảnh ở độ phân giải nhất quán. Độ phân giải đầu ra khớp với chỉ định của người dùng; phương pháp nội suy ảnh hưởng đến độ rõ nét của cạnh (láng giềng gần nhất bảo toàn cạnh; các phương pháp bậc cao hơn làm trơn); các khu vực nền (ngoài phạm vi đầu vào) nhận giá trị lấp đầy có thể cấu hình; đầu ra tích hợp liền mạch vào các quy trình phân tích đa phổ.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu phẩy/chấm phẩy."
              },
              "base": {
                "label": "Nền",
                "description": "Raster nền tùy chọn xác định phạm vi và lưới đầu ra. Được ưu tiên hơn cell_size."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra tùy chọn khi không cung cấp raster nền."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp lấy mẫu lại: 'cc' (mặc định), 'nn', hoặc 'bilinear'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "rgb_to_ihs": {
            "name": "RGB sang IHS",
            "description": "Phép biến đổi RGB sang Cường độ-Sắc độ-Độ bão hòa phân rã không gian màu đỏ-lục-lam thành các thành phần có ý nghĩa về mặt cảm nhận: cường độ (độ sáng), sắc độ (màu sắc) và độ bão hòa (độ tinh khiết màu). Việc phân rã sử dụng các công thức toán học tiêu chuẩn chuyển các giá trị tam kích thích RGB sang tọa độ cực trụ, trong đó cường độ biểu diễn độ chói, sắc độ mã hóa góc màu, và độ bão hòa đo mức độ tập trung màu. Không gian màu này đặc biệt hữu ích cho viễn thám vì cường độ có thể được thay thế bằng dữ liệu độ phân giải cao trong khi vẫn bảo toàn các đặc tính màu ban đầu thông qua phép biến đổi ngược. Các tính năng chính bao gồm công thức ổn định về số xử lý vững chắc các trường hợp biên (điểm ảnh vô sắc), giữ nguyên toàn bộ dải động mà không cắt hay mất thông tin, tự động điều chỉnh tỷ lệ kênh để có kết quả nhất quán giữa các dải đầu vào khác nhau, và hiệu quả tính toán phù hợp cho các chồng ảnh đa phổ lớn. Kỹ thuật này phục vụ nhiều ứng dụng: các quy trình làm sắc nét toàn sắc nơi cường độ được thay thế bằng dữ liệu toàn sắc, tăng cường trực quan hóa màu, tiền xử lý phổ cho các thuật toán phân loại, và chuyển đổi màu sang thang xám giữ lại thông tin cảm nhận. Phép biến đổi RGB sang IHS là thiết yếu cho các kỹ thuật hợp nhất kết hợp độ phân giải toàn sắc với thông tin màu đa phổ. Đầu ra bao gồm ba tệp một kênh biểu diễn các thành phần cường độ, sắc độ và độ bão hòa, có thể sử dụng độc lập trong các quy trình phân tích. Kênh cường độ xấp xỉ độ chói; sắc độ nằm trong khoảng 0-360 độ mã hóa thông tin màu; độ bão hòa nằm trong khoảng 0-100 phần trăm cho biết độ tinh khiết màu.",
            "params": {
              "red": {
                "label": "Đỏ",
                "description": "Raster kênh đỏ (loại trừ lẫn nhau với 'composite')."
              },
              "green": {
                "label": "Lục",
                "description": "Raster kênh lục (loại trừ lẫn nhau với 'composite')."
              },
              "blue": {
                "label": "Lam",
                "description": "Raster kênh lam (loại trừ lẫn nhau với 'composite')."
              },
              "composite": {
                "label": "Ảnh tổ hợp",
                "description": "Raster tổ hợp RGB đóng gói (loại trừ lẫn nhau với red/green/blue)."
              },
              "intensity_output": {
                "label": "Đầu ra cường độ",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh cường độ."
              },
              "hue_output": {
                "label": "Đầu ra sắc độ",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh sắc màu."
              },
              "saturation_output": {
                "label": "Đầu ra độ bão hòa",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh độ bão hòa."
              }
            }
          },
          "sigmoidal_contrast_stretch": {
            "name": "Kéo giãn tương phản sigmoid",
            "description": "Thực hiện kéo giãn độ tương phản dạng sigmoid sử dụng hệ số khuếch đại và điểm cắt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "cutoff": {
                "label": "Ngưỡng cắt",
                "description": "Điểm giữa của hàm sigmoid theo đơn vị chuẩn hóa (mặc định 0.0)."
              },
              "gain": {
                "label": "Độ khuếch đại",
                "description": "Tham số độ khuếch đại của hàm sigmoid (mặc định 1.0)."
              },
              "num_tones": {
                "label": "Số tông",
                "description": "Số tông màu đầu ra (mặc định 256)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "split_colour_composite": {
            "name": "Tách ảnh tổ hợp màu",
            "description": "Tách một raster tổ hợp màu RGB đóng gói thành ba raster một kênh riêng biệt biểu diễn các kênh đỏ, lục và lam. Thuật toán: Công cụ này trích xuất từng kênh màu riêng lẻ từ ảnh tổ hợp trong đó các giá trị R, G và B được đóng gói vào một raster duy nhất (thường sử dụng mã hóa RGB 24-bit hoặc RGBA 32-bit tiêu chuẩn). Việc tách được thực hiện thông qua các phép toán bit để tách riêng từng thành phần kênh 8-bit. Tính năng chính: Bảo toàn giá trị bức xạ ban đầu (0–255), xử lý các ảnh tổ hợp RGB tiêu chuẩn và các định dạng mở rộng, xuất ra ba raster độc lập có tham chiếu địa lý. Trường hợp sử dụng: Phân tích phổ khi từng kênh phải được xử lý riêng; tạo tập dữ liệu đầu vào để tính các chỉ số thực vật (NDVI, EVI); chuẩn bị dữ liệu cho các phép đại số kênh; cho phép các phép biến đổi màu nâng cao như chuyển đổi RGB sang IHS; trích xuất các kênh cụ thể cho các quy trình phân loại có giám sát hoặc không giám sát. Ứng dụng: Phân tích ảnh viễn thám, tiền xử lý dữ liệu vệ tinh, chuẩn bị phân tích đa phổ, pipeline tăng cường ảnh. Diễn giải đầu ra: Ba raster một kênh được tạo ra với phạm vi không gian, phép chiếu và tham chiếu địa lý giống hệt ảnh tổ hợp đầu vào. Mỗi kênh đầu ra chứa các giá trị bức xạ 8-bit (0–255) biểu diễn cường độ của thành phần màu đó trên toàn cảnh. Thống kê kênh (nhỏ nhất, lớn nhất, trung bình) phản ánh đặc tính phổ của kênh màu đó; các giá trị chiếm ưu thế cho biết màu chiếm ưu thế trên toàn ảnh. Các raster đầu ra có thể sử dụng ngay cho các phép tính kênh, chỉ số phổ hoặc các quy trình xử lý đa kênh tiếp theo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster RGB đóng gói đầu vào."
              },
              "red_output": {
                "label": "Đầu ra đỏ",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh đỏ."
              },
              "green_output": {
                "label": "Đầu ra lục",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh lục."
              },
              "blue_output": {
                "label": "Đầu ra lam",
                "description": "Đường dẫn đầu ra tùy chọn cho kênh lam."
              }
            }
          },
          "standard_deviation_contrast_stretch": {
            "name": "Kéo giãn tương phản theo độ lệch chuẩn",
            "description": "Thực hiện kéo giãn độ tương phản tuyến tính sử dụng giá trị trung bình cộng/trừ một bội số độ lệch chuẩn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "clip": {
                "label": "Cắt",
                "description": "Hệ số nhân độ lệch chuẩn dùng để suy ra các cận cắt (mặc định 2.0)."
              },
              "num_tones": {
                "label": "Số tông",
                "description": "Số tông màu đầu ra (mặc định 256)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "true_colour_composite": {
            "name": "Ảnh tổ hợp màu thật",
            "description": "Xây dựng raster tổ hợp màu thật (RGB) từ một bộ dữ liệu cảm biến quang học được hỗ trợ.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đầu ra"
              }
            }
          },
          "adaptive_filter": {
            "name": "Bộ lọc thích nghi",
            "description": "Bộ lọc thích ứng điều chỉnh động cường độ lọc dựa trên thống kê ảnh cục bộ (trung bình, phương sai, độ nhọn), cho phép làm trơn có nhận biết ngữ cảnh đáp ứng theo đặc điểm của cảnh. Việc triển khai chia ảnh thành các cửa sổ di động, tính thống kê cục bộ (phát hiện vùng do nhiễu chi phối so với vùng do đối tượng chi phối), và lựa chọn tham số lọc tương ứng. Vùng phẳng được làm trơn mạnh; vùng phức tạp được lọc nhẹ. Cơ sở toán học sử dụng các kiểm định thống kê để xác định đặc tính cục bộ: vùng có phương sai dưới ngưỡng được làm trơn mạnh; vùng vượt ngưỡng được bảo toàn chi tiết. Các tính năng chính bao gồm tự động thích ứng tham số (người dùng chỉ định khoảng; thuật toán chọn cục bộ), khả năng áp dụng cho bất kỳ kernel lọc nào (Gauss, trung vị, hình thái), và hiệu quả trên ảnh quang học và radar. Lọc thích ứng đặc biệt hiệu quả trong tiền xử lý các ảnh ghép vệ tinh không đồng nhất (cảm biến, điều kiện thu nhận khác nhau), làm trơn đám mây điểm LiDAR (bảo toàn biên thực vật trong rừng; làm trơn mặt đất ở khu vực trống), giảm nhiễu đốm SAR có chọn lọc tôn trọng cả mục tiêu và nền, và xếp chồng ảnh đa thời gian. Diễn giải đầu ra cho thấy các vùng đồng nhất chịu lọc mạnh (phương sai cục bộ thấp → làm trơn mạnh); các vùng phức tạp được lọc thận trọng (phương sai cao → xử lý tối thiểu). Bán kính làm trơn điều chỉnh động theo từng vùng: vùng phẳng nhận lọc bán kính lớn; vùng có kết cấu nhận lọc bán kính nhỏ hoặc không lọc. Dải đầu ra vẫn nằm trong dải đầu vào; hãy xem xét bản đồ cường độ lọc không gian để kiểm tra sự thích ứng. Thống kê dịch chuyển về phía trung bình cục bộ ở vùng mượt; vùng phức tạp phần lớn không thay đổi. Các lỗi thường gặp bao gồm khả năng làm trơn quá mức tại ranh giới vùng (thường áp dụng chuyển tiếp mượt) và độ nhạy với quan hệ nhiễu-phương sai. Kiểm tra sự thích ứng bằng cách phân tích bản đồ phương sai cục bộ. Áp dụng trong các pipeline tiền xử lý tự động xử lý dữ liệu đa nguồn khi lọc đồng đều là không đủ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng trị tuyệt đối z-score để thay thế bằng giá trị trung bình (mặc định 2.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "anisotropic_diffusion_filter": {
            "name": "Bộ lọc khuếch tán dị hướng",
            "description": "Lọc khuếch tán dị hướng thực hiện làm trơn lặp bảo toàn biên thông qua các quá trình khuếch tán có hướng phân biệt giữa biên và vùng phẳng. Thuật toán lặp lại việc cập nhật mỗi điểm ảnh dựa trên chênh lệch có trọng số với các lân cận, sử dụng một hàm dẫn giảm khuếch tán qua các ranh giới có gradient cao trong khi cho phép làm trơn bên trong các vùng đồng nhất. Việc triển khai giải phương trình đạo hàm riêng ∂I/∂t = div(c(|∇I|)∇I), trong đó hệ số dẫn c(·) thích ứng với độ lớn gradient cục bộ. Cách tiếp cận dựa trên dữ liệu này bảo toàn các chuyển tiếp sắc nét trong khi dần dần giảm nhiễu ở các khu vực đồng đều. Các tính năng chính bao gồm bảo toàn biên thực sự mà không cần mặt nạ biên tường minh, tự động chọn thang thông qua số lần lặp, giảm nhiễu hiệu quả trong khi duy trì độ sắc nét của đối tượng, và khả năng áp dụng cho dữ liệu đơn phổ và đa phổ. Khuếch tán dị hướng đặc biệt hiệu quả trong làm trơn đám mây điểm LiDAR bảo toàn các điểm gãy địa hình, khử nhiễu ảnh vệ tinh để phát hiện các đối tượng địa chất tinh tế, giảm nhiễu đốm SAR duy trì biên của mục tiêu radar, và ảnh y tế/khoa học nơi độ trung thực của biên là quan trọng. Diễn giải đầu ra đòi hỏi hiểu rằng các vùng mượt dần trở nên đồng nhất (giá trị hội tụ về trung bình cục bộ), trong khi biên dốc hơn cho đến khi ổn định. Các lần lặp đầu (t<5) cho giảm nhiễu nhẹ; các lần lặp trung gian (t=5-20) cho làm trơn đáng kể; lặp quá nhiều (t>50) có nguy cơ tăng cường ranh giới quá mức hoặc tạo đối tượng giả. Giá trị đầu ra vẫn nằm trong dải dữ liệu nguồn; thống kê dịch chuyển về phía trung bình vùng khi quá trình xử lý tiến triển. Theo dõi phương sai đầu ra để đánh giá mức độ làm trơn hoàn tất. Các chỉ số phổ biến bao gồm cải thiện tỷ số tín hiệu trên nhiễu và chỉ số độ sắc nét của biên. Áp dụng cẩn thận trong các quy trình đa thang nơi độ chính xác bảo toàn biên ảnh hưởng trực tiếp đến độ chính xác phân loại hoặc phát hiện biến động ở các bước sau.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp khuếch tán (mặc định 10)."
              },
              "kappa": {
                "label": "Kappa",
                "description": "Tham số độ nhạy biên (mặc định 20.0)."
              },
              "lambda": {
                "label": "Lambda",
                "description": "Bước thời gian trong (0, 0.25], mặc định 0.2."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "bilateral_filter": {
            "name": "Bộ lọc song phương",
            "description": "Làm trơn song phương (bilateral) bảo toàn biên thông qua các kernel không gian + cường độ. Vượt trội hơn Gauss trong việc bảo toàn chi tiết. Sigma_dist=bán kính, sigma_int=ngưỡng bảo toàn biên. Hỗ trợ RGB.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "sigma_dist": {
                "label": "Sigma khoảng cách",
                "description": "Độ lệch chuẩn của kernel Gauss không gian tính bằng điểm ảnh (0.5–20.0, mặc định 0.75)."
              },
              "sigma_int": {
                "label": "Sigma cường độ",
                "description": "Độ lệch chuẩn của kernel Gauss cường độ theo đơn vị giá trị raster (mặc định 1.0)."
              },
              "treat_as_rgb": {
                "label": "Xử lý như RGB",
                "description": "Đặt true để buộc xử lý HSI trên RGB đóng gói. Khi false, RGB đóng gói vẫn có thể được tự phát hiện từ siêu dữ liệu raster."
              },
              "assume_three_band_rgb": {
                "label": "Giả định RGB ba kênh",
                "description": "Khi true (mặc định), các raster uint8/uint16 3 kênh có thể được coi là RGB trong các bộ lọc hỗ trợ xử lý cường độ RGB 3 kênh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "closing": {
            "name": "Phép đóng",
            "description": "Thực hiện phép đóng hình thái sử dụng phần tử cấu trúc hình chữ nhật.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận lẻ (mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận lẻ (mặc định bằng filter_size_x)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "conservative_smoothing_filter": {
            "name": "Bộ lọc làm trơn bảo thủ",
            "description": "Làm trơn bảo thủ (Conservative Smoothing) thực hiện lọc phi tuyến bằng cách thay thế mỗi điểm ảnh bằng trung bình của các lân cận tương tự (trong một khoảng cường độ xác định), bảo toàn biên trong khi giảm nhiễu. Việc triển khai xem xét các vùng lân cận, xác định các điểm ảnh nằm trong ngưỡng cường độ so với điểm ảnh trung tâm, và tính trung bình các điểm ảnh có giá trị tương tự này. Công thức toán học: F = (1/N) Σ(I_j : |I_j - I_center| < T), trong đó T là ngưỡng tương đồng và N là số điểm ảnh tương tự. Các tính năng chính bao gồm định nghĩa tương đồng dựa trên ngưỡng đơn giản, hiệu quả trên ảnh quang học và radar, tham số dễ diễn giải (ngưỡng kiểm soát độ sắc nét của biên), và chi phí tính toán tối thiểu. Làm trơn bảo thủ đặc biệt hiệu quả trong tiền xử lý ảnh vệ tinh đa phổ (giảm nhiễu trong khi bảo toàn ranh giới phổ), tăng cường ảnh nhiệt (làm trơn nhiễu bức xạ trong khi duy trì các gián đoạn nhiệt độ), làm trơn phân loại LiDAR (bảo toàn ranh giới thực vật/mặt đất), và tiền xử lý dữ liệu khảo sát nhiễu. Diễn giải đầu ra cho thấy các vùng đồng nhất được lấy trung bình hoàn toàn (mọi lân cận đều tương tự); biên được lọc tối thiểu (các điểm ảnh tương tự chỉ nằm cùng một phía). Tham số ngưỡng kiểm soát việc bảo toàn biên: ngưỡng nhỏ (tương đồng nghiêm ngặt) tạo ra làm trơn nhẹ; ngưỡng lớn (tương đồng lỏng) tạo ra làm trơn mạnh có thể làm mất biên. Giá trị đầu ra khớp chính xác với giá trị lân cận đầu vào (không nội suy; đầu ra là trung bình của các giá trị hiện có). Thống kê dịch chuyển về phía các cụm cục bộ; các vùng không đồng nhất thay đổi tối thiểu. Kiểm tra hiệu quả của ngưỡng bằng kiểm tra trực quan và phân tích biểu đồ tần suất cục bộ. Các lỗi thường gặp bao gồm làm trơn không đủ nếu ngưỡng quá nghiêm ngặt và làm mờ biên nếu ngưỡng quá lỏng. Số lần lặp cho phép lọc lũy tiến: một lượt cho làm trơn nhẹ; nhiều lượt tăng cường hiệu ứng. Áp dụng trước khi phân loại khi cần giảm nhầm lẫn loại do nhiễu trong khi ranh giới lớp vẫn sắc nét.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 3)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 3)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "diff_of_gaussians_filter": {
            "name": "Bộ lọc hiệu Gauss",
            "description": "Lọc hiệu Gauss (DoG) phát hiện biên và các đối tượng mịn thông qua phép trừ hai phiên bản làm mờ Gauss với bán kính khác nhau, tạo ra một bộ lọc thông dải nhấn mạnh các tần số không gian trung gian. Việc triển khai tính hai phép làm mờ Gauss (bán kính nhỏ σ₁ và bán kính lớn σ₂), sau đó trừ: DoG = G(σ₁) - G(σ₂). Tổ hợp phi tuyến này tăng cường biên và sống trong khi triệt tiêu cả nhiễu mịn lẫn các xu hướng chiếu sáng rộng. Các tính năng chính bao gồm đáp ứng tần số có thể điều chỉnh (tỷ số σ₂/σ₁ kiểm soát đặc tính thông dải), đầu ra có tâm tại không (lưỡng cực: giá trị dương và âm), khả năng áp dụng cho phát hiện biên và trích xuất đối tượng, và hiệu quả tính toán nhờ tái sử dụng Gauss. Hiệu Gauss đặc biệt hiệu quả trong phát hiện cấu trúc địa chất (đứt gãy, đường dạng tuyến xuất hiện dưới dạng phản hồi DoG cao), trích xuất công trình từ ảnh trực giao, tăng cường kết cấu mịn trong ảnh ghép viễn thám, và các mô hình xử lý lấy cảm hứng từ khoa học thần kinh. Diễn giải đầu ra cho thấy biên tạo ra phản hồi đỉnh (dương ở phía sáng, âm ở phía tối) với điểm qua không nằm chính xác tại các chuyển tiếp. Phát hiện điểm qua không làm rõ biên thực sự không phụ thuộc vào hướng biên. Độ lớn DoG cho biết cường độ biên; dải điển hình từ -1000 đến +1000 đối với đầu vào 8-bit tùy thuộc vào độ tương phản cục bộ. Tỷ số σ₂/σ₁ xác định tâm thông dải: tỷ số~2 nhấn mạnh các đối tượng rất mịn; tỷ số~5 nhấn mạnh các đối tượng trung gian; tỷ số~10 nhấn mạnh các đối tượng thô hơn. Phân bố đầu ra hai đỉnh (đỉnh ở cực trị dương và âm) cho thấy khả năng tách biên tốt. Các lỗi thường gặp bao gồm quầng sáng quanh các biên mạnh và khả năng phản hồi yếu nếu dải tần số không khớp với thang đối tượng. Kết hợp với phân ngưỡng độ lớn để trích xuất biên. Áp dụng trước hậu xử lý hình thái để trích xuất đối tượng vững chắc từ ảnh vệ tinh nhiễu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Sigma Gauss nhỏ hơn (0.25-20.0, mặc định 2.0)."
              },
              "sigma2": {
                "label": "Sigma 2",
                "description": "Sigma Gauss lớn hơn (0.5-20.0, mặc định 4.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "diversity_filter": {
            "name": "Bộ lọc đa dạng",
            "description": "Tính độ đa dạng theo cửa sổ di động dưới dạng số lượng giá trị/lớp duy nhất trong vùng lân cận. Đo tính không đồng nhất cục bộ: đa dạng cao = địa hình/lớp đa dạng, đa dạng thấp = đồng nhất. Làm rõ kết cấu, mức độ phân mảnh và sự đa dạng của mẫu. Thường được áp dụng cho ảnh đã phân loại hoặc dữ liệu phân loại để xác định các vùng chuyển tiếp/biên.\n\nBộ lọc đa dạng tạo ra một thước đo biến thiên cục bộ độc lập với các giá trị cụ thể. Hữu ích cho sinh thái cảnh quan (đa dạng sinh cảnh, chỉ số phân mảnh), đánh giá chất lượng phân loại (đa dạng cao = khu vực hỗn hợp/không chắc chắn) và phân tích kết cấu. Khi áp dụng cho dữ liệu độ cao, độ đa dạng cho biết độ gồ ghề ở thang lân cận. Khi áp dụng cho kết quả phân loại, nó xác định các vùng hỗn hợp/chuyển tiếp sinh thái/ranh giới.\n\nỨng dụng: (1) Lập bản đồ phân mảnh cảnh quan (đa dạng cao = khảm đa dạng, đa dạng thấp = các mảng đồng nhất), (2) Đánh giá độ tin cậy/độ bất định của phân loại (đa dạng cao = khu vực không chắc chắn), (3) Phân tích kết cấu (lập bản đồ tính không đồng nhất), (4) Phát hiện biên/ranh giới thông qua các đỉnh đa dạng, (5) Đa dạng sinh cảnh cho phân tích sinh thái (mức độ phù hợp phụ thuộc vào độ đa dạng cục bộ).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "edge_preserving_mean_filter": {
            "name": "Bộ lọc trung bình bảo toàn biên",
            "description": "Bộ lọc trung bình bảo toàn biên (Edge-Preserving Mean) thực hiện lấy trung bình điểm ảnh có chọn lọc bằng cách tính trung bình cục bộ trong khi loại trừ các điểm ảnh ngoại lai có khả năng đại diện cho biên hoặc nhiễu. Việc triển khai sắp xếp các vùng lân cận điểm ảnh, loại bỏ các giá trị cực trị (thấp nhất và cao nhất, hoặc các giá trị vượt ngưỡng thống kê), và lấy trung bình các giá trị còn lại. Cách tiếp cận vững chắc này cân bằng giữa làm trơn và bảo toàn độ sắc nét. Các biến thể bao gồm lấy trung bình có trọng số nhấn mạnh các điểm ảnh trung tâm và lựa chọn ngưỡng thích ứng dựa trên thống kê cục bộ. Các tính năng chính bao gồm kiểm soát tham số đơn giản (số lượng loại trừ hoặc ngưỡng), hiệu quả tính toán nhờ sắp xếp các vùng lân cận nhỏ, giảm nhiễu hiệu quả mà không làm mờ chi tiết, và khả năng áp dụng cho dữ liệu quang học, radar và nhiệt. Lọc trung bình bảo toàn biên đặc biệt hiệu quả trong tiền xử lý ảnh vệ tinh quang học để tính chỉ số thực vật (loại bỏ bóng và mây mà không làm mờ đối tượng), làm trơn DEM bảo toàn các điểm gãy độ dốc, khử nhiễu ảnh nhiệt duy trì độ sắc nét của ranh giới, và chuẩn bị ảnh trực giao cho số hóa thủ công. Diễn giải đầu ra cho thấy các giá trị ngoại lai bị loại bỏ tập trung ở biên và vùng nhiễu; các giá trị còn lại được lấy trung bình tạo ra làm trơn cục bộ. Tham số loại trừ kiểm soát độ sắc nét của biên: loại trừ một cực trị loại bỏ nhiễu muối tiêu; loại trừ nhiều cực trị tạo ra kết quả mượt hơn với chuyển tiếp biên nhẹ nhàng hơn. Dải đầu ra vẫn nằm trong dải đầu vào; thống kê dịch chuyển về phía trung bình của các giá trị không ngoại lai. Theo dõi chênh lệch giữa đầu ra và đầu vào để xác định các vùng đã lọc (thường là các khu vực có phương sai cao). Chất lượng bảo toàn biên phụ thuộc vào độ chính xác xác định giá trị ngoại lai; kiểm tra trực quan để đảm bảo các đối tượng vẫn sắc nét. Các lỗi thường gặp bao gồm làm trơn không đủ nếu ngưỡng quá nghiêm ngặt và lọc quá mức nếu số lượng loại trừ quá cao. Số lần lặp cho phép lọc lũy tiến; một lượt cho làm trơn nhẹ. Áp dụng trước phân loại dựa trên ngưỡng để giảm phân loại sai do nhiễu trong khi duy trì ranh giới đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước lân cận vuông tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Chênh lệch tuyệt đối lớn nhất với lân cận để được đưa vào trung bình cục bộ (mặc định 15.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "emboss_filter": {
            "name": "Bộ lọc chạm nổi",
            "description": "Bộ lọc chạm nổi (emboss) tăng cường các đối tượng biên thông qua đổ bóng có hướng, tạo ra vẻ ngoài phù điêu ba chiều đặc trưng trong đó biên xuất hiện như các bề mặt nhô lên hoặc lõm xuống tùy thuộc vào mô phỏng chiếu sáng có hướng. Bộ lọc này áp dụng một kernel 3×3 kết hợp phát hiện biên với chiếu sáng một hướng, thường mô phỏng ánh sáng từ góc phần tư phía trên bên trái, tạo ra độ tương phản trực quan mạnh tại ranh giới trong khi vẫn bảo toàn các vùng mượt. Phép biến đổi chạm nổi trừ các giá trị lân cận có trọng số theo các hướng cụ thể, tạo ra đầu ra trong đó vùng sáng và vùng bóng làm nổi bật các gián đoạn địa hình và đối tượng. Các tính năng chính bao gồm kiểm soát hướng trực quan cho phép điều chỉnh hướng ánh sáng mô phỏng (các biến thể tám hướng), tích hợp tự nhiên cảm nhận 3D giúp tăng cường giải đoán trực quan, và hiệu năng vững chắc trong các điều kiện chiếu sáng khác nhau của ảnh nguồn. Bộ lọc chạm nổi phục vụ các ứng dụng đảm bảo chất lượng, trực quan hóa diễn giải và nhấn mạnh ranh giới đối tượng. Các trường hợp sử dụng bao gồm tăng cường trực quan cho giải đoán địa chất nơi ranh giới khoáng vật hiện rõ dưới dạng các mẫu phù điêu, giải đoán ảnh hàng không cải thiện khả năng nhận thấy các ranh giới tinh tế, sản xuất bản đồ nơi các mô hình số độ cao chạm nổi tạo ra các bản đồ địa hình ấn tượng, và phát hiện đối tượng khảo cổ nơi các cấu trúc bị chôn vùi xuất hiện dưới dạng biến thiên địa hình tinh tế. Diễn giải đầu ra coi giá trị cao là bề mặt được chiếu sáng và giá trị thấp là bóng, tạo ra chiều sâu cảm nhận mà mắt người tự nhiên diễn giải là địa hình. Đầu ra chạm nổi thường cần được điều chỉnh tỷ lệ về dải trực quan hóa 0-255; đầu ra thô thường chứa các giá trị âm đại diện cho vùng bóng. Hiệu ứng thuần túy là trực quan—chạm nổi không tính chiếu sáng thực hay tạo các đại lượng dẫn xuất độ cao. Đối với ảnh đa phổ, hãy áp dụng cho các thành phần chính hoặc các kênh được chọn dựa trên mục tiêu phân tích. Hậu xử lý thường bao gồm tăng cường độ tương phản hoặc ánh xạ tông màu để tối ưu hóa hiệu ứng trực quan.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "direction": {
                "label": "Hướng",
                "description": "Hướng chạm nổi: n,s,e,w,ne,nw,se,sw."
              },
              "clip_amount": {
                "label": "Mức cắt",
                "description": "Phần trăm cắt đuôi đối xứng tùy chọn (0-40)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "fast_almost_gaussian_filter": {
            "name": "Bộ lọc xấp xỉ Gauss nhanh",
            "description": "Bộ lọc gần Gauss nhanh (Fast Almost Gaussian) cung cấp làm trơn xấp xỉ Gauss nhanh chóng thông qua lọc hộp (lấy trung bình) tách được lặp, đạt được phản hồi làm mờ gần Gauss với độ phức tạp tính toán O(N) bất kể bán kính làm mờ. Việc triển khai áp dụng các phép tích chập hộp liên tiếp (mỗi phép tính trung bình điểm ảnh cục bộ) để xấp xỉ phân bố Gauss tích lũy; N lần lặp xấp xỉ các kernel Gauss ngày càng lớn hơn. Cơ sở toán học sử dụng định lý giới hạn trung tâm: tích chập lặp lại của các hàm hộp tiệm cận phân bố Gauss. Các tính năng chính bao gồm tốc độ tính toán cho phép làm trơn với kernel lớn trên ảnh lớn, triển khai tách được giảm yêu cầu bộ nhớ, kiểm soát tham số thông qua số lần lặp (kiểm soát bán kính làm mờ), và hiệu quả trên mọi kiểu dữ liệu. Lọc gần Gauss nhanh đặc biệt hiệu quả trong tạo kim tự tháp ảnh nhanh cho phân tích đa thang, duyệt ảnh vệ tinh thời gian thực, tiền xử lý các tập dữ liệu viễn thám khổng lồ trước khi phân loại, và các trình xem ảnh tương tác đòi hỏi làm trơn phản hồi nhanh. Diễn giải đầu ra cho thấy số lần lặp liên quan trực tiếp đến bán kính làm mờ: N=1 tạo ra làm trơn tối thiểu; N=3-5 cho làm mờ vừa phải; N>10 tạo ra làm trơn mạnh xấp xỉ Gauss kernel lớn. Giá trị đầu ra dần dịch chuyển về trung bình cục bộ khi số lần lặp tăng; việc giảm phương sai tuân theo các mẫu có thể dự đoán. Các giá trị còn lại nằm trong dải dữ liệu đầu vào. So sánh với lọc Gauss thực sự cho thấy phép xấp xỉ chấp nhận được với sai số 2-5% cho hầu hết các ứng dụng. Mức cải thiện tốc độ so với lọc Gauss thực sự tăng đáng kể ở bán kính lớn: nhanh hơn 5-20× đối với bán kính >20 điểm ảnh. Các lỗi nhỏ bao gồm hiện tượng gợn sóng nhẹ dọc theo biên (lỗi hộp tích lũy qua các lần lặp) và cách xử lý ranh giới hơi khác so với Gauss. Theo dõi biểu đồ tần suất đầu ra để phát hiện các phân bố đa đỉnh cho thấy làm trơn đã đủ. Áp dụng trong các pipeline tiền xử lý ảnh khi tốc độ bù đắp được các sai số xấp xỉ nhỏ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma Gauss xấp xỉ (khuyến nghị >=1.8, mặc định 1.8)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "flip_image": {
            "name": "Lật ảnh",
            "description": "Lật ảnh theo chiều dọc, chiều ngang hoặc cả hai.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "direction": {
                "label": "Hướng",
                "description": "Hướng lật: vertical (mặc định), horizontal, hoặc both."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "frangi_filter": {
            "name": "Bộ lọc Frangi",
            "description": "Thực hiện tăng cường độ giống mạch (vesselness) Frangi đa thang để phát hiện các cấu trúc dạng mạch (dạng ống) ở nhiều thang. Dựa trên phân tích trị riêng của ma trận Hessian. Phản hồi mạnh với các đối tượng dạng đường (mạch, đường giao thông, sông) và yếu với các cấu trúc dạng đốm. Phân tích đa thang (thử nhiều giá trị sigma) tự động phát hiện mạch ở các độ rộng khác nhau. Được sử dụng rộng rãi trong ảnh y tế và viễn thám để phát hiện đối tượng dạng tuyến. Độ giống mạch Frangi sử dụng các độ cong chính (trị riêng Hessian) để phân loại cấu trúc cục bộ: độ giống mạch cao cho đối tượng dạng tuyến, thấp cho cao nguyên hoặc đốm. Việc triển khai đa thang áp dụng ở nhiều giá trị sigma (độ rộng) và kết hợp các phản hồi. Rất tốt để phát hiện đường giao thông, sông, mạng lưới mạch. Chi phí tính toán vừa phải cho nhiều thang. Đầu ra rất dễ diễn giải—phản hồi với các đối tượng có thể nhận biết. Ứng dụng: (1) Phát hiện đường giao thông trong ảnh vệ tinh, (2) Trích xuất mạng lưới sông/suối, (3) Phát hiện đối tượng dạng tuyến nói chung, (4) Phát hiện mạch (ảnh y tế), (5) Phát hiện cấu trúc đa thang.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "scales": {
                "label": "Tỉ lệ",
                "description": "Danh sách các tỉ lệ dạng Gauss tính bằng điểm ảnh (mặc định [1.0, 2.0, 3.0])."
              },
              "beta": {
                "label": "Beta",
                "description": "Tham số beta Frangi để khử đốm (mặc định 0.5)."
              },
              "c": {
                "label": "C",
                "description": "Tham số c Frangi cho độ nhạy cấu trúc (mặc định 15.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "gabor_filter_bank": {
            "name": "Bộ lọc Gabor",
            "description": "Thực hiện lọc phản hồi Gabor đa hướng—phân tích kết cấu có hướng. Áp dụng một dãy bộ lọc Gabor ở nhiều hướng (thường là 0°, 45°, 90°, 135°) để trích xuất các đặc trưng kết cấu có hướng. Phản hồi Gabor cho biết cường độ và hướng của kết cấu. Hữu ích cho phát hiện đối tượng có hướng, đặc trưng hóa kết cấu và phân tích mẫu có định hướng. Mỗi hướng được xuất riêng. Lọc Gabor trích xuất kết cấu có hướng bằng cách tích chập với các wavelet đặc thù theo hướng. Mỗi hướng làm rõ các đối tượng thẳng hàng theo hướng đó. Xuất ra nhiều kênh (mỗi kênh một hướng) làm rõ hướng và cường độ kết cấu cục bộ. Phản hồi Gabor là nền tảng cho trích xuất đặc trưng kết cấu và phát hiện đối tượng trong thị giác máy tính. Dãy bộ lọc cho phép phân tích hướng toàn diện. Ứng dụng: (1) Phân tích kết cấu có hướng, (2) Phát hiện đối tượng có định hướng (sống núi, thung lũng, cấu trúc dạng tuyến), (3) Lập bản đồ xói mòn/bồi tụ có hướng, (4) Phát hiện đường giao thông/suối (đối tượng dạng tuyến), (5) Phân loại dựa trên kết cấu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma của bao Gauss tính bằng điểm ảnh (mặc định 2.0)."
              },
              "frequency": {
                "label": "Tần số",
                "description": "Tần số không gian của hàm sin tính bằng chu kỳ/điểm ảnh (mặc định 0.2)."
              },
              "orientations": {
                "label": "Hướng",
                "description": "Số hướng trong ngân hàng bộ lọc (mặc định 6)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "gaussian_filter": {
            "name": "Bộ lọc Gauss",
            "description": "Làm trơn Gauss tối ưu về mặt toán học với kernel có trọng số theo khoảng cách. Là nền tảng cho phân tích đa thang, phát hiện biên, lọc thông dải. Tham số sigma kiểm soát cường độ làm trơn; hỗ trợ RGB.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Độ lệch chuẩn Gauss tính bằng điểm ảnh (0.5-20.0, mặc định 0.75)."
              },
              "treat_as_rgb": {
                "label": "Xử lý như RGB",
                "description": "Đặt true để buộc hoạt động trong không gian cường độ RGB."
              },
              "assume_three_band_rgb": {
                "label": "Giả định RGB ba kênh",
                "description": "Khi true (mặc định), các raster uint8/uint16 3 kênh có thể được coi là RGB nếu thiếu siêu dữ liệu tường minh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "glcm_texture": {
            "name": "Kết cấu GLCM",
            "description": "Công cụ phân tích kết cấu Ma trận đồng xuất hiện mức xám (GLCM) trích xuất các thước đo kết cấu thống kê bậc hai định lượng các quan hệ không gian giữa các giá trị mức xám của điểm ảnh ở các khoảng dịch chuyển và hướng được chỉ định, cho phép phân loại kết cấu tinh vi phân biệt các mẫu thực vật nông nghiệp, cấu trúc môi trường xây dựng và các thành tạo địa chất. GLCM tính các ma trận xác suất ghi nhận tần suất xuất hiện các cặp mức xám ở các độ lệch cố định, tính bốn thống kê Haralick kinh điển: độ tương phản (đo biến thiên cục bộ), tương quan (đo sự phụ thuộc tuyến tính), độ đồng nhất (đo mức độ gần đường chéo) và năng lượng (đo tính đồng đều). Công cụ hỗ trợ tám độ lệch có hướng (0°, 45°, 90°, 135° và các hướng ngược lại), cho phép nhạy với kết cấu có hướng—phát hiện các mẫu có định hướng như luống ruộng, sự thẳng hàng của công trình hoặc cấu trúc địa chất. Các tính năng chính bao gồm phân tích đa hướng làm rõ các thuộc tính kết cấu dị hướng, điều chỉnh tham số dịch chuyển để tối ưu hóa độ nhạy theo thang, tính đồng thời nhiều thước đo kết cấu giảm chi phí xử lý, và khả năng vốn có phân biệt các thuộc tính bề mặt tinh tế về mặt thị giác. Các trường hợp sử dụng bao gồm nông nghiệp chính xác (phân loại loại cây trồng, phát hiện ranh giới thửa ruộng, đánh giá căng thẳng cây trồng), phân tích đô thị (lập bản đồ mật độ công trình, trích xuất bề mặt không thấm) và viễn thám địa chất (phân biệt loại đá, nhận dạng mẫu cấu trúc). Các ứng dụng bao gồm phân loại lớp phủ đất kết hợp đặc trưng phổ và kết cấu, phân tích ảnh hướng đối tượng cải thiện độ chính xác phân loại, kiểm soát chất lượng phát hiện lỗi thiết bị trong ảnh vệ tinh, và phát hiện biến động tách các thay đổi có ý nghĩa khỏi nhiễu cảm biến. Diễn giải đầu ra đòi hỏi hiểu ý nghĩa của từng thống kê: độ tương phản cao cho thấy kết cấu thô/đa dạng; tương quan cao cho thấy mẫu dạng tuyến; độ đồng nhất cao cho thấy kết cấu đồng đều; năng lượng cao cho thấy các mẫu lặp lại có trật tự. Các kênh đầu ra có thể được kết hợp thành chỉ số kết cấu (ví dụ: Độ đồng nhất GLCM chia cho Độ tương phản giúp tăng cường các khu vực đồng nhất). Các chế độ tổng hợp theo hướng (mean/min/max/separate) ảnh hưởng đến số chiều và cách diễn giải đầu ra. Phân tích kết cấu điển hình sử dụng đồng thời nhiều thước đo GLCM để phân loại vững chắc.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster một kênh đầu vào."
              },
              "window_size": {
                "label": "Kích thước cửa sổ",
                "description": "Kích thước cửa sổ trượt lẻ tính bằng điểm ảnh (mặc định 7)."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Khoảng cách điểm ảnh cho các độ lệch của cặp đồng xuất hiện (mặc định 1)."
              },
              "angles": {
                "label": "Góc",
                "description": "Các góc phân tách bằng dấu phẩy trong tập 0,45,90,135 (mặc định '0,45,90,135')."
              },
              "features": {
                "label": "Đặc trưng",
                "description": "Các đặc trưng phân tách bằng dấu phẩy: contrast,dissimilarity,homogeneity,asm,energy,entropy,mean,variance,correlation."
              },
              "direction_aggregation": {
                "label": "Tổng hợp theo hướng",
                "description": "Chế độ tổng hợp theo hướng: mean (mặc định), min, max, range, separate."
              },
              "levels": {
                "label": "Số mức",
                "description": "Số mức lượng tử hóa (mặc định 32; khoảng 8-128)."
              },
              "symmetric": {
                "label": "Đối xứng",
                "description": "Nếu true (mặc định), xây dựng các GLCM đối xứng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn (GeoTIFF đa kênh)."
              }
            }
          },
          "guided_filter": {
            "name": "Bộ lọc dẫn hướng",
            "description": "Bộ lọc dẫn hướng (guided filter) thực hiện làm trơn bảo toàn biên bằng cách ràng buộc đầu ra của bộ lọc theo các quan hệ tuyến tính cục bộ với một ảnh dẫn hướng, thường là ảnh gốc hoặc một lớp tham chiếu liên quan. Việc triển khai chia ảnh thành các vùng hình chữ nhật chồng lấp, tính các tham số hồi quy tuyến tính trong mỗi vùng để áp đặt độ mượt của đầu ra trong khi vẫn tôn trọng cấu trúc của ảnh dẫn hướng. Công thức toán học cực tiểu hóa ||Fᵢ - a·Gᵢ - b||² + ε||a||², trong đó Fᵢ là đầu ra đã lọc, Gᵢ là ảnh dẫn hướng, và (a, b) là các tham số tuyến tính cục bộ. Các tính năng chính bao gồm tính linh hoạt (ảnh dẫn hướng có thể độc lập với ảnh được lọc), hiệu quả tính toán nhờ triển khai tách được O(N), kiểm soát tham số cho phép điều chỉnh cường độ bảo toàn biên, và hiệu quả với dẫn hướng đơn phổ hoặc đa phổ. Lọc dẫn hướng đặc biệt hiệu quả trong các quy trình hợp nhất đa cảm biến nơi dữ liệu quang học dẫn hướng khử nhiễu SAR, tinh chỉnh phân loại LiDAR sử dụng ảnh trực giao trùng thời điểm, loại bỏ bóng/mây trong ảnh ghép vệ tinh sử dụng ảnh tham chiếu theo thời gian, và tăng cường chi tiết trong các tác vụ chính quy hóa bản đồ. Diễn giải đầu ra cho thấy các vùng đã lọc vẫn tương tự cục bộ với cấu trúc của ảnh dẫn hướng trong khi việc lấy trung bình cường độ diễn ra trong các vùng đồng nhất. Bán kính làm trơn kiểm soát phạm vi không gian (bán kính lớn hơn = làm trơn nhiều hơn); tham số chính quy hóa ε cân bằng giữa độ mượt và độ trung thực cấu trúc (ε lớn hơn = mượt hơn, ε nhỏ hơn = nhiều chi tiết hơn). Dải đầu ra khớp với đầu vào; so sánh trực quan với ảnh dẫn hướng giúp kiểm tra độ trung thực bảo toàn biên. Các lỗi thường gặp bao gồm làm trơn quá mức tại các gián đoạn mạnh (hãy chọn tham số phù hợp) và làm trơn không đủ ở các vùng ảnh dẫn hướng kém (hãy kiểm tra chất lượng ảnh dẫn hướng). Theo dõi tương quan chéo giữa đầu ra đã lọc và ảnh dẫn hướng để đánh giá chất lượng căn chỉnh. Áp dụng có chiến lược trong các quy trình hợp nhất, làm sắc nét và tái tạo ảnh nơi thông tin biên từ một nguồn dẫn hướng việc lọc nguồn khác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính cửa sổ của bộ lọc dẫn hướng tính bằng điểm ảnh (mặc định 4)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Tham số chính quy hóa cho phương sai cục bộ (mặc định 0.01)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "high_pass_bilateral_filter": {
            "name": "Bộ lọc song phương thông cao",
            "description": "Tính phần dư thông cao bằng cách trừ kết quả làm trơn song phương khỏi raster đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "sigma_dist": {
                "label": "Sigma khoảng cách",
                "description": "Độ lệch chuẩn của kernel Gauss không gian (khoảng cách), tính bằng điểm ảnh (0.5–20.0, mặc định 0.75)."
              },
              "sigma_int": {
                "label": "Sigma cường độ",
                "description": "Độ lệch chuẩn của kernel Gauss cường độ, theo đơn vị giá trị raster (mặc định 1.0)."
              },
              "treat_as_rgb": {
                "label": "Xử lý như RGB",
                "description": "Đặt true để buộc lọc theo cường độ HSI cho các raster RGB đóng gói trước khi lấy hiệu thông cao."
              },
              "assume_three_band_rgb": {
                "label": "Giả định RGB ba kênh",
                "description": "Khi true (mặc định), và không có siêu dữ liệu màu tường minh, cho phép diễn giải raster uint8/uint16 3 kênh là RGB."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "high_pass_filter": {
            "name": "Bộ lọc thông cao",
            "description": "Bộ lọc thông cao tách riêng các thành phần không gian tần số cao trong ảnh bằng cách trừ một phiên bản tần số thấp (đã làm trơn) khỏi ảnh gốc. Về mặt toán học, điều này đạt được bằng cách tích chập ảnh với một kernel được thiết kế để nhấn mạnh gradient và triệt tiêu các biến thiên tông màu rộng. Việc triển khai sử dụng tích chập trực tiếp hoặc xử lý trong miền tần số tùy thuộc vào kích thước kernel và kích thước ảnh. Bộ lọc tăng cường biên, các chi tiết kết cấu mịn và các biến thiên ở thang nhỏ trong khi loại bỏ các xu hướng chiếu sáng ở thang lớn. Các tính năng phân biệt chính bao gồm bảo toàn độ tương phản biên mà không gây lỗi ranh giới, suy giảm tần số có chọn lọc dựa trên bán kính kernel, và khả năng áp dụng trực tiếp cho cả ảnh xám và ảnh đa phổ. Lọc thông cao vô cùng hữu ích cho phân tích địa hình khi cần tăng cường các đối tượng địa hình tinh tế, làm sắc nét ảnh vệ tinh cho giải đoán trực quan, phát hiện các cấu trúc địa chất ở thang nhỏ, và tiền xử lý dữ liệu cho phân loại học máy. Nó cũng thiết yếu cho việc chuẩn bị ảnh trực giao để phát hiện biến động và tăng cường các sản phẩm dẫn xuất từ LiDAR. Diễn giải đầu ra đòi hỏi hiểu rằng giá trị dương cho thấy cực đại cục bộ (biên sáng) và giá trị âm cho thấy cực tiểu cục bộ (biên tối). Dải điển hình là ±100 đối với ảnh 8-bit; đầu ra có trung bình bằng không cho thấy việc trích xuất tần số cao thành công. Các lỗi thường gặp bao gồm hiện tượng rung (ringing) tại các gián đoạn mạnh và nhiễu bị khuếch đại nếu ảnh nguồn nhiễu. Việc diễn giải thang phụ thuộc vào bán kính kernel: kernel nhỏ hơn tăng cường kết cấu mịn (từng điểm ảnh), trong khi kernel lớn hơn nhấn mạnh các đối tượng ở thang vừa phải (biến thiên địa hình qua hàng chục điểm ảnh). Theo dõi thống kê đầu ra; việc quy tâm về không quá mức cho thấy khả năng xử lý quá đà. Áp dụng cùng với kết quả thông thấp bổ sung để tái tạo ảnh gốc hoặc cho các quy trình phân rã đa thang.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "high_pass_median_filter": {
            "name": "Bộ lọc trung vị thông cao",
            "description": "Thực hiện lọc thông cao bằng cách trừ trung vị cục bộ khỏi giá trị trung tâm: output = pixel - median_neighborhood. Kết hợp lọc thông cao (tăng cường chi tiết) với tính vững chắc của trung vị (loại bỏ nhiễu). Đầu ra có tâm quanh không (âm = tối hơn xung quanh, dương = sáng hơn). Chống chịu giá trị ngoại lai tốt hơn so với lọc thông cao dựa trên Gauss. Phần dư thông cao làm rõ các độ lệch cục bộ so với xu hướng trung vị. Đặc biệt vững chắc với dữ liệu nhiễu—trung vị ổn định hơn trung bình đối với giá trị ngoại lai. Đầu ra nhấn mạnh biến thiên ở thang mịn. Thường được áp dụng cho các phiên bản đã làm trơn Gauss (tạo bộ lọc thông dải). Hữu ích cho tăng cường kết cấu và trích xuất đối tượng từ ảnh nhiễu. Ứng dụng: (1) Tăng cường kết cấu từ dữ liệu nhiễu, (2) Trích xuất chi tiết trước phân loại, (3) Phát hiện đối tượng vững chắc, (4) Tiền xử lý cho phân đoạn dựa trên kết cấu, (5) Tiền xử lý SAR.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "sig_digits": {
                "label": "Số chữ số có nghĩa",
                "description": "Số chữ số có nghĩa dùng để chia nhóm lược đồ (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "integral_image_transform": {
            "name": "Biến đổi ảnh tích phân",
            "description": "Tính phép biến đổi tổng vùng (ảnh tích phân) cho từng kênh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "k_nearest_mean_filter": {
            "name": "Bộ lọc trung bình K lân cận gần nhất",
            "description": "Thực hiện làm trơn trung bình k láng giềng gần nhất bảo toàn biên: sắp xếp vùng lân cận theo khoảng cách đến giá trị trung tâm, lấy trung bình k giá trị gần nhất. Cách tiếp cận lai bảo toàn biên thông qua trọng số tương đồng. Điểm ảnh trung tâm và k-1 lân cận tương tự nhất được lấy trung bình. Tinh vi hơn k-NN đơn giản (xét cả tương đồng không gian và cường độ). Hiệu quả tính toán cao hơn so với lọc song phương. Cách tiếp cận k gần nhất lựa chọn lân cận một cách thích ứng: các giá trị điểm ảnh gần với trung tâm được lấy trung bình, các điểm ảnh không tương tự bị bỏ qua. Tham số k kiểm soát mức làm trơn: k=1 (không làm trơn), k=n (mọi lân cận = bộ lọc trung bình). Thường k=n/2 (một nửa vùng lân cận). Là phương án thay thế hiệu quả cho bộ lọc song phương—bảo toàn biên tương tự với chi phí tính toán thấp hơn. Đặc biệt hữu ích cho ảnh có gián đoạn cường độ mạnh. Ứng dụng: (1) Làm trơn bảo toàn biên (thay thế cho lọc song phương), (2) Tiền xử lý nhanh cho phân loại, (3) Tiền xử lý đòi hỏi hiệu quả cao, (4) Lọc ảnh đa kênh. Tham số điển hình: k=neighborhood_size/2 đến 3/4.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 3)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 3)."
              },
              "k": {
                "label": "K",
                "description": "Số lân cận gần nhất dùng để lấy trung bình (mặc định 5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "kuwahara_filter": {
            "name": "Bộ lọc Kuwahara",
            "description": "Bộ lọc Kuwahara thực hiện làm trơn phi tuyến bảo toàn biên bằng cách chia vùng lân cận của mỗi điểm ảnh thành bốn góc phần tư, tính thống kê trong mỗi góc phần tư, và chọn góc phần tư có phương sai thấp nhất làm giá trị đầu ra. Việc triển khai chia một cửa sổ (2k+1)×(2k+1) thành bốn cửa sổ con k×k chồng lấp, tính trung bình và phương sai của mỗi góc phần tư, và xuất ra trung bình của góc phần tư có phương sai nhỏ nhất. Cách tiếp cận dựa trên thứ hạng này đồng thời làm trơn các vùng đồng nhất và làm sắc nét biên. Các tính năng chính bao gồm bảo toàn biên thực sự thông qua lựa chọn góc phần tư (biên giữa các góc phần tư ngăn làm mờ đầu ra), tính toán đơn giản chỉ đòi hỏi tính trung bình/phương sai, kiểm soát tham số thông qua kích thước góc phần tư k, và hiệu quả trên ảnh quang học, radar và nhiệt. Lọc Kuwahara đặc biệt hiệu quả trong làm trơn DEM dẫn xuất từ LiDAR bảo toàn vách dốc và bậc thềm, trích xuất mạng lưới đường giao thông từ ảnh độ phân giải cao duy trì độ sắc nét của đường tim, khoanh vẽ dấu chân công trình từ ảnh hàng không, và phát hiện ranh giới vết dầu loang trong ảnh SAR. Diễn giải đầu ra cho thấy các vùng đồng nhất xuất ra góc phần tư lấy trung bình tự nhiên (phương sai thấp nhất); tại biên, đầu ra là góc phần tư chứa cấu trúc đồng đều gần biên nhất, qua đó neo đầu ra về phía sạch hơn. Kích thước góc phần tư k kiểm soát việc bảo toàn chi tiết: k=1 (làm trơn tối thiểu) bảo toàn biên mịn; k=3-4 cho làm trơn và bảo toàn biên cân bằng; k>5 có nguy cơ mất chi tiết. Giá trị đầu ra khớp chính xác với giá trị điểm ảnh đầu vào từ các góc phần tư được chọn (không nội suy). Theo dõi biểu đồ tần suất đầu ra để phát hiện phân bố hai đỉnh (biên và vùng đồng nhất tách biệt rõ ràng); phân bố đơn đỉnh gợi ý biên bị làm mờ. Áp dụng thêm làm sắc nét nếu xảy ra làm trơn quá mức. Các lỗi thường gặp bao gồm sai lệch theo hướng tùy thuộc vào sự căn chỉnh góc phần tư và hiện tượng khối gần các biên yếu. Sử dụng trong tiền xử lý cho phân đoạn khi việc bảo toàn biên đảm bảo trích xuất ranh giới chính xác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính góc phần tư Kuwahara tính bằng điểm ảnh (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "lee_filter": {
            "name": "Bộ lọc Lee",
            "description": "Bộ lọc Lee thực hiện giảm nhiễu đốm SAR sử dụng mô hình nhân của Lee, giả định rằng tín hiệu radar phản hồi tuân theo nhiễu nhân: I = S·N, trong đó S là tín hiệu và N là nhiễu nhân. Việc triển khai tính trung bình và phương sai cục bộ, ước lượng phương sai nhiễu đốm, sau đó lọc theo: F = μ + (1 - σₙ²/σ_I²)·(I - μ), trong đó σₙ² là phương sai nhiễu đốm và σ_I² là phương sai tổng. Cách tiếp cận dựa trên mô hình này bảo toàn các đối tượng có độ kết hợp cao trong khi triệt tiêu nhiễu đốm. Các tính năng chính bao gồm mô hình nhiễu đặc thù cho SAR (nhân thay vì Gauss), bảo toàn các mục tiêu điểm và biên, diễn giải tham số đơn giản (kích thước cửa sổ kiểm soát việc đo độ kết hợp), và hiệu quả đã được chứng minh trên SAR đơn phân cực và đa phân cực. Lọc Lee đặc biệt hiệu quả trong tiền xử lý SAR cho giám sát nông nghiệp, phân loại rừng, giám sát mặt biển và các quy trình lập bản đồ ngập lụt. Diễn giải đầu ra cho thấy các vùng có độ kết hợp cao (mục tiêu điểm, biên mạnh) được lọc tối thiểu; các vùng có độ kết hợp thấp (nhiễu đốm, ranh giới yếu) được lọc mạnh. Việc ước lượng phương sai nhiễu đốm ảnh hưởng đến đầu ra: ước lượng chính xác đòi hỏi đủ số điểm ảnh đồng nhất; phương sai bị ước lượng thấp dẫn đến làm trơn không đủ; phương sai bị ước lượng cao gây làm trơn quá mức. Kích thước cửa sổ kiểm soát độ phân giải đo độ kết hợp: cửa sổ nhỏ (3×3) bảo toàn chi tiết mịn; cửa sổ lớn (7×7) cải thiện ước lượng phương sai nhưng có nguy cơ mất chi tiết. Tỷ lệ đầu ra khớp với đầu vào; trực quan hóa logarit giúp tăng khả năng nhận thấy. Mức giảm nhiễu điển hình đạt được là giảm phương sai 5-10 dB tùy thuộc vào số look. Theo dõi biểu đồ tần suất đầu ra để phát hiện dấu hiệu nhiễu đốm còn lại; phân bố mượt gợi ý việc lọc đã đủ. Các lỗi bao gồm khả năng làm mờ biên ở các vùng có độ kết hợp yếu và sai lệch theo hướng ở các đối tượng dạng tuyến. Áp dụng có chiến lược trong phân loại SAR đòi hỏi triệt tiêu nhiễu đốm trong khi duy trì tính toàn vẹn của đặc trưng phân loại.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Nửa độ rộng cường độ được đưa vào quanh giá trị trung tâm (mặc định 10.0)."
              },
              "m_value": {
                "label": "Giá trị M",
                "description": "Số mẫu tối thiểu nằm trong khoảng trước khi chuyển sang lấy trung bình dự phòng (mặc định 5.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "line_detection_filter": {
            "name": "Bộ lọc phát hiện đường",
            "description": "Bộ lọc phát hiện đường là một bộ phát hiện biên chuyên biệt được thiết kế để tăng cường các đối tượng dạng tuyến—đường giao thông, sông, đường dây điện và các đường dạng tuyến địa chất—theo bốn hướng chính (ngang, dọc và hai đường chéo) bằng cách áp dụng các kernel tích chập có hướng được tối ưu hóa cho tính liên kết và liên tục của đường. Bộ lọc này sử dụng các kernel 3×3 nhấn mạnh các cấu trúc dạng tuyến thẳng hàng với mỗi hướng chính trong khi triệt tiêu nhiễu vuông góc và các biến thiên đối tượng ngẫu nhiên. Cách tiếp cận có hướng tách các kết quả phát hiện theo hướng, cho phép các ứng dụng ở bước sau phân biệt cơ sở hạ tầng nằm ngang (đường ống, ranh giới thửa ruộng) với các cấu trúc thẳng đứng (hàng cây, hành lang tiện ích). Các tính năng chính bao gồm phân rã đa hướng tạo ra các kênh độ lớn và hướng riêng biệt, điều chỉnh độ nhạy thích ứng cho các biến thiên về độ rộng và độ tương phản của đường, và hiệu năng vượt trội trên các đối tượng dạng tuyến tinh tế nằm trong địa hình phức tạp. Các trường hợp sử dụng bao gồm lập bản đồ cơ sở hạ tầng (đường giao thông, đường sắt, đường dây điện), trích xuất đối tượng tự nhiên (suối, sống núi, đứt gãy) và khoanh vẽ ranh giới sử dụng đất. Các ứng dụng bao gồm tiền xử lý chuyển đổi vector cho số hóa địa chính, trích xuất mạng lưới giao thông từ ảnh trực giao, lập bản đồ cấu trúc địa chất từ ảnh vệ tinh, và nhận dạng mẫu trong phân tích viễn thám. Diễn giải đầu ra đòi hỏi hiểu rằng mỗi thành phần có hướng làm rõ cường độ đường theo hướng cụ thể đó—hãy xem xét cả bốn đầu ra theo hướng chính để xác định các hướng đối tượng chiếm ưu thế. Giá trị độ lớn cao hơn cho thấy tính liên tục của đường mạnh hơn; giá trị thấp gợi ý nhiễu hoặc các chỗ đứt. Đầu ra vốn thưa, chỉ làm nổi bật các điểm ảnh đại diện cho đối tượng dạng tuyến; các vùng nền vẫn gần bằng không. Đầu ra đa hướng cho phép hậu phân loại trong đó đường giao thông (thường nằm ngang/dọc ở khu vực xây dựng) được phân biệt với các đường dạng tuyến tự nhiên (hướng tùy ý). Kết hợp các thành phần có hướng để tạo bản đồ đường thống nhất hoặc phân tích riêng từng hướng để lập bản đồ cấu trúc có định hướng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "variant": {
                "label": "Biến thể",
                "description": "Biến thể hướng đường: v, h, 45, hoặc 135."
              },
              "abs_values": {
                "label": "Giá trị tuyệt đối",
                "description": "Nếu true, xuất ra các giá trị đáp ứng lấy trị tuyệt đối."
              },
              "clip_tails": {
                "label": "Cắt đuôi",
                "description": "Phần trăm cắt đuôi đối xứng tùy chọn (0-40)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "line_thinning": {
            "name": "Làm mảnh đường",
            "description": "Thu gọn các đối tượng raster nhị phân liên thông thành các đường khung xương rộng một ô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "lidar_ground_point_filter": {
            "name": "Bộ lọc điểm mặt đất LiDAR",
            "description": "Tách địa hình khỏi các điểm không thuộc mặt đất: phân loại/lọc dựa trên độ dốc sử dụng hình học mặt phẳng cục bộ và ngưỡng độ cao. Phân đoạn mặt đất hiệu quả.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính tìm kiếm lân cận (mặc định 2.0)."
              },
              "min_neighbours": {
                "label": "Số lân cận tối thiểu",
                "description": "Số lân cận tối thiểu mục tiêu (mặc định 0)."
              },
              "slope_threshold": {
                "label": "Ngưỡng độ dốc",
                "description": "Ngưỡng độ dốc tính bằng độ (mặc định 45.0, tối đa 88)."
              },
              "height_threshold": {
                "label": "Ngưỡng chiều cao",
                "description": "Khoảng cách thẳng đứng tối thiểu để đánh dấu điểm không thuộc địa hình (mặc định 1.0)."
              },
              "classify": {
                "label": "Phân loại",
                "description": "Nếu true thì phân loại các điểm (mặt đất=2, không thuộc địa hình=1); nếu không thì lọc bỏ các điểm không thuộc địa hình."
              },
              "slope_norm": {
                "label": "Chuẩn hóa độ dốc",
                "description": "Nếu true, áp dụng chuẩn hóa địa hình top-hat trước khi kiểm tra độ dốc (mặc định true)."
              },
              "height_above_ground": {
                "label": "Chiều cao so với mặt đất",
                "description": "Nếu true, xuất giá trị z dưới dạng chiều cao cục bộ so với lân cận thấp hơn gần nhất."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn cho chế độ một đầu vào."
              }
            }
          },
          "majority_filter": {
            "name": "Bộ lọc đa số",
            "description": "Tính giá trị yếu vị (giá trị/lớp xuất hiện nhiều nhất) theo cửa sổ di động cho mỗi điểm ảnh. Bộ lọc phi tuyến bảo toàn ranh giới phân loại và các mẫu chiếm ưu thế. Đặc biệt hữu ích cho ảnh đã phân loại khi đầu ra phải nằm trong tập lớp ban đầu (không giống bộ lọc trung bình vốn tạo ra các giá trị nội suy). Thiết yếu cho làm sạch hình thái các đầu ra phân loại.\n\nLọc đa số là phiên bản dựa trên yếu vị tương đương với lọc trung vị. Đối với dữ liệu phân loại (ảnh đã phân loại, lớp phủ đất), lọc đa số bảo toàn định nghĩa lớp trong khi làm trơn nhiễu. Đối với dữ liệu liên tục, lọc đa số có thể làm rõ các đỉnh cục bộ trong phân bố giá trị. Thường được tiếp nối bằng loại bỏ lớp thiểu số (làm sạch sau phân loại) để loại bỏ các lỗi phân loại \"muối tiêu\".\n\nỨng dụng: (1) Làm trơn sau phân loại (loại bỏ các mảng lớp giả nhỏ), (2) Bản đồ lớp đa số từ nhiều đầu ra phân loại, (3) Làm sạch dữ liệu vector (tách lớp), (4) Triệt tiêu nhiễu trong ảnh đã phân ngưỡng, (5) Làm trơn thuộc tính trong đầu ra phân đoạn. Quy trình điển hình: phân loại→lọc đa số→loại bỏ lớp thiểu số→bản đồ đã làm sạch cuối cùng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "maximum_filter": {
            "name": "Bộ lọc cực đại",
            "description": "Tính giá trị lớn nhất theo cửa sổ di động, làm rõ các đỉnh và sống cục bộ. Là toán tử giãn nở trong xử lý ảnh hình thái. Hữu ích để phát hiện đỉnh, đường sống núi và các đối tượng có biên độ cực đại. Nhạy với một giá trị ngoại lai duy nhất (một giá trị cao trong cửa sổ tạo ra đầu ra cao).\n\nBộ lọc cực đại là toán tử \"giãn nở\" (dilation) hình thái—mở rộng các vùng sáng và thu hẹp các vùng tối. Khi áp dụng lặp lại (giãn nở nhiều lượt), tạo ra các đỉnh được làm trơn và các đối tượng cô lập phát triển lấp đầy vùng lân cận của chúng. Kết hợp với bộ lọc cực tiểu cho phép thực hiện phép đóng (giãn nở rồi co) và phép mở (co rồi giãn nở). Thiết yếu cho phát hiện đối tượng hình thái và phân tích đa thang.\n\nỨng dụng: (1) Giãn nở hình thái để lọc theo kích thước, (2) Phép đóng thông qua giãn nở→co để lấp các lỗ nhỏ, (3) Xác định đỉnh/sống trong địa hình và ảnh, (4) Mức trần cục bộ trong dữ liệu độ sâu/DEM, (5) Phân tích đối tượng đa thang (so sánh giãn nở qua các thang). Quy trình điển hình: cực đại→so sánh với cực tiểu→phép đóng hoặc phép mở tùy thuộc vào kiểu đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "mean_filter": {
            "name": "Bộ lọc trung bình",
            "description": "Tính giá trị trung bình theo cửa sổ di động cho mỗi điểm ảnh. Là phép làm trơn cơ bản giảm nhiễu cục bộ đồng thời làm mờ các chuyển tiếp sắc nét. Đầu ra biểu diễn xu hướng trung tâm cục bộ. Được sử dụng rộng rãi cho tiền xử lý, giảm nhiễu và phân tích đa thang.\n\nLọc trung bình là phép làm trơn thông thấp phổ biến nhất. Rất nhạy với giá trị ngoại lai (các giá trị cực trị có thể làm sai lệch kết quả), khiến bộ lọc trung vị được ưu tiên hơn cho dữ liệu nhiễu. Hiệu quả về mặt tính toán. Kích thước bộ lọc kiểm soát mức độ làm trơn: nhỏ (3×3) bảo toàn chi tiết, lớn (31×31+) tạo ra bề mặt được làm trơn mạnh. Thường được áp dụng lặp hoặc ở nhiều thang cho phân tích đa độ phân giải.\n\nỨng dụng: (1) Giảm nhiễu cơ bản, (2) Tiền xử lý trước phát hiện đối tượng (làm trơn các dương tính giả), (3) Phân tích đa thang (áp dụng ở 3×3, 11×11, 31×31), (4) Làm trơn theo thời gian (kết hợp các cảnh), (5) Cơ sở cho các phép toán thống kê khác. So sánh với trung vị (phi tuyến, bảo toàn biên) để bảo toàn biên tốt hơn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "median_filter": {
            "name": "Bộ lọc trung vị",
            "description": "Tính giá trị trung vị theo cửa sổ di động cho mỗi điểm ảnh, thay thế bằng phân vị thứ 50 của vùng lân cận. Bộ lọc nhiễu vững chắc bảo toàn biên (phi tuyến). Đặc biệt hiệu quả trong loại bỏ nhiễu xung (muối tiêu) trong khi duy trì ranh giới sắc nét. Giá trị đầu ra là các giá trị điểm ảnh thực tế từ vùng lân cận (không nội suy).\n\nLọc trung vị là phi tuyến—ưu điểm then chốt so với lọc trung bình trong giảm nhiễu vì nó không tạo ra giá trị mới hay làm mờ biên. Kích thước bộ lọc lớn làm trơn mạnh trong khi vẫn bảo toàn các chuyển tiếp sắc nét. Được sử dụng rộng rãi trong viễn thám, ảnh y tế và xử lý ảnh SAR. Chi phí tính toán tăng theo kích thước bộ lọc nhưng nhìn chung nhanh hơn các bộ lọc song phương hoặc dẫn hướng.\n\nỨng dụng: (1) Giảm nhiễu đốm ảnh SAR (đặc biệt hiệu quả cho độ kết hợp pha), (2) Loại bỏ nhiễu muối tiêu, (3) Tiền xử lý trước phát hiện biên (giảm biên giả), (4) Bảo toàn ranh giới trong tiền xử lý phân loại, (5) Hiệu chỉnh bức xạ cho các giá trị ngoại lai. Quy trình điển hình: áp dụng trung vị→đầu ra tăng cường biên→phân ngưỡng để trích xuất đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "sig_digits": {
                "label": "Số chữ số có nghĩa",
                "description": "Số chữ số có nghĩa dùng cho lọc theo thứ hạng đã lượng tử hóa (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "minimum_filter": {
            "name": "Bộ lọc cực tiểu",
            "description": "Tính giá trị nhỏ nhất theo cửa sổ di động, làm rõ các điểm thấp và lòng máng cục bộ. Là toán tử co trong xử lý ảnh hình thái. Hữu ích để phát hiện đáy thung lũng, vùng trũng và các đối tượng có độ cao cực tiểu. Nhạy với một giá trị ngoại lai duy nhất (một giá trị thấp trong cửa sổ tạo ra đầu ra thấp).\n\nBộ lọc cực tiểu là toán tử \"co\" (erosion) hình thái—thu hẹp các vùng sáng và mở rộng các vùng tối. Khi áp dụng lặp lại (co nhiều lượt), tạo ra các thung lũng được làm trơn và các đối tượng cô lập biến mất. Kết hợp với bộ lọc cực đại (giãn nở) cho phép thực hiện phép mở (co rồi giãn nở) và phép đóng (giãn nở rồi co). Thường được sử dụng trong phân rã đa thang: so sánh cực tiểu ở 3×3, 11×11, 31×31 để xác định thang của đối tượng.\n\nỨng dụng: (1) Co hình thái để lọc theo kích thước, (2) Phép mở thông qua co→giãn nở để loại bỏ các đối tượng nhiễu nhỏ, (3) Xác định vùng trũng/thung lũng trong địa hình, (4) Mức đáy cục bộ trong dữ liệu độ sâu/DEM, (5) Phân tích đối tượng đa thang (so sánh co qua các thang). Quy trình điển hình: cực tiểu→so sánh với cực đại→phép mở hoặc phép đóng tùy thuộc vào kiểu đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "non_local_means_filter": {
            "name": "Bộ lọc trung bình phi cục bộ",
            "description": "Lọc trung bình phi cục bộ (non-local means) thực hiện khử nhiễu mạnh mẽ bằng cách lấy trung bình các mảng tương tự được xác định trên toàn bộ ảnh thay vì các điểm ảnh lân cận, khai thác tính tự tương đồng của ảnh để triệt tiêu nhiễu trong khi bảo toàn cấu trúc. Việc triển khai xác định các mảng tương tự với mỗi mảng mục tiêu thông qua khoảng cách Euclid trong không gian mảng, đánh trọng số hàm mũ cho các mảng tương tự theo mức độ tương đồng, và lấy trung bình các mảng có trọng số. Thuật toán tính: Fᵢ = (1/Z) Σⱼ exp(-d(Pᵢ, Pⱼ)²/h²) · Iⱼ, trong đó d đo khoảng cách mảng, h kiểm soát băng thông, Z là hệ số chuẩn hóa. Các tính năng chính bao gồm khử nhiễu vượt trội thông qua tìm kiếm tương đồng thay vì chỉ dựa vào sự gần nhau về không gian, hiệu quả trên các kết cấu phức tạp và chi tiết mịn, khả năng áp dụng cho mọi kiểu dữ liệu, và hiệu năng đã được chứng minh trên ảnh y tế, vệ tinh và nhiếp ảnh. Lọc trung bình phi cục bộ đặc biệt hiệu quả trong phục hồi ảnh vệ tinh chi tiết bảo toàn kết cấu và cấu trúc mịn, lấy trung bình chồng ảnh đa thời gian để chuẩn bị phát hiện biến động, khử nhiễu dữ liệu khảo sát rất nhiễu (siêu âm, siêu phổ), và tăng cường ảnh khảo sát khảo cổ/hàng không. Diễn giải đầu ra đòi hỏi hiểu rằng các vùng tương tự trên khắp ảnh đều đóng góp vào mỗi điểm ảnh đầu ra; các vùng không tương tự cục bộ đóng góp không đáng kể. Kích thước mảng kiểm soát việc bảo toàn đối tượng (mảng lớn hơn = kết quả mượt hơn, mảng mịn hơn = nhiều chi tiết hơn); băng thông h kiểm soát trọng số tương đồng (h lớn hơn = bao gồm nhiều mảng hơn, h nhỏ hơn = yêu cầu tương đồng nghiêm ngặt hơn). Dải đầu ra khớp với đầu vào; thống kê dịch chuyển về phía trung bình vùng trong khi các cấu trúc mịn được giữ lại. Chi phí tính toán tăng theo kích thước ảnh và bán kính mảng; việc thực thi thông thường đòi hỏi thời gian xử lý đáng kể cho ảnh lớn. Theo dõi tiến trình lọc thông qua PSNR hoặc kiểm tra trực quan. Các lỗi thường gặp bao gồm làm trơn quá mức các kết cấu mịn (tăng kích thước mảng một cách thận trọng) và làm trơn không đủ ở các vùng nhiễu cao (tăng băng thông). Áp dụng có chiến lược trong các quy trình đòi hỏi giảm nhiễu tối đa trong khi bảo toàn các đối tượng ở thang mịn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính cửa sổ tìm kiếm tính bằng điểm ảnh (mặc định 5)."
              },
              "patch_radius": {
                "label": "Bán kính mảnh",
                "description": "Bán kính mảng tính bằng điểm ảnh (mặc định 1)."
              },
              "h": {
                "label": "H",
                "description": "Tham số cường độ lọc (mặc định 10.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "opening": {
            "name": "Phép mở",
            "description": "Thực hiện phép mở hình thái sử dụng phần tử cấu trúc hình chữ nhật.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận lẻ (mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận lẻ (mặc định bằng filter_size_x)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "olympic_filter": {
            "name": "Bộ lọc Olympic",
            "description": "Bộ lọc Olympic thực hiện làm trơn dựa trên thứ hạng bằng cách loại bỏ một giá trị cao nhất và một giá trị thấp nhất khỏi vùng lân cận của mỗi điểm ảnh, sau đó lấy trung bình các điểm ảnh còn lại. Cách tiếp cận lọc vững chắc này loại bỏ các giá trị ngoại lai cực trị (có khả năng là nhiễu hoặc giá trị giả) trong khi vẫn bảo toàn xu hướng trung tâm. Công thức toán học: F = (1/(N-2)) Σ(I_sorted[2:N-1]), trong đó các giá trị lân cận đã sắp xếp loại trừ giá trị cao nhất và thấp nhất. Việc triển khai đòi hỏi sắp xếp các vùng lân cận nhỏ (hiệu quả về mặt tính toán) nhưng mang lại khả năng giảm nhiễu hiệu quả. Các tính năng chính bao gồm chiến lược loại bỏ giá trị ngoại lai đơn giản, giảm nhiễu muối tiêu hiệu quả, lọc có nhận biết biên (biên thường xuất hiện dưới dạng cực trị), và khả năng áp dụng cho mọi kiểu dữ liệu. Lọc Olympic đặc biệt hiệu quả trong tiền xử lý ảnh vệ tinh quang học (loại bỏ các điểm ảnh mây sáng và bóng tối cô lập), làm trơn DEM giảm lỗi nhiễu khảo sát, khử nhiễu ảnh nhiệt (loại bỏ giá trị ngoại lai của cảm biến), và tiền xử lý ảnh radar. Diễn giải đầu ra cho thấy các phân bố nhiễu đối xứng (số lượng giá trị ngoại lai cao/thấp bằng nhau) được lọc đối xứng; các phân bố lệch (nhiều giá trị cao hoặc thấp hơn) tạo ra lọc có hướng. Kích thước vùng lân cận kiểm soát mức độ làm trơn: cửa sổ 3×3 loại bỏ 2 cực trị từ 9 điểm ảnh (lọc nhẹ); cửa sổ lớn hơn lọc mạnh hơn. Giá trị đầu ra vẫn nằm trong dải đầu vào (đầu ra là trung bình của các giá trị lân cận thực tế). Thống kê cho thấy mức giảm phương sai có kiểm soát nhắm cụ thể vào giá trị ngoại lai. Ảnh hiệu (gốc - đã lọc) làm nổi bật các giá trị ngoại lai đã bị loại bỏ; các vùng giá trị cao tập trung cho thấy việc cô lập nhiễu hiệu quả. Các lỗi thường gặp bao gồm làm trơn không đủ nếu tần suất giá trị ngoại lai thấp và làm mờ biên nếu các điểm ảnh biên luôn được xếp hạng là cực trị. Nhiều lần lặp cho phép làm trơn lũy tiến: một lượt cho giảm nhiễu; các lượt lặp lại tăng cường làm trơn. Áp dụng trong các quy trình giảm nhiễu nhanh đòi hỏi lọc đơn giản, dễ diễn giải, đặc biệt hiệu quả cho nhiễu muối tiêu trong các ảnh ghép đa cảm biến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "percentile_filter": {
            "name": "Bộ lọc phân vị",
            "description": "Tính thứ hạng phân vị cục bộ của độ cao/giá trị ô trung tâm trong cửa sổ di động (0-100%). Tương tự Elevation Percentile nhưng dành cho dữ liệu raster chung. Đo vị trí tương đối: output=0 cho thấy cực tiểu cục bộ, output=100 cho thấy cực đại cục bộ, output=50 cho thấy trung vị. Làm rõ vị trí cục bộ trong phân bố không phụ thuộc vào giá trị tuyệt đối.\n\nLọc phân vị cho phép phân tích theo vị trí tương đối. Hữu ích cho phân tích phân lớp: các ô có thứ hạng phân vị cao (>80) ở mọi kênh cho thấy các đối tượng \"sáng\"; phân vị thấp (<20) cho thấy các đối tượng \"tối\". Đặc biệt hữu ích cho tiền xử lý phân loại—phân tách theo vị trí địa hình/kết cấu thay vì chỉ theo độ lớn. Thường được kết hợp với các bộ lọc thống kê để đặc trưng hóa đa chỉ số.\n\nỨng dụng: (1) Phân loại độ sáng/tối tương đối, (2) Đặc trưng hóa kết cấu (phương sai phân vị cao = gồ ghề, phương sai thấp = mượt), (3) Tăng cường độ tương phản cục bộ (chuẩn hóa dựa trên phân vị), (4) Nhận dạng dạng địa hình tương tự phân vị độ cao, (5) Phân tích kết cấu đa kênh (áp dụng phân vị cho từng kênh, so sánh các mẫu).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "sig_digits": {
                "label": "Số chữ số có nghĩa",
                "description": "Số chữ số có nghĩa dùng cho lọc theo thứ hạng đã lượng tử hóa (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "range_filter": {
            "name": "Bộ lọc khoảng biến thiên",
            "description": "Tính khoảng biến thiên (lớn nhất - nhỏ nhất) theo cửa sổ di động, làm rõ độ phân tán giá trị cục bộ không phụ thuộc vào mức trung bình. Là thước đo tính không đồng nhất đơn giản: khoảng biến thiên cao = giá trị đa dạng, khoảng biến thiên thấp = giá trị đồng đều. Đơn giản hơn độ lệch chuẩn nhưng cung cấp thông tin tương đương cho nhiều ứng dụng, và vững chắc hơn trước hình dạng phân bố.\n\nKhoảng biến thiên hiệu quả về mặt tính toán (chỉ cần hai phép so sánh). Đặc biệt hữu ích để phát hiện các chuyển tiếp/ranh giới nơi các đột biến khoảng biến thiên cho thấy vùng tương phản. Ít nhạy với hình dạng phân bố hơn độ lệch chuẩn (độ lệch chuẩn nhấn mạnh giá trị ngoại lai, khoảng biến thiên chỉ sử dụng các cực trị). Khoảng biến thiên chuẩn hóa (range/mean) cho phép so sánh giữa các kênh, giống như hệ số biến thiên cho phép so sánh giữa các thang.\n\nỨng dụng: (1) Lập bản đồ kết cấu/độ tương phản (dễ diễn giải: khoảng biến thiên cao = gồ ghề/tương phản), (2) Phát hiện ranh giới thông qua các đỉnh khoảng biến thiên, (3) Phương án thay thế hiệu quả về tính toán cho độ lệch chuẩn, (4) Kiểm soát chất lượng (nền đồng đều có khoảng biến thiên thấp, khu vực có đối tượng có khoảng biến thiên cao), (5) Độ gồ ghề/biến động trong dữ liệu chung. Quy trình điển hình: tính khoảng biến thiên→phân ngưỡng để xác định vùng chuyển tiếp→vector hóa các ranh giới có khoảng biến thiên cao.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "remove_spurs": {
            "name": "Loại bỏ nhánh thừa",
            "description": "Loại bỏ các lỗi nhánh cụt ngắn khỏi các đối tượng raster nhị phân bằng cách cắt tỉa lặp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "max_iterations": {
                "label": "Số lần lặp tối đa",
                "description": "Số lần lặp tỉa tối đa (mặc định 10)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "savitzky_golay_2d_filter": {
            "name": "Bộ lọc Savitzky-Golay 2D",
            "description": "Thực hiện làm trơn Savitzky-Golay 2D—bộ lọc dựa trên khớp đa thức bảo toàn các đặc điểm đa thức cục bộ. Khớp đa thức cục bộ với vùng lân cận, thay thế giá trị trung tâm bằng giá trị đã khớp. Bảo toàn đỉnh/thung lũng tốt hơn Gauss. Hữu ích cho dữ liệu nhiễu khi việc bảo toàn đối tượng là quan trọng. Ít làm mờ hơn Gauss với đa thức bậc thấp; mức làm trơn tăng theo bậc đa thức. Lọc Savitzky-Golay khớp đa thức cục bộ (thường là bậc hai/bậc ba) bằng phương pháp bình phương tối thiểu với vùng lân cận. Giá trị trung tâm được thay bằng giá trị đa thức. Khác với trung vị/Gauss—bảo toàn các đối tượng xuất hiện dưới dạng cấu trúc đa thức (đỉnh, thung lũng, sống). Tính toán đơn giản nhưng chậm hơn tích chập thông thường. Bậc đa thức kiểm soát sự cân bằng giữa làm trơn và bảo toàn. Ứng dụng: (1) Làm trơn dữ liệu nhiễu trong khi bảo toàn cấu trúc đỉnh, (2) Xử lý lưới độ cao (bảo toàn địa hình sống núi/thung lũng), (3) Làm trơn dữ liệu phổ (bảo toàn các đặc trưng hấp thụ), (4) Tiền xử lý bảo toàn đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "window_size": {
                "label": "Kích thước cửa sổ",
                "description": "Kích thước cửa sổ lẻ (mặc định 5). Hiện hỗ trợ 5 cho đa thức bậc 2."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "scharr_filter": {
            "name": "Bộ lọc Scharr",
            "description": "Bộ lọc Scharr là một toán tử phát hiện biên cải tiến so với bộ lọc Sobel bằng cách sử dụng các hệ số kernel tối ưu được thiết kế riêng để giảm sai lệch theo hướng và mang lại tính bất biến với phép quay vượt trội. Toán tử Scharr sử dụng các kernel tích chập 3×3 với hệ số nguyên (3, 10, 3) được tối ưu hóa thực nghiệm cho các hướng biên 0°, 45°, 90° và 135°, cho ước lượng gradient chính xác hơn so với các bộ lọc Sobel truyền thống, đặc biệt đối với các đối tượng tròn và biên bị xoay. Bộ lọc tính đồng thời cả gradient ngang và độ lớn gradient, cho phép định vị biên vững chắc. Các ưu điểm chính bao gồm độ chính xác vượt trội cho gradient có hướng, giảm sai lệch theo phép quay so với Sobel, và tính toán kernel 3×3 hiệu quả đòi hỏi chi phí bộ nhớ tối thiểu. Đầu ra bao gồm cả độ lớn và các thành phần có hướng tùy chọn. Bộ lọc Scharr đặc biệt hiệu quả trong các quy trình trích xuất đối tượng, phát hiện ranh giới và đảm bảo chất lượng đòi hỏi độ chính xác theo hướng cao. Các trường hợp sử dụng bao gồm trích xuất dấu chân công trình từ ảnh hàng không, phát hiện mạng lưới đường giao thông, khoanh vẽ ranh giới mặt nước với độ biến dạng tối thiểu, và xác định các đường dạng tuyến địa chất trong dữ liệu vệ tinh. Bộ lọc hoạt động đặc biệt tốt trong lập bản đồ đô thị, phát hiện ranh giới nông nghiệp và các ứng dụng điều hướng tự động. Diễn giải đầu ra đòi hỏi hiểu rằng giá trị độ lớn biểu thị cường độ biên—giá trị cao hơn cho thấy chuyển tiếp sắc nét hơn giữa các lớp phổ khác biệt. Các thành phần có hướng làm rõ hướng biên chiếm ưu thế (ngang, chéo hoặc dọc), hữu ích cho phân tích đường dạng tuyến. Đối với raster đa kênh, hãy áp dụng riêng cho từng kênh hoặc sử dụng một chỉ số đã tính. Giá trị nền xuất hiện tối trong đầu ra; biên mạnh xuất hiện sáng. So sánh RMSE với biên tham chiếu giúp kiểm định hiệu năng bộ lọc. Điều chỉnh tỷ lệ đầu ra về 0-255 để trực quan hóa tiêu chuẩn hoặc giữ dạng số thực cho phân tích định lượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "clip_tails": {
                "label": "Cắt đuôi",
                "description": "Phần trăm cắt đuôi đối xứng tùy chọn (0-40)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "standard_deviation_filter": {
            "name": "Bộ lọc độ lệch chuẩn",
            "description": "Tính độ lệch chuẩn theo cửa sổ di động, đo biến thiên/độ phân tán giá trị cục bộ. Độ lệch chuẩn cao = giá trị đa dạng (gồ ghề/không đồng nhất), độ lệch chuẩn thấp = giá trị đồng đều (mượt/đồng nhất). Làm rõ các mẫu kết cấu, độ gồ ghề và biến động. Rất quan trọng cho định lượng độ bất định và đánh giá chất lượng.\n\nĐộ lệch chuẩn vững chắc hơn khoảng biến thiên trong việc đặc trưng hóa biến thiên cục bộ (không bị sai lệch bởi một giá trị ngoại lai duy nhất). Cho phép phân loại khu vực theo kết cấu: sườn dốc (độ lệch chuẩn cao), sườn thoải (độ lệch chuẩn thấp); rừng (độ lệch chuẩn cao), đồng cỏ (độ lệch chuẩn thấp). Thường được chuẩn hóa (hệ số biến thiên = stdev/mean) để cho phép so sánh giữa các dữ liệu có dải giá trị khác nhau. Có thể được tính từ biểu đồ tần suất (phương sai = mean_of_squares - square_of_mean).\n\nỨng dụng: (1) Lập bản đồ kết cấu (phân tích độ gồ ghề/tính không đồng nhất), (2) Định lượng độ bất định trong dữ liệu nhiễu, (3) Đánh giá chất lượng (nền đồng đều = độ lệch chuẩn thấp, khu vực nhiều đối tượng = cao), (4) Độ tin cậy phân loại (độ lệch chuẩn cao = lớp hỗn hợp/không chắc chắn), (5) Tính không đồng nhất đa kênh (xếp chồng độ lệch chuẩn từ mỗi kênh). Quy trình điển hình: tính độ lệch chuẩn ở nhiều thang→so sánh sự thay đổi mẫu qua các thang→xác định các thang đặc trưng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "thicken_raster_line": {
            "name": "Làm dày đường raster",
            "description": "Làm dày các đoạn đường raster chéo để ngăn rò rỉ theo đường chéo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "tophat_transform": {
            "name": "Biến đổi Top-hat",
            "description": "Thực hiện phép biến đổi top-hat hình thái trắng hoặc đen.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận lẻ (mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận lẻ (mặc định bằng filter_size_x)."
              },
              "variant": {
                "label": "Biến thể",
                "description": "Biến thể top-hat: white (mặc định) hoặc black."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "total_filter": {
            "name": "Bộ lọc tổng",
            "description": "Tính tổng theo cửa sổ di động của các giá trị điểm ảnh trong vùng lân cận. Tích hợp cường độ tín hiệu cục bộ. Ứng dụng phụ thuộc vào ngữ nghĩa dữ liệu: đối với số đếm/mật độ, tổng làm rõ các mẫu mật độ cục bộ; đối với lượng mưa, tổng làm rõ mức tích lũy ở thang lưu vực; đối với phản xạ, tổng tỷ lệ với kích thước mục tiêu cục bộ.\n\nLọc tổng có các cách diễn giải khác nhau theo lĩnh vực. Trong dữ liệu số đếm/dân số, tổng làm rõ sự phân cụm và các điểm nóng. Trong dữ liệu độ cao, tổng hiếm khi được sử dụng (tổng không có ý nghĩa địa mạo). Trong phân tích phổ, tổng có thể làm rõ cường độ tín hiệu đa kênh. Thường được sử dụng như một bước trung gian (ví dụ: chia cho số ô trong vùng lân cận để tính trung bình, hoặc so sánh với tổng của các lân cận để phát hiện tính không đồng nhất cục bộ).\n\nỨng dụng: (1) Phát hiện điểm nóng trong dữ liệu số đếm (tổng cao = cụm), (2) Các mô hình tích lũy theo bồn/lưu vực, (3) Tích hợp các phép đo phân tán, (4) Tính toán trung gian (total/N = mean), (5) Tổng hợp cường độ tín hiệu trong ảnh ghép đa cảm biến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao cửa sổ tính bằng điểm ảnh (số nguyên lẻ, mặc định = filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "unsharp_masking": {
            "name": "Mặt nạ làm nét",
            "description": "Mặt nạ làm nét (unsharp masking) thực hiện làm sắc nét ảnh bằng cách trừ một phiên bản đã làm trơn (thông thấp) khỏi ảnh gốc, tăng cường biên và các chi tiết mịn. Phép biến đổi toán học là I_sharp = I_original + w·(I_original - I_smooth), trong đó w là trọng số làm sắc nét kiểm soát cường độ tăng cường. Quá trình này tách riêng các thành phần tần số cao và khuếch đại chúng, qua đó phân tách hiệu quả chi tiết khỏi biến thiên tông màu rộng. Các tính năng chính bao gồm kiểm soát tham số linh hoạt (bán kính làm mờ và trọng số cho phép kiểm soát chi tiết), hiệu quả tính toán nhờ tái sử dụng làm trơn Gauss, tăng cường dễ diễn giải (weight=0 cho ảnh gốc; weight=1 cho thông cao thực sự; weight>1 cho làm sắc nét mạnh), và hiệu quả trên dữ liệu đa phổ. Mặt nạ làm nét đặc biệt hiệu quả trong chuẩn bị ảnh vệ tinh cho giải đoán thủ công (tăng cường địa hình, thực vật, cơ sở hạ tầng tinh tế), tăng cường sản phẩm dẫn xuất từ LiDAR (làm sắc nét DEM, chỉ số thực vật), cải thiện chất lượng ảnh trực giao để đối tượng dễ nhận thấy, và tăng cường ảnh khảo cổ/khảo sát. Diễn giải đầu ra đòi hỏi hiểu rằng các giá trị được làm sắc nét tập trung ở biên; các vùng đồng nhất không thay đổi. Tham số trọng số kiểm soát mức độ tăng cường: w=0.5-1.0 cho tăng cường nhẹ; w=1.0-2.0 cho làm sắc nét vừa phải; w>2.0 tạo ra kết quả mạnh, có thể nhiều lỗi. Bán kính làm mờ kiểm soát thang đối tượng: bán kính nhỏ hơn (3-5 điểm ảnh) tăng cường kết cấu mịn; bán kính lớn hơn (10-20 điểm ảnh) tăng cường các đối tượng vừa phải. Giá trị đầu ra có thể vượt quá dải đầu vào; thường cần cắt giá trị. Các lỗi bao gồm quầng sáng quanh biên mạnh (trọng số hoặc bán kính lớn hơn = rõ rệt hơn), nhiễu bị khuếch đại nếu ảnh nguồn nhiễu, và khả năng xuất hiện màu giả khi làm sắc nét đa phổ. Kiểm tra mức tăng cường thông qua ảnh hiệu. Áp dụng có chọn lọc trong các quy trình trực quan hóa; tránh sử dụng trước các phân tích tự động nhạy với thay đổi dải đầu ra.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma Gauss dùng bởi mặt nạ làm mờ (0.5-20.0, mặc định 0.75)."
              },
              "amount": {
                "label": "Lượng",
                "description": "Hệ số nhân mức tăng nét áp dụng cho phần dư (mặc định 100.0)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Phần dư tuyệt đối tối thiểu để tăng nét (mặc định 0.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "user_defined_weights_filter": {
            "name": "Bộ lọc trọng số tùy chỉnh",
            "description": "Bộ lọc trọng số tùy chỉnh mang lại tính linh hoạt tối đa cho phân tích tích chập tùy chỉnh bằng cách chấp nhận các hệ số trọng số tùy ý cho các điểm ảnh lân cận, cho phép triển khai các toán tử chuyên biệt, kernel đặc thù theo lĩnh vực và các thuật toán cấp nghiên cứu mà không cần sửa đổi công cụ hay phần mềm chuyên dụng. Người dùng chỉ định kích thước kernel (thường là 3×3 hoặc 5×5), gán trọng số số thực cho mỗi vị trí, và tùy chọn chỉ định phương pháp xử lý biên (phản chiếu, bao vòng, lấp hằng số). Bộ lọc này áp dụng kernel tùy chỉnh trên toàn bộ raster thông qua toán học tích chập tiêu chuẩn: mỗi điểm ảnh đầu ra bằng tổng các lân cận có trọng số, cho phép thực hiện cả các bộ lọc xử lý ảnh truyền thống lẫn các kernel phân tích tùy chỉnh. Các tính năng chính bao gồm khả năng tùy chỉnh hoàn toàn cho các ứng dụng nghiên cứu, hỗ trợ cả thao tác tăng cường và phân tích, tương thích với kernel đã chuẩn hóa và chưa chuẩn hóa, và bảo toàn độ chính xác số thực trong suốt quá trình tính toán. Các trường hợp sử dụng bao gồm lọc không gian nâng cao cho các chỉ số phổ chuyên biệt, triển khai các toán tử thử nghiệm để kiểm định thuật toán, kernel phân tích kết cấu tùy chỉnh, tổng hợp lân cận có trọng số cho phân tích đa tiêu chí, và áp dụng kernel chuẩn hóa trên các tập dữ liệu đa dạng. Các ứng dụng bao gồm tạo mẫu thử nghiệm trong nghiên cứu học thuật, đánh giá thuật toán trong công nghiệp, tùy chỉnh theo khu vực cho các pipeline xử lý, và các nghiên cứu so sánh hiệu năng. Diễn giải đầu ra hoàn toàn phụ thuộc vào các hệ số do người dùng xác định; các kernel khác nhau tạo ra kết quả khác nhau về cơ bản. Kernel đã chuẩn hóa (tổng trọng số bằng 1.0) bảo toàn dải giá trị, hữu ích cho làm trơn; kernel chưa chuẩn hóa (thường có tổng bằng không) nhấn mạnh sự khác biệt, hữu ích cho phát hiện biên/đạo hàm. Người dùng phải kiểm tra các thuộc tính kernel—dấu, độ lớn và tổng của hệ số—trước khi áp dụng trong sản xuất. Tài liệu hóa đặc tả kernel là thiết yếu cho các quy trình có thể tái lập. Dải giá trị đầu ra phụ thuộc vào thiết kế kernel; tài liệu nên chỉ rõ các đặc tính đầu ra dự kiến và yêu cầu điều chỉnh tỷ lệ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "weights": {
                "label": "Trọng số",
                "description": "Trọng số kernel 2D dưới dạng mảng lồng nhau."
              },
              "kernel_center": {
                "label": "Tâm kernel",
                "description": "Chế độ tâm kernel: center, upper-left, upper-right, lower-left, lower-right."
              },
              "normalize_weights": {
                "label": "Chuẩn hóa trọng số",
                "description": "Nếu true, chuẩn hóa theo tổng cục bộ của các trọng số đang hoạt động."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "wiener_filter": {
            "name": "Bộ lọc Wiener",
            "description": "Bộ lọc Wiener thực hiện giảm nhiễu thích ứng bằng cách cực tiểu hóa sai số bình phương trung bình giữa đầu ra đã lọc và tín hiệu thực, với giả định đã biết các thuộc tính thống kê của tín hiệu và nhiễu. Việc triển khai ước lượng phương sai tín hiệu và nhiễu cục bộ trong các cửa sổ di động, tính các hệ số lọc cân bằng giữa triệt tiêu nhiễu và bảo toàn chi tiết: F = μ + (σ² - σₙ²)/σ² · (I - μ), trong đó μ là trung bình cục bộ, σ² là phương sai tín hiệu, σₙ² là phương sai nhiễu. Sự thích ứng dựa trên dữ liệu này đảm bảo cường độ lọc đáp ứng theo đặc tính ảnh cục bộ. Các tính năng chính bao gồm tự động thích ứng với thống kê cục bộ (vùng phẳng được làm trơn mạnh; vùng nhiều chi tiết được bảo toàn cấu trúc), hiệu quả đã được chứng minh trên ảnh quang học và SAR, tham số dễ diễn giải dựa trên giả định mô hình nhiễu, và tính khả thi về mặt tính toán nhờ các phép xấp xỉ tách được. Lọc Wiener đặc biệt hiệu quả trong tiền xử lý ảnh vệ tinh khi nhiễu thay đổi theo không gian, giảm nhiễu đốm SAR trong khi bảo toàn mục tiêu điểm, dữ liệu đa phổ đã khử đốm cho lập bản đồ thực vật, và khử nhiễu khi hợp nhất radar-quang học. Diễn giải đầu ra cho thấy các vùng có phương sai cao (nhiều chi tiết) được lọc tối thiểu, trong khi các vùng có phương sai thấp (nhiễu) được lọc mạnh. Việc ước lượng phương sai nhiễu ảnh hưởng đến đầu ra: phương sai nhiễu bị ước lượng thấp dẫn đến làm trơn không đủ; phương sai bị ước lượng cao gây làm trơn quá mức và mất chi tiết. Dải đầu ra tiệm cận dải đầu vào; xem xét ảnh hiệu (gốc - đã lọc) để kiểm tra mức giảm nhiễu. Tỷ số tín hiệu đỉnh trên nhiễu (PSNR) và Chỉ số tương đồng cấu trúc (SSIM) định lượng hiệu quả lọc. Ngưỡng phương sai cục bộ cho biết tác động của xử lý: các vùng có tỷ số phương sai phát hiện được > 5 được lọc đáng kể; tỷ số < 1 được lọc tối thiểu. Các sai lầm phổ biến bao gồm ước lượng phương sai nhiễu không chính xác (hãy phân tích khung tối hoặc vùng đồng nhất để ước lượng) và việc chọn kích thước cửa sổ ảnh hưởng đến khả năng định vị. Áp dụng trước phân loại hoặc trích xuất đối tượng để giảm phân loại sai do nhiễu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính cửa sổ cục bộ Wiener tính bằng điểm ảnh (mặc định 2)."
              },
              "noise_variance": {
                "label": "Phương sai nhiễu",
                "description": "Phương sai nhiễu cộng tùy chọn. Nếu bỏ qua, sẽ được ước lượng từ bản đồ phương sai cục bộ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "cloude_pottier_decomposition": {
            "name": "Phân tách Cloude-Pottier",
            "description": "Phân rã Cloude-Pottier chéo hóa ma trận kết hợp từ dữ liệu SAR phân cực bốn kênh, trích xuất các trị riêng và vector riêng đặc trưng cho các cơ chế tán xạ. Entropy, độ dị hướng và góc alpha trung bình được tính từ các vector riêng lần lượt đặc trưng cho mức độ hỗn loạn tán xạ, sự chiếm ưu thế của cơ chế và kiểu tán xạ. Không gian tham số H-alpha cho phép phân loại cơ chế tán xạ vật lý độc lập với biến thiên biên độ, khai thác thông tin pha phân cực. Tính năng chính: Phân rã SAR phân cực bốn kênh; khai thác thông tin pha; các tham số tán xạ có ý nghĩa vật lý; tách biệt các cơ chế tán xạ; chống chịu tốt với nhiễu đốm biên độ; cho phép phân loại và diễn giải mục tiêu. Trường hợp sử dụng: Nhận dạng mục tiêu SAR; ước lượng sinh khối rừng; đặc trưng hóa đất ngập nước; phát hiện tàu/phương tiện; phân loại lớp phủ đất; giải đoán dữ liệu SAR phân cực. Diễn giải đầu ra: Đầu ra bao gồm entropy (mức độ hỗn loạn; 0=tán xạ có trật tự, 1=ngẫu nhiên), độ dị hướng (sự chiếm ưu thế của cơ chế 0-1) và góc alpha (kiểu tán xạ: ~45°=lưỡng cực, ~30°=bề mặt, ~60°=khối). Biểu đồ phân tán H-alpha làm rõ các mẫu phân cụm cho biết kiểu tán xạ. Tán xạ nảy kép (đô thị) có alpha cao; tán xạ bề mặt (nước) có alpha thấp; tán xạ khối (rừng) có giá trị trung gian.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các raster ma trận: diag3 [m11,m22,m33], full3x3 dạng nén [m11,m22,m33,m12,m13,m23], hoặc đầy đủ 9 raster theo thứ tự hàng."
              },
              "matrix_format": {
                "label": "Định dạng ma trận",
                "description": "Định dạng ma trận đầu vào: diag3 (mặc định với 3 raster) hoặc full3x3."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster 3 kênh đầu ra tùy chọn [H, A, alpha_deg]."
              }
            }
          },
          "enhanced_lee_filter": {
            "name": "Bộ lọc Lee tăng cường",
            "description": "Bộ lọc Lee cải tiến (Enhanced Lee) kết hợp mô hình nhân của Lee với ước lượng phương sai tinh chỉnh và xử lý đa thang, đạt được khả năng giảm nhiễu đốm vượt trội trong khi bảo toàn chi tiết mịn và biên trong ảnh SAR. Việc triển khai sử dụng thống kê cục bộ được tính qua các cửa sổ có kích thước thích ứng, tích hợp phát hiện biên dựa trên Laplacian, và áp dụng các tham số lọc thay đổi theo không gian. Công thức cải tiến áp dụng: F = μ + w·(I - μ) trong đó w thích ứng theo khoảng cách đến biên: w→0 gần biên (lọc tối thiểu), w→1 trong vùng đồng nhất (lọc mạnh). Các tính năng chính bao gồm xử lý thích ứng theo biên (bảo toàn ranh giới), thích ứng tham số đa thang, bảo toàn mục tiêu tốt hơn so với Lee tiêu chuẩn, và hiệu quả trên SAR nhiễu cao. Lọc Lee cải tiến đặc biệt hiệu quả trong các cảnh SAR phức tạp có nhiều đối tượng, các ứng dụng lập bản đồ ngập lụt nơi định vị biên là quan trọng, phát hiện công trình từ SAR đô thị, và phân tích biến động đa thời gian. Diễn giải đầu ra làm rõ việc bảo toàn biên thông qua giảm lọc gần các chuyển tiếp: các điểm ảnh ranh giới giữ lại phương sai lớn hơn so với các điểm ảnh ở xa. Sự thích ứng đa thang thể hiện rõ qua phân tích biểu đồ tần suất cho thấy các đỉnh rõ rệt tương ứng với các lớp trong cảnh. Dải đầu ra khớp với đầu vào; so sánh với Lee tiêu chuẩn cho thấy biên ít bị mờ hơn và mục tiêu vẫn sắc nét. Chất lượng phát hiện biên ảnh hưởng trực tiếp đến đầu ra: biên mạnh cho phép bảo toàn ranh giới tốt; biên yếu có thể gây làm trơn quá mức. Thống kê cho thấy mức giảm phương sai có kiểm soát, cân bằng giữa triệt tiêu nhiễu và bảo toàn chi tiết. Các lỗi thường gặp bao gồm khả năng xuất hiện hiện tượng khối nếu các chuyển tiếp đa thang trở nên rõ rệt và bảo toàn quá mức nếu phát hiện biên quá mạnh. Theo dõi chất lượng bản đồ biên để kiểm tra hành vi lọc. Áp dụng trong các pipeline phân tích SAR toàn diện nơi nhiều đối tượng phải được bảo toàn và biên phải giữ được độ sắc nét, đặc biệt quan trọng cho tiền xử lý học máy đòi hỏi dữ liệu huấn luyện có ranh giới đối tượng rõ ràng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "enl": {
                "label": "ENL",
                "description": "Tham số số lần quan sát tương đương cho trọng số theo tỉ số sigma (mặc định 4.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "freeman_durden_decomposition": {
            "name": "Phân tách Freeman-Durden",
            "description": "Phân rã Freeman-Durden định lượng đóng góp của các cơ chế tán xạ từ SAR phân cực bốn kênh thông qua phân rã theo cơ sở trực giao thành các thành phần phản xạ bề mặt, nảy kép (đô thị/nhị diện) và khối (thực vật/môi trường ngẫu nhiên). Tối ưu hóa bình phương tối thiểu không âm ràng buộc các tỷ lệ công suất để đảm bảo tính khả thi vật lý và khả năng diễn giải. Các bản đồ công suất đầu ra liên kết trực tiếp với thuộc tính địa hình: bề mặt chiếm ưu thế cao cho thấy đất trống/nước, nảy kép cao cho thấy cấu trúc đô thị, khối cao cho thấy rừng/thực vật. Tính năng chính: Các thành phần tán xạ có thể diễn giải vật lý; đặc trưng riêng theo địa hình; tối ưu hóa có ràng buộc; hỗ trợ SAR phân cực bốn kênh; chống chịu tốt với nhiễu đốm; cho phép phân loại theo mục tiêu cụ thể. Trường hợp sử dụng: Phân loại đô thị-nông thôn; ước lượng sinh khối rừng; phát hiện độ ẩm đất; phát hiện ngập lụt; giám sát vật hậu cây trồng; lập bản đồ lớp phủ đất. Diễn giải đầu ra: Công suất bề mặt cho thấy phản xạ gương từ địa hình khô/nước; công suất nảy kép cho thấy các công trình nhân tạo/khu vực đô thị; công suất khối cho thấy thực vật/rừng. Các tổ hợp thành phần cho phép phân biệt lớp phủ đất: khối cao + nảy kép thấp cho thấy rừng; nảy kép cao + khối thấp cho thấy đô thị; bề mặt/khối cân bằng cho thấy địa hình hỗn hợp.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các raster ma trận: diag3 [m11,m22,m33], full3x3 dạng nén [m11,m22,m33,m12,m13,m23], hoặc đầy đủ 9 raster theo thứ tự hàng."
              },
              "matrix_format": {
                "label": "Định dạng ma trận",
                "description": "Định dạng ma trận đầu vào: diag3 (mặc định với 3 raster) hoặc full3x3."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster 3 kênh đầu ra tùy chọn [surface, double_bounce, volume]."
              },
              "output_clip_mask": {
                "label": "Đầu ra mặt nạ cắt",
                "description": "Raster mặt nạ cắt đầu ra tùy chọn (bằng 1 ở nơi xảy ra cắt/chuẩn hóa lại phi vật lý)."
              }
            }
          },
          "frost_filter": {
            "name": "Bộ lọc Frost",
            "description": "Bộ lọc Frost thực hiện giảm nhiễu đốm SAR sử dụng mô hình nhiễu nhân và thống kê cục bộ thích ứng, được thiết kế riêng cho ảnh radar nơi nhiễu đốm tuân theo phân bố Gamma thay vì nhiễu Gauss. Việc triển khai tính trung bình và phương sai cục bộ, sau đó áp dụng trọng số nhân thích ứng: F = I · exp(-variance/(2·mean²)·distance²), trong đó distance đo độ lệch của điểm ảnh so với trung bình cục bộ. Công thức này giảm cường độ nhiễu đốm tỷ lệ nghịch với độ kết hợp ước lượng. Các tính năng chính bao gồm thích ứng đặc thù cho SAR (mô hình nhiễu nhân thay vì cộng), bảo toàn mục tiêu điểm và biên (các đối tượng kết hợp), thích ứng theo phương sai cục bộ cho phép điều chỉnh cường độ, và hiệu quả đã được chứng minh trên dữ liệu SAR đơn phân cực và đa phân cực. Lọc Frost đặc biệt hiệu quả trong tiền xử lý ảnh SAR cho phân loại (giám sát nông nghiệp, lập bản đồ sử dụng đất), hợp nhất SAR-quang học có trọng số theo độ kết hợp, lập bản đồ ngập lụt từ radar khi có mây che phủ, và các quy trình phát hiện biến động bằng radar khẩu độ tổng hợp. Diễn giải đầu ra cho thấy các vùng có phương sai cao (có khả năng là mục tiêu kết hợp) được lọc tối thiểu; các vùng có phương sai thấp (do nhiễu đốm chi phối) được lọc mạnh. Dải đầu ra điển hình khớp với đầu vào; thang logarit (decibel) thường được áp dụng trước hoặc sau khi lọc để trực quan hóa. Tỷ số phương sai trên trung bình kiểm soát trực tiếp cường độ lọc: tỷ số > 0.5 cho thấy khả năng là nhiễu đốm; tỷ số < 0.1 gợi ý mục tiêu kết hợp. Các lỗi đầu ra bao gồm khả năng mất chi tiết nếu ước lượng phương sai không đáng tin cậy và sai lệch theo hướng ở các đối tượng có định hướng. Kiểm tra qua bản đồ độ kết hợp xác nhận việc bảo toàn biên ở các vùng có độ kết hợp cao. Theo dõi thống kê đầu ra: trung bình nên ổn định qua các lần lặp lọc; phương sai nên giảm đáng kể. Áp dụng trước phân loại để cải thiện độ chính xác phân loại. Kết hợp với hậu xử lý hình thái để tinh chỉnh ranh giới đối tượng và loại bỏ các mảnh nhiễu đốm còn sót.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính cửa sổ cục bộ tính bằng điểm ảnh (mặc định 2)."
              },
              "damping_factor": {
                "label": "Hệ số suy giảm",
                "description": "Hệ số tắt dần Frost điều khiển suy giảm theo hàm mũ (mặc định 2.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "gamma_map_filter": {
            "name": "Bộ lọc Gamma MAP",
            "description": "Bộ lọc Gamma Map thực hiện giảm nhiễu đốm SAR sử dụng mô hình thống kê phân bố Gamma, tính đến một cách tường minh đặc tính nhiễu đốm nhân của tín hiệu radar thông qua thích ứng tham số. Việc triển khai ước lượng các tham số phân bố Gamma cục bộ (hình dạng α và tỷ lệ β) từ thống kê ảnh, sau đó lọc thông qua một hàm trọng số tuân theo phân bố: F = I · [1 - (1-L/N)/(1 + L/N)·√(1 + N/L²)], trong đó L là số look tương đương (thước đo độ kết hợp) và N là tham số ước lượng. Các tính năng chính bao gồm thống kê SAR chặt chẽ về mặt lý thuyết (phân bố Gamma là tiêu chuẩn cho radar), tự động ước lượng số look đòi hỏi tối thiểu thông tin đầu vào từ người dùng, bảo toàn biên vượt trội so với các bộ lọc đồng đều, và khả năng áp dụng cho SAR đơn look và đa look. Lọc Gamma Map đặc biệt hiệu quả trong khử nhiễu chồng ảnh SAR đa thời gian cho phát hiện biến động chuỗi thời gian, tăng cường độ kết hợp pha SAR giao thoa (InSAR), tiền xử lý phân rã SAR phân cực, và chuẩn hóa tán xạ ngược SAR trong lâm nghiệp. Diễn giải đầu ra cho thấy cường độ lọc thích ứng với độ kết hợp của cảnh: các vùng có độ kết hợp cao (α lớn) được lọc nhẹ, bảo toàn mục tiêu; các vùng có độ kết hợp thấp (α nhỏ) được lọc mạnh, triệt tiêu nhiễu đốm. Số look tương đương L cho biết hiệu quả lọc: L=1 (lọc tối thiểu) bảo toàn mọi chi tiết; L>5 tạo ra làm trơn đáng kể. Tỷ lệ đầu ra giữ nguyên đơn vị đầu vào; chuyển đổi logarit hỗ trợ trực quan hóa. Mức giảm phương sai đầu ra điển hình nằm trong khoảng 50-80% tùy thuộc vào đặc điểm cảnh và việc chọn số look. Theo dõi biểu đồ tần suất đầu ra để phát hiện dấu hiệu nhiễu đốm còn lại; phân bố hai đỉnh gợi ý các thành phần cảnh được tách biệt tốt. Các lỗi bao gồm khả năng xuất hiện sọc ở các đối tượng có định hướng hoặc suy giảm kết cấu nhẹ nếu L bị ước lượng quá cao. Kiểm định kết quả lọc với dữ liệu thực địa ở các khu vực huấn luyện. Áp dụng có chiến lược trong phân loại SAR phân cực hoặc lọc pha InSAR đòi hỏi tăng cường có trọng số theo độ kết hợp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính cửa sổ cục bộ tính bằng điểm ảnh (mặc định 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Số lần quan sát tương đương (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "h_alpha_wisart_classification": {
            "name": "Phân loại H-Alpha Wishart",
            "description": "Phân loại H/α/A-Wisart kết hợp phân vùng không giám sát thông qua phân chia không gian tham số H/α/A với phân cụm thống kê Wishart để tự động phân loại dữ liệu SAR phân cực thành 9 vùng có ý nghĩa vật lý tương ứng với các lớp cơ chế tán xạ. Thuật toán nhận các tham số entropy (H), độ dị hướng (A) và alpha (α) từ phân rã Cloude-Pottier và phân chia không gian đặc trưng 3D (H,A,α) thành 9 vùng sử dụng các ngưỡng cố định: Vùng 1 (H thấp, α~20°) biểu diễn phản xạ Bragg trên bề mặt khô; Vùng 5 (H~0.7, α~45°) cho thấy tán xạ khối đẳng hướng trong rừng; Vùng 9 (H cao, α~80°) biểu diễn tán xạ nhị diện (nảy kép) từ các cấu trúc đô thị. Trong mỗi vùng, phân cụm Wishart tùy chọn tinh chỉnh phân loại bằng cách tính khoảng cách thống kê trong không gian phân cực đa biến, cải thiện khả năng phân biệt các cơ chế tương tự. Các tính năng chính bao gồm phân loại tự động, không giám sát, không cần mẫu huấn luyện; 9 lớp có thể diễn giải vật lý với định nghĩa chuẩn hóa cho phép so sánh toàn cầu; tùy chọn vận hành hai chế độ (chỉ ngưỡng để đạt tốc độ, ngưỡng+Wishart để đạt độ chính xác); và các chỉ số tin cậy tích hợp dựa trên khoảng cách đến ranh giới vùng và khả năng Wishart. Công cụ chấp nhận các ảnh (H,A,α) đã tính trước hoặc tự động gọi phân rã Cloude-Pottier nếu được cung cấp ma trận thô. Các trường hợp sử dụng chính bao gồm phân đoạn ảnh SAR và tạo bản đồ từ dữ liệu phân cực, phân loại không giám sát các kiểu lớp phủ đất (nước, nông nghiệp, rừng, đô thị) trực tiếp từ ma trận kết hợp SAR, đánh giá nhanh chất lượng dữ liệu phân cực thông qua phân bố mức độ chiếm giữ vùng, và phát hiện biến động làm rõ các chuyển đổi cơ chế tán xạ cho thấy sự thay đổi lớp phủ đất. Diễn giải đầu ra: bản đồ 9 lớp tương ứng trực tiếp với các kiểu địa hình; các vùng có thể được gộp thành các nhóm rộng hơn (nước/phản xạ gương = vùng 1-2, thực vật/khối = vùng 4-6, đô thị/nhị diện = vùng 7-9). Các điểm ảnh chưa phân loại (lớp 0) cho thấy các đặc trưng phân cực bất thường cần được khảo sát.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster entropy (H) đầu vào từ phân tách Cloude-Pottier (khoảng 0-1)."
              },
              "alpha_raster": {
                "label": "Raster alpha",
                "description": "Raster alpha (α) đầu vào từ phân tách Cloude-Pottier (độ, 0-90)."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại alpha để khớp với H khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra tùy chọn với nhãn 9 lớp (1-9)."
              }
            }
          },
          "kuan_filter": {
            "name": "Bộ lọc Kuan",
            "description": "Thực hiện lọc nhiễu đốm Kuan cho ảnh SAR/radar sử dụng cách tiếp cận tham số ước lượng trung bình và phương sai cục bộ. Trọng số thích ứng dựa trên phương sai nhiễu và phương sai ảnh cục bộ. Tương tự Lee nhưng với các giả định thống kê khác. Là phương pháp xử lý SAR vận hành được sử dụng rộng rãi. Cân bằng giữa hiệu quả tính toán và kết quả tốt trên nhiều loại dữ liệu SAR. Lọc Kuan giả định thống kê Gauss với mô hình nhiễu đốm nhân. Thích ứng theo phương sai cục bộ—phân biệt giữa biến thiên tín hiệu và nhiễu đốm. Đặc biệt hiệu quả cho ảnh SAR không đồng nhất (hỗn hợp đối tượng sáng và tối). Chi phí tính toán hợp lý. Là sự thỏa hiệp thực tế giữa độ tinh vi và chi phí tính toán. Là tiêu chuẩn trong nhiều hệ thống xử lý SAR. Ứng dụng: (1) Khử nhiễu đốm SAR vận hành, (2) Tiền xử lý SAR có tán xạ ngược hỗn hợp, (3) Tiền xử lý RadarSat/Sentinel-1, (4) Xử lý SAR thường quy. Tham số điển hình: filter_size=5×7 đến 7×7.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính cửa sổ cục bộ tính bằng điểm ảnh (mặc định 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Số lần quan sát tương đương (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "refined_lee_filter": {
            "name": "Bộ lọc Lee tinh chỉnh",
            "description": "Bộ lọc Lee tinh chỉnh (Refined Lee) cải tiến so với lọc Lee tiêu chuẩn thông qua ước lượng độ kết hợp nâng cao và các thích ứng bảo toàn biên, sử dụng thống kê cục bộ tinh chỉnh và phân tích có hướng để giảm nhiễu đốm vượt trội. Việc triển khai mở rộng mô hình của Lee bằng cách phát hiện hướng biên, áp dụng các cửa sổ có hướng thẳng hàng với ranh giới, và tính các ước lượng độ kết hợp tinh chỉnh. Về mặt toán học: F = μ + √(σ_p²/(σ_I²))·(I - μ) với phép tính phương sai căn chỉnh theo hướng. Sự tinh chỉnh này cải thiện việc bảo toàn biên trong khi vẫn duy trì triệt tiêu nhiễu đốm. Các tính năng chính bao gồm độ nhạy theo hướng (thích ứng hướng lọc theo cấu trúc ảnh), ước lượng độ kết hợp được cải thiện (sử dụng cửa sổ dị hướng), bảo toàn biên vượt trội so với Lee tiêu chuẩn, và hiệu quả trên các cảnh SAR phức tạp. Lọc Lee tinh chỉnh đặc biệt hiệu quả trong phát hiện biến động đòi hỏi ranh giới sắc nét, chuẩn bị bản đồ độ kết hợp InSAR, xử lý SAR phân cực nơi việc bảo toàn mục tiêu là quan trọng, và phân tích SAR lâm nghiệp phân biệt cây với nền. Diễn giải đầu ra cho thấy việc lọc tôn trọng hướng biên: biên ngang được lọc theo phương ngang; biên dọc được lọc theo phương dọc; biên chéo được lọc theo phương chéo. Sự thích ứng theo hướng này giảm thiểu việc lọc cắt ngang các ranh giới thực. Ước lượng độ kết hợp thường chính xác hơn so với Lee tiêu chuẩn, giảm các lỗi lọc. Dải đầu ra khớp với đầu vào; sự thích ứng theo hướng thể hiện rõ qua kiểm tra trực quan (biên vẫn sắc nét hơn so với Lee tiêu chuẩn). Thống kê cho thấy các vùng tương phản cao được bảo toàn tốt hơn. Các thành phần có hướng làm rõ hướng cấu trúc của cảnh; sai lệch theo hướng mạnh cho thấy hướng đối tượng chiếm ưu thế. Các lỗi thường gặp giảm so với Lee tiêu chuẩn, đặc biệt gần biên và các đối tượng phức tạp. Các lỗi bao gồm khả năng thích ứng quá mức nếu ước lượng hướng thất bại và lỗi cửa sổ có hướng tại các ranh giới yếu. Theo dõi bản đồ độ kết hợp để kiểm tra độ chính xác phát hiện biên. Áp dụng có chiến lược trong phân loại SAR nơi các cấu trúc có hướng (ví dụ: rừng, các thửa ruộng nông nghiệp thẳng hàng) phải được bảo toàn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao lân cận tính bằng điểm ảnh (số nguyên lẻ, mặc định 11)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "wisart_iterative_clustering": {
            "name": "Phân cụm lặp Wishart",
            "description": "Phân cụm lặp Wishart thực hiện phân loại không giám sát dữ liệu SAR phân cực bằng cách lặp lại việc tinh chỉnh các tâm cụm sử dụng thước đo khoảng cách thống kê Wishart phức, vốn đo độ tương đồng trong các phân bố xác suất phân cực đa biến. Thuật toán khởi tạo từ các vùng phân rã H/α (cung cấp 9 cụm hạt giống với diễn giải vật lý đã biết), sau đó thực hiện một vòng lặp tương tự kỳ vọng-cực đại hóa: (1) tính khoảng cách Wishart từ ma trận kết hợp ước lượng của mỗi điểm ảnh đến từng nguyên mẫu cụm; (2) gán lại điểm ảnh cho cụm gần nhất; (3) cập nhật nguyên mẫu cụm bằng cách lấy trung bình các ma trận điểm ảnh đã gán; (4) lặp lại cho đến khi hội tụ (tỷ lệ gán lại điểm ảnh <convergence_threshold) hoặc đạt max_iterations. Các tính năng chính bao gồm khung thống kê giá trị phức xử lý đúng cấu trúc dữ liệu phân cực, không giống khoảng cách Euclid; tự động khởi tạo từ các vùng H/α có thể diễn giải, giảm sự phụ thuộc vào hạt giống ngẫu nhiên; theo dõi hội tụ theo từng điểm ảnh cho phép nhắm mục tiêu lặp thích ứng; tùy chọn nhập (H,α) đã tính trước hoặc tự động tính ma trận từ đầu vào kết hợp thô; và khả năng chống chịu tích hợp với nhiễu đốm đơn look nhờ tương thích với xử lý đa look. Công cụ hỗ trợ cả định dạng ma trận thông thường và nén gọn. Các trường hợp sử dụng chính bao gồm phân loại ảnh SAR phân cực tạo ra bản đồ lớp phủ đất tinh chỉnh vượt ra ngoài phân vùng 9 vùng H/α, tinh chỉnh lặp phân loại không giám sát ban đầu cho bản đồ học, đánh giá chất lượng dữ liệu phân cực tự động thông qua các chỉ số ổn định cụm, và phân loại SAR chuỗi thời gian cho phép phát hiện biến động theo thời gian thông qua phân tích chuyển đổi cụm. Diễn giải đầu ra: Bản đồ cụm tinh chỉnh (thường 3-9 lớp tùy thuộc vào sự hội tụ) thể hiện các nhóm cơ chế tán xạ được tách biệt rõ ràng. Lịch sử hội tụ cung cấp chỉ số tin cậy—hội tụ sớm nhanh cho thấy sự phân tách lớp ổn định; hội tụ chậm gợi ý các điểm ảnh không rõ ràng có thể hưởng lợi từ phân tích đa góc nhìn hoặc phát hiện biến động. Tích hợp với các vùng H/α cho phép xây dựng chú giải: duy trì sự tương ứng với vùng H/α khi có thể để bảo toàn khả năng diễn giải.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster entropy (H) đầu vào (khoảng 0-1)."
              },
              "alpha_raster": {
                "label": "Raster alpha",
                "description": "Raster alpha (α) đầu vào (độ, 0-90)."
              },
              "max_iterations": {
                "label": "Số lần lặp tối đa",
                "description": "Số lần lặp phân cụm tối đa (mặc định 10)."
              },
              "convergence_threshold": {
                "label": "Ngưỡng hội tụ",
                "description": "Tiêu chí hội tụ: tỉ lệ điểm ảnh không thay đổi (mặc định 0.99)."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại alpha để khớp với H khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster nhãn cụm đầu ra tùy chọn."
              }
            }
          },
          "yamaguchi_4component_decomposition": {
            "name": "Phân tách 4 thành phần Yamaguchi",
            "description": "Phân rã SAR 4 thành phần Yamaguchi phân rã dữ liệu radar khẩu độ tổng hợp phân cực kép thành các thành phần có thể diễn giải vật lý biểu diễn tán xạ bề mặt, tán xạ nảy kép (khối), tán xạ xoắn và tán xạ khối, sử dụng phân tích phân cực dựa trên mô hình với tùy chọn tích hợp DEM. Việc phân rã tách các cơ chế tán xạ ngược khác nhau thông qua phân tích trị riêng của các ma trận hiệp phương sai phân cực, diễn giải các thành phần là phản xạ bề mặt (tán xạ Bragg), phản xạ nảy kép từ các bộ phản xạ góc, xoay phân cực xoắn (không phổ biến), và tán xạ khối khuếch tán từ thực vật hoặc bề mặt gồ ghề. Việc tích hợp DEM bên ngoài ước lượng đóng góp tán xạ do địa hình, cho phép phân biệt tốt hơn tán xạ khối thực sự với các ảnh hưởng địa hình. Các tính năng chính bao gồm diễn giải vật lý dựa trên mô hình cho phép trích xuất các tham số địa vật lý có ý nghĩa, tùy chọn hiệu chỉnh địa hình dựa trên DEM cải thiện độ chính xác của thành phần trên địa hình, ràng buộc thành phần không âm ngăn các kết quả phân rã phi vật lý, và tự động xử lý các khoảng trống dữ liệu và vùng chồng đè (layover). Các ứng dụng bao gồm ước lượng sinh khối rừng từ thành phần tán xạ khối, lập bản đồ đô thị khai thác sự chiếm ưu thế của nảy kép ở khu vực xây dựng, ước lượng độ ẩm đất từ hành vi tán xạ bề mặt, và phát hiện sạt lở/biến động thông qua thay đổi tỷ lệ thành phần. Đầu ra phân rã Yamaguchi cho phép diễn giải địa vật lý. Đầu ra bao gồm ảnh bốn thành phần (công suất tán xạ bề mặt, nảy kép, xoắn, khối), các chỉ số chất lượng phân rã định lượng độ chính xác khớp, các chỉ số kiểu tán xạ trung bình hỗ trợ đặc trưng hóa lớp phủ đất, và các chẩn đoán độ kết hợp/entropy tùy chọn định hướng đánh giá chất lượng dữ liệu.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các raster ma trận: 6 phần tử dạng nén [m11,m22,m33,m12,m13,m23] hoặc 9 phần tử ma trận phức 3x3 đầy đủ theo thứ tự hàng."
              },
              "matrix_format": {
                "label": "Định dạng ma trận",
                "description": "Định dạng ma trận đầu vào: full3x3 (mặc định) cho các ma trận Hermite có phần thực/phần ảo."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster 4 kênh đầu ra tùy chọn [surface, double_bounce, volume, helix]."
              }
            }
          },
          "ascii_to_las": {
            "name": "ASCII sang LAS",
            "description": "Chuyển đổi định dạng: xử lý hàng loạt CSV→LAS. Phân tích các tệp văn bản phân cách bằng dấu cách/dấu phẩy/tab (x,y,z,intensity,class,returns,angle,time) sang LAS kèm siêu dữ liệu EPSG.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng đường dẫn các tệp ASCII đầu vào."
              },
              "pattern": {
                "label": "Mẫu",
                "description": "Mẫu trường, ví dụ 'x,y,z,i,c,rn,nr,sa'."
              },
              "epsg_code": {
                "label": "Mã EPSG",
                "description": "Mã EPSG cho siêu dữ liệu hệ tọa độ của tệp LAS đầu ra."
              },
              "output_directory": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục đầu ra tùy chọn cho các tệp LAS được tạo."
              }
            }
          },
          "las_to_ascii": {
            "name": "LAS sang ASCII",
            "description": "Chuyển đổi định dạng: xuất LAS→CSV. Xuất tất cả thuộc tính điểm sang văn bản phân cách để nhập vào bảng tính/cơ sở dữ liệu hoặc dùng trong script.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra tùy chọn (chỉ ở chế độ một đầu vào)."
              }
            }
          },
          "las_to_shapefile": {
            "name": "LAS sang Shapefile",
            "description": "Chuyển đổi đám mây điểm LAS/LAZ thành shapefile điểm vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn cho chế độ một đầu vào."
              },
              "output_multipoint": {
                "label": "Đầu ra đa điểm",
                "description": "Nếu true thì xuất ra một hình học đa điểm với một đối tượng; nếu không thì xuất một đối tượng điểm cho mỗi điểm."
              }
            }
          },
          "lidar_colourize": {
            "name": "Tô màu LiDAR",
            "description": "Gán màu điểm từ ảnh: lấy mẫu ảnh trực giao/ảnh có tham chiếu địa lý chồng lấp tại vị trí mỗi điểm, lưu dưới dạng RGB. Kết xuất đám mây điểm chân thực như ảnh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "image": {
                "label": "Ảnh",
                "description": "Đường dẫn raster ảnh đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_join": {
            "name": "Ghép LiDAR",
            "description": "Hợp nhất nhiều tệp LiDAR: nối các đám mây điểm trong khi bảo toàn thuộc tính và tính nhất quán của header. Xử lý hàng loạt trên các bộ sưu tập ô.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng đường dẫn LiDAR đầu vào hoặc các đối tượng LiDAR có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_shift": {
            "name": "Dịch chuyển LiDAR",
            "description": "Tịnh tiến tọa độ đám mây điểm: độ lệch x/y/z cho dịch chuyển datum, hiệu chỉnh đăng ký hoặc biến đổi hệ tọa độ. Điều chỉnh tọa độ hàng loạt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "x_shift": {
                "label": "Dịch chuyển X",
                "description": "Độ dịch chuyển cộng vào tọa độ x."
              },
              "y_shift": {
                "label": "Dịch chuyển Y",
                "description": "Độ dịch chuyển cộng vào tọa độ y."
              },
              "z_shift": {
                "label": "Dịch chuyển Z",
                "description": "Độ dịch chuyển cộng vào tọa độ z."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_tile": {
            "name": "Chia ô LiDAR",
            "description": "Chia đám mây điểm thành các ô lưới đều: phân chia theo phạm vi x/y với kích thước có thể cấu hình và ngưỡng số điểm tối thiểu. Phân phối và xử lý dữ liệu tiêu chuẩn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "tile_width": {
                "label": "Chiều rộng ô",
                "description": "Chiều rộng ô theo đơn vị x (mặc định 1000)."
              },
              "tile_height": {
                "label": "Chiều cao ô",
                "description": "Chiều cao ô theo đơn vị y (mặc định 1000)."
              },
              "origin_x": {
                "label": "Gốc X",
                "description": "Tọa độ x gốc của lưới (mặc định 0)."
              },
              "origin_y": {
                "label": "Gốc Y",
                "description": "Tọa độ y gốc của lưới (mặc định 0)."
              },
              "min_points_in_tile": {
                "label": "Số điểm tối thiểu trong ô",
                "description": "Số điểm tối thiểu cần có để ghi ra một ô (mặc định 2)."
              },
              "output_laz_format": {
                "label": "Định dạng LAZ đầu ra",
                "description": "Nếu true, ghi đầu ra .laz; nếu không thì .las (mặc định true)."
              },
              "output_directory": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục tùy chọn để ghi các ô đầu ra; mặc định là <input_dir>/<input_stem>/."
              }
            }
          },
          "lidar_tophat_transform": {
            "name": "Biến đổi Top-hat LiDAR",
            "description": "Trích xuất độ cao trên mặt đất thông qua top-hat trắng hình thái: co + giãn nở xấp xỉ mặt đất cục bộ, phần dư = độ cao. Chuẩn hóa không cần mặt đất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận dùng cho phép co và phép giãn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "recover_flightline_info": {
            "name": "Khôi phục thông tin tuyến bay",
            "description": "Tái tạo ID tuyến bay từ các khoảng trống thời gian GPS: suy ra ranh giới tuyến bay, đánh dấu vào point-source-ID/user-data/RGB. Khôi phục đường bay.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "max_time_diff": {
                "label": "Chênh lệch thời gian tối đa",
                "description": "Khoảng trống thời gian GPS tối đa trong một tuyến bay trước khi bắt đầu tuyến bay mới."
              },
              "pt_src_id": {
                "label": "ID nguồn điểm",
                "description": "Nếu true, ghi mã tuyến bay suy ra vào point_source_id."
              },
              "user_data": {
                "label": "Dữ liệu người dùng",
                "description": "Nếu true, ghi mã tuyến bay suy ra vào user_data (chia lấy dư 256)."
              },
              "rgb": {
                "label": "RGB",
                "description": "Nếu true, gán một màu ngẫu nhiên cho mỗi tuyến bay suy ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "select_tiles_by_polygon": {
            "name": "Chọn ô theo đa giác",
            "description": "Chọn ô hàng loạt: sao chép các ô LAS/LAZ từ thư mục sang đầu ra khi các điểm mẫu của ô giao với ranh giới đa giác. Trích xuất dữ liệu dựa trên AOI.",
            "params": {
              "input_directory": {
                "label": "Thư mục đầu vào",
                "description": "Thư mục đầu vào chứa các ô LiDAR."
              },
              "output_directory": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục đầu ra cho các ô LiDAR đã chọn."
              },
              "polygons": {
                "label": "Đa giác",
                "description": "Đường dẫn vector đa giác đầu vào hoặc đối tượng vector có kiểu."
              }
            }
          },
          "sort_lidar": {
            "name": "Sắp xếp LiDAR",
            "description": "Sắp xếp điểm theo nhiều tiêu chí: x/y/z với kích thước bin, cùng các thuộc tính dẫn xuất. Tối ưu hóa tính liên kết không gian cho nén và xử lý theo ô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "sort_criteria": {
                "label": "Tiêu chí sắp xếp",
                "description": "Biểu thức tiêu chí sắp xếp, ví dụ 'x 100, y 100, z 10, scan_angle'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "split_lidar": {
            "name": "Tách LiDAR",
            "description": "Phân chia điểm thành các tệp riêng theo thuộc tính: nhóm theo lớp, source-id, cửa sổ thời gian, bin không gian hoặc số điểm. Phân tầng và phân phối dữ liệu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "split_criterion": {
                "label": "Tiêu chí tách",
                "description": "Tiêu chí phân nhóm: num_pts, x, y, z, intensity, class, user_data, point_source_id, scan_angle, hoặc time."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Kích thước nhóm cho các tiêu chí dạng số; với num_pts đây là số điểm trên mỗi tệp đầu ra."
              },
              "min_pts": {
                "label": "Số điểm tối thiểu",
                "description": "Số điểm tối thiểu cần có trước khi ghi một tệp đầu ra được tách (mặc định 5)."
              },
              "output_directory": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục tùy chọn cho các đầu ra được tách."
              }
            }
          },
          "classify_buildings_in_lidar": {
            "name": "Phân loại nhà trong LiDAR",
            "description": "Đánh dấu các điểm nằm trong dấu chân công trình: gán lớp 6 cho tất cả các điểm nằm trong ranh giới đa giác về mặt không gian. Trích xuất công trình dựa trên vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "buildings": {
                "label": "Nhà",
                "description": "Đường dẫn vector đa giác đường bao công trình đầu vào hoặc đối tượng vector có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "classify_lidar": {
            "name": "Phân loại LiDAR",
            "description": "Phân loại điểm tự động: mặt đất, thực vật, công trình thông qua hình học cục bộ (độ tuyến tính, độ phẳng) và khớp mặt phẳng RANSAC. Phân đoạn dựa trên hình học.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận (mặc định 2.5)."
              },
              "grd_threshold": {
                "label": "Ngưỡng mặt đất",
                "description": "Chiều cao trên giá trị nhỏ nhất cục bộ được coi là mặt đất (mặc định 0.1)."
              },
              "oto_threshold": {
                "label": "Ngưỡng OTO",
                "description": "Chiều cao trên giá trị nhỏ nhất cục bộ được coi là vật thể không thuộc địa hình (mặc định 1.0)."
              },
              "linearity_threshold": {
                "label": "Ngưỡng tuyến tính",
                "description": "Ngưỡng độ tuyến tính dùng trong bước sàng lọc điểm chưa phân loại cuối cùng (mặc định 0.5)."
              },
              "planarity_threshold": {
                "label": "Ngưỡng phẳng",
                "description": "Ngưỡng độ phẳng dùng trong phân đoạn và tinh chỉnh (mặc định 0.85)."
              },
              "num_iter": {
                "label": "Số lần lặp",
                "description": "Số lần lặp RANSAC cục bộ cho ước lượng độ phẳng/độ tuyến tính (mặc định 30)."
              },
              "facade_threshold": {
                "label": "Ngưỡng mặt đứng",
                "description": "Khoảng cách lân cận dùng khi gán nhãn mặt đứng công trình (mặc định 0.5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "classify_overlap_points": {
            "name": "Phân loại điểm chồng lấn",
            "description": "Xác định chồng lấn tuyến bay: phát hiện các ô lưới có nhiều point-source ID, gắn cờ hoặc loại bỏ các điểm chồng lấn. Kiểm soát chất lượng cho kiểm định thu nhận dữ liệu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô lưới dùng cho phân tích chồng lấp."
              },
              "overlap_criterion": {
                "label": "Tiêu chí chồng lấn",
                "description": "góc quét lớn nhất, không phải mã nguồn điểm nhỏ nhất, không phải thời gian nhỏ nhất, hoặc nhiều mã nguồn điểm."
              },
              "filter": {
                "label": "Bộ lọc",
                "description": "Nếu true, loại bỏ các điểm chồng lấp; nếu không thì phân loại các điểm chồng lấp thành lớp 12."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "clip_lidar_to_polygon": {
            "name": "Cắt LiDAR theo đa giác",
            "description": "Tập con không gian của đám mây điểm: giữ lại các điểm nằm trong ranh giới đa giác. Chọn điểm dựa trên vector để trích xuất khu vực nghiên cứu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "polygons": {
                "label": "Đa giác",
                "description": "Đường dẫn vector đa giác đầu vào hoặc đối tượng vector có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "erase_polygon_from_lidar": {
            "name": "Xóa đa giác khỏi LiDAR",
            "description": "Loại bỏ các điểm LiDAR nằm trong hình học đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "polygons": {
                "label": "Đa giác",
                "description": "Đường dẫn vector đa giác đầu vào hoặc đối tượng vector có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "filter_lidar": {
            "name": "Lọc LiDAR",
            "description": "Loại bỏ điểm thông qua biểu thức: logic boolean trên các thuộc tính (class, elevation, return_number, scan_angle, noise_flag, v.v.). Chọn điểm linh hoạt.",
            "params": {
              "statement": {
                "label": "Câu lệnh",
                "description": "Biểu thức Boole, ví dụ '!is_noise && class == 2' hoặc 'NOT is_noise AND class == 2'."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn cho chế độ một đầu vào."
              }
            }
          },
          "filter_lidar_by_percentile": {
            "name": "Lọc LiDAR theo phân vị",
            "description": "Chọn điểm theo thứ hạng phân vị trong mỗi ô: giữ lại một điểm trên mỗi khối lưới tại phân vị độ cao được chỉ định. Giảm mật độ theo mẫu đại diện.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "percentile": {
                "label": "Phân vị",
                "description": "Phân vị trong [0, 100] (0=thấp nhất, 100=cao nhất)."
              },
              "block_size": {
                "label": "Kích thước khối",
                "description": "Kích thước khối lưới cho việc chọn phân vị cục bộ (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "filter_lidar_by_reference_surface": {
            "name": "Lọc LiDAR theo bề mặt tham chiếu",
            "description": "Trích xuất điểm tương đối so với bề mặt tham chiếu: z<surface, z>surface hoặc trong ngưỡng. Xác định thực vật trên DTM hoặc các điểm dưới bề mặt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "ref_surface": {
                "label": "Bề mặt tham chiếu",
                "description": "Đường dẫn raster tham chiếu hoặc đối tượng raster có kiểu."
              },
              "query": {
                "label": "Truy vấn",
                "description": "Loại truy vấn: within, <, <=, >, >= (mặc định within)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng khoảng cách z tuyệt đối dùng bởi query=within."
              },
              "classify": {
                "label": "Phân loại",
                "description": "Nếu true thì phân loại các điểm; nếu không thì lọc và chỉ giữ lại các điểm khớp."
              },
              "true_class_value": {
                "label": "Giá trị lớp đúng",
                "description": "Giá trị lớp gán cho các điểm khớp ở chế độ phân loại."
              },
              "false_class_value": {
                "label": "Giá trị lớp sai",
                "description": "Giá trị lớp gán cho các điểm không khớp ở chế độ phân loại."
              },
              "preserve_classes": {
                "label": "Giữ nguyên lớp",
                "description": "Nếu true thì giữ nguyên các lớp không khớp ở chế độ phân loại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "filter_lidar_classes": {
            "name": "Lọc lớp LiDAR",
            "description": "Loại bỏ điểm theo phân loại: lọc bỏ các lớp LAS không mong muốn (nhiễu, nước, công trình, v.v.). Tiền xử lý thiết yếu cho các quy trình điều chỉnh địa hình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "filter_lidar_noise": {
            "name": "Lọc nhiễu LiDAR",
            "description": "Loại bỏ các lớp nhiễu ASPRS: lọc lớp 7 (nhiễu thấp) và lớp 18 (nhiễu cao). Làm sạch đám mây điểm tiêu chuẩn cho dữ liệu tuân thủ LAS 1.4.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "filter_lidar_scan_angles": {
            "name": "Lọc góc quét LiDAR",
            "description": "Loại bỏ các phản hồi LiDAR xiên: lọc điểm theo ngưỡng góc quét. Cải thiện độ chính xác theo phương đứng bằng cách loại bỏ các phản hồi góc sượt có sai số vị trí.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Góc quét tuyệt đối lớn nhất (đơn vị LAS dạng số nguyên; 1 đơn vị = 0.006°). Bắt buộc."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "height_above_ground": {
            "name": "Chiều cao so với mặt đất",
            "description": "Chuẩn hóa thông qua hình học đám mây điểm: tính độ cao của mỗi điểm so với lân cận thuộc lớp mặt đất thấp hơn gần nhất. Bề mặt địa hình cục bộ không cần raster tham chiếu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "improved_ground_point_filter": {
            "name": "Bộ lọc điểm mặt đất cải tiến",
            "description": "Pipeline lọc điểm mặt đất nhiều giai đoạn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào."
              },
              "block_size": {
                "label": "Kích thước khối",
                "description": "Kích thước ô lưới theo đơn vị xy."
              },
              "max_building_size": {
                "label": "Kích thước nhà tối đa",
                "description": "Chiều rộng công trình lớn nhất dự kiến theo đơn vị xy."
              },
              "slope_threshold": {
                "label": "Ngưỡng độ dốc",
                "description": "Độ dốc mép nhỏ nhất tính bằng độ."
              },
              "elev_threshold": {
                "label": "Ngưỡng độ cao",
                "description": "Ngưỡng chênh lệch độ cao."
              },
              "classify": {
                "label": "Phân loại",
                "description": "Phân loại các điểm thay vì lọc bỏ."
              },
              "preserve_classes": {
                "label": "Giữ nguyên lớp",
                "description": "Giữ nguyên các lớp hiện có ở chế độ phân loại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "individual_tree_segmentation": {
            "name": "Phân đoạn cây đơn lẻ",
            "description": "Phân đoạn các điểm thực vật thành tán cây: phân cụm mean-shift với băng thông thích ứng từ hình học tán cục bộ. Khoanh vẽ cây ở cấp độ kiểm kê.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "only_use_veg": {
                "label": "Chỉ dùng thực vật",
                "description": "Nếu true, chỉ xử lý các lớp thực vật (mặc định true)."
              },
              "veg_classes": {
                "label": "Lớp thực vật",
                "description": "Các lớp thực vật dưới dạng chuỗi phân tách bằng dấu phẩy hoặc mảng số nguyên (mặc định '3,4,5')."
              },
              "min_height": {
                "label": "Chiều cao tối thiểu",
                "description": "Chiều cao điểm tối thiểu cho phân đoạn (mặc định 2.0)."
              },
              "max_height": {
                "label": "Chiều cao tối đa",
                "description": "Chiều cao điểm tối đa tùy chọn."
              },
              "bandwidth_min": {
                "label": "Băng thông tối thiểu",
                "description": "Băng thông ngang tối thiểu (mặc định 1.0)."
              },
              "bandwidth_max": {
                "label": "Băng thông tối đa",
                "description": "Băng thông ngang tối đa (mặc định 6.0)."
              },
              "adaptive_bandwidth": {
                "label": "Băng thông thích nghi",
                "description": "Ước lượng băng thông ngang theo từng hạt giống từ hình học tán cây cục bộ (mặc định true)."
              },
              "adaptive_neighbors": {
                "label": "Số lân cận thích nghi",
                "description": "Số lân cận dùng cho tỉ lệ mật độ cục bộ thích nghi (mặc định 24)."
              },
              "adaptive_sector_count": {
                "label": "Số cung thích nghi",
                "description": "Số cung góc cho ước lượng bán kính tán cây cục bộ (mặc định 8)."
              },
              "grid_acceleration": {
                "label": "Tăng tốc bằng lưới",
                "description": "Dùng xấp xỉ theo lưới kiểu MeanShift++ để cập nhật mode nhanh hơn (mặc định false)."
              },
              "grid_cell_size": {
                "label": "Kích thước ô lưới",
                "description": "Kích thước ô lưới cho việc cập nhật mode được tăng tốc (mặc định 0.5)."
              },
              "grid_refine_exact": {
                "label": "Tinh chỉnh lưới chính xác",
                "description": "Chạy một bước tinh chỉnh ngắn theo lân cận chính xác sau khi tăng tốc bằng lưới (mặc định false)."
              },
              "grid_refine_iterations": {
                "label": "Số lần lặp tinh chỉnh lưới",
                "description": "Giới hạn số lần lặp tinh chỉnh chính xác sau khi cập nhật mode bằng lưới (mặc định 2)."
              },
              "tile_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô tùy chọn cho việc lập lịch hạt giống; <=0 sẽ tắt chia ô (mặc định 0.0)."
              },
              "tile_overlap": {
                "label": "Chồng lấn ô",
                "description": "Chiều rộng chồng lấp giữa các ô khi lập lịch hạt giống theo ô (mặc định 0.0)."
              },
              "vertical_bandwidth": {
                "label": "Băng thông theo chiều đứng",
                "description": "Băng thông kernel theo phương thẳng đứng (mặc định 5.0)."
              },
              "max_iterations": {
                "label": "Số lần lặp tối đa",
                "description": "Số lần lặp mean-shift tối đa cho mỗi hạt giống (mặc định 30)."
              },
              "convergence_tol": {
                "label": "Dung sai hội tụ",
                "description": "Dung sai hội tụ cho độ lớn dịch chuyển (mặc định 0.05)."
              },
              "min_cluster_points": {
                "label": "Số điểm cụm tối thiểu",
                "description": "Số điểm tối thiểu cho mỗi cụm cây được giữ lại (mặc định 50)."
              },
              "mode_merge_dist": {
                "label": "Khoảng cách gộp mode",
                "description": "Ngưỡng khoảng cách để gộp các mode đã hội tụ (mặc định 0.8)."
              },
              "threads": {
                "label": "Số luồng",
                "description": "Ghi đè số luồng (0 sẽ dùng pool Rayon mặc định)."
              },
              "simd": {
                "label": "SIMD",
                "description": "Bật phép toán có hỗ trợ SIMD trong các vòng lặp tính trọng số (mặc định true)."
              },
              "output_id_mode": {
                "label": "Chế độ ID đầu ra",
                "description": "Cách mã hóa mã phân đoạn đầu ra {rgb|user_data|point_source_id|rgb+user_data|rgb+point_source_id} (mặc định rgb)."
              },
              "output_sidecar_csv": {
                "label": "CSV kèm theo đầu ra",
                "description": "Nếu true, ghi tệp CSV point_index,segment_id bên cạnh đầu ra LiDAR."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống tất định cho việc ánh xạ màu (mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_classify_subset": {
            "name": "Phân loại tập con LiDAR",
            "description": "Chuyển phân loại: đánh dấu các điểm cơ sở khớp với vị trí của đám mây tập con. Cho phép phân loại lại theo không gian dựa trên các tập điểm bổ trợ.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Đường dẫn LiDAR nền hoặc đối tượng LiDAR có kiểu."
              },
              "subset": {
                "label": "Tập con",
                "description": "Đường dẫn LiDAR tập con hoặc đối tượng LiDAR có kiểu."
              },
              "subset_class_value": {
                "label": "Giá trị lớp tập con",
                "description": "Giá trị phân loại gán cho các điểm tập con khớp (0-18)."
              },
              "nonsubset_class_value": {
                "label": "Giá trị lớp ngoài tập con",
                "description": "Lớp tùy chọn cho các điểm không khớp (0-18). Dùng 255 để giữ nguyên các lớp hiện có."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai đối sánh lân cận gần nhất 3D theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_elevation_slice": {
            "name": "Lát cắt độ cao LiDAR",
            "description": "Trích xuất điểm theo dải độ cao: lọc hoặc phân loại lại các điểm trong khoảng z. Tách riêng các lớp cụ thể (mặt đất, tầng dưới tán, tán cây) hoặc các vùng độ cao.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "minz": {
                "label": "Z nhỏ nhất",
                "description": "Cận dưới của lát cắt độ cao (mặc định -vô cùng)."
              },
              "maxz": {
                "label": "Z lớn nhất",
                "description": "Cận trên của lát cắt độ cao (mặc định +vô cùng)."
              },
              "classify": {
                "label": "Phân loại",
                "description": "Nếu true, phân loại lại các điểm thay vì lọc bỏ chúng (mặc định false)."
              },
              "in_class_value": {
                "label": "Giá trị lớp vào",
                "description": "Giá trị phân loại gán cho các điểm bên trong lát cắt khi classify=true (mặc định 2)."
              },
              "out_class_value": {
                "label": "Giá trị lớp ra",
                "description": "Giá trị phân loại gán cho các điểm bên ngoài lát cắt khi classify=true (mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_remove_outliers": {
            "name": "Loại bỏ giá trị ngoại lai LiDAR",
            "description": "Phát hiện điểm ngoại lai thông qua phần dư độ cao cục bộ: so sánh điểm với trung bình/trung vị lân cận, gắn cờ các dị thường. Loại bỏ sai số thô bất thường và nhiễu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận để tính phần dư cục bộ (mặc định 2.0)."
              },
              "elev_diff": {
                "label": "Chênh lệch độ cao",
                "description": "Ngưỡng phần dư độ cao tuyệt đối để phát hiện ngoại lai (mặc định 50.0)."
              },
              "use_median": {
                "label": "Dùng trung vị",
                "description": "Dùng trung vị thay vì trung bình độ cao lân cận."
              },
              "classify": {
                "label": "Phân loại",
                "description": "Nếu true, phân loại các ngoại lai thành lớp 7/18 thay vì loại bỏ chúng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_segmentation": {
            "name": "Phân đoạn LiDAR",
            "description": "Phân chia đám mây điểm: khớp mặt phẳng RANSAC + phát triển vùng tạo ra các thành phần liên thông. Gán ID phân đoạn được lưu trong RGB. Phân cụm điểm dựa trên hình dạng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận cho phép loang vùng."
              },
              "num_iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp RANSAC dùng để phát hiện các mô hình mặt phẳng cục bộ."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Số điểm được lấy mẫu cho mỗi lần khớp mô hình RANSAC cục bộ."
              },
              "inlier_threshold": {
                "label": "Ngưỡng điểm phù hợp",
                "description": "Ngưỡng phần dư dùng để xác định các điểm là điểm trong của mặt phẳng cục bộ."
              },
              "acceptable_model_size": {
                "label": "Kích thước mô hình chấp nhận",
                "description": "Số điểm trong tối thiểu cần có để chấp nhận một mô hình mặt phẳng cục bộ."
              },
              "max_planar_slope": {
                "label": "Độ dốc phẳng tối đa",
                "description": "Độ dốc mặt phẳng lớn nhất được chấp nhận tính bằng độ."
              },
              "norm_diff_threshold": {
                "label": "Ngưỡng hiệu pháp tuyến",
                "description": "Chênh lệch góc lớn nhất (độ) giữa các pháp tuyến mặt phẳng lân cận trong quá trình loang."
              },
              "max_z_diff": {
                "label": "Chênh lệch Z tối đa",
                "description": "Chênh lệch Z lớn nhất cho phép khi loang một phân đoạn."
              },
              "classes": {
                "label": "Lớp",
                "description": "Nếu true, không vượt qua ranh giới lớp khi loang các phân đoạn."
              },
              "ground": {
                "label": "Mặt đất",
                "description": "Nếu true, gán class=2 cho phân đoạn lớn nhất và class=1 cho các điểm đã phân đoạn khác."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_segmentation_based_filter": {
            "name": "Bộ lọc dựa trên phân đoạn LiDAR",
            "description": "Lọc mặt đất thông qua phân đoạn địa hình thấp: phát triển các thành phần liên thông từ các vùng phẳng cục bộ, tách địa hình khỏi thực vật. Tách mặt đất vững chắc.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận cho phép loang thành phần liên thông."
              },
              "norm_diff_threshold": {
                "label": "Ngưỡng hiệu pháp tuyến",
                "description": "Tham số tương thích cho các phép kiểm tra góc pháp tuyến kiểu cũ."
              },
              "max_z_diff": {
                "label": "Chênh lệch Z tối đa",
                "description": "Chênh lệch độ cao lớn nhất cho phép loang liên thông."
              },
              "classify_points": {
                "label": "Phân loại điểm",
                "description": "Nếu true, phân loại các điểm thay vì lọc bỏ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "modify_lidar": {
            "name": "Sửa đổi LiDAR",
            "description": "Cập nhật thuộc tính điểm thông qua phép gán: z=z+offset, class=reclassify_expr, intensity=scale_factor. Biến đổi linh hoạt ở cấp điểm.",
            "params": {
              "statement": {
                "label": "Câu lệnh",
                "description": "Một hoặc nhiều biểu thức gán phân tách bằng dấu chấm phẩy, ví dụ 'z = z + 1; class = if(z > 5, 2, class)'."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn cho chế độ một đầu vào."
              }
            }
          },
          "normalize_lidar": {
            "name": "Chuẩn hóa LiDAR",
            "description": "Chuyển đổi độ cao LiDAR tuyệt đối thành độ cao trên mặt đất: trừ DTM (DEM raster) khỏi giá trị z của điểm. Tạo đám mây điểm đã chuẩn hóa cho phân tích cấu trúc.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "dtm": {
                "label": "DTM",
                "description": "Đường dẫn raster DTM đầu vào hoặc đối tượng raster có kiểu."
              },
              "no_negatives": {
                "label": "Không giá trị âm",
                "description": "Kẹp các chiều cao chuẩn hóa âm về không."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "remove_duplicates": {
            "name": "Loại bỏ điểm trùng",
            "description": "Khử trùng lặp đám mây điểm: loại bỏ các điểm có x/y giống hệt nhau (tùy chọn cả z). Xử lý chồng lấn nhiều lần quét và cải thiện hiệu quả xử lý.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "include_z": {
                "label": "Bao gồm Z",
                "description": "Nếu true, việc phát hiện trùng lặp có tính cả z; nếu không thì chỉ dùng x/y."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "flightline_overlap": {
            "name": "Chồng lấn tuyến bay",
            "description": "Phát hiện chồng lấn thu nhận: đếm số point-source ID khác nhau trên mỗi ô. Trực quan hóa chồng lấn dựa trên lưới để đánh giá độ phủ tuyến bay.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải lưới dùng để đếm số tuyến bay riêng biệt trong mỗi ô."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_block_maximum": {
            "name": "Cực đại theo khối LiDAR",
            "description": "Raster từ thuộc tính LiDAR lớn nhất: giá trị ô = phản hồi của điểm cao nhất (độ cao, cường độ, lớp, v.v.). Tạo DSM, trích xuất đỉnh tán, thống kê xung.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Thuộc tính điểm (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_block_minimum": {
            "name": "Cực tiểu theo khối LiDAR",
            "description": "Raster từ thuộc tính LiDAR nhỏ nhất: giá trị ô = phản hồi của điểm thấp nhất (độ cao, cường độ, lớp). Tạo DEM, trích xuất bề mặt mặt đất, xác lập đường cơ sở địa hình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Thuộc tính điểm (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_construct_vector_tin": {
            "name": "Xây dựng TIN vector từ LiDAR",
            "description": "Xây dựng lưới 3D: tam giác hóa Delaunay từ các điểm đã lọc, xuất ra dưới dạng lớp đa giác vector. Biểu diễn bề mặt và phân tích địa hình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn; ở chế độ hàng loạt, mỗi đầu vào sẽ ghi một tệp _tin.shp cùng cấp."
              },
              "returns": {
                "label": "Phản hồi",
                "description": "Bộ lọc lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các giá trị lớp tùy chọn cần loại trừ."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Độ cao điểm nhỏ nhất được phép."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Độ cao điểm lớn nhất được phép."
              },
              "max_triangle_edge_length": {
                "label": "Chiều dài cạnh tam giác tối đa",
                "description": "Chiều dài cạnh tam giác lớn nhất được phép, tùy chọn."
              }
            }
          },
          "lidar_contour": {
            "name": "Đường đồng mức LiDAR",
            "description": "Trích xuất đường đồng mức vector: tạo đường đồng mức dựa trên TIN với nội suy cho độ cao, cường độ, thời gian. Khoảng cao đều có thể cấu hình và lọc theo chiều dài cạnh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (.shp/.geojson). Ở chế độ hàng loạt, mỗi đầu vào sẽ ghi một tệp .shp cùng cấp."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Khoảng cách giữa các đường bình độ (phải > 0)."
              },
              "base_contour": {
                "label": "Đường đồng mức cơ sở",
                "description": "Giá trị độ lệch của đường bình độ cơ sở."
              },
              "smooth": {
                "label": "Làm trơn",
                "description": "Tham số làm trơn để tương thích (được chấp nhận nhằm giữ nguyên dạng lời gọi)."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Một trong các giá trị elevation, intensity, scan_angle, time, hoặc user_data."
              },
              "returns": {
                "label": "Phản hồi",
                "description": "Bộ lọc lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các giá trị lớp tùy chọn cần loại trừ."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Độ cao điểm nhỏ nhất được phép."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Độ cao điểm lớn nhất được phép."
              },
              "max_triangle_edge_length": {
                "label": "Chiều dài cạnh tam giác tối đa",
                "description": "Chiều dài cạnh tam giác lớn nhất tùy chọn; các tam giác dài hơn sẽ bị bỏ qua."
              }
            }
          },
          "lidar_digital_surface_model": {
            "name": "Mô hình bề mặt số LiDAR",
            "description": "Tạo DSM từ các phản hồi bề mặt trên cùng của LiDAR thông qua TIN: sử dụng các điểm ứng viên cao nhất cục bộ trong bán kính, sau đó tam giác hóa. Biểu diễn tán thực vật và đỉnh đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận để chọn các điểm ứng viên của bề mặt trên cùng."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "max_triangle_edge_length": {
                "label": "Chiều dài cạnh tam giác tối đa",
                "description": "Chiều dài cạnh tam giác lớn nhất tùy chọn để loại bỏ các mặt có cạnh dài."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_hex_bin": {
            "name": "Gom ô lục giác LiDAR",
            "description": "Tổng hợp điểm vào các ô lục giác: lưới gom nhóm với tóm tắt theo từng ô (số lượng, z trung bình, cường độ). Lấy mẫu đồng đều và gom nhóm thống kê.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng lục giác (khoảng cách giữa hai cạnh đối diện)."
              },
              "orientation": {
                "label": "Hướng",
                "description": "Hướng lưới: h (đỉnh nhọn hướng lên) hoặc v (cạnh phẳng hướng lên)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn."
              }
            }
          },
          "lidar_hillshade": {
            "name": "Bóng đổ địa hình LiDAR",
            "description": "Kết xuất bề mặt LiDAR bằng bóng đổ địa hình: tính pháp tuyến bề mặt theo từng điểm từ phép khớp mặt phẳng cục bộ, sau đó đổ bóng theo góc chiếu sáng. Lưu dưới dạng RGB để trực quan hóa 3D.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận để ước lượng pháp tuyến cục bộ. Giá trị <= 0 sẽ dùng khoảng cách danh nghĩa được ước lượng."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Phương vị chiếu sáng tính bằng độ."
              },
              "altitude": {
                "label": "Góc cao",
                "description": "Góc cao chiếu sáng tính bằng độ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_idw_interpolation": {
            "name": "Nội suy IDW LiDAR",
            "description": "Tạo lưới LiDAR có trọng số theo khoảng cách: gán giá trị ô từ trung bình có trọng số của các điểm xung quanh (lũy thừa nghịch đảo khoảng cách). Bề mặt mượt, kiểm soát thông qua tham số số mũ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Số mũ IDW (bậc)."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận; <=0 sẽ chuyển sang chế độ k lân cận gần nhất."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Thuộc tính điểm cần nội suy (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Số điểm tối thiểu cho chế độ dự phòng k lân cận gần nhất."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_nearest_neighbour_gridding": {
            "name": "Tạo lưới lân cận gần nhất LiDAR",
            "description": "Tạo lưới LiDAR nhanh: gán giá trị ô từ điểm gần nhất trong bán kính tìm kiếm. Sai lệch nội suy tối thiểu, hiệu quả cho đám mây điểm mật độ cao. Tạo DSM/DEM nhanh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Khoảng cách lân cận gần nhất lớn nhất; các ô vượt quá giá trị này sẽ thành NoData."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Thuộc tính điểm cần nội suy (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_radial_basis_function_interpolation": {
            "name": "Nội suy hàm cơ sở xuyên tâm LiDAR",
            "description": "Bề mặt LiDAR mượt thông qua RBF: các hàm cơ sở bán kính nắm bắt độ cong cục bộ và vi địa hình. Tạo lưới chất lượng cao với đạo hàm liên tục qua các ranh giới.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "num_points": {
                "label": "Số điểm",
                "description": "Số lân cận tối thiểu dùng cho nội suy cục bộ."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận; <=0 sẽ chỉ dùng chế độ k lân cận gần nhất."
              },
              "func_type": {
                "label": "Loại hàm",
                "description": "Loại hàm cơ sở RBF (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Bậc đa thức",
                "description": "Bậc xu thế đa thức dùng cho hiệu chỉnh cục bộ (none, constant, quadratic)."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Tham số hình dạng/số mũ của hàm cơ sở, tùy theo func_type."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Thuộc tính điểm cần nội suy (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_sibson_interpolation": {
            "name": "Nội suy Sibson LiDAR",
            "description": "Tạo lưới LiDAR bằng láng giềng tự nhiên: nội suy dựa trên Voronoi sử dụng trọng số láng giềng tự nhiên. Bề mặt mượt, trông tự nhiên, không có lỗi độ dốc tại vị trí điểm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Thuộc tính điểm cần nội suy (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_thin": {
            "name": "Làm thưa LiDAR",
            "description": "Giảm mật độ đám mây điểm: giữ lại ≤1 điểm trên mỗi ô lưới sử dụng chiến lược đầu tiên/cuối cùng/thấp nhất/cao nhất/gần nhất. Giảm dung lượng lưu trữ trong khi bảo toàn độ phủ và độ phức tạp địa hình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô lưới để tỉa thưa (mặc định 1.0)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp chọn điểm trong mỗi ô: first, last, lowest, highest, nearest (mặc định 'first')."
              },
              "save_filtered": {
                "label": "Lưu điểm đã lọc",
                "description": "Nếu true, cũng ghi ra các điểm bị lọc bỏ và trả về vị trí của chúng trong outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Đầu ra đã lọc",
                "description": "Đường dẫn đầu ra tùy chọn cho các điểm bị lọc bỏ (chế độ một đầu vào)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_thin_high_density": {
            "name": "Làm thưa LiDAR mật độ cao",
            "description": "Giảm mật độ thích ứng: giảm số điểm ở các vùng quá dày đặc trong khi bảo toàn các vùng thưa. Cân bằng mật độ lấy mẫu trên các mẫu chồng lấn tuyến bay thay đổi.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "density": {
                "label": "Mật độ",
                "description": "Ngưỡng mật độ điểm mục tiêu tính bằng số điểm trên một đơn vị diện tích."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải lưới dùng để chia nhóm theo x/y và z (mặc định 1.0)."
              },
              "save_filtered": {
                "label": "Lưu điểm đã lọc",
                "description": "Nếu true, ghi ra các điểm bị lọc bỏ và trả về outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Đầu ra đã lọc",
                "description": "Đường dẫn đầu ra tùy chọn cho các điểm bị lọc bỏ ở chế độ một đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_tile_footprint": {
            "name": "Đường bao ô LiDAR",
            "description": "Tạo đường bao dấu chân: hình hộp bao thẳng trục hoặc bao lồi cho mỗi đám mây điểm. Đầu ra đa giác vector cho lập chỉ mục không gian và danh mục dữ liệu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, sẽ chạy trên mọi tệp LiDAR trong thư mục hiện tại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn cho các đường bao."
              },
              "output_hulls": {
                "label": "Đầu ra bao",
                "description": "Nếu true thì ghi các đường bao dạng bao lồi; nếu không thì ghi các hộp bao song song với trục."
              }
            }
          },
          "lidar_tin_gridding": {
            "name": "Tạo lưới TIN LiDAR",
            "description": "Nội suy LiDAR chính xác thông qua TIN: xây dựng tam giác hóa Delaunay từ các điểm, nội suy giá trị ô từ mặt phẳng tam giác. Tôn trọng độ cao điểm, rất tốt cho vùng phủ không đều.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "max_triangle_edge_length": {
                "label": "Chiều dài cạnh tam giác tối đa",
                "description": "Chiều dài cạnh tam giác lớn nhất tùy chọn để loại bỏ các mặt có cạnh dài."
              },
              "interpolation_parameter": {
                "label": "Tham số nội suy",
                "description": "Thuộc tính điểm cần nội suy (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              },
              "triangulation_backend": {
                "label": "Bộ tam giác hóa",
                "description": "Lựa chọn nền tảng tam giác hóa: auto, delaunator, hoặc wbtopology."
              },
              "triangulation_auto_threshold": {
                "label": "Ngưỡng tự động tam giác hóa",
                "description": "Khi backend=auto, chuyển sang wbtopology tại số mẫu này (mặc định tắt; đặt tường minh để bật)."
              },
              "triangulation_epsilon": {
                "label": "Epsilon tam giác hóa",
                "description": "Epsilon dùng cho việc xử lý trùng lặp của nền tảng wbtopology (mặc định 1e-12)."
              },
              "triangulation_thin_cell_size": {
                "label": "Kích thước ô làm thưa tam giác hóa",
                "description": "Kích thước ô tỉa thưa trước tùy chọn cho các mẫu tam giác hóa; giá trị > 0 sẽ bật tỉa thưa và 0 sẽ tắt."
              },
              "triangulation_thin_method": {
                "label": "Phương pháp làm thưa tam giác hóa",
                "description": "Phương pháp chọn điểm đại diện khi tỉa thưa: nearest_center, min_value, hoặc max_value."
              }
            }
          },
          "colourize_based_on_class": {
            "name": "Tô màu theo lớp",
            "description": "Tô màu điểm theo lớp: màu tiêu chuẩn ASPRS (xanh lục=thực vật, nâu=mặt đất, xám=công trình, v.v.). Hòa trộn với cường độ để tăng độ tương phản. Trực quan hóa phân loại.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "intensity_blending_amount": {
                "label": "Mức pha trộn cường độ",
                "description": "Phần trăm pha trộn [0,100] giữa màu của lớp và cường độ."
              },
              "clr_str": {
                "label": "Chuỗi màu",
                "description": "Tùy chọn ghi đè màu của lớp, ví dụ '2:(184,167,108);5:#9ab86c'."
              },
              "use_unique_clrs_for_buildings": {
                "label": "Dùng màu riêng cho nhà",
                "description": "Nếu true, gán màu riêng cho từng cụm công trình liên thông."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận dùng để tô màu cụm công trình."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "colourize_based_on_point_returns": {
            "name": "Tô màu theo số lần phản hồi điểm",
            "description": "Tô màu điểm theo thứ tự phản hồi: phản hồi đầu tiên/trung gian/cuối cùng sử dụng các màu riêng biệt. Trực quan hóa cấu trúc xung đa phản hồi để kiểm tra kết quả xử lý.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "intensity_blending_amount": {
                "label": "Mức pha trộn cường độ",
                "description": "Phần trăm pha trộn [0,100] giữa màu của lần phản hồi và cường độ."
              },
              "only_ret_colour": {
                "label": "Màu phản hồi duy nhất",
                "description": "Màu cho các điểm chỉ có một lần phản hồi."
              },
              "first_ret_colour": {
                "label": "Màu phản hồi đầu",
                "description": "Màu cho các điểm phản hồi đầu tiên trong các xung nhiều lần phản hồi."
              },
              "intermediate_ret_colour": {
                "label": "Màu phản hồi giữa",
                "description": "Màu cho các điểm phản hồi trung gian."
              },
              "last_ret_colour": {
                "label": "Màu phản hồi cuối",
                "description": "Màu cho các điểm phản hồi cuối cùng trong các xung nhiều lần phản hồi."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "find_flightline_edge_points": {
            "name": "Tìm điểm biên tuyến bay",
            "description": "Lọc điểm biên tuyến bay: chỉ trích xuất các điểm tại ranh giới dải quét thu nhận. Kiểm tra chất lượng chồng lấn dải và hiệu ứng biên.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "individual_tree_detection": {
            "name": "Phát hiện cây đơn lẻ",
            "description": "Xác định ngọn cây: cực đại cục bộ trong đám mây điểm đã lọc theo độ cao với bán kính tìm kiếm thích ứng. Trả về shapefile điểm vector của các vị trí thân cây tiềm năng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "min_search_radius": {
                "label": "Bán kính tìm kiếm tối thiểu",
                "description": "Bán kính tìm kiếm nhỏ nhất theo đơn vị bản đồ (mặc định 1.0)."
              },
              "min_height": {
                "label": "Chiều cao tối thiểu",
                "description": "Chiều cao tối thiểu để xét các điểm (mặc định 0.0)."
              },
              "max_search_radius": {
                "label": "Bán kính tìm kiếm tối đa",
                "description": "Bán kính tìm kiếm lớn nhất; nếu không đặt sẽ dùng min_search_radius."
              },
              "max_height": {
                "label": "Chiều cao tối đa",
                "description": "Chiều cao lớn nhất; nếu không đặt sẽ dùng min_height."
              },
              "only_use_veg": {
                "label": "Chỉ dùng thực vật",
                "description": "Nếu true, chỉ xử lý các lớp thực vật (mặc định true)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp shapefile vector đầu ra."
              }
            }
          },
          "lidar_eigenvalue_features": {
            "name": "Đặc trưng trị riêng LiDAR",
            "description": "Suy ra các đặc trưng PCA: trị riêng/vector riêng từ các vùng lân cận. Các bộ mô tả hình dạng (độ phẳng, độ tuyến tính, phương sai độ cao) cho phân tích đám mây điểm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "num_neighbours": {
                "label": "Số lân cận",
                "description": "Kích thước lân cận mục tiêu tùy chọn (không tính chính điểm đó)."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính tìm kiếm lớn nhất tùy chọn để thu thập lân cận."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn .eigen đầu ra tùy chọn ở chế độ một đầu vào."
              }
            }
          },
          "lidar_histogram": {
            "name": "Lược đồ LiDAR",
            "description": "Tính phân bố thuộc tính: biểu đồ tần suất cho độ cao, cường độ, góc quét, lớp. Cắt theo phân vị để triệt tiêu giá trị ngoại lai. Trực quan hóa HTML.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn HTML đầu ra tùy chọn cho báo cáo lược đồ."
              },
              "parameter": {
                "label": "Tham số",
                "description": "Một trong các giá trị độ cao, cường độ, góc quét, lớp, hoặc thời gian."
              },
              "clip_percent": {
                "label": "Phần trăm cắt",
                "description": "Lượng cắt theo phân vị trong [0,50] cho đuôi dưới/đuôi trên."
              }
            }
          },
          "lidar_info": {
            "name": "Thông tin LiDAR",
            "description": "Tạo báo cáo tóm tắt siêu dữ liệu: số điểm, phạm vi, dải cường độ, biểu đồ tần suất lớp, phân bố phản hồi. Đầu ra HTML/văn bản cho tài liệu hóa dữ liệu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo đầu ra tùy chọn (.html/.txt)."
              },
              "show_point_density": {
                "label": "Hiển thị mật độ điểm",
                "description": "Nếu true thì bao gồm các chỉ số mật độ điểm xấp xỉ theo bbox."
              },
              "show_vlrs": {
                "label": "Hiển thị VLR",
                "description": "Cờ tương thích; dành cho đầu ra siêu dữ liệu chi tiết trong tương lai."
              },
              "show_geokeys": {
                "label": "Hiển thị GeoKey",
                "description": "Cờ tương thích; dành cho đầu ra khóa hệ tọa độ chi tiết trong tương lai."
              }
            }
          },
          "lidar_kappa": {
            "name": "Kappa LiDAR",
            "description": "Tính báo cáo mức thống nhất kappa giữa hai đám mây LiDAR đã phân loại và ghi raster thống nhất lớp.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn LiDAR đã phân loại hoặc đối tượng LiDAR có kiểu."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn LiDAR tham chiếu hoặc đối tượng LiDAR có kiểu."
              },
              "report": {
                "label": "Báo cáo",
                "description": "Đường dẫn báo cáo HTML đầu ra."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải lưới cho đầu ra mức đồng thuận lớp theo không gian."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              },
              "output_class_accuracy": {
                "label": "Đầu ra độ chính xác lớp",
                "description": "Cờ tương thích được giữ lại để tương đương với phiên bản cũ; raster đồng thuận luôn được tạo ra."
              }
            }
          },
          "lidar_point_density": {
            "name": "Mật độ điểm LiDAR",
            "description": "Lập bản đồ cường độ lấy mẫu LiDAR: số điểm trên mỗi đơn vị diện tích (số điểm trong bán kính trên mỗi ô). Đánh giá chất lượng dữ liệu, phân tích độ phủ, trực quan hóa mẫu thu nhận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước ô đầu ra."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận để đếm điểm."
              },
              "returns_included": {
                "label": "Phản hồi bao gồm",
                "description": "Chế độ lọc theo lần phản hồi: all, first, hoặc last."
              },
              "excluded_classes": {
                "label": "Lớp loại trừ",
                "description": "Các lớp cần loại trừ (mảng hoặc chuỗi phân tách bằng dấu phẩy)."
              },
              "min_elev": {
                "label": "Độ cao tối thiểu",
                "description": "Ngưỡng độ cao nhỏ nhất dùng để lọc chọn điểm."
              },
              "max_elev": {
                "label": "Độ cao tối đa",
                "description": "Ngưỡng độ cao lớn nhất dùng để lọc chọn điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "lidar_point_return_analysis": {
            "name": "Phân tích phản hồi điểm LiDAR",
            "description": "Công cụ kiểm tra chất lượng: kiểm toán tính hợp lệ của chuỗi phản hồi (tính nhất quán multi/first/last). Tạo báo cáo + đầu ra đã phân loại đánh dấu các dị thường phản hồi. Kiểm tra tính toàn vẹn dữ liệu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "create_output": {
                "label": "Tạo đầu ra",
                "description": "Nếu true thì ghi ra một tệp LiDAR đã phân loại phục vụ kiểm tra chất lượng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn dùng khi create_output=true."
              },
              "report": {
                "label": "Báo cáo",
                "description": "Đường dẫn báo cáo dạng văn bản đầu ra tùy chọn."
              }
            }
          },
          "lidar_point_stats": {
            "name": "Thống kê điểm LiDAR",
            "description": "Tạo các lưới thống kê raster: số điểm, số xung, số điểm trung bình/xung, dải z/cường độ, lớp chiếm ưu thế trên mỗi ô. Phân tích nhiều đầu ra.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào tùy chọn hoặc đối tượng LiDAR có kiểu. Nếu bỏ qua, chạy ở chế độ hàng loạt trên các tệp LiDAR trong thư mục hiện tại."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải lưới đầu ra."
              },
              "num_points": {
                "label": "Số điểm",
                "description": "Tạo raster số lượng điểm."
              },
              "num_pulses": {
                "label": "Số xung",
                "description": "Tạo raster số xung có lần phản hồi sớm."
              },
              "avg_points_per_pulse": {
                "label": "Số điểm trung bình mỗi xung",
                "description": "Tạo raster số điểm trung bình trên mỗi xung."
              },
              "z_range": {
                "label": "Khoảng Z",
                "description": "Tạo raster biên độ độ cao."
              },
              "intensity_range": {
                "label": "Khoảng cường độ",
                "description": "Tạo raster biên độ cường độ."
              },
              "predominant_class": {
                "label": "Lớp chiếm ưu thế",
                "description": "Tạo raster lớp chiếm ưu thế."
              },
              "output_directory": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục đầu ra tùy chọn cho các raster được tạo."
              }
            }
          },
          "lidar_ransac_planes": {
            "name": "Mặt phẳng RANSAC LiDAR",
            "description": "Xác định các điểm LiDAR phẳng cục bộ sử dụng phép khớp mặt phẳng RANSAC theo vùng lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận để khớp mặt phẳng cục bộ."
              },
              "num_iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp RANSAC cho mỗi điểm."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Số điểm lân cận được lấy mẫu trong mỗi lần lặp RANSAC."
              },
              "inlier_threshold": {
                "label": "Ngưỡng điểm phù hợp",
                "description": "Phần dư điểm-tới-mặt phẳng lớn nhất để được coi là điểm trong."
              },
              "acceptable_model_size": {
                "label": "Kích thước mô hình chấp nhận",
                "description": "Số điểm trong tối thiểu cần có cho một mô hình mặt phẳng."
              },
              "max_planar_slope": {
                "label": "Độ dốc phẳng tối đa",
                "description": "Độ dốc mặt phẳng lớn nhất được chấp nhận tính bằng độ."
              },
              "classify": {
                "label": "Phân loại",
                "description": "Nếu true thì phân loại điểm phẳng và điểm không phẳng thay vì lọc bỏ."
              },
              "only_last_returns": {
                "label": "Chỉ phản hồi cuối",
                "description": "Nếu true, chỉ dùng các lần phản hồi muộn khi khớp mô hình."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "lidar_rooftop_analysis": {
            "name": "Phân tích mái nhà LiDAR",
            "description": "Xác định các phân đoạn mái nhà phẳng trong dấu chân công trình và xuất ra đa giác phân đoạn kèm thuộc tính mái.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các đường dẫn LiDAR đầu vào hoặc các đối tượng LiDAR có kiểu."
              },
              "building_footprints": {
                "label": "Đường bao nhà",
                "description": "Lớp đa giác đường bao công trình."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận để phân tích mái cục bộ."
              },
              "inlier_threshold": {
                "label": "Ngưỡng điểm phù hợp",
                "description": "Phần dư lớn nhất cho mặt phẳng cục bộ hỗ trợ."
              },
              "acceptable_model_size": {
                "label": "Kích thước mô hình chấp nhận",
                "description": "Kích thước phân đoạn tối thiểu."
              },
              "max_planar_slope": {
                "label": "Độ dốc phẳng tối đa",
                "description": "Độ dốc lớn nhất của các mặt mái tính bằng độ."
              },
              "norm_diff_threshold": {
                "label": "Ngưỡng hiệu pháp tuyến",
                "description": "Chênh lệch góc lớn nhất giữa các pháp tuyến lân cận tính bằng độ."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Phương vị chiếu sáng cho kiểu chiếu sáng mặt theo bóng đổ địa hình."
              },
              "altitude": {
                "label": "Góc cao",
                "description": "Góc cao chiếu sáng cho kiểu chiếu sáng mặt theo bóng đổ địa hình."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn."
              }
            }
          },
          "normal_vectors": {
            "name": "Vector pháp tuyến",
            "description": "Tính pháp tuyến bề mặt theo từng điểm: PCA trên vùng lân cận cục bộ ước lượng hướng mặt phẳng. Pháp tuyến được lưu trong bản ghi điểm và trực quan hóa RGB.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn LiDAR đầu vào hoặc đối tượng LiDAR có kiểu."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận để khớp mặt phẳng cục bộ. Giá trị <= 0 sẽ dùng khoảng cách danh nghĩa được ước lượng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn."
              }
            }
          },
          "snap_events_to_routes": {
            "name": "Bắt dính sự kiện vào tuyến",
            "description": "Bắt dính các điểm sự kiện vào đường tuyến và báo cáo các chẩn đoán số đo/độ lệch tuyến.",
            "params": {
              "routes": {
                "label": "Tuyến",
                "description": "Lớp đường tuyến đầu vào."
              },
              "events": {
                "label": "Sự kiện",
                "description": "Lớp điểm sự kiện đầu vào."
              },
              "max_offset_distance": {
                "label": "Khoảng cách lệch tối đa",
                "description": "Khoảng cách lệch tối đa so với tuyến, tùy chọn, theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm sự kiện đã bắt dính đầu ra."
              }
            }
          },
          "locate_points_along_routes": {
            "name": "Định vị điểm dọc tuyến",
            "description": "Định vị các đối tượng điểm dọc theo đường tuyến và ghi các thuộc tính số đo tuyến.",
            "params": {
              "routes": {
                "label": "Tuyến",
                "description": "Lớp đường tuyến đầu vào."
              },
              "points": {
                "label": "Điểm",
                "description": "Lớp điểm đầu vào cần định vị dọc theo các tuyến."
              },
              "max_offset_distance": {
                "label": "Khoảng cách lệch tối đa",
                "description": "Khoảng cách lệch tối đa từ điểm tới tuyến, tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "points_along_lines": {
            "name": "Điểm dọc đường",
            "description": "Tạo các đối tượng điểm cách đều dọc theo các polyline đầu vào phục vụ giám sát cơ sở hạ tầng, lấy mẫu môi trường và phân tích không gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường đầu vào."
              },
              "spacing": {
                "label": "Khoảng cách đều",
                "description": "Khoảng cách giữa các điểm."
              },
              "include_end": {
                "label": "Bao gồm điểm cuối",
                "description": "Bao gồm các điểm đầu cuối của đường (mặc định true)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "route_calibrate": {
            "name": "Hiệu chuẩn tuyến",
            "description": "Hiệu chuẩn số đo đầu/cuối tuyến từ các điểm khống chế có số đo đã biết.",
            "params": {
              "routes": {
                "label": "Tuyến",
                "description": "Lớp đường tuyến đầu vào."
              },
              "control_points": {
                "label": "Điểm khống chế",
                "description": "Lớp điểm khống chế đầu vào."
              },
              "control_measure_field": {
                "label": "Trường số đo khống chế",
                "description": "Trường của điểm khống chế chứa các giá trị số đo đã biết."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường mã định danh tuyến tùy chọn trong lớp tuyến. Mặc định là FID của đối tượng."
              },
              "control_route_id_field": {
                "label": "Trường ID tuyến khống chế",
                "description": "Trường mã định danh tuyến tùy chọn trong lớp điểm khống chế. Mặc định là FID của đối tượng."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường đầu ra cho số đo bắt đầu tuyến (mặc định 'from_measure')."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường đầu ra cho số đo kết thúc tuyến (mặc định 'to_measure')."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Khoảng cách lệch lớn nhất của điểm khống chế so với hình học tuyến (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp tuyến đã hiệu chuẩn đầu ra."
              }
            }
          },
          "route_event_lines_from_layer": {
            "name": "Đường sự kiện tuyến từ lớp",
            "description": "Tạo các sự kiện đường theo tuyến từ một lớp vector sự kiện sử dụng số đo từ/đến.",
            "params": {
              "routes": {
                "label": "Tuyến",
                "description": "Lớp đường tuyến đầu vào."
              },
              "events": {
                "label": "Sự kiện",
                "description": "Lớp vector sự kiện đầu vào."
              },
              "event_route_field": {
                "label": "Trường tuyến sự kiện",
                "description": "Trường của lớp sự kiện chứa mã định danh tuyến."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường của lớp sự kiện chứa các số đo bắt đầu."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường của lớp sự kiện chứa các số đo kết thúc."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường tùy chọn của lớp tuyến chứa mã định danh tuyến. Mặc định là FID của đối tượng."
              },
              "write_event_fid": {
                "label": "Ghi FID sự kiện",
                "description": "Ghi EVENT_FID để giữ lại mã đối tượng sự kiện nguồn (mặc định true)."
              },
              "write_event_xy": {
                "label": "Ghi XY sự kiện",
                "description": "Ghi các thuộc tính X/Y của hình học sự kiện nguồn (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra."
              }
            }
          },
          "route_event_lines_from_table": {
            "name": "Đường sự kiện tuyến từ bảng",
            "description": "Tạo các sự kiện đường theo tuyến từ bảng sự kiện CSV và một lớp tuyến sử dụng số đo từ/đến.",
            "params": {
              "routes": {
                "label": "Tuyến",
                "description": "Lớp đường tuyến đầu vào."
              },
              "events": {
                "label": "Sự kiện",
                "description": "Đường dẫn bảng sự kiện CSV đầu vào."
              },
              "event_route_field": {
                "label": "Trường tuyến sự kiện",
                "description": "Trường CSV chứa mã định danh tuyến."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường CSV chứa các số đo bắt đầu."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường CSV chứa các số đo kết thúc."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường tùy chọn của lớp tuyến chứa mã định danh tuyến. Mặc định là FID của đối tượng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra."
              }
            }
          },
          "route_event_merge": {
            "name": "Gộp sự kiện tuyến",
            "description": "Gộp các sự kiện tuyến tương thích liền kề.",
            "params": {
              "events": {
                "label": "Sự kiện",
                "description": "Lớp sự kiện đầu vào chứa các khoảng trên tuyến."
              },
              "event_route_field": {
                "label": "Trường tuyến sự kiện",
                "description": "Trường mã định danh tuyến của lớp sự kiện."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường bắt đầu khoảng của lớp sự kiện."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường kết thúc khoảng của lớp sự kiện."
              },
              "group_fields": {
                "label": "Trường nhóm",
                "description": "Các trường tùy chọn phân tách bằng dấu phẩy dùng để xét tính tương thích khi gộp. Mặc định là mọi trường không phải số đo."
              },
              "gap_tolerance": {
                "label": "Dung sai khoảng trống",
                "description": "Khoảng trống lớn nhất cho phép khi gộp các khoảng liền kề (mặc định 0.0)."
              },
              "conflict_mode": {
                "label": "Chế độ xung đột",
                "description": "Chế độ xử lý chồng lấp: error|skip (mặc định error)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp sự kiện đã gộp đầu ra."
              }
            }
          },
          "route_event_overlay": {
            "name": "Chồng lớp sự kiện tuyến",
            "description": "Chồng lớp hai lớp sự kiện tuyến theo sự chồng lấn khoảng.",
            "params": {
              "primary_events": {
                "label": "Sự kiện chính",
                "description": "Lớp sự kiện chính."
              },
              "overlay_events": {
                "label": "Sự kiện chồng lớp",
                "description": "Lớp sự kiện chồng lớp."
              },
              "primary_route_field": {
                "label": "Trường tuyến chính",
                "description": "Trường mã định danh tuyến của lớp chính."
              },
              "primary_from_measure_field": {
                "label": "Trường số đo đầu chính",
                "description": "Trường bắt đầu khoảng của lớp chính."
              },
              "primary_to_measure_field": {
                "label": "Trường số đo cuối chính",
                "description": "Trường kết thúc khoảng của lớp chính."
              },
              "overlay_route_field": {
                "label": "Trường tuyến chồng lớp",
                "description": "Trường mã định danh tuyến của lớp chồng lớp."
              },
              "overlay_from_measure_field": {
                "label": "Trường số đo đầu chồng lớp",
                "description": "Trường bắt đầu khoảng của lớp chồng lớp."
              },
              "overlay_to_measure_field": {
                "label": "Trường số đo cuối chồng lớp",
                "description": "Trường kết thúc khoảng của lớp chồng lớp."
              },
              "min_overlap_length": {
                "label": "Chiều dài chồng lấn tối thiểu",
                "description": "Chiều dài chồng lấp tối thiểu để giữ lại (mặc định 0.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp chồng lớp đầu ra."
              }
            }
          },
          "route_event_points_from_layer": {
            "name": "Điểm sự kiện tuyến từ lớp",
            "description": "Tạo các sự kiện điểm theo tuyến từ một lớp vector sự kiện và một lớp tuyến.",
            "params": {
              "routes": {
                "label": "Tuyến",
                "description": "Lớp đường tuyến đầu vào."
              },
              "events": {
                "label": "Sự kiện",
                "description": "Lớp vector sự kiện đầu vào."
              },
              "event_route_field": {
                "label": "Trường tuyến sự kiện",
                "description": "Trường của lớp sự kiện chứa mã định danh tuyến."
              },
              "measure_field": {
                "label": "Trường số đo",
                "description": "Trường của lớp sự kiện chứa số đo của sự kiện điểm."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường tùy chọn của lớp tuyến chứa mã định danh tuyến. Mặc định là FID của đối tượng."
              },
              "write_event_fid": {
                "label": "Ghi FID sự kiện",
                "description": "Ghi EVENT_FID để giữ lại mã đối tượng sự kiện nguồn (mặc định true)."
              },
              "write_event_xy": {
                "label": "Ghi XY sự kiện",
                "description": "Ghi các thuộc tính X/Y của hình học sự kiện nguồn (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "route_event_points_from_table": {
            "name": "Điểm sự kiện tuyến từ bảng",
            "description": "Tạo các sự kiện điểm theo tuyến từ bảng sự kiện CSV và một lớp tuyến.",
            "params": {
              "routes": {
                "label": "Tuyến",
                "description": "Lớp đường tuyến đầu vào."
              },
              "events": {
                "label": "Sự kiện",
                "description": "Đường dẫn bảng sự kiện CSV đầu vào."
              },
              "event_route_field": {
                "label": "Trường tuyến sự kiện",
                "description": "Trường CSV chứa mã định danh tuyến."
              },
              "measure_field": {
                "label": "Trường số đo",
                "description": "Trường CSV chứa số đo của sự kiện điểm."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường tùy chọn của lớp tuyến chứa mã định danh tuyến. Mặc định là FID của đối tượng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "route_event_split": {
            "name": "Tách sự kiện tuyến",
            "description": "Tách các sự kiện tuyến theo số đo ranh giới của từng tuyến.",
            "params": {
              "events": {
                "label": "Sự kiện",
                "description": "Lớp sự kiện đầu vào chứa các khoảng trên tuyến."
              },
              "boundaries": {
                "label": "Ranh giới",
                "description": "Lớp ranh giới đầu vào chứa các điểm gãy số đo trên tuyến."
              },
              "event_route_field": {
                "label": "Trường tuyến sự kiện",
                "description": "Trường mã định danh tuyến của lớp sự kiện."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường bắt đầu khoảng của lớp sự kiện."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường kết thúc khoảng của lớp sự kiện."
              },
              "boundary_route_field": {
                "label": "Trường tuyến ranh giới",
                "description": "Trường mã định danh tuyến của lớp ranh giới."
              },
              "boundary_measure_field": {
                "label": "Trường số đo ranh giới",
                "description": "Trường số đo của lớp ranh giới."
              },
              "min_segment_length": {
                "label": "Chiều dài đoạn tối thiểu",
                "description": "Chiều dài đoạn tách tối thiểu để giữ lại, tùy chọn (mặc định 0.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp sự kiện đã tách đầu ra."
              }
            }
          },
          "route_measure_qa": {
            "name": "Kiểm tra chất lượng số đo tuyến",
            "description": "Chẩn đoán các khoảng trống, chồng lấn, chuỗi không đơn điệu và số đo trùng lặp trong số đo sự kiện tuyến.",
            "params": {
              "events": {
                "label": "Sự kiện",
                "description": "Lớp sự kiện đầu vào chứa các khoảng trên tuyến."
              },
              "route_field": {
                "label": "Trường tuyến",
                "description": "Trường mã định danh tuyến."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường bắt đầu khoảng."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường kết thúc khoảng."
              },
              "gap_tolerance": {
                "label": "Dung sai khoảng trống",
                "description": "Dung sai khoảng trống (mặc định 0.0)."
              },
              "overlap_tolerance": {
                "label": "Dung sai chồng lấn",
                "description": "Dung sai chồng lấp (mặc định 0.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp chẩn đoán kiểm tra chất lượng đầu ra."
              }
            }
          },
          "route_recalibrate": {
            "name": "Hiệu chuẩn lại tuyến",
            "description": "Hiệu chuẩn lại các số đo tuyến đã chỉnh sửa từ một lớp tuyến tham chiếu trong khi bảo toàn tính liên tục của số đo tuyến.",
            "params": {
              "original_routes": {
                "label": "Tuyến gốc",
                "description": "Các tuyến tham chiếu chứa các số đo đã hiệu chuẩn trước đó."
              },
              "edited_routes": {
                "label": "Tuyến đã chỉnh sửa",
                "description": "Các tuyến đã chỉnh sửa cần hiệu chuẩn lại."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường mã định danh tuyến dùng chung tùy chọn. Mặc định là FID của đối tượng."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Tên trường số đo bắt đầu (mặc định 'from_measure')."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Tên trường số đo kết thúc (mặc định 'to_measure')."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp tuyến đã hiệu chuẩn lại đầu ra."
              }
            }
          },
          "build_network_topology": {
            "name": "Xây dựng tô pô mạng lưới",
            "description": "Xây dựng mạng lưới đường tô pô có nút với các đầu ra cạnh và nút ổn định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng khi phát hiện và tách các giao cắt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector cạnh đã tạo nút theo tô pô đầu ra."
              },
              "nodes_output": {
                "label": "Đầu ra nút",
                "description": "Đường dẫn vector nút đầu ra tùy chọn."
              }
            }
          },
          "closest_facility_network": {
            "name": "Cơ sở gần nhất trên mạng lưới",
            "description": "Tìm tuyến mạng lưới có chi phí thấp nhất từ mỗi điểm sự cố đến điểm cơ sở gần nhất có thể tiếp cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "incidents": {
                "label": "Sự cố",
                "description": "Lớp điểm sự cố/nhu cầu."
              },
              "facilities": {
                "label": "Cơ sở",
                "description": "Lớp điểm cơ sở/nguồn cung."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm sự cố/cơ sở tới nút mạng lưới gần nhất."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (true/1/yes nghĩa là chỉ đi từ đỉnh thứ nhất tới đỉnh thứ hai)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian (mức bao phủ, các cạnh không khớp, mức sử dụng phương án dự phòng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tuyến tới cơ sở gần nhất đầu ra."
              }
            }
          },
          "generate_network_nodes": {
            "name": "Tạo nút mạng lưới",
            "description": "Tạo các nút mạng lưới và chẩn đoán nút từ tô pô đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm nút đầu ra."
              }
            }
          },
          "k_shortest_paths_network": {
            "name": "K đường đi ngắn nhất trên mạng lưới",
            "description": "Tìm k đường đi đơn ngắn nhất giữa tọa độ bắt đầu và kết thúc trên mạng lưới đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "start_x": {
                "label": "X bắt đầu",
                "description": "Tọa độ x điểm đầu."
              },
              "start_y": {
                "label": "Y bắt đầu",
                "description": "Tọa độ y điểm đầu."
              },
              "end_x": {
                "label": "X kết thúc",
                "description": "Tọa độ x điểm cuối."
              },
              "end_y": {
                "label": "Y kết thúc",
                "description": "Tọa độ y điểm cuối."
              },
              "k": {
                "label": "K",
                "description": "Số đường đi ngắn nhất cần trả về."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ tọa độ điểm đầu/điểm cuối tới nút mạng lưới gần nhất."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (true/1/yes nghĩa là chỉ đi từ đỉnh thứ nhất tới đỉnh thứ hai)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian (mức bao phủ, các cạnh không khớp, mức sử dụng phương án dự phòng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra."
              }
            }
          },
          "location_allocation_network": {
            "name": "Phân bổ vị trí trên mạng lưới",
            "description": "Chọn k cơ sở và phân bổ các điểm nhu cầu theo chi phí mạng lưới bằng phương pháp giải tham lam hoặc chính xác, với tùy chọn năng lực và các ràng buộc ứng viên bắt buộc/bị cấm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "demand_points": {
                "label": "Điểm nhu cầu",
                "description": "Lớp điểm nhu cầu cần phân bổ."
              },
              "facilities": {
                "label": "Cơ sở",
                "description": "Lớp điểm cơ sở ứng viên."
              },
              "facility_count": {
                "label": "Số cơ sở",
                "description": "Số cơ sở cần chọn (k)."
              },
              "solver_mode": {
                "label": "Chế độ giải",
                "description": "Chế độ giải: auto, greedy, hoặc exact (exact dành cho các bài toán nhỏ hơn)."
              },
              "demand_weight_field": {
                "label": "Trường trọng số nhu cầu",
                "description": "Trường trọng số nhu cầu dạng số tùy chọn trong demand_points (mặc định trọng số=1)."
              },
              "facility_capacity_field": {
                "label": "Trường sức chứa cơ sở",
                "description": "Trường sức chứa dạng số tùy chọn trong lớp cơ sở; sức chứa bị tiêu hao bởi các giá trị của demand_weight_field."
              },
              "required_facility_field": {
                "label": "Trường cơ sở bắt buộc",
                "description": "Trường Boole tùy chọn của lớp cơ sở đánh dấu các ứng viên bắt buộc phải được chọn."
              },
              "forbidden_facility_field": {
                "label": "Trường cơ sở bị cấm",
                "description": "Trường Boole tùy chọn của lớp cơ sở đánh dấu các ứng viên không được phép chọn."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm nhu cầu/cơ sở tới nút mạng lưới gần nhất."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (true/1/yes nghĩa là chỉ đi từ đỉnh thứ nhất tới đỉnh thứ hai)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian (mức bao phủ, các cạnh không khớp, mức sử dụng phương án dự phòng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tuyến đã phân bổ đầu ra."
              }
            }
          },
          "map_matching_v1": {
            "name": "Khớp bản đồ V1",
            "description": "Bắt dính các điểm quỹ đạo vào mạng lưới đường và tái tạo tuyến được suy ra kèm chẩn đoán.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "trajectory_points": {
                "label": "Điểm quỹ đạo",
                "description": "Lớp điểm quỹ đạo đầu vào."
              },
              "timestamp_field": {
                "label": "Trường dấu thời gian",
                "description": "Trường của quỹ đạo dùng để sắp xếp theo thời gian."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính tìm kiếm ứng viên tùy chọn quanh mỗi điểm quỹ đạo."
              },
              "candidate_k": {
                "label": "Số ứng viên K",
                "description": "Số ứng viên gần nhất được giữ lại cho mỗi điểm, tùy chọn."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn để bắt dính các điểm quỹ đạo vào các nút mạng lưới."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "matched_points_output": {
                "label": "Đầu ra điểm đã khớp",
                "description": "Đường dẫn vector đầu ra tùy chọn cho chẩn đoán theo từng điểm."
              },
              "match_report": {
                "label": "Báo cáo khớp",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán tóm tắt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra cho tuyến được suy ra."
              }
            }
          },
          "multimodal_od_cost_matrix": {
            "name": "Ma trận chi phí OD đa phương thức",
            "description": "Tính hàng loạt chi phí OD đa phương thức và tóm tắt phương thức giữa các tập điểm đi và điểm đến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc."
              },
              "destinations": {
                "label": "Điểm đến",
                "description": "Lớp điểm đích."
              },
              "mode_field": {
                "label": "Trường phương thức",
                "description": "Trường thuộc tính của lớp đường xác định phương thức di chuyển cho từng đoạn."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm gốc/đích tới nút mạng lưới gần nhất."
              },
              "default_mode_speed": {
                "label": "Tốc độ mặc định của phương thức",
                "description": "Tốc độ mặc định của phương thức tính bằng đơn vị tọa độ trên đơn vị thời gian (mặc định: 1)."
              },
              "mode_speed_overrides": {
                "label": "Ghi đè tốc độ phương thức",
                "description": "Các giá trị ghi đè mode:speed tùy chọn phân tách bằng dấu phẩy (ví dụ: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Phương thức cho phép",
                "description": "Danh sách cho phép tùy chọn các phương thức được đưa vào định tuyến, phân tách bằng dấu phẩy."
              },
              "transfer_penalty": {
                "label": "Phạt chuyển phương thức",
                "description": "Mức phạt cộng thêm tùy chọn áp dụng mỗi khi tuyến đổi phương thức."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian khi dùng đầu vào thời gian trực tiếp."
              },
              "scenario_bundle_csv": {
                "label": "CSV gói kịch bản",
                "description": "Tệp CSV tùy chọn liệt kê các kịch bản thời gian có tên cho đầu ra OD so sánh nhiều kịch bản."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "multimodal_routes_from_od": {
            "name": "Tuyến đa phương thức từ OD",
            "description": "Xây dựng hình học tuyến cho các cặp điểm đi-điểm đến đa phương thức kèm tóm tắt phương thức theo từng tuyến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc."
              },
              "destinations": {
                "label": "Điểm đến",
                "description": "Lớp điểm đích."
              },
              "mode_field": {
                "label": "Trường phương thức",
                "description": "Trường thuộc tính của lớp đường xác định phương thức di chuyển cho từng đoạn."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm gốc/đích tới nút mạng lưới gần nhất."
              },
              "default_mode_speed": {
                "label": "Tốc độ mặc định của phương thức",
                "description": "Tốc độ mặc định của phương thức tính bằng đơn vị tọa độ trên đơn vị thời gian (mặc định: 1)."
              },
              "mode_speed_overrides": {
                "label": "Ghi đè tốc độ phương thức",
                "description": "Các giá trị ghi đè mode:speed tùy chọn phân tách bằng dấu phẩy (ví dụ: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Phương thức cho phép",
                "description": "Danh sách cho phép tùy chọn các phương thức được đưa vào định tuyến, phân tách bằng dấu phẩy."
              },
              "transfer_penalty": {
                "label": "Phạt chuyển phương thức",
                "description": "Mức phạt cộng thêm tùy chọn áp dụng mỗi khi tuyến đổi phương thức."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian khi dùng đầu vào thời gian trực tiếp."
              },
              "scenario_bundle_csv": {
                "label": "CSV gói kịch bản",
                "description": "Tệp CSV tùy chọn liệt kê các kịch bản thời gian có tên cho đầu ra tuyến so sánh nhiều kịch bản."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tuyến đầu ra."
              }
            }
          },
          "multimodal_shortest_path": {
            "name": "Đường đi ngắn nhất đa phương thức",
            "description": "Tìm đường đi ngắn nhất có xét đến phương thức trên mạng lưới đường với mức phạt chuyển tiếp có thể cấu hình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "start_x": {
                "label": "X bắt đầu",
                "description": "Tọa độ x điểm đầu."
              },
              "start_y": {
                "label": "Y bắt đầu",
                "description": "Tọa độ y điểm đầu."
              },
              "end_x": {
                "label": "X kết thúc",
                "description": "Tọa độ x điểm cuối."
              },
              "end_y": {
                "label": "Y kết thúc",
                "description": "Tọa độ y điểm cuối."
              },
              "mode_field": {
                "label": "Trường phương thức",
                "description": "Trường thuộc tính của lớp đường xác định phương thức di chuyển cho từng đoạn."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ tọa độ điểm đầu/điểm cuối tới nút mạng lưới gần nhất."
              },
              "default_mode_speed": {
                "label": "Tốc độ mặc định của phương thức",
                "description": "Tốc độ mặc định của phương thức tính bằng đơn vị tọa độ trên đơn vị thời gian (mặc định: 1)."
              },
              "mode_speed_overrides": {
                "label": "Ghi đè tốc độ phương thức",
                "description": "Các giá trị ghi đè mode:speed tùy chọn phân tách bằng dấu phẩy (ví dụ: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Phương thức cho phép",
                "description": "Danh sách cho phép tùy chọn các phương thức được đưa vào định tuyến, phân tách bằng dấu phẩy."
              },
              "transfer_penalty": {
                "label": "Phạt chuyển phương thức",
                "description": "Mức phạt cộng thêm tùy chọn áp dụng mỗi khi tuyến đổi phương thức."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra."
              }
            }
          },
          "network_accessibility_metrics": {
            "name": "Chỉ số khả năng tiếp cận mạng lưới",
            "description": "Tính các chỉ số khả năng tiếp cận cho các điểm đi dựa trên khả năng đến được các điểm đến, với tùy chọn ngưỡng cắt trở kháng và hàm suy giảm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc."
              },
              "destinations": {
                "label": "Điểm đến",
                "description": "Lớp điểm đích."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm gốc/đích tới nút mạng lưới gần nhất."
              },
              "impedance_cutoff": {
                "label": "Ngưỡng trở kháng",
                "description": "Ngưỡng khoảng cách tối đa tùy chọn để đếm các điểm đích có thể tới được (mặc định: vô cùng)."
              },
              "decay_function": {
                "label": "Hàm suy giảm",
                "description": "Hàm suy giảm tùy chọn: 'none' (mặc định), 'linear', hoặc 'exponential' cho khả năng tiếp cận có trọng số theo khoảng cách."
              },
              "decay_parameter": {
                "label": "Tham số suy giảm",
                "description": "Tham số suy giảm tùy chọn (lambda cho hàm mũ, tốc độ cho tuyến tính)."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "parallel_execution": {
                "label": "Thực thi song song",
                "description": "Nếu true (mặc định), tính toán các điểm gốc song song để tăng tốc độ tính khả năng tiếp cận."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (các điểm gốc kèm chỉ số khả năng tiếp cận)."
              }
            }
          },
          "network_centrality_metrics": {
            "name": "Chỉ số trung tâm mạng lưới",
            "description": "Tính các chỉ số trung tâm cơ bản gồm bậc, độ gần và độ trung gian cho các nút mạng lưới.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi việc xây dựng đồ thị (true/1/yes là chặn)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "network_connected_components": {
            "name": "Thành phần liên thông mạng lưới",
            "description": "Gán ID thành phần liên thông cho mỗi đối tượng đường trong mạng lưới.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra."
              }
            }
          },
          "network_node_degree": {
            "name": "Bậc nút mạng lưới",
            "description": "Trích xuất các nút mạng lưới từ đối tượng đường và tính bậc nút và kiểu nút.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "network_od_cost_matrix": {
            "name": "Ma trận chi phí OD mạng lưới",
            "description": "Tính chi phí đường đi ngắn nhất điểm đi-điểm đến trên mạng lưới đường và ghi ra ma trận CSV.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc."
              },
              "destinations": {
                "label": "Điểm đến",
                "description": "Lớp điểm đích."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm gốc/đích tới nút mạng lưới gần nhất."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian (mức bao phủ, các cạnh không khớp, mức sử dụng phương án dự phòng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "network_routes_from_od": {
            "name": "Tuyến mạng lưới từ OD",
            "description": "Xây dựng hình học tuyến cho các cặp điểm đi-điểm đến trên mạng lưới đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc."
              },
              "destinations": {
                "label": "Điểm đến",
                "description": "Lớp điểm đích."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm gốc/đích tới nút mạng lưới gần nhất."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian (mức bao phủ, các cạnh không khớp, mức sử dụng phương án dự phòng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tuyến đầu ra."
              }
            }
          },
          "network_service_area": {
            "name": "Vùng phục vụ mạng lưới",
            "description": "Tính các nút mạng lưới có thể đến được từ các điểm đi trong phạm vi chi phí mạng lưới tối đa.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc."
              },
              "max_cost": {
                "label": "Chi phí tối đa",
                "description": "Chi phí đường đi tối đa có thể tới được."
              },
              "ring_costs": {
                "label": "Chi phí vòng",
                "description": "Các ngưỡng vành đai tùy chọn phân tách bằng dấu phẩy cho đầu ra nhiều vành đai (ví dụ: 5,10,15)."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm gốc tới nút mạng lưới gần nhất."
              },
              "output_mode": {
                "label": "Chế độ đầu ra",
                "description": "Chế độ đầu ra: 'nodes' (mặc định), 'edges' cho các đoạn cạnh tới được đã cắt theo chi phí, hoặc 'polygons' cho các đa giác dạng đường đẳng thời theo từng điểm gốc dựng từ hộp bao của các cạnh tới được."
              },
              "polygon_merge_origins": {
                "label": "Gộp đa giác theo điểm đi",
                "description": "Nếu true và output_mode='polygons', hòa tan các đa giác gốc chồng lấp thành vùng phủ đã gộp cho mỗi vành đai thay vì xuất một đa giác cho mỗi điểm gốc."
              },
              "mode_field": {
                "label": "Trường phương thức",
                "description": "Trường thuộc tính tùy chọn của lớp đường xác định phương thức di chuyển cho từng đoạn; cho phép tính chi phí vùng phục vụ có nhận biết phương thức."
              },
              "default_mode_speed": {
                "label": "Tốc độ mặc định của phương thức",
                "description": "Tốc độ mặc định của phương thức tính bằng đơn vị tọa độ trên đơn vị thời gian khi có cung cấp mode_field (mặc định: 1)."
              },
              "mode_speed_overrides": {
                "label": "Ghi đè tốc độ phương thức",
                "description": "Các giá trị ghi đè mode:speed tùy chọn phân tách bằng dấu phẩy (ví dụ: walk:1.4,drive:12)."
              },
              "allowed_modes": {
                "label": "Phương thức cho phép",
                "description": "Danh sách cho phép tùy chọn các phương thức được đưa vào khi có cung cấp mode_field, phân tách bằng dấu phẩy."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian (mức bao phủ, các cạnh không khớp, mức sử dụng phương án dự phòng)."
              },
              "snapped_origins_output": {
                "label": "Đầu ra điểm đi đã bắt dính",
                "description": "Đường dẫn vector đầu ra tùy chọn cho các điểm neo gốc đã bắt dính nội bộ dùng làm điểm khởi đầu cho việc duyệt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector vùng phục vụ đầu ra."
              }
            }
          },
          "network_topology_audit": {
            "name": "Kiểm toán tô pô mạng lưới",
            "description": "Kiểm toán mạng lưới đường để phát hiện các bất thường tô pô—thành phần rời rạc, đường cụt và bất thường về bậc—gây lỗi định tuyến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn để loại khỏi phân tích."
              },
              "report": {
                "label": "Báo cáo",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho báo cáo kiểm toán tóm tắt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra cho chẩn đoán theo từng nút."
              }
            }
          },
          "od_sensitivity_analysis": {
            "name": "Phân tích độ nhạy OD",
            "description": "Tính chi phí đường đi ngắn nhất OD với nhiễu loạn trở kháng và xuất ra thống kê độ nhạy thông qua lấy mẫu Monte Carlo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc."
              },
              "destinations": {
                "label": "Điểm đến",
                "description": "Lớp điểm đích."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số bắt buộc của lớp đường dùng làm hệ số nhân trở kháng cho phân tích nhiễu loạn."
              },
              "impedance_disturbance_range": {
                "label": "Khoảng nhiễu trở kháng",
                "description": "Khoảng nhiễu loạn chi phí dưới dạng 'min_factor,max_factor' (ví dụ '0.8,1.2' cho biến thiên ±20%)."
              },
              "monte_carlo_samples": {
                "label": "Số mẫu Monte Carlo",
                "description": "Số mẫu Monte Carlo cho phân tích nhiễu loạn (mặc định 1, tối đa 100)."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ các điểm gốc/đích tới nút mạng lưới gần nhất."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng."
              },
              "node_cost_points": {
                "label": "Điểm chi phí nút",
                "description": "Lớp điểm tùy chọn cung cấp chi phí vào từng nút (ví dụ độ trễ tại nút giao)."
              },
              "node_cost_field": {
                "label": "Trường chi phí nút",
                "description": "Trường số trong node_cost_points chứa chi phí không âm theo từng nút."
              },
              "node_cost_snap_distance": {
                "label": "Khoảng cách bắt dính chi phí nút",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm chi phí nút tới một nút mạng lưới để thực hiện gán."
              },
              "parallel_execution": {
                "label": "Thực thi song song",
                "description": "Nếu true (mặc định), thực hiện tìm kiếm từ các điểm gốc song song cho các lần chạy OD cơ sở và có nhiễu loạn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra chứa các cặp OD và thống kê độ nhạy."
              }
            }
          },
          "shortest_path_network": {
            "name": "Đường đi ngắn nhất trên mạng lưới",
            "description": "Tìm đường đi ngắn nhất giữa tọa độ bắt đầu và kết thúc trên mạng lưới đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp mạng lưới đường đầu vào."
              },
              "start_x": {
                "label": "X bắt đầu",
                "description": "Tọa độ x điểm đầu."
              },
              "start_y": {
                "label": "Y bắt đầu",
                "description": "Tọa độ y điểm đầu."
              },
              "end_x": {
                "label": "X kết thúc",
                "description": "Tọa độ x điểm cuối."
              },
              "end_y": {
                "label": "Y kết thúc",
                "description": "Tọa độ y điểm cuối."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính nút tùy chọn khi xây dựng đồ thị."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách tối đa tùy chọn từ tọa độ điểm đầu/điểm cuối tới nút mạng lưới gần nhất."
              },
              "edge_cost_field": {
                "label": "Trường chi phí cạnh",
                "description": "Trường số tùy chọn của lớp đường dùng làm hệ số nhân trở kháng cho chiều dài đoạn."
              },
              "one_way_field": {
                "label": "Trường một chiều",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh một chiều theo hướng số hóa (hỗ trợ FT/TF/B cùng các giá trị Boole kiểu cũ)."
              },
              "blocked_field": {
                "label": "Trường bị chặn",
                "description": "Trường tùy chọn của lớp đường đánh dấu các cạnh bị chặn/đóng để loại khỏi định tuyến (true/1/yes là chặn)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp điểm rào cản tùy chọn; các nút mạng lưới gần nhất sẽ bị chặn không cho đi qua."
              },
              "barrier_snap_distance": {
                "label": "Khoảng cách bắt dính rào cản",
                "description": "Khoảng cách tối đa tùy chọn từ mỗi điểm rào cản tới một nút mạng lưới để thực hiện chặn."
              },
              "turn_penalty": {
                "label": "Phạt rẽ",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt rẽ không đi thẳng tại các nút mạng lưới."
              },
              "u_turn_penalty": {
                "label": "Phạt quay đầu",
                "description": "Chi phí cộng thêm tùy chọn áp dụng cho các lượt quay đầu."
              },
              "forbid_u_turns": {
                "label": "Cấm quay đầu",
                "description": "Nếu true, không cho phép quay đầu."
              },
              "forbid_left_turns": {
                "label": "Cấm rẽ trái",
                "description": "Nếu true, không cho phép rẽ trái."
              },
              "forbid_right_turns": {
                "label": "Cấm rẽ phải",
                "description": "Nếu true, không cho phép rẽ phải."
              },
              "turn_restrictions_csv": {
                "label": "CSV hạn chế rẽ",
                "description": "Tệp CSV tùy chọn về các lượt rẽ, dùng các cột prev_x,prev_y,node_x,node_y,next_x,next_y. Các cột tùy chọn: forbidden (mặc định true khi không có cột turn_cost) và turn_cost (hoặc penalty/cost/extra_cost) cho chi phí cộng thêm của từng lượt rẽ."
              },
              "temporal_cost_profile": {
                "label": "Hồ sơ chi phí theo thời gian",
                "description": "Tệp CSV tùy chọn định nghĩa chi phí cạnh phụ thuộc thời gian (các cột: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Trường ID cạnh theo thời gian",
                "description": "Trường tùy chọn của mạng lưới dùng để đối sánh các giá trị edge_id của temporal_cost_profile (mặc định EDGE_ID)."
              },
              "departure_time": {
                "label": "Thời gian khởi hành",
                "description": "Thời điểm khởi hành theo RFC3339 tùy chọn dùng để tra cứu hồ sơ thời gian."
              },
              "temporal_mode": {
                "label": "Chế độ thời gian",
                "description": "Chế độ diễn giải thời gian tùy chọn: multiplier hoặc absolute."
              },
              "temporal_fallback": {
                "label": "Dự phòng thời gian",
                "description": "Phương án dự phòng tùy chọn khi thiếu hàng dữ liệu thời gian: static_cost hoặc error."
              },
              "temporal_profile_report": {
                "label": "Báo cáo hồ sơ thời gian",
                "description": "Đường dẫn JSON đầu ra tùy chọn cho chẩn đoán hồ sơ thời gian (mức bao phủ, các cạnh không khớp, mức sử dụng phương án dự phòng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra."
              }
            }
          },
          "split_lines_at_intersections": {
            "name": "Tách đường tại giao điểm",
            "description": "Tách mạng lưới đường tại mọi vị trí các đoạn đường giao nhau, bao gồm cả tự giao.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường đầu vào cần tách tại các giao cắt."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép tách; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đã tách đầu ra."
              }
            }
          },
          "snap_points_to_network": {
            "name": "Bắt dính điểm vào mạng lưới",
            "description": "Bắt dính các đối tượng điểm đầu vào vào vị trí gần nhất dọc theo lớp đường mạng lưới.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp điểm đầu vào cần bắt dính."
              },
              "network": {
                "label": "Mạng lưới",
                "description": "Lớp đường mạng lưới đầu vào."
              },
              "max_snap_distance": {
                "label": "Khoảng cách bắt dính tối đa",
                "description": "Khoảng cách bắt dính tối đa tùy chọn theo đơn vị bản đồ."
              },
              "keep_unsnapped": {
                "label": "Giữ điểm chưa bắt dính",
                "description": "Nếu true (mặc định), giữ lại các điểm không thể bắt dính trong dung sai."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đã bắt dính đầu ra."
              }
            }
          },
          "transfer_attributes": {
            "name": "Chuyển thuộc tính",
            "description": "Chuyển các thuộc tính nguồn sang đối tượng đích sử dụng một vị từ không gian.",
            "params": {
              "target": {
                "label": "Mục tiêu",
                "description": "Lớp đích nhận các thuộc tính được chuyển sang."
              },
              "source": {
                "label": "Nguồn",
                "description": "Lớp nguồn cung cấp các thuộc tính."
              },
              "predicate": {
                "label": "Vị từ",
                "description": "Vị từ không gian: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách khi predicate=within_distance."
              },
              "strategy": {
                "label": "Chiến lược",
                "description": "Chiến lược chuyển: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Tiền tố",
                "description": "Tiền tố cho các trường nguồn được chuyển sang (mặc định SRC_)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "travelling_salesman_problem": {
            "name": "Bài toán người bán hàng",
            "description": "Tìm lời giải gần đúng cho bài toán người bán hàng (TSP) sử dụng heuristic 2-opt. Với một tập hợp vị trí điểm, xác định tuyến ngắn nhất nối tất cả các điểm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "duration": {
                "label": "Thời lượng",
                "description": "Thời lượng tối ưu hóa tối đa tính bằng giây."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn polyline đầu ra tùy chọn."
              }
            }
          },
          "vehicle_routing_cvrp": {
            "name": "Định tuyến xe CVRP",
            "description": "Xây dựng các tuyến giao hàng đa kho có ràng buộc năng lực với các điều khiển đội xe không đồng nhất, chế độ mục tiêu và tùy chọn tối ưu hóa cục bộ.",
            "params": {
              "network": {
                "label": "Mạng lưới",
                "description": "Lớp mạng lưới đường đầu vào (được kiểm tra để giữ tương đương hợp đồng)."
              },
              "depot_points": {
                "label": "Điểm kho",
                "description": "Lớp điểm kho; mỗi điểm có thể đóng góp một hoặc nhiều phương tiện."
              },
              "stop_points": {
                "label": "Điểm dừng",
                "description": "Lớp điểm dừng giao hàng."
              },
              "demand_field": {
                "label": "Trường nhu cầu",
                "description": "Trường nhu cầu dạng số trong stop_points (mặc định: demand)."
              },
              "priority_field": {
                "label": "Trường ưu tiên",
                "description": "Trường mức ưu tiên tùy chọn của điểm dừng dùng các giá trị như required/high/normal/low hoặc thứ hạng dạng số."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Trường hồ sơ xe cho phép",
                "description": "Trường tùy chọn của điểm dừng liệt kê các hồ sơ phương tiện tương thích (phân tách bằng dấu phẩy/chấm phẩy/gạch đứng)."
              },
              "allowed_route_classes_field": {
                "label": "Trường lớp tuyến cho phép",
                "description": "Bí danh tùy chọn của allowed_vehicle_profiles_field cho các quy tắc tương thích theo lớp tuyến."
              },
              "depot_id_field": {
                "label": "Trường ID kho",
                "description": "Trường mã kho tùy chọn dùng trong các đầu ra tuyến/phân công."
              },
              "vehicle_count_field": {
                "label": "Trường số xe",
                "description": "Trường tùy chọn của kho cho số phương tiện được tạo tại mỗi kho."
              },
              "vehicle_capacity_field": {
                "label": "Trường sức chứa xe",
                "description": "Trường tùy chọn của kho ghi đè vehicle_capacity cho từng mẫu kho/phương tiện."
              },
              "vehicle_fixed_cost_field": {
                "label": "Trường chi phí cố định xe",
                "description": "Trường tùy chọn của kho ghi đè vehicle_fixed_cost cho từng mẫu kho/phương tiện."
              },
              "travel_speed_field": {
                "label": "Trường tốc độ di chuyển",
                "description": "Trường tùy chọn của kho ghi đè travel_speed cho từng mẫu kho/phương tiện."
              },
              "max_route_distance_field": {
                "label": "Trường khoảng cách tuyến tối đa",
                "description": "Trường tùy chọn của kho ghi đè max_route_distance cho từng mẫu kho/phương tiện."
              },
              "max_route_time_field": {
                "label": "Trường thời gian tuyến tối đa",
                "description": "Trường tùy chọn của kho ghi đè max_route_time cho từng mẫu kho/phương tiện."
              },
              "vehicle_profile_field": {
                "label": "Trường hồ sơ xe",
                "description": "Trường tùy chọn của kho định nghĩa mã hồ sơ/nhóm phương tiện dùng để xét tương thích với điểm dừng."
              },
              "vehicle_route_class_field": {
                "label": "Trường lớp tuyến xe",
                "description": "Bí danh tùy chọn của vehicle_profile_field cho các quy tắc tương thích theo lớp tuyến."
              },
              "vehicle_capacity": {
                "label": "Sức chứa xe",
                "description": "Sức chứa của mỗi phương tiện (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Chi phí cố định xe",
                "description": "Chi phí cố định tùy chọn tính cho mỗi phương tiện/tuyến được điều động (mặc định: 0)."
              },
              "max_vehicles": {
                "label": "Số xe tối đa",
                "description": "Số phương tiện/tuyến tối đa tùy chọn cần xây dựng."
              },
              "max_route_distance": {
                "label": "Khoảng cách tuyến tối đa",
                "description": "Quãng đường di chuyển tối đa tùy chọn cho mỗi tuyến, tính cả lượt quay về kho."
              },
              "travel_speed": {
                "label": "Tốc độ di chuyển",
                "description": "Tốc độ di chuyển tính bằng đơn vị tọa độ trên đơn vị thời gian (mặc định: 1)."
              },
              "max_route_time": {
                "label": "Thời gian tuyến tối đa",
                "description": "Thời lượng tuyến tối đa tùy chọn theo đơn vị thời gian của mô hình, tính cả lượt quay về kho."
              },
              "max_stops_per_vehicle": {
                "label": "Số điểm dừng tối đa mỗi xe",
                "description": "Số điểm dừng tối đa tùy chọn được phân cho mỗi tuyến của phương tiện."
              },
              "objective_mode": {
                "label": "Chế độ mục tiêu",
                "description": "Mục tiêu xây dựng tuyến: minimize_distance, minimize_vehicles, hoặc minimize_cost."
              },
              "apply_local_optimization": {
                "label": "Áp dụng tối ưu cục bộ",
                "description": "Khi true, áp dụng một lượt cải thiện cục bộ 2-opt tất định cho mỗi tuyến được xây dựng (mặc định: true)."
              },
              "apply_simulated_annealing": {
                "label": "Áp dụng mô phỏng luyện kim",
                "description": "Khi true, áp dụng một lượt tinh chỉnh bằng luyện mô phỏng có hạt giống cho mỗi tuyến sau khi tối ưu tham lam/cục bộ (mặc định: false)."
              },
              "sa_iterations": {
                "label": "Số lần lặp SA",
                "description": "Số lần lặp luyện mô phỏng tối đa cho mỗi tuyến khi apply_simulated_annealing=true (mặc định: 1500)."
              },
              "sa_initial_temperature": {
                "label": "Nhiệt độ ban đầu SA",
                "description": "Nhiệt độ ban đầu của luyện mô phỏng (> 0, mặc định: 1.0)."
              },
              "sa_cooling_rate": {
                "label": "Tốc độ làm nguội SA",
                "description": "Hệ số làm nguội của luyện mô phỏng trong (0, 1); mặc định 0.995."
              },
              "sa_seed": {
                "label": "Hạt giống SA",
                "description": "Hạt giống ngẫu nhiên tất định tùy chọn cho luyện mô phỏng (mặc định: 42)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tuyến đầu ra."
              },
              "assignment_output": {
                "label": "Đầu ra phân công",
                "description": "Đầu ra điểm phân công điểm dừng tùy chọn kèm chẩn đoán thứ tự ghé thăm/tải trọng."
              }
            }
          },
          "vehicle_routing_pickup_delivery": {
            "name": "Định tuyến xe nhận-giao hàng",
            "description": "Xây dựng các tuyến nhận-giao hàng theo cặp với các ràng buộc thứ tự ưu tiên và năng lực sử dụng phương án cơ sở láng giềng gần nhất tất định.",
            "params": {
              "network": {
                "label": "Mạng lưới",
                "description": "Lớp mạng lưới đường đầu vào (được kiểm tra để giữ tương đương hợp đồng)."
              },
              "depot_points": {
                "label": "Điểm kho",
                "description": "Lớp điểm kho; điểm đầu tiên được dùng làm kho đang hoạt động trong cách hiện thực cơ sở này."
              },
              "stop_points": {
                "label": "Điểm dừng",
                "description": "Lớp điểm dừng chứa các bản ghi lấy hàng và giao hàng theo cặp."
              },
              "request_id_field": {
                "label": "Trường ID yêu cầu",
                "description": "Trường mã định danh yêu cầu trong stop_points dùng để ghép cặp các bản ghi lấy hàng và giao hàng (mặc định: request_id)."
              },
              "stop_type_field": {
                "label": "Trường loại điểm dừng",
                "description": "Trường loại điểm dừng trong stop_points chứa các nhãn lấy hàng/giao hàng (mặc định: stop_type)."
              },
              "demand_field": {
                "label": "Trường nhu cầu",
                "description": "Trường nhu cầu dạng số trong stop_points; nhu cầu lấy hàng được nạp còn nhu cầu giao hàng bị bỏ qua (mặc định: demand)."
              },
              "vehicle_capacity": {
                "label": "Sức chứa xe",
                "description": "Sức chứa của mỗi phương tiện (> 0)."
              },
              "max_vehicles": {
                "label": "Số xe tối đa",
                "description": "Số phương tiện/tuyến tối đa tùy chọn cần xây dựng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tuyến đầu ra."
              },
              "assignment_output": {
                "label": "Đầu ra phân công",
                "description": "Đầu ra điểm phân công điểm dừng tùy chọn kèm chẩn đoán yêu cầu và thứ tự ưu tiên."
              }
            }
          },
          "vehicle_routing_vrptw": {
            "name": "Định tuyến xe VRPTW",
            "description": "Xây dựng các tuyến VRPTW đa kho có ràng buộc năng lực với thiết lập đội xe không đồng nhất, khung giờ nghỉ và điều khiển chế độ mục tiêu.",
            "params": {
              "network": {
                "label": "Mạng lưới",
                "description": "Lớp mạng lưới đường đầu vào (được kiểm tra để giữ tương đương hợp đồng)."
              },
              "depot_points": {
                "label": "Điểm kho",
                "description": "Lớp điểm kho; mỗi điểm có thể đóng góp một hoặc nhiều phương tiện."
              },
              "stop_points": {
                "label": "Điểm dừng",
                "description": "Lớp điểm dừng giao hàng có các trường nhu cầu và khung thời gian."
              },
              "demand_field": {
                "label": "Trường nhu cầu",
                "description": "Trường nhu cầu dạng số trong stop_points (mặc định: demand)."
              },
              "priority_field": {
                "label": "Trường ưu tiên",
                "description": "Trường mức ưu tiên tùy chọn của điểm dừng dùng các giá trị như required/high/normal/low hoặc thứ hạng dạng số."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Trường hồ sơ xe cho phép",
                "description": "Trường tùy chọn của điểm dừng liệt kê các hồ sơ phương tiện tương thích (phân tách bằng dấu phẩy/chấm phẩy/gạch đứng)."
              },
              "allowed_route_classes_field": {
                "label": "Trường lớp tuyến cho phép",
                "description": "Bí danh tùy chọn của allowed_vehicle_profiles_field cho các quy tắc tương thích theo lớp tuyến."
              },
              "tw_start_field": {
                "label": "Trường bắt đầu khung giờ",
                "description": "Trường bắt đầu khung thời gian dạng số trong stop_points (mặc định: tw_start)."
              },
              "tw_end_field": {
                "label": "Trường kết thúc khung giờ",
                "description": "Trường kết thúc khung thời gian dạng số trong stop_points (mặc định: tw_end)."
              },
              "service_time_field": {
                "label": "Trường thời gian phục vụ",
                "description": "Trường thời gian phục vụ theo từng điểm dừng dạng số trong stop_points (mặc định: service_time)."
              },
              "depot_id_field": {
                "label": "Trường ID kho",
                "description": "Trường mã kho tùy chọn dùng trong các đầu ra tuyến/phân công."
              },
              "vehicle_count_field": {
                "label": "Trường số xe",
                "description": "Trường tùy chọn của kho cho số phương tiện được tạo tại mỗi kho."
              },
              "vehicle_capacity_field": {
                "label": "Trường sức chứa xe",
                "description": "Trường tùy chọn của kho ghi đè vehicle_capacity cho từng mẫu kho/phương tiện."
              },
              "vehicle_fixed_cost_field": {
                "label": "Trường chi phí cố định xe",
                "description": "Trường tùy chọn của kho ghi đè vehicle_fixed_cost cho từng mẫu kho/phương tiện."
              },
              "travel_speed_field": {
                "label": "Trường tốc độ di chuyển",
                "description": "Trường tùy chọn của kho ghi đè travel_speed cho từng mẫu kho/phương tiện."
              },
              "max_route_distance_field": {
                "label": "Trường khoảng cách tuyến tối đa",
                "description": "Trường tùy chọn của kho ghi đè max_route_distance cho từng mẫu kho/phương tiện."
              },
              "max_route_time_field": {
                "label": "Trường thời gian tuyến tối đa",
                "description": "Trường tùy chọn của kho ghi đè max_route_time cho từng mẫu kho/phương tiện."
              },
              "vehicle_profile_field": {
                "label": "Trường hồ sơ xe",
                "description": "Trường tùy chọn của kho định nghĩa mã hồ sơ/nhóm phương tiện dùng để xét tương thích với điểm dừng."
              },
              "vehicle_route_class_field": {
                "label": "Trường lớp tuyến xe",
                "description": "Bí danh tùy chọn của vehicle_profile_field cho các quy tắc tương thích theo lớp tuyến."
              },
              "depot_close_time_field": {
                "label": "Trường giờ đóng kho",
                "description": "Trường tùy chọn của kho ghi đè depot_close_time cho từng mẫu kho/phương tiện."
              },
              "break_start_field": {
                "label": "Trường bắt đầu nghỉ",
                "description": "Trường tùy chọn của kho ghi đè break_start_time cho từng mẫu kho/phương tiện."
              },
              "break_end_field": {
                "label": "Trường kết thúc nghỉ",
                "description": "Trường tùy chọn của kho ghi đè break_end_time cho từng mẫu kho/phương tiện."
              },
              "break_duration_field": {
                "label": "Trường thời lượng nghỉ",
                "description": "Trường tùy chọn của kho ghi đè break_duration cho từng mẫu kho/phương tiện."
              },
              "vehicle_capacity": {
                "label": "Sức chứa xe",
                "description": "Sức chứa của mỗi phương tiện (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Chi phí cố định xe",
                "description": "Chi phí cố định tùy chọn tính cho mỗi phương tiện/tuyến được điều động (mặc định: 0)."
              },
              "start_time": {
                "label": "Thời gian bắt đầu",
                "description": "Thời điểm bắt đầu tuyến theo đơn vị thời gian của mô hình (mặc định: 0)."
              },
              "travel_speed": {
                "label": "Tốc độ di chuyển",
                "description": "Tốc độ di chuyển tính bằng đơn vị tọa độ trên đơn vị thời gian (mặc định: 1)."
              },
              "enforce_time_windows": {
                "label": "Áp đặt khung giờ",
                "description": "Khi true, chỉ các điểm dừng có mức trễ <= allowed_lateness mới đủ điều kiện được phân công (mặc định: false)."
              },
              "allowed_lateness": {
                "label": "Độ trễ cho phép",
                "description": "Mức trễ tối đa được chấp nhận khi enforce_time_windows=true (mặc định: 0)."
              },
              "depot_close_time": {
                "label": "Giờ đóng kho",
                "description": "Thời điểm đóng cứng tùy chọn mà mỗi tuyến phải quay về kho trước đó."
              },
              "break_start_time": {
                "label": "Giờ bắt đầu nghỉ",
                "description": "Thời điểm bắt đầu khung nghỉ toàn cục tùy chọn cho mọi phương tiện."
              },
              "break_end_time": {
                "label": "Giờ kết thúc nghỉ",
                "description": "Thời điểm kết thúc khung nghỉ toàn cục tùy chọn cho mọi phương tiện."
              },
              "break_duration": {
                "label": "Thời lượng nghỉ",
                "description": "Thời lượng nghỉ toàn cục tùy chọn được áp dụng một lần cho mỗi tuyến khi tuyến giao với khung nghỉ."
              },
              "use_priority_scoring": {
                "label": "Dùng điểm ưu tiên",
                "description": "Khi true, xếp hạng các ứng viên khả thi theo mức trễ/độ chùng dự kiến trước rồi mới đến quãng đường di chuyển; khi false, dùng phương án cơ sở lân cận gần nhất (mặc định: true)."
              },
              "max_vehicles": {
                "label": "Số xe tối đa",
                "description": "Số phương tiện/tuyến tối đa tùy chọn cần xây dựng."
              },
              "max_route_distance": {
                "label": "Khoảng cách tuyến tối đa",
                "description": "Quãng đường di chuyển tối đa tùy chọn của tuyến, tính cả lượt quay về kho."
              },
              "max_route_time": {
                "label": "Thời gian tuyến tối đa",
                "description": "Thời lượng tuyến tối đa tùy chọn theo đơn vị thời gian của mô hình, tính cả lượt quay về kho."
              },
              "max_stops_per_vehicle": {
                "label": "Số điểm dừng tối đa mỗi xe",
                "description": "Số điểm dừng tối đa tùy chọn được phân cho mỗi tuyến của phương tiện."
              },
              "objective_mode": {
                "label": "Chế độ mục tiêu",
                "description": "Mục tiêu xây dựng tuyến: minimize_lateness, minimize_distance, minimize_vehicles, hoặc minimize_cost."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tuyến đầu ra."
              },
              "assignment_output": {
                "label": "Đầu ra phân công",
                "description": "Đầu ra điểm phân công điểm dừng tùy chọn kèm chẩn đoán khung thời gian."
              }
            }
          },
          "clip": {
            "name": "Cắt",
            "description": "Cắt các đa giác đầu vào theo ranh giới đa giác chồng lớp sử dụng phép giao dựa trên tô pô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "difference": {
            "name": "Hiệu",
            "description": "Loại bỏ các vùng đa giác chồng lớp khỏi đa giác đầu vào sử dụng phép hiệu dựa trên tô pô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "dissolve": {
            "name": "Hòa tan",
            "description": "Loại bỏ các ranh giới đa giác chung trên toàn cục hoặc theo một trường thuộc tính hòa tan.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "dissolve_field": {
                "label": "Trường hòa tan",
                "description": "Trường thuộc tính tùy chọn dùng để hòa tan các đa giác theo nhóm; nếu bỏ qua, sẽ hòa tan mọi đa giác."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng trong các phép toán tô pô."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "erase": {
            "name": "Xóa",
            "description": "Xóa các vùng đa giác chồng lớp khỏi đa giác đầu vào và bảo toàn thuộc tính đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "identity": {
            "name": "Đồng nhất",
            "description": "Bảo toàn tất cả đối tượng đầu vào; các phần chồng lấn với lớp đồng nhất cũng nhận thêm thuộc tính của lớp đồng nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "intersect": {
            "name": "Giao",
            "description": "Giao các đa giác đầu vào và chồng lớp sử dụng chồng lớp dựa trên tô pô và theo dõi ID đối tượng nguồn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "line_intersections": {
            "name": "Giao điểm đường",
            "description": "Tìm các điểm giao của đường giữa lớp đầu vào và lớp chồng lớp, bổ sung ID cha cùng các thuộc tính đã hợp nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường hoặc đa giác đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đường hoặc đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán hình học; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "line_polygon_clip": {
            "name": "Cắt đường theo đa giác",
            "description": "Cắt các đối tượng đường theo phần bên trong đa giác và xuất ra các đoạn đường đã cắt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường đầu vào."
              },
              "clip": {
                "label": "Cắt",
                "description": "Lớp đa giác cắt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "near": {
            "name": "Gần",
            "description": "Thêm các thuộc tính NEAR_FID và NEAR_DIST xác định đối tượng gần nhất và khoảng cách của chúng sử dụng chỉ mục không gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "near": {
                "label": "Gần",
                "description": "Lớp vector đối tượng lân cận."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "select_by_location": {
            "name": "Chọn theo vị trí",
            "description": "Lọc đối tượng đích theo các vị từ không gian (intersects, within, contains, touches, overlaps, v.v.) so với đối tượng truy vấn.",
            "params": {
              "target": {
                "label": "Mục tiêu",
                "description": "Lớp đối tượng đích cần lọc."
              },
              "query": {
                "label": "Truy vấn",
                "description": "Lớp đối tượng truy vấn."
              },
              "predicate": {
                "label": "Vị từ",
                "description": "Vị từ không gian: intersects, within, contains, touches, crosses, overlaps, disjoint, within_distance."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách cho vị từ within_distance."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "spatial_join": {
            "name": "Kết nối không gian",
            "description": "Chuyển thuộc tính từ các đối tượng lớp kết nối sang đối tượng đích sử dụng vị từ không gian; hỗ trợ các chiến lược tổng hợp (count, sum, mean, min, max) khi có nhiều kết quả khớp.",
            "params": {
              "target": {
                "label": "Mục tiêu",
                "description": "Lớp đích nhận các thuộc tính được ghép."
              },
              "join": {
                "label": "Kết nối",
                "description": "Lớp ghép cung cấp các thuộc tính."
              },
              "predicate": {
                "label": "Vị từ",
                "description": "Vị từ không gian: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách cho vị từ within_distance."
              },
              "strategy": {
                "label": "Chiến lược",
                "description": "Chiến lược ghép: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Tiền tố",
                "description": "Tiền tố cho tên các trường được ghép (mặc định JOIN_)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "symmetrical_difference": {
            "name": "Hiệu đối xứng",
            "description": "Tính các vùng đa giác không chồng lấn từ lớp đầu vào và lớp chồng lớp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "union": {
            "name": "Hợp",
            "description": "Hòa tan các đa giác đầu vào và chồng lớp đã kết hợp thành một lớp phủ đa giác thống nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "update": {
            "name": "Cập nhật",
            "description": "Thay thế đối tượng đầu vào bằng đối tượng cập nhật tại nơi chúng chồng lấn; các đối tượng đầu vào nằm ngoài lớp cập nhật được giữ nguyên.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Lớp đa giác chồng lớp."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép toán tô pô; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "centroid_vector": {
            "name": "Trọng tâm vector",
            "description": "Tính tâm địa lý (tọa độ trung bình của khối lượng) cho mỗi đối tượng vector, tạo ra một lớp điểm phục vụ đặt nhãn, phân cụm và phân tích không gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "concave_hull": {
            "name": "Bao lõm",
            "description": "Tạo đa giác bao lõm quanh tọa độ của đối tượng đầu vào sử dụng thuật toán concaveman.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "concavity": {
                "label": "Độ lõm",
                "description": "Tỉ số độ lõm (mặc định 2.0). Giá trị lớn hơn cho ra bao ít lõm hơn, gần với bao lồi. Giá trị nhỏ hơn cho phép các chỗ lõm sát hơn."
              },
              "max_edge_length": {
                "label": "Chiều dài cạnh tối đa",
                "description": "Ngưỡng chiều dài: các cạnh của bao ngắn hơn giá trị này sẽ không được tinh chỉnh thêm. Mặc định là không giới hạn (vô cùng)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Epsilon độ bền vững (mặc định 1e-9)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "densify_features": {
            "name": "Thêm đỉnh cho đối tượng",
            "description": "Thêm đỉnh dọc theo đường và ranh giới đa giác với khoảng cách được chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "spacing": {
                "label": "Khoảng cách đều",
                "description": "Khoảng cách tối đa giữa các đỉnh liền kề."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "eliminate_coincident_points": {
            "name": "Loại bỏ điểm trùng vị trí",
            "description": "Loại bỏ các điểm trùng vị trí hoặc gần trùng vị trí trong khoảng cách dung sai.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "tolerance_dist": {
                "label": "Khoảng cách dung sai",
                "description": "Ngưỡng khoảng cách để coi các điểm là trùng nhau."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "extend_vector_lines": {
            "name": "Kéo dài đường vector",
            "description": "Kéo dài các điểm đầu cuối của polyline một khoảng cách được chỉ định ở điểm đầu, điểm cuối hoặc cả hai.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector polyline đầu vào."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Khoảng cách kéo dài các điểm đầu cuối của polyline."
              },
              "extend_direction": {
                "label": "Hướng kéo dài",
                "description": "Hướng kéo dài các điểm đầu cuối: both, start, hoặc end."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "merge_line_segments": {
            "name": "Gộp đoạn đường",
            "description": "Hợp nhất các đoạn đường liên thông gặp nhau tại các điểm đầu cuối không phân nhánh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector polyline đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính điểm đầu cuối tùy chọn dùng để khớp các điểm đầu cuối của đường; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "minimum_bounding_box": {
            "name": "Hộp bao nhỏ nhất",
            "description": "Tính các hình hộp bao nhỏ nhất có định hướng quanh từng đối tượng hoặc toàn bộ lớp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "min_criteria": {
                "label": "Tiêu chí tối thiểu",
                "description": "Tiêu chí tối thiểu hóa: area, perimeter, length, hoặc width. Mặc định là area."
              },
              "individual_feature_hulls": {
                "label": "Bao riêng từng đối tượng",
                "description": "Nếu true, xuất một hộp cho mỗi đối tượng; nếu không thì xuất một hộp cho toàn bộ lớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "minimum_bounding_circle": {
            "name": "Đường tròn bao nhỏ nhất",
            "description": "Tính các đường tròn bao nhỏ nhất quanh từng đối tượng hoặc toàn bộ lớp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "individual_feature_hulls": {
                "label": "Bao riêng từng đối tượng",
                "description": "Nếu true, xuất một hình tròn cho mỗi đối tượng; nếu không thì xuất một hình tròn cho toàn bộ lớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "minimum_bounding_envelope": {
            "name": "Hình chữ nhật bao nhỏ nhất",
            "description": "Tính các hình chữ nhật bao nhỏ nhất thẳng trục quanh từng đối tượng hoặc toàn bộ lớp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "individual_feature_hulls": {
                "label": "Bao riêng từng đối tượng",
                "description": "Nếu true, xuất một hộp bao cho mỗi đối tượng; nếu không thì xuất một hộp bao cho toàn bộ lớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "minimum_convex_hull": {
            "name": "Bao lồi nhỏ nhất",
            "description": "Tạo đa giác bao lồi quanh từng đối tượng hoặc toàn bộ lớp đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "individual_feature_hulls": {
                "label": "Bao riêng từng đối tượng",
                "description": "Nếu true, xuất một bao cho mỗi đối tượng đầu vào; nếu không thì xuất một bao cho toàn bộ lớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "polygonize": {
            "name": "Đa giác hóa",
            "description": "Tạo đa giác từ các đường đầu vào, bao gồm cả các đoạn giao nhau/hở nơi có thể hình thành các mặt khép kín.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các lớp vector đường đầu vào dưới dạng mảng hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy. Nếu bỏ qua, sẽ dùng 'input'."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn lớp vector đường đầu vào đơn lẻ, tùy chọn."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho việc tạo đa giác; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "representative_point_vector": {
            "name": "Điểm đại diện vector",
            "description": "Tạo một điểm bên trong được đảm bảo nằm trong hoặc trên mỗi hình học sử dụng cực không thể tiếp cận (pole-of-inaccessibility), lý tưởng cho việc đặt nhãn trong đa giác lõm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "simplify_features": {
            "name": "Đơn giản hóa đối tượng",
            "description": "Giảm độ phức tạp hình học sử dụng thuật toán Douglas-Peucker nhằm giảm thiểu kích thước tệp, loại bỏ nhiễu GPS và tối ưu hóa hiệu năng kết xuất trong khi vẫn bảo toàn hình dạng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai đơn giản hóa theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "smooth_vectors": {
            "name": "Làm trơn vector",
            "description": "Làm mượt hình học polyline hoặc đa giác bằng lọc trung bình trượt để giảm nhiễu số hóa và hiện tượng rung của quỹ đạo GPS.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường hoặc đa giác đầu vào."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước cửa sổ trung bình trượt lẻ (>= 3). Các giá trị chẵn sẽ được tăng lên giá trị lẻ kế tiếp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "snap_endnodes": {
            "name": "Bắt dính nút cuối",
            "description": "Bắt dính các điểm đầu cuối polyline gần nhau vào một vị trí chung trong phạm vi dung sai.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector polyline đầu vào."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính điểm đầu cuối theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector polyline đã bắt dính đầu ra."
              }
            }
          },
          "split_vector_lines": {
            "name": "Tách đường vector",
            "description": "Tách mỗi đối tượng polyline thành các đoạn có chiều dài tối đa được chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector polyline đầu vào."
              },
              "segment_length": {
                "label": "Chiều dài đoạn",
                "description": "Chiều dài đoạn tối đa theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector polyline đầu ra."
              }
            }
          },
          "split_with_lines": {
            "name": "Tách bằng đường",
            "description": "Tách các polyline đầu vào sử dụng các điểm giao với một lớp đường tách.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường đầu vào cần tách."
              },
              "split": {
                "label": "Tách",
                "description": "Lớp đường tách dùng để tạo các điểm gãy."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai bắt dính tùy chọn dùng cho các phép tách; mặc định là epsilon của máy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "compactness_ratio": {
            "name": "Tỉ số độ chặt",
            "description": "Tính tỷ số độ chặt (diện tích / chu vi) cho các đối tượng đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có bổ sung trường độ nén chặt."
              }
            }
          },
          "deviation_from_regional_direction": {
            "name": "Độ lệch khỏi hướng vùng",
            "description": "Tính độ lệch hướng của đa giác so với hướng trung bình có trọng số của khu vực và bổ sung DEV_DIR.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "elongation_threshold": {
                "label": "Ngưỡng độ kéo dài",
                "description": "Độ thuôn dài tối thiểu để đưa các đa giác vào ước lượng hướng vùng; mặc định 0.75."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "elongation_ratio": {
            "name": "Tỉ số độ kéo dài",
            "description": "Tính tỷ số độ giãn dài (trục ngắn / trục dài của hình chữ nhật bao) cho các đối tượng đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có bổ sung trường độ thuôn dài."
              }
            }
          },
          "hole_proportion": {
            "name": "Tỉ lệ lỗ",
            "description": "Tính diện tích lỗ của đa giác chia cho diện tích bao và bổ sung HOLE_PROP.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "linearity_index": {
            "name": "Chỉ số tuyến tính",
            "description": "Tính chỉ số độ tuyến tính (hệ số r bình phương của hồi quy) cho các đối tượng đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có bổ sung trường độ tuyến tính."
              }
            }
          },
          "narrowness_index_vector": {
            "name": "Chỉ số độ hẹp vector",
            "description": "Tính chỉ số độ hẹp (chu vi / sqrt(diện tích)) cho các đối tượng đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có bổ sung trường độ hẹp."
              }
            }
          },
          "patch_orientation": {
            "name": "Hướng mảnh",
            "description": "Tính hướng của đa giác (số độ tính từ hướng bắc) sử dụng hồi quy trục chính rút gọn và bổ sung ORIENT.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "perimeter_area_ratio": {
            "name": "Tỉ số chu vi/diện tích",
            "description": "Tính tỷ số chu vi/diện tích của đa giác và bổ sung P_A_RATIO.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "polygon_area": {
            "name": "Diện tích đa giác",
            "description": "Tính diện tích đa giác và bổ sung trường thuộc tính AREA.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "polygon_long_axis": {
            "name": "Trục dài đa giác",
            "description": "Lập bản đồ trục dài của hình hộp bao nhỏ nhất của mỗi đối tượng đa giác dưới dạng đầu ra đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector polyline đầu ra."
              }
            }
          },
          "polygon_perimeter": {
            "name": "Chu vi đa giác",
            "description": "Tính chu vi đa giác và bổ sung trường thuộc tính PERIMETER.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "polygon_short_axis": {
            "name": "Trục ngắn đa giác",
            "description": "Lập bản đồ trục ngắn của hình hộp bao nhỏ nhất của mỗi đối tượng đa giác dưới dạng đầu ra đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector polyline đầu ra."
              }
            }
          },
          "related_circumscribing_circle": {
            "name": "Đường tròn ngoại tiếp liên quan",
            "description": "Tính 1 - (diện tích đa giác / diện tích đường tròn ngoại tiếp nhỏ nhất) và bổ sung RC_CIRCLE.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "shape_complexity_index_vector": {
            "name": "Chỉ số độ phức tạp hình dạng vector",
            "description": "Tính chỉ số độ phức tạp hình dạng cho các đối tượng đa giác vector sử dụng hệ số hình dạng chuẩn hóa.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có bổ sung trường chỉ số độ phức tạp."
              }
            }
          },
          "global_morans_i": {
            "name": "Moran's I toàn cục",
            "description": "Tính chỉ số Moran's I toàn cục để kiểm định tự tương quan không gian: liệu các giá trị tương tự có phân cụm về không gian hay không. Là nền tảng thiết yếu cho phân tích địa thống kê.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Trường thuộc tính dạng số cần phân tích."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Giá trị k cho chế độ k_nearest."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách cho chế độ distance_band."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Áp dụng chuẩn hóa theo hàng cho các trọng số (mặc định true)."
              },
              "inference": {
                "label": "Suy luận",
                "description": "Chế độ suy luận: asymptotic hoặc permutation (mặc định: asymptotic)."
              },
              "num_simulations": {
                "label": "Số mô phỏng",
                "description": "Số hoán vị cho kiểm định hoán vị (mặc định: 999)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống ngẫu nhiên để kiểm định hoán vị có thể tái lập."
              },
              "island_policy": {
                "label": "Chính sách đảo",
                "description": "Cách xử lý đối tượng cô lập: drop_with_warning, keep_zero_weight, error."
              },
              "output_json": {
                "label": "JSON đầu ra",
                "description": "Đường dẫn báo cáo JSON đầu ra tùy chọn."
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              },
              "output_csv": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn CSV tóm tắt đầu ra tùy chọn."
              },
              "output_distribution": {
                "label": "Đầu ra phân phối",
                "description": "Đường dẫn tùy chọn để lưu phân bố hoán vị dưới dạng JSON."
              }
            }
          },
          "getis_ord_gi_star": {
            "name": "Getis-Ord Gi*",
            "description": "Tính điểm z Getis-Ord Gi/Gi* để xác định điểm nóng/điểm lạnh cục bộ. Là thước đo trực tiếp mức độ tập trung giá trị cao/thấp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Trường thuộc tính dạng số cần phân tích."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Giá trị k cho chế độ k_nearest."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách cho chế độ distance_band."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Áp dụng chuẩn hóa theo hàng cho các trọng số (mặc định true)."
              },
              "variant": {
                "label": "Biến thể",
                "description": "Biến thể: gi hoặc gi_star (mặc định gi_star)."
              },
              "inference": {
                "label": "Suy luận",
                "description": "Chế độ suy luận: asymptotic hoặc permutation (mặc định: asymptotic)."
              },
              "num_simulations": {
                "label": "Số mô phỏng",
                "description": "Số hoán vị cho kiểm định hoán vị (mặc định: 999)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống ngẫu nhiên để kiểm định hoán vị có thể tái lập."
              },
              "island_policy": {
                "label": "Chính sách đảo",
                "description": "Cách xử lý đối tượng cô lập: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ngưỡng ý nghĩa trong [0, 1]; mặc định 0.05."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra có các trường GI."
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              }
            }
          },
          "local_morans_i_lisa": {
            "name": "Moran's I cục bộ (LISA)",
            "description": "Tính chỉ số Moran's I cục bộ cho mỗi đối tượng để xác định các cụm và giá trị ngoại lai không gian cục bộ kèm kiểm định ý nghĩa thống kê.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Trường thuộc tính dạng số cần phân tích."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Giá trị k cho chế độ k_nearest."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách cho chế độ distance_band."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Áp dụng chuẩn hóa theo hàng cho các trọng số (mặc định true)."
              },
              "inference": {
                "label": "Suy luận",
                "description": "Chế độ suy luận: asymptotic hoặc permutation (mặc định: asymptotic)."
              },
              "num_simulations": {
                "label": "Số mô phỏng",
                "description": "Số hoán vị cho kiểm định hoán vị (mặc định: 999)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống ngẫu nhiên để kiểm định hoán vị có thể tái lập."
              },
              "island_policy": {
                "label": "Chính sách đảo",
                "description": "Cách xử lý đối tượng cô lập: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ngưỡng ý nghĩa trong [0, 1]; mặc định 0.05."
              },
              "fdr_correction": {
                "label": "Hiệu chỉnh FDR",
                "description": "Áp dụng hiệu chỉnh FDR-BH (mặc định true cho kiểm định hoán vị)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra có các trường LISA."
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              }
            }
          },
          "nearest_neighbour_index": {
            "name": "Chỉ số lân cận gần nhất",
            "description": "Tính chỉ số láng giềng gần nhất Clark-Evans để kiểm định tính ngẫu nhiên không gian hoàn toàn. Phát hiện phân cụm so với phân tán.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "study_area_mode": {
                "label": "Chế độ vùng nghiên cứu",
                "description": "Chế độ khu vực nghiên cứu: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Đa giác vùng nghiên cứu",
                "description": "Lớp đa giác được dùng khi study_area_mode=polygon_layer."
              },
              "output_json": {
                "label": "JSON đầu ra",
                "description": "Đường dẫn báo cáo JSON đầu ra tùy chọn."
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              },
              "output_csv": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn CSV tóm tắt đầu ra tùy chọn."
              }
            }
          },
          "quadrat_count_test": {
            "name": "Kiểm định đếm ô vuông",
            "description": "Thực hiện kiểm định chi bình phương về tính ngẫu nhiên của mẫu điểm sử dụng số đếm ô vuông (quadrat). Kiểm định phân cụm so với phân tán.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "grid_mode": {
                "label": "Chế độ lưới",
                "description": "Chế độ lưới: rows_cols hoặc cell_size."
              },
              "rows": {
                "label": "Số hàng",
                "description": "Số hàng khi grid_mode=rows_cols."
              },
              "cols": {
                "label": "Số cột",
                "description": "Số cột khi grid_mode=rows_cols."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô khi grid_mode=cell_size."
              },
              "study_area_mode": {
                "label": "Chế độ vùng nghiên cứu",
                "description": "Chế độ khu vực nghiên cứu: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Đa giác vùng nghiên cứu",
                "description": "Lớp đa giác được dùng khi study_area_mode=polygon_layer."
              },
              "output_grid": {
                "label": "Lưới đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho lưới đa giác ô vuông."
              },
              "output_json": {
                "label": "JSON đầu ra",
                "description": "Đường dẫn báo cáo JSON đầu ra tùy chọn."
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn."
              },
              "output_csv": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn CSV tóm tắt đầu ra tùy chọn."
              }
            }
          },
          "spatial_lag_regression": {
            "name": "Hồi quy trễ không gian",
            "description": "Ước lượng mô hình tự hồi quy không gian nắm bắt các hiệu ứng lan tỏa nội sinh trong đó biến phụ thuộc bị ảnh hưởng bởi các lân cận không gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "response_field": {
                "label": "Trường phản hồi",
                "description": "Biến đáp ứng (biến phụ thuộc)."
              },
              "predictor_fields": {
                "label": "Trường dự báo",
                "description": "Tên các trường dự báo phân tách bằng dấu phẩy."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận không gian."
              },
              "k": {
                "label": "K",
                "description": "Giá trị k cho k_nearest."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Chuẩn hóa trọng số theo hàng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra."
              }
            }
          },
          "spatial_error_regression": {
            "name": "Hồi quy sai số không gian",
            "description": "Ước lượng mô hình sai số không gian xử lý sự phụ thuộc không gian ngoại sinh trong phần dư do các biến bị bỏ sót hoặc sai số đo lường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "response_field": {
                "label": "Trường phản hồi",
                "description": "Biến đáp ứng."
              },
              "predictor_fields": {
                "label": "Trường dự báo",
                "description": "Các trường dự báo phân tách bằng dấu phẩy."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận không gian."
              },
              "k": {
                "label": "K",
                "description": "k cho k_nearest."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Chuẩn hóa trọng số theo hàng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra."
              }
            }
          },
          "geographically_weighted_regression": {
            "name": "Hồi quy trọng số địa lý",
            "description": "Hồi quy tuyến tính cục bộ với trọng số kernel suy giảm theo khoảng cách (GWR): hệ số theo từng đối tượng, R² cục bộ, phần dư và giá trị dự đoán, cùng các chẩn đoán AICc / R² toàn cục; băng thông cố định hoặc thích ứng, tùy chọn tối ưu hóa theo AICc.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào (các điểm, hoặc các hình học khác thông qua điểm đại diện của chúng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "y_field": {
                "label": "Trường Y",
                "description": "Trường số phụ thuộc (đáp ứng)."
              },
              "x_fields": {
                "label": "Trường X",
                "description": "(Các) trường số giải thích phân tách bằng dấu phẩy."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel suy giảm theo khoảng cách: 'gaussian' (mặc định) hoặc 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Loại băng thông",
                "description": "'adaptive' (mặc định; băng thông = k lân cận gần nhất) hoặc 'fixed' (băng thông = một khoảng cách)."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông: số lân cận cho chế độ adaptive, hoặc khoảng cách cho chế độ fixed. Bỏ qua để chọn tự động bằng cách tối thiểu hóa AICc."
              }
            }
          },
          "ripleys_k_test": {
            "name": "Kiểm định K Ripley",
            "description": "Tính thống kê phân cụm đa thang K của Ripley. Làm rõ sự phân cụm/phân tán phụ thuộc thang qua các dải khoảng cách.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách phân tích tối đa."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước nhảy khoảng cách."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có các thống kê K."
              }
            }
          },
          "envelope_test": {
            "name": "Kiểm định đường bao",
            "description": "Thực hiện kiểm định đường bao Monte Carlo so sánh mẫu quan sát được với phân bố giả thuyết không CSR. Xác định ý nghĩa thống kê của phân cụm/phân tán.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "num_simulations": {
                "label": "Số mô phỏng",
                "description": "Số lần mô phỏng Monte Carlo."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách phân tích tối đa."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có các cận của bao."
              }
            }
          },
          "point_process_residuals": {
            "name": "Phần dư quá trình điểm",
            "description": "Tính phần dư từ mô hình quá trình điểm Poisson đã khớp phục vụ chẩn đoán. Phát hiện cấu trúc không gian chưa được mô hình hóa.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "intensity_field": {
                "label": "Trường cường độ",
                "description": "Trường cường độ đã khớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đầu ra có các phần dư."
              }
            }
          },
          "ripleys_k_function": {
            "name": "Hàm K Ripley",
            "description": "Tính K(t) và L(t) để đặc trưng hóa các mẫu phân cụm không gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Ngưỡng khoảng cách tối đa."
              },
              "num_distances": {
                "label": "Số khoảng cách",
                "description": "Số bước khoảng cách."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Tệp CSV đầu ra."
              }
            }
          },
          "point_pattern_envelope": {
            "name": "Đường bao mẫu điểm",
            "description": "Tạo các đường bao dải tới hạn cho kiểm định giả thuyết so với CSR.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tối đa."
              },
              "num_distances": {
                "label": "Số khoảng cách",
                "description": "Số nhóm khoảng cách."
              },
              "num_simulations": {
                "label": "Số mô phỏng",
                "description": "Số lần lặp Monte Carlo."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Mức ý nghĩa."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Tệp CSV đầu ra."
              }
            }
          },
          "inhomogeneous_baseline": {
            "name": "Đường cơ sở không đồng nhất",
            "description": "Ước lượng bề mặt cường độ và tính hàm K đã hiệu chỉnh theo cường độ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tối đa."
              },
              "num_distances": {
                "label": "Số khoảng cách",
                "description": "Số nhóm khoảng cách."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông KDE (tự chọn nếu bỏ qua)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Tệp CSV đầu ra."
              }
            }
          },
          "hotspot_vs_process": {
            "name": "Điểm nóng so với quá trình",
            "description": "So sánh các mẫu điểm nóng với cường độ quá trình điểm nền.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm."
              },
              "hotspot_field": {
                "label": "Trường điểm nóng",
                "description": "Trường phân loại điểm nóng."
              },
              "intensity_field": {
                "label": "Trường cường độ",
                "description": "Trường cường độ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Tệp CSV đầu ra."
              }
            }
          },
          "point_process_residuals_comparison": {
            "name": "So sánh phần dư quá trình điểm",
            "description": "Tính các chẩn đoán phần dư để kiểm tra mức độ phù hợp của mô hình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm."
              },
              "observed_field": {
                "label": "Trường quan sát",
                "description": "Trường giá trị quan sát."
              },
              "predicted_field": {
                "label": "Trường dự đoán",
                "description": "Trường giá trị dự đoán."
              },
              "residual_type": {
                "label": "Loại phần dư",
                "description": "Loại phần dư."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Tệp CSV đầu ra."
              }
            }
          },
          "construct_vector_tin": {
            "name": "Xây dựng TIN vector",
            "description": "Xây dựng mạng tam giác không đều (TIN) từ một tập điểm đầu vào sử dụng tam giác hóa Delaunay.",
            "params": {
              "input_points": {
                "label": "Điểm đầu vào",
                "description": "Lớp vector điểm hoặc đa điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Tên trường tùy chọn cho chiều cao của các đỉnh (trường số)."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Nếu true, dùng giá trị Z của hình học làm độ cao của các tam giác."
              },
              "max_triangle_edge_length": {
                "label": "Chiều dài cạnh tam giác tối đa",
                "description": "Chiều dài cạnh tam giác lớn nhất cho phép (lọc bỏ các cạnh dài). Dùng 0 hoặc số âm để không giới hạn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đa giác đầu ra (TIN)."
              }
            }
          },
          "contours_from_points": {
            "name": "Đường đồng mức từ điểm",
            "description": "Tạo các polyline đường đồng mức từ độ cao điểm sử dụng TIN Delaunay.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector điểm hoặc đa điểm đầu vào."
              },
              "base": {
                "label": "Nền",
                "description": "Độ cao của đường bình độ cơ sở (mặc định 0.0)."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính dạng số chứa các giá trị độ cao (bị bỏ qua khi use_z_values=true)."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Giá trị khoảng cách giữa các đường bình độ (mặc định 10.0)."
              },
              "max_triangle_edge_length": {
                "label": "Chiều dài cạnh tam giác tối đa",
                "description": "Chiều dài cạnh tam giác lớn nhất được đưa vào việc tạo đường bình độ (đơn vị bản đồ)."
              },
              "smooth": {
                "label": "Làm trơn",
                "description": "Kích thước bộ lọc làm trơn (số nguyên lẻ, mặc định 9)."
              },
              "use_z_values": {
                "label": "Dùng giá trị Z",
                "description": "Dùng giá trị Z của hình học làm độ cao (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "contours_from_raster": {
            "name": "Đường đồng mức từ raster",
            "description": "Tạo các polyline đường đồng mức từ một mô hình bề mặt raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster bề mặt đầu vào hoặc đối tượng raster có kiểu."
              },
              "base": {
                "label": "Nền",
                "description": "Độ cao của đường bình độ cơ sở (mặc định 0.0)."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Giá trị khoảng cách giữa các đường bình độ (mặc định 10.0)."
              },
              "smooth": {
                "label": "Làm trơn",
                "description": "Kích thước bộ lọc làm trơn (số nguyên lẻ, mặc định 9)."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Góc lệch tối thiểu của đường tính bằng độ để đơn giản hóa (mặc định 10.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "extract_nodes": {
            "name": "Trích xuất nút",
            "description": "Chuyển đổi các đỉnh polyline và đa giác thành đối tượng điểm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector polyline hoặc đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "extract_raster_values_at_points": {
            "name": "Trích xuất giá trị raster tại điểm",
            "description": "Lấy mẫu một hoặc nhiều raster tại các vị trí điểm và ghi giá trị vào thuộc tính điểm.",
            "params": {
              "rasters": {
                "label": "Raster",
                "description": "Các đường dẫn raster đầu vào dưới dạng mảng hoặc chuỗi có dấu phân tách."
              },
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "find_lowest_or_highest_points": {
            "name": "Tìm điểm thấp nhất hoặc cao nhất",
            "description": "Định vị các ô raster thấp nhất và/hoặc cao nhất và xuất vị trí của chúng dưới dạng điểm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Loại đầu ra: lowest, highest, hoặc both."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra."
              }
            }
          },
          "hexagonal_grid_from_raster_base": {
            "name": "Lưới lục giác từ raster nền",
            "description": "Tạo lưới đa giác lục giác với độ rộng và hướng có thể cấu hình, cung cấp phép lát phẳng không thiên lệch cho bản đồ nhiệt và tổng hợp.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Raster nền xác định phạm vi lưới."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng lục giác theo đơn vị bản đồ."
              },
              "orientation": {
                "label": "Hướng",
                "description": "Hướng lục giác: horizontal hoặc vertical."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "hexagonal_grid_from_vector_base": {
            "name": "Lưới lục giác từ vector nền",
            "description": "Tạo lưới đa giác lục giác căn theo phạm vi của lớp vector, cho phép tổng hợp không gian không thiên lệch và trực quan hóa mật độ.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Lớp vector nền xác định phạm vi lưới."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng lục giác theo đơn vị bản đồ."
              },
              "orientation": {
                "label": "Hướng",
                "description": "Hướng lục giác: horizontal hoặc vertical."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "layer_footprint_raster": {
            "name": "Đường bao lớp raster",
            "description": "Tạo đa giác đường bao biểu diễn toàn bộ phạm vi của raster đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "layer_footprint_vector": {
            "name": "Đường bao lớp vector",
            "description": "Tạo đa giác đường bao biểu diễn toàn bộ phạm vi bao của lớp vector đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "medoid": {
            "name": "Medoid",
            "description": "Tính các điểm medoid từ hình học vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm medoid đầu ra."
              }
            }
          },
          "random_points_in_polygon": {
            "name": "Điểm ngẫu nhiên trong đa giác",
            "description": "Tạo các điểm ngẫu nhiên phân bố đều bên trong hình học đa giác đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác đầu vào."
              },
              "num_points": {
                "label": "Số điểm",
                "description": "Số điểm ngẫu nhiên cần tạo."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống của bộ sinh số ngẫu nhiên tùy chọn để có thể tái lập."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "rectangular_grid_from_raster_base": {
            "name": "Lưới chữ nhật từ raster nền",
            "description": "Tạo lưới đa giác hình chữ nhật phủ phạm vi raster.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Raster nền xác định phạm vi lưới."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng ô lưới theo đơn vị bản đồ."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao ô lưới theo đơn vị bản đồ."
              },
              "x_origin": {
                "label": "Gốc X",
                "description": "Tọa độ x gốc tùy chọn để căn chỉnh lưới."
              },
              "y_origin": {
                "label": "Gốc Y",
                "description": "Tọa độ y gốc tùy chọn để căn chỉnh lưới."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "rectangular_grid_from_vector_base": {
            "name": "Lưới chữ nhật từ vector nền",
            "description": "Tạo lưới đa giác hình chữ nhật phủ phạm vi bao của lớp vector.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Lớp vector nền xác định phạm vi lưới."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng ô lưới theo đơn vị bản đồ."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao ô lưới theo đơn vị bản đồ."
              },
              "x_origin": {
                "label": "Gốc X",
                "description": "Tọa độ x gốc tùy chọn để căn chỉnh lưới."
              },
              "y_origin": {
                "label": "Gốc Y",
                "description": "Tọa độ y gốc tùy chọn để căn chỉnh lưới."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra."
              }
            }
          },
          "vector_hex_binning": {
            "name": "Gom ô lục giác vector",
            "description": "Tổng hợp các đối tượng điểm vào các ô lục giác, đếm số điểm trên mỗi ô lục giác.",
            "params": {
              "vector_points": {
                "label": "Điểm vector",
                "description": "Lớp vector điểm hoặc đa điểm đầu vào."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng lục giác (khoảng cách giữa hai cạnh đối diện)."
              },
              "orientation": {
                "label": "Hướng",
                "description": "Hướng lục giác: 'h' cho nằm ngang (đỉnh nhọn hướng lên) hoặc 'v' cho thẳng đứng (cạnh phẳng hướng lên)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác lục giác đầu ra kèm số lượng."
              }
            }
          },
          "voronoi_diagram": {
            "name": "Sơ đồ Voronoi",
            "description": "Tạo đa giác Voronoi (Thiessen) từ các vị trí điểm đầu vào.",
            "params": {
              "input_points": {
                "label": "Điểm đầu vào",
                "description": "Lớp vector điểm hoặc đa điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác Voronoi đầu ra."
              }
            }
          },
          "add_field": {
            "name": "Thêm trường",
            "description": "Thêm một trường thuộc tính mới với giá trị mặc định tùy chọn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường mới."
              },
              "field_type": {
                "label": "Kiểu trường",
                "description": "Kiểu trường: integer, float, text, boolean."
              },
              "default": {
                "label": "Mặc định",
                "description": "Giá trị mặc định tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "add_geometry_attributes": {
            "name": "Thêm thuộc tính hình học",
            "description": "Tự động tính các thuộc tính hình học (diện tích, chiều dài, chu vi, tâm) và thêm chúng dưới dạng các trường mới, hỗ trợ cả phép đo phẳng và trắc địa.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "measurement_mode": {
                "label": "Chế độ đo",
                "description": "Phương pháp đo: auto (mặc định), planar, hoặc geodesic."
              },
              "area": {
                "label": "Diện tích",
                "description": "Bao gồm trường diện tích (AREA_M2 cho geodesic, AREA_MAP2 cho planar)."
              },
              "length": {
                "label": "Chiều dài",
                "description": "Bao gồm trường chiều dài (LENGTH_M cho geodesic, LENGTH_MAP cho planar)."
              },
              "perimeter": {
                "label": "Chu vi",
                "description": "Bao gồm trường chu vi (PERIM_M cho geodesic, PERIM_MAP cho planar)."
              },
              "centroid": {
                "label": "Trọng tâm",
                "description": "Bao gồm các trường X/Y của trọng tâm (mặc định true)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "attribute_correlation": {
            "name": "Tương quan thuộc tính",
            "description": "Thực hiện phân tích tương quan Pearson trên các trường thuộc tính vector dạng số.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "attribute_histogram": {
            "name": "Lược đồ thuộc tính",
            "description": "Tạo biểu đồ tần suất cho các giá trị trường số trong bảng thuộc tính vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường thuộc tính dạng số."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "attribute_scattergram": {
            "name": "Biểu đồ phân tán thuộc tính",
            "description": "Tính thống kê tóm tắt biểu đồ phân tán giữa hai trường vector dạng số.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "fieldx": {
                "label": "Trường X",
                "description": "Tên trường dạng số cho trục x."
              },
              "fieldy": {
                "label": "Trường Y",
                "description": "Tên trường dạng số cho trục y."
              },
              "trendline": {
                "label": "Đường xu thế",
                "description": "Bao gồm tóm tắt đường xu thế (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "delete_field": {
            "name": "Xóa trường",
            "description": "Xóa một hoặc nhiều trường thuộc tính khỏi lớp vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "fields": {
                "label": "Trường",
                "description": "Tên các trường cần xóa, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "extract_by_attribute": {
            "name": "Trích xuất theo thuộc tính",
            "description": "Trích xuất các đối tượng vector thỏa mãn một biểu thức thuộc tính.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "statement": {
                "label": "Câu lệnh",
                "description": "Biểu thức Boole được tính trên các trường thuộc tính; chấp nhận các bí danh AND/OR/NOT/XOR theo kiểu SQL."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "field_calculator": {
            "name": "Máy tính trường",
            "description": "Tính giá trị trường từ một biểu thức sử dụng thuộc tính đối tượng và các biến hình học; hỗ trợ CASE, CAST kiểu SQL, kiểm tra null và các cấu trúc bao UPDATE ... SET ... [WHERE ...].",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường đầu ra."
              },
              "field_type": {
                "label": "Kiểu trường",
                "description": "Kiểu trường đầu ra: float, integer, text."
              },
              "expression": {
                "label": "Biểu thức",
                "description": "Biểu thức được tính cho từng đối tượng. Hỗ trợ CASE theo kiểu SQL, CAST(... AS type), IS NULL/IS NOT NULL, và các dạng bao UPDATE ... SET FIELD = ... [WHERE ...]."
              },
              "overwrite": {
                "label": "Ghi đè",
                "description": "Ghi đè trường hiện có nếu đã tồn tại (mặc định true)."
              },
              "preview_rows": {
                "label": "Số hàng xem trước",
                "description": "Số hàng xem trước tùy chọn cần trả về trong dữ liệu kết quả. Khi > 0, có thể bỏ qua output để chỉ tính toán xem trước."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Tùy chọn khi preview_rows > 0."
              }
            }
          },
          "filter_vector_features_by_area": {
            "name": "Lọc đối tượng vector theo diện tích",
            "description": "Lọc các đối tượng đa giác có diện tích dưới ngưỡng tối thiểu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Diện tích đa giác tối thiểu để giữ lại, tính bằng bình phương đơn vị tọa độ của lớp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "list_unique_values": {
            "name": "Liệt kê giá trị duy nhất",
            "description": "Liệt kê các giá trị duy nhất và tần suất trong một trường thuộc tính vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường thuộc tính."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra tùy chọn."
              }
            }
          },
          "rename_field": {
            "name": "Đổi tên trường",
            "description": "Đổi tên một trường thuộc tính trong lớp vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường hiện có."
              },
              "new_field": {
                "label": "Trường mới",
                "description": "Tên trường thay thế."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "download_osm_vector": {
            "name": "Tải dữ liệu vector OSM",
            "description": "Tải các đối tượng OpenStreetMap từ Overpass API cho một hình hộp bao và ghi kết quả dưới dạng lớp vector.",
            "params": {
              "west": {
                "label": "Tây",
                "description": "Kinh độ ranh giới phía tây (EPSG:4326)."
              },
              "south": {
                "label": "Nam",
                "description": "Vĩ độ ranh giới phía nam (EPSG:4326)."
              },
              "east": {
                "label": "Đông",
                "description": "Kinh độ ranh giới phía đông (EPSG:4326)."
              },
              "north": {
                "label": "Bắc",
                "description": "Vĩ độ ranh giới phía bắc (EPSG:4326)."
              },
              "input_extent_epsg": {
                "label": "EPSG phạm vi đầu vào",
                "description": "Mã EPSG cho phạm vi đầu vào west/south/east/north (mặc định 4326)."
              },
              "filter_preset": {
                "label": "Bộ lọc sẵn",
                "description": "Cấu hình sẵn lớp đối tượng: all, roads, buildings, water, landuse, trails, parks, rail, amenities, boundaries, transit, poi (mặc định all)."
              },
              "include_tags": {
                "label": "Bao gồm thẻ",
                "description": "Danh sách lọc khóa thẻ phân tách bằng dấu chấm phẩy, ví dụ amenity;shop."
              },
              "include_key_values": {
                "label": "Bao gồm cặp khóa-giá trị",
                "description": "Danh sách lọc key=value phân tách bằng dấu chấm phẩy, ví dụ amenity=school;building=yes."
              },
              "filter_key": {
                "label": "Khóa lọc",
                "description": "Bộ lọc khóa thẻ đơn kiểu cũ (không dùng nữa; hãy dùng include_tags)."
              },
              "filter_key_value": {
                "label": "Giá trị khóa lọc",
                "description": "Bộ lọc key=value đơn kiểu cũ (không dùng nữa; hãy dùng include_key_values)."
              },
              "include_points": {
                "label": "Bao gồm điểm",
                "description": "Bao gồm các đối tượng node OSM có thẻ dưới dạng hình học Point (mặc định true)."
              },
              "include_lines": {
                "label": "Bao gồm đường",
                "description": "Bao gồm các đối tượng way OSM dưới dạng hình học LineString (mặc định true)."
              },
              "include_polygons": {
                "label": "Bao gồm đa giác",
                "description": "Bao gồm các way OSM khép kín có thẻ diện tích dưới dạng hình học Polygon (mặc định true)."
              },
              "clip_to_extent": {
                "label": "Cắt theo phạm vi",
                "description": "Cắt hình học đầu ra theo phạm vi bbox truy vấn (mặc định true)."
              },
              "split_output_by_geometry": {
                "label": "Tách đầu ra theo loại hình học",
                "description": "Ghi các đầu ra riêng cho từng kiểu hình học (<output>_points|lines|polygons.ext)."
              },
              "output_epsg": {
                "label": "EPSG đầu ra",
                "description": "Chiếu lại đầu ra sang mã EPSG này; bỏ trống để giữ EPSG:4326."
              },
              "overpass_profile": {
                "label": "Hồ sơ Overpass",
                "description": "Hồ sơ điểm cuối Overpass: main, kumi, fr hoặc custom (mặc định main)."
              },
              "overpass_url": {
                "label": "URL Overpass",
                "description": "URL điểm cuối Overpass API (mặc định https://overpass-api.de/api/interpreter)."
              },
              "timeout_seconds": {
                "label": "Thời gian chờ (giây)",
                "description": "Thời gian chờ truy vấn tính bằng giây (mặc định 25)."
              },
              "max_elements": {
                "label": "Số phần tử tối đa",
                "description": "Số phần tử Overpass trả về tối đa trước khi phát sinh lỗi (mặc định 50 000)."
              },
              "chunk_large_aoi": {
                "label": "Chia nhỏ AOI lớn",
                "description": "Tự động tách các AOI lớn thành nhiều yêu cầu Overpass (mặc định true)."
              },
              "chunk_max_area_deg2": {
                "label": "Diện tích tối đa mỗi phần (độ²)",
                "description": "Diện tích tối đa mỗi khối tính bằng độ vuông khi chia khối (mặc định 4.0)."
              },
              "max_chunk_count": {
                "label": "Số phần tối đa",
                "description": "Giới hạn cứng số khối khi chia khối các AOI lớn (mặc định 64)."
              },
              "chunk_parallel_requests": {
                "label": "Số yêu cầu song song",
                "description": "Số yêu cầu khối song song tối đa cho các AOI lớn (mặc định 1 = tuần tự)."
              },
              "cache_dir": {
                "label": "Thư mục bộ nhớ đệm",
                "description": "Thư mục tùy chọn để lưu bộ nhớ đệm phản hồi JSON của Overpass theo hàm băm điểm cuối+truy vấn."
              },
              "cache_ttl_hours": {
                "label": "Thời hạn bộ nhớ đệm (giờ)",
                "description": "Thời gian sống của bộ nhớ đệm tính bằng giờ (mặc định 24; 0 nghĩa là không kiểm tra hết hạn)."
              },
              "provenance_output": {
                "label": "Đầu ra nguồn gốc",
                "description": "Đường dẫn JSON tùy chọn để ghi tệp phụ siêu dữ liệu truy vấn/nguồn gốc."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn; nếu bỏ trống, một đầu ra tạm thời sẽ được dùng."
              }
            }
          },
          "assign_projection_lidar": {
            "name": "Gán phép chiếu cho LiDAR",
            "description": "Gán hệ quy chiếu tọa độ cho đám mây điểm LiDAR mà không chiếu lại các điểm của nó.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp LiDAR đầu vào (LAS/LAZ/COPC, hoặc handle trong bộ nhớ)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG của hệ tọa độ cần gán, ví dụ 4326 (WGS84) hoặc 3857 (Web Mercator). Tọa độ không được biến đổi."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn LiDAR đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "assign_projection_raster": {
            "name": "Gán phép chiếu cho raster",
            "description": "Gán hệ quy chiếu tọa độ cho raster mà không biến đổi hình học các ô của nó.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào (hoặc handle trong bộ nhớ)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG của hệ tọa độ cần gán, ví dụ 4326 (WGS84) hoặc 3857 (Web Mercator). Tọa độ không được biến đổi."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "assign_projection_vector": {
            "name": "Gán phép chiếu cho vector",
            "description": "Gán hệ quy chiếu tọa độ cho lớp vector mà không chiếu lại hình học của nó.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào, định dạng được tự động nhận diện (hoặc handle trong bộ nhớ)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG của hệ tọa độ cần gán, ví dụ 4326 (WGS84) hoặc 3857 (Web Mercator). Tọa độ không được biến đổi."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "georeference_raster_from_control_points": {
            "name": "Tham chiếu địa lý raster từ điểm khống chế",
            "description": "Khớp một phép biến đổi từ các GCP và biến đổi hình học raster thành đầu ra có tham chiếu địa lý.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "control_points": {
                "label": "Điểm khống chế",
                "description": "Đường dẫn CSV điểm khống chế với pixel_x,pixel_y,map_x,map_y (và các bí danh được chấp nhận)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG đích."
              },
              "transform_type": {
                "label": "Kiểu biến đổi",
                "description": "Kiểu biến đổi: affine, projective, polynomial hoặc thin_plate_spline."
              },
              "transform_order": {
                "label": "Bậc biến đổi",
                "description": "Bậc đa thức khi transform_type=polynomial."
              },
              "resample": {
                "label": "Lấy mẫu lại",
                "description": "Phương pháp lấy mẫu lại; mặc định bilinear."
              },
              "allow_auto_downgrade": {
                "label": "Cho phép tự động hạ bậc",
                "description": "Cho phép tự động hạ xuống phép biến đổi đơn giản hơn khi GCP thưa thớt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đã tham chiếu địa lý đầu ra."
              },
              "report": {
                "label": "Báo cáo",
                "description": "Đường dẫn JSON báo cáo đầu ra."
              }
            }
          },
          "reproject_lidar": {
            "name": "Chiếu lại LiDAR",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đầu vào"
              },
              "dst_epsg": {
                "label": "EPSG đích",
                "description": "EPSG đích"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đầu ra"
              },
              "use_3d_transform": {
                "label": "Dùng biến đổi 3D",
                "description": "Dùng biến đổi 3D"
              },
              "failure_policy": {
                "label": "Chính sách khi thất bại",
                "description": "Chính sách khi thất bại"
              },
              "coordinate_epoch": {
                "label": "Kỷ nguyên tọa độ",
                "description": "Kỷ nguyên tọa độ"
              },
              "source_reference_epoch": {
                "label": "Kỷ nguyên tham chiếu nguồn",
                "description": "Kỷ nguyên tham chiếu nguồn"
              },
              "target_reference_epoch": {
                "label": "Kỷ nguyên tham chiếu đích",
                "description": "Kỷ nguyên tham chiếu đích"
              },
              "operation_code": {
                "label": "Mã phép toán",
                "description": "Mã phép toán"
              },
              "prefer_official_operation": {
                "label": "Ưu tiên phép toán chính thức",
                "description": "Ưu tiên phép toán chính thức"
              },
              "epoch_policy": {
                "label": "Chính sách kỷ nguyên",
                "description": "Chính sách kỷ nguyên"
              }
            }
          },
          "reproject_raster": {
            "name": "Chiếu lại raster",
            "description": "Chiếu lại (biến đổi hình học) raster sang hệ quy chiếu tọa độ EPSG đích.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào. Phải mang hệ tọa độ nguồn (EPSG hoặc WKT)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG đích, ví dụ 3857 (Web Mercator) hoặc 4326 (WGS84)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp lấy mẫu lại: nearest (mặc định), bilinear, cubic, lanczos, average, min, max, mode, median."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "reproject_vector": {
            "name": "Chiếu lại vector",
            "description": "Chiếu lại hình học vector sang phép chiếu EPSG đích trong khi bảo toàn tô pô và thuộc tính, cho phép tích hợp đa nguồn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG đích."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "orthorectification": {
            "name": "Nắn chỉnh trực giao",
            "description": "Hiệu chỉnh hình học ảnh thô dựa trên DEM sử dụng mô hình máy ảnh RPC. Loại bỏ dịch chuyển do địa hình để tạo đầu ra ảnh trực giao có tham chiếu địa lý.",
            "params": {
              "input_raster": {
                "label": "Raster đầu vào",
                "description": "Đường dẫn raster ảnh thô (chưa hiệu chỉnh) đầu vào. Siêu dữ liệu RPC phải được nhúng trong tệp hoặc có trong tệp phụ .RPB đi kèm."
              },
              "input_dem": {
                "label": "DEM đầu vào",
                "description": "Raster DEM dùng để lấy độ cao địa hình cho mỗi điểm ảnh đầu ra. Nên bao phủ toàn bộ phạm vi cảnh. Nếu không ở tọa độ địa lý, công cụ sẽ chiếu lại khi cần."
              },
              "output_epsg": {
                "label": "EPSG đầu ra",
                "description": "Mã EPSG của hệ tọa độ đầu ra (mặc định 4326 địa lý; chỉ định hệ tọa độ chiếu như 32617 cho múi UTM 17N)."
              },
              "output_resolution": {
                "label": "Độ phân giải đầu ra",
                "description": "Độ phân giải điểm ảnh đầu ra theo đơn vị của hệ tọa độ đầu ra (ví dụ: độ cho hệ địa lý, mét cho hệ chiếu). Mặc định là GSD xấp xỉ của ảnh đầu vào."
              },
              "resample_method": {
                "label": "Phương pháp lấy mẫu lại",
                "description": "Phương pháp lấy mẫu lại cho đầu ra: nearest, bilinear (mặc định), cubic."
              },
              "nodata_value": {
                "label": "Giá trị NoData",
                "description": "Giá trị NoData gán cho các điểm ảnh không có vùng phủ nguồn hợp lệ (mặc định giống đầu vào)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster ảnh trực giao đầu ra."
              }
            }
          },
          "average_flowpath_slope": {
            "name": "Độ dốc trung bình đường dòng chảy",
            "description": "Tính gradient độ dốc trung bình của các đường dòng chảy đi qua mỗi ô DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM không có vùng trũng đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "average_upslope_flowpath_length": {
            "name": "Chiều dài trung bình đường dòng chảy thượng lưu",
            "description": "Tính chiều dài trung bình của đường dòng chảy thượng lưu đi qua mỗi ô DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM không có vùng trũng đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "d8_flow_accum": {
            "name": "Tích lũy dòng chảy D8",
            "description": "Tính tích lũy dòng chảy D8 từ DEM hoặc raster con trỏ D8.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster DEM hoặc con trỏ D8 đầu vào"
              },
              "clip": {
                "label": "Cắt",
                "description": "Cắt giá trị hiển thị lớn nhất (được chấp nhận để tương thích)"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Dùng mã hóa con trỏ ESRI cho các đầu vào con trỏ"
              },
              "input_is_pointer": {
                "label": "Đầu vào là con trỏ",
                "description": "Coi đầu vào là raster con trỏ D8"
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Biến đổi logarit đầu ra"
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Kiểu đầu ra: cells, ca hoặc sca"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "d8_mass_flux": {
            "name": "Thông lượng khối D8",
            "description": "Thực hiện tích lũy thông lượng khối dựa trên D8 sử dụng các raster tải lượng, hiệu suất và hấp thụ.",
            "params": {
              "absorption": {
                "label": "Hấp thụ",
                "description": "Raster tổn thất khối lượng theo từng ô tính theo đơn vị tải lượng."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM không có vùng trũng đầu vào dùng để suy ra hướng dòng chảy D8."
              },
              "efficiency": {
                "label": "Hiệu suất",
                "description": "Raster các giá trị hiệu suất truyền tải, theo `[0, 1]` hoặc phần trăm."
              },
              "loading": {
                "label": "Tải lượng",
                "description": "Raster các giá trị tải lượng khối lượng ban đầu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "d8_pointer": {
            "name": "Con trỏ D8",
            "description": "Hướng dòng chảy theo độ dốc lớn nhất trên 8 lân cận (N/NE/E/SE/S/SW/W/NW). Là nền tảng cho phân tích thủy văn D8 và khoanh vẽ lưu vực.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Dùng mã hóa con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "dinf_flow_accum": {
            "name": "Tích lũy dòng chảy D-infinity",
            "description": "Tính tích lũy dòng chảy D-Infinity từ DEM hoặc raster con trỏ D-Infinity.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster DEM hoặc con trỏ D-Infinity đầu vào"
              },
              "clip": {
                "label": "Cắt",
                "description": "Cắt giá trị hiển thị lớn nhất (được chấp nhận để tương thích)"
              },
              "convergence_threshold": {
                "label": "Ngưỡng hội tụ",
                "description": "Ngưỡng mà trên đó dòng chảy không bị phân tán"
              },
              "input_is_pointer": {
                "label": "Đầu vào là con trỏ",
                "description": "Coi đầu vào là raster con trỏ D-Infinity"
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Biến đổi logarit đầu ra"
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Kiểu đầu ra: cells, ca hoặc sca"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "dinf_mass_flux": {
            "name": "Thông lượng khối D-infinity",
            "description": "Thực hiện tích lũy thông lượng khối D-Infinity sử dụng các raster tải lượng, hiệu suất và hấp thụ.",
            "params": {
              "absorption": {
                "label": "Hấp thụ",
                "description": "Raster hấp thụ đầu vào tính theo đơn vị tải lượng."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "efficiency": {
                "label": "Hiệu suất",
                "description": "Raster hiệu suất đầu vào (giá trị `0-1` hoặc phần trăm)."
              },
              "loading": {
                "label": "Tải lượng",
                "description": "Raster tải lượng đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "dinf_pointer": {
            "name": "Con trỏ D-infinity",
            "description": "Hướng dòng chảy liên tục (0-2π radian) loại bỏ sai lệch đường chéo của D8. Tốt hơn cho mô hình hóa vận chuyển trầm tích và dòng chảy phân kỳ.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "downslope_flowpath_length": {
            "name": "Chiều dài đường dòng chảy hạ lưu",
            "description": "Tính chiều dài đường dòng chảy hạ lưu từ mỗi ô đến cửa ra trong raster con trỏ D8.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào"
              },
              "watersheds": {
                "label": "Lưu vực",
                "description": "Raster lưu vực tùy chọn"
              },
              "weights": {
                "label": "Trọng số",
                "description": "Raster trọng số khoảng cách theo từng ô tùy chọn"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Dùng mã hóa con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "fd8_flow_accum": {
            "name": "Tích lũy dòng chảy FD8",
            "description": "Tính tích lũy dòng chảy FD8 từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "clip": {
                "label": "Cắt",
                "description": "Cắt giá trị hiển thị lớn nhất (được chấp nhận để tương thích)"
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Số mũ trọng số độ dốc"
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Biến đổi logarit đầu ra"
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Kiểu đầu ra: cells, ca hoặc sca"
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "fd8_pointer": {
            "name": "Con trỏ FD8",
            "description": "Dòng chảy phân chia tới nhiều lân cận hạ lưu có trọng số theo gradient. Tốt hơn D8 cho các quá trình phân tán, khuếch tán và bảo toàn khối lượng.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "flow_accum_full_workflow": {
            "name": "Quy trình tích lũy dòng chảy đầy đủ",
            "description": "Chạy toàn bộ quy trình tích lũy dòng chảy không phân kỳ và trả về DEM đã phá, con trỏ hướng dòng chảy và tích lũy.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "clip": {
                "label": "Cắt",
                "description": "Nếu true, cắt giá trị hiển thị lớn nhất của tích lũy (hành vi tương thích)."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, mã hóa đầu ra hướng dòng chảy theo kiểu con trỏ Esri."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Nếu true, biến đổi logarit các giá trị tích lũy."
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Một trong `\"cells\"`, `\"ca\"`, `\"sca\"` (mặc định)."
              },
              "breached_dem_output": {
                "label": "Đầu ra DEM đã phá",
                "description": "Đường dẫn đầu ra tùy chọn cho raster DEM không có vùng trũng."
              },
              "flow_dir_output": {
                "label": "Đầu ra hướng dòng chảy",
                "description": "Đường dẫn đầu ra tùy chọn cho raster hướng dòng chảy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster tích lũy dòng chảy."
              },
              "output_pointer": {
                "label": "Con trỏ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho con trỏ hướng dòng chảy D8 (bí danh của flow_dir_output; mã hóa theo ESRI khi đặt esri_pntr)"
              }
            }
          },
          "flow_length_diff": {
            "name": "Hiệu chiều dài dòng chảy",
            "description": "Tính chênh lệch tuyệt đối lớn nhất cục bộ về chiều dài đường hạ lưu từ raster con trỏ D8.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào."
              },
              "weights": {
                "label": "Trọng số",
                "description": "Trọng số"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, diễn giải các giá trị con trỏ theo mã hóa D8 của ESRI."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "max_upslope_flowpath_length": {
            "name": "Chiều dài đường dòng chảy thượng lưu lớn nhất",
            "description": "Tính chiều dài lớn nhất của đường dòng chảy thượng lưu đi qua mỗi ô DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM không có vùng trũng đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "max_upslope_value": {
            "name": "Giá trị thượng lưu lớn nhất",
            "description": "Truyền giá trị thượng lưu lớn nhất dọc theo các đường dòng chảy D8 trên DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "values": {
                "label": "Giá trị",
                "description": "Raster giá trị đầu vào"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "mdinf_flow_accum": {
            "name": "Tích lũy dòng chảy MD-infinity",
            "description": "Tích lũy đa dòng chảy với trọng số gradient độ dốc (số mũ 1.1). Cân bằng giữa tính thực tế của sự phân tán và việc xác định dòng chảy chính tập trung. Đầu ra: số ô, CA hoặc SCA.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "clip": {
                "label": "Cắt",
                "description": "Cờ tương thích được API chấp nhận."
              },
              "convergence_threshold": {
                "label": "Ngưỡng hội tụ",
                "description": "Ngưỡng mà trên đó dòng chảy không bị phân tán"
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Số mũ trọng số độ dốc (mặc định `1.1`)."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Biến đổi logarit đầu ra"
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Một trong `\"cells\"`, `\"ca\"`, `\"sca\"` (mặc định)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "minimal_dispersion_flow_algorithm": {
            "name": "Thuật toán dòng chảy phân tán tối thiểu",
            "description": "Tạo các raster hướng dòng chảy và tích lũy dòng chảy MDFA từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "clip": {
                "label": "Cắt",
                "description": "Cờ tương thích được API chấp nhận."
              },
              "debug_stats": {
                "label": "Thống kê gỡ lỗi",
                "description": "Xuất chẩn đoán MDFA một dòng (số lượng và giá trị lớn nhất thô)"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, mã hóa đầu ra hướng dòng chảy theo kiểu con trỏ Esri."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Nếu true, biến đổi logarit các giá trị tích lũy."
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Một trong `\"cells\"`, `\"ca\"`, `\"sca\"` (mặc định)."
              },
              "path_corrected_direction_preference": {
                "label": "Ưu tiên hướng hiệu chỉnh đường đi",
                "description": "Tham số ưu tiên `p` trong `[0, 1]`; `1.0` là hoàn toàn không phân tán."
              },
              "flow_dir_output": {
                "label": "Đầu ra hướng dòng chảy",
                "description": "Đường dẫn đầu ra tùy chọn cho raster hướng dòng chảy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster tích lũy dòng chảy."
              }
            }
          },
          "num_inflowing_neighbours": {
            "name": "Số ô lân cận chảy vào",
            "description": "Đếm số lân cận D8 chảy vào cho mỗi ô DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "qin_flow_accumulation": {
            "name": "Tích lũy dòng chảy Qin",
            "description": "Tính tích lũy dòng chảy MFD Qin từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "clip": {
                "label": "Cắt",
                "description": "Cờ tương thích được API chấp nhận."
              },
              "convergence_threshold": {
                "label": "Ngưỡng hội tụ",
                "description": "Ngưỡng mà trên đó dòng chảy không bị phân tán"
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Tham số số mũ cận trên (mặc định `10.0`)."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Biến đổi logarit đầu ra"
              },
              "max_slope": {
                "label": "Độ dốc tối đa",
                "description": "Độ dốc cận trên tính bằng độ được dùng bởi hàm số mũ động (mặc định `45.0`)."
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Một trong `\"cells\"`, `\"ca\"`, `\"sca\"` (mặc định)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "quinn_flow_accumulation": {
            "name": "Tích lũy dòng chảy Quinn",
            "description": "Tính tích lũy dòng chảy MFD Quinn từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "clip": {
                "label": "Cắt",
                "description": "Cờ tương thích được API chấp nhận."
              },
              "convergence_threshold": {
                "label": "Ngưỡng hội tụ",
                "description": "Ngưỡng mà trên đó dòng chảy không bị phân tán"
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Tham số số mũ (mặc định `1.1`)."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Biến đổi logarit đầu ra"
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Một trong `\"cells\"`, `\"ca\"`, `\"sca\"` (mặc định)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "rho8_flow_accum": {
            "name": "Tích lũy dòng chảy Rho8",
            "description": "Tính tích lũy dòng chảy Rho8 từ DEM hoặc raster con trỏ Rho8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "clip": {
                "label": "Cắt",
                "description": "Cắt giá trị hiển thị lớn nhất (được chấp nhận để tương thích)"
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Biến đổi logarit đầu ra"
              },
              "out_type": {
                "label": "Kiểu đầu ra",
                "description": "Kiểu đầu ra: cells, ca hoặc sca"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "rho8_pointer": {
            "name": "Con trỏ Rho8",
            "description": "Hướng dòng chảy đơn ngẫu nhiên có trọng số theo gradient độ dốc. Chạy nhiều lần để phân tích tổ hợp nhằm giảm lỗi tạo kênh của D8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "trace_downslope_flowpaths": {
            "name": "Truy vết đường dòng chảy hạ lưu",
            "description": "Đánh dấu các đường dòng chảy D8 bắt đầu từ các điểm hạt giống cho đến khi không còn dòng chảy hoặc đến biên lưới.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào."
              },
              "seed_points": {
                "label": "Điểm hạt giống",
                "description": "Vector điểm đầu vào của các vị trí hạt giống."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, diễn giải con trỏ D8 theo mã hóa ESRI."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, nền là `0`; nếu không, nền là NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "breach_depressions_least_cost": {
            "name": "Phá vùng trũng chi phí tối thiểu",
            "description": "Phá các vùng trũng trong DEM sử dụng tìm kiếm đường đi chi phí thấp nhất có ràng buộc.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "fill_deps": {
                "label": "Lấp vùng trũng",
                "description": "Nếu true, lấp các vùng trũng chưa được xử lý sau khi phá."
              },
              "flat_increment": {
                "label": "Gia số vùng phẳng",
                "description": "Bước giảm đơn điệu tùy chọn."
              },
              "max_cost": {
                "label": "Chi phí tối đa",
                "description": "Chi phí phá tối đa cho phép."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa tính bằng ô."
              },
              "minimize_dist": {
                "label": "Tối thiểu hóa khoảng cách",
                "description": "Nếu true, gán trọng số theo khoảng cách cho chi phí phá."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "breach_single_cell_pits": {
            "name": "Phá hố đơn ô",
            "description": "Phá các hố đơn ô trong DEM bằng cách khắc các kênh rộng một ô.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được trả về trong bộ nhớ khi được hỗ trợ."
              }
            }
          },
          "burn_streams": {
            "name": "Khắc dòng suối",
            "description": "Khắc mạng lưới suối vào DEM bằng cách giảm độ cao các ô suối.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "streams": {
                "label": "Suối",
                "description": "Vector suối đầu vào."
              },
              "decrement_value": {
                "label": "Giá trị giảm",
                "description": "Mức giảm độ cao áp dụng cho các ô suối (mặc định 5.0)."
              },
              "gradient_distance": {
                "label": "Khoảng cách gradient",
                "description": "Khoảng cách gradient tính bằng ô lưới (0 = chỉ giảm phẳng; mặc định 5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn DEM đã khắc đầu ra."
              }
            }
          },
          "burn_streams_at_roads": {
            "name": "Khắc dòng suối tại đường giao thông",
            "description": "Hạ thấp độ cao suối gần các điểm giao cắt giữa suối và đường giao thông để phá nền đường đắp trong DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "roads": {
                "label": "Đường giao thông",
                "description": "Lớp vector đường bộ."
              },
              "streams": {
                "label": "Suối",
                "description": "Lớp vector suối."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp"
              },
              "road_width": {
                "label": "Chiều rộng đường",
                "description": "Chiều rộng bờ đắp tối đa theo đơn vị bản đồ dùng để đặt tầm khắc dọc theo suối."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "depth_in_sink": {
            "name": "Độ sâu trong vùng trũng",
            "description": "Đo độ sâu mà mỗi ô DEM nằm dưới bề mặt đã lấp vùng trũng.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, gán `0.0` cho các ô nằm ngoài vùng trũng; nếu không, gán NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "fill_burn": {
            "name": "Lấp và khắc",
            "description": "Áp đặt thủy văn cho DEM bằng cách khắc suối và sau đó lấp vùng trũng.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "streams": {
                "label": "Suối",
                "description": "Lớp vector suối đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "fill_depressions": {
            "name": "Lấp vùng trũng",
            "description": "Lấp vùng trũng trong DEM sử dụng chiến lược priority-flood với phương pháp xử lý vùng phẳng Garbrecht-Martz theo mặc định và tùy chọn phương pháp xử lý vùng phẳng theo đường tự nhiên cũ.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "fix_flats": {
                "label": "Sửa vùng phẳng",
                "description": "Nếu true, áp một gradient nhỏ trên các vùng phẳng đã lấp."
              },
              "flat_increment": {
                "label": "Gia số vùng phẳng",
                "description": "Bước tăng vùng phẳng (mặc định `0.0001`)."
              },
              "flat_resolution": {
                "label": "Độ phân giải vùng phẳng",
                "description": "Chế độ xử lý vùng phẳng. Một trong `\"garbrecht_martz\"` hoặc `\"natural\"`."
              },
              "max_depth": {
                "label": "Độ sâu tối đa",
                "description": "Độ sâu lấp tối đa cho phép."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "fill_depressions_planchon_and_darboux": {
            "name": "Lấp vùng trũng Planchon và Darboux",
            "description": "Lấp vùng trũng trong DEM với giao diện tương thích Planchon-và-Darboux.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "fix_flats": {
                "label": "Sửa vùng phẳng",
                "description": "Nếu true, áp một gradient nhỏ trên các vùng phẳng đã lấp."
              },
              "flat_increment": {
                "label": "Gia số vùng phẳng",
                "description": "Bước tăng vùng phẳng (mặc định `0.0001`)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "fill_depressions_wang_and_liu": {
            "name": "Lấp vùng trũng Wang và Liu",
            "description": "Lấp vùng trũng trong DEM với giao diện tương thích Wang-và-Liu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "fix_flats": {
                "label": "Sửa vùng phẳng",
                "description": "Nếu true, áp một gradient nhỏ trên các vùng phẳng đã lấp."
              },
              "flat_increment": {
                "label": "Gia số vùng phẳng",
                "description": "Bước tăng vùng phẳng (mặc định `0.0001`)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "fill_pits": {
            "name": "Lấp hố",
            "description": "Lấp các hố đơn ô trong DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được trả về trong bộ nhớ khi được hỗ trợ."
              }
            }
          },
          "flatten_lakes": {
            "name": "Làm phẳng hồ",
            "description": "Làm phẳng độ cao hồ sử dụng độ cao chu vi nhỏ nhất cho mỗi đa giác.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "lakes": {
                "label": "Hồ",
                "description": "Vector đa giác đầu vào của các đối tượng hồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "impoundment_size_index": {
            "name": "Chỉ số kích thước hồ chứa",
            "description": "Tính các chỉ số hồ chứa gồm độ sâu trung bình/lớn nhất, thể tích, diện tích và chiều cao đập.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "max_dam_length": {
                "label": "Chiều dài đập tối đa",
                "description": "Chiều dài đập tối đa theo đơn vị bản đồ."
              },
              "output_area": {
                "label": "Đầu ra diện tích",
                "description": "Bao gồm raster diện tích ngập trong tuple đầu ra."
              },
              "output_height": {
                "label": "Đầu ra chiều cao",
                "description": "Bao gồm raster chiều cao đập trong tuple đầu ra."
              },
              "output_max": {
                "label": "Đầu ra lớn nhất",
                "description": "Bao gồm raster độ sâu ngập lớn nhất trong tuple đầu ra."
              },
              "output_mean": {
                "label": "Đầu ra trung bình",
                "description": "Bao gồm raster độ sâu ngập trung bình trong tuple đầu ra."
              },
              "output_volume": {
                "label": "Đầu ra thể tích",
                "description": "Bao gồm raster thể tích ngập trong tuple đầu ra."
              },
              "out_area": {
                "label": "Diện tích ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster diện tích"
              },
              "out_dam_height": {
                "label": "Chiều cao đập ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster chiều cao đập"
              },
              "out_max": {
                "label": "Lớn nhất ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ sâu lớn nhất"
              },
              "out_mean": {
                "label": "Trung bình ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ sâu trung bình"
              },
              "out_volume": {
                "label": "Thể tích ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster thể tích"
              }
            }
          },
          "insert_dams": {
            "name": "Chèn đập",
            "description": "Thêm các đập đắp cục bộ tại các điểm được chỉ định sử dụng lựa chọn đỉnh đập dựa trên mặt cắt.",
            "params": {
              "dam_points": {
                "label": "Điểm đập",
                "description": "Vector điểm đầu vào của các vị trí đập."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "dam_length": {
                "label": "Chiều dài đập",
                "description": "Chiều dài đập tối đa theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "raise_walls": {
            "name": "Nâng tường",
            "description": "Nâng độ cao DEM dọc theo các vector tường và tùy chọn phá các điểm giao cắt được chọn.",
            "params": {
              "breach_lines": {
                "label": "Đường phá",
                "description": "Vector tùy chọn xác định các vị trí phá."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "walls": {
                "label": "Tường",
                "description": "Vector đường hoặc đa giác đầu vào xác định các đoạn tường."
              },
              "wall_height": {
                "label": "Chiều cao tường",
                "description": "Mức tăng độ cao áp dụng cho các ô tường."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "sink": {
            "name": "Vùng trũng",
            "description": "Xác định các ô thuộc vùng trũng địa hình trong DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, gán `0.0` cho các ô nằm ngoài vùng trũng; nếu không, gán NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "stochastic_depression_analysis": {
            "name": "Phân tích vùng trũng ngẫu nhiên",
            "description": "Chạy các nhiễu loạn DEM Monte Carlo và ước lượng xác suất thuộc vùng trũng.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp Monte Carlo."
              },
              "range": {
                "label": "Khoảng biến thiên",
                "description": "Tầm tự tương quan sai số theo đơn vị bản đồ."
              },
              "rmse": {
                "label": "RMSE",
                "description": "RMSE độ cao dùng cho nhiễu Gauss."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "topological_breach_burn": {
            "name": "Phá và khắc tô pô",
            "description": "Khắc suối vào DEM, điều chỉnh bề mặt, và trả về các raster suối, DEM, con trỏ và tích lũy.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "streams": {
                "label": "Suối",
                "description": "Vector mạng lưới suối đầu vào."
              },
              "snap_distance": {
                "label": "Khoảng cách bắt dính",
                "description": "Khoảng cách bắt dính suối tùy chọn dùng trong việc điều chỉnh tỉ lệ độ sâu khắc."
              },
              "out_dem": {
                "label": "DEM ra",
                "description": "Đường dẫn đầu ra tùy chọn cho DEM đã khắc/đã hiệu chỉnh."
              },
              "out_dir": {
                "label": "Hướng ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster con trỏ D8."
              },
              "out_fa": {
                "label": "Tích lũy dòng chảy ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster tích lũy dòng chảy."
              },
              "out_streams": {
                "label": "Suối ra",
                "description": "Đường dẫn đầu ra tùy chọn cho suối đã raster hóa."
              }
            }
          },
          "upslope_depression_storage": {
            "name": "Trữ nước vùng trũng thượng lưu",
            "description": "Lập bản đồ độ sâu trữ nước vùng trũng trung bình ở thượng lưu bằng cách định tuyến độ sâu vùng trũng trên một DEM đã điều chỉnh.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "basins": {
            "name": "Bồn thu nước",
            "description": "Khoanh vẽ tất cả các bồn thu nước D8 thoát về các biên dữ liệu hợp lệ.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, diễn giải các giá trị con trỏ theo mã hóa D8 của ESRI."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "flood_order": {
            "name": "Thứ tự ngập lụt",
            "description": "Xuất thứ tự priority-flood tuần tự cho mỗi ô DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "hillslopes": {
            "name": "Sườn đồi",
            "description": "Xác định các vùng sườn đồi thoát nước vào mỗi đoạn suối, tách riêng khu vực bờ trái và bờ phải.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8."
              },
              "streams": {
                "label": "Suối",
                "description": "Raster mạng lưới suối trong đó các ô suối có giá trị > 0 và không phải NoData."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Cờ mã hóa con trỏ ESRI."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "isobasins": {
            "name": "Lưu vực đẳng diện",
            "description": "Chia cảnh quan thành các lưu vực có kích thước xấp xỉ bằng nhau (isobasin) dựa trên ngưỡng diện tích mục tiêu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đã hiệu chỉnh thủy văn đầu vào."
              },
              "target_size": {
                "label": "Kích thước mục tiêu",
                "description": "Diện tích isobasin mục tiêu tính bằng số ô lưới (số nguyên dương hoặc số thực)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "jenson_snap_pour_points": {
            "name": "Bắt dính điểm đổ Jenson",
            "description": "Bắt dính mỗi điểm đổ vào ô suối gần nhất trong khoảng cách tìm kiếm, bảo toàn mọi thuộc tính đầu vào.",
            "params": {
              "pour_pts": {
                "label": "Điểm đổ",
                "description": "Tệp vector đầu vào của các điểm đổ (hình học điểm hoặc đa điểm)."
              },
              "streams": {
                "label": "Suối",
                "description": "Raster mạng lưới suối đầu vào trong đó các ô suối có giá trị > 0 và không phải NoData."
              },
              "snap_dist": {
                "label": "Khoảng cách bắt dính",
                "description": "Bán kính tìm kiếm tối đa theo đơn vị bản đồ. Mặc định bằng chiều rộng một ô khi bỏ trống hoặc bằng không."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho tệp vector điểm đổ đã bắt dính (bắt buộc; mặc định là `snapped_pour_points.geojson` trong thư mục làm việc khi không được truyền cho wrapper)."
              }
            }
          },
          "longest_flowpath": {
            "name": "Đường dòng chảy dài nhất",
            "description": "Khoanh vẽ các đường dòng chảy dài nhất cho mỗi bồn thu nước trong raster bồn thu nước.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào"
              },
              "basins": {
                "label": "Bồn thu nước",
                "description": "Raster bồn thu nước đầu vào"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra"
              }
            }
          },
          "max_branch_length": {
            "name": "Chiều dài nhánh lớn nhất",
            "description": "Tính chiều dài nhánh lớn nhất giữa các đường dòng chảy D8 lân cận, hữu ích để làm nổi bật các đường phân thủy.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Áp dụng biến đổi logarit tự nhiên cho các đầu ra dương."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "snap_pour_points": {
            "name": "Bắt dính điểm đổ",
            "description": "Bắt dính các điểm đổ vào ô có tích lũy dòng chảy cao nhất trong khoảng cách tìm kiếm.",
            "params": {
              "flow_accum": {
                "label": "Tích lũy dòng chảy",
                "description": "Raster tích lũy dòng chảy đầu vào."
              },
              "pour_pts": {
                "label": "Điểm đổ",
                "description": "Tệp vector đầu vào của các điểm đổ (hình học điểm hoặc đa điểm)."
              },
              "snap_dist": {
                "label": "Khoảng cách bắt dính",
                "description": "Bán kính tìm kiếm tối đa theo đơn vị bản đồ. Mặc định bằng chiều rộng một ô khi bỏ trống hoặc bằng không."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho tệp vector điểm đổ đã bắt dính (bắt buộc; mặc định là `snapped_pour_points.geojson` trong thư mục làm việc khi không được truyền cho wrapper)."
              }
            }
          },
          "subbasins": {
            "name": "Tiểu lưu vực",
            "description": "Xác định diện tích lưu vực của mỗi đoạn suối (lưu vực con) trong mạng lưới suối D8.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 do `d8_pointer` tạo ra."
              },
              "streams": {
                "label": "Suối",
                "description": "Raster mạng lưới suối trong đó các ô suối có giá trị > 0 và không phải NoData."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, diễn giải các giá trị con trỏ theo mã hóa ESRI. Mặc định `False`."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "unnest_basins": {
            "name": "Gỡ lồng bồn thu nước",
            "description": "Tạo một raster bồn thu nước cho mỗi cấp lồng nhau của điểm đổ từ lưới con trỏ D8.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào"
              },
              "pour_points": {
                "label": "Điểm đổ",
                "description": "Vector điểm đổ đầu vào"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Diễn giải con trỏ theo kiểu ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cơ sở tùy chọn cho các raster được đánh số"
              }
            }
          },
          "watershed": {
            "name": "Lưu vực",
            "description": "Khoanh vẽ lưu vực từ con trỏ D8 và các điểm đổ vector.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào."
              },
              "pour_pts": {
                "label": "Điểm đổ",
                "description": "Tệp vector đầu vào của các điểm đổ (hình học điểm hoặc đa điểm)."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, diễn giải các giá trị con trỏ theo mã hóa D8 của ESRI."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "watershed_from_raster_pour_points": {
            "name": "Lưu vực từ điểm đổ raster",
            "description": "Khoanh vẽ lưu vực từ con trỏ D8 và raster ID cửa ra của điểm đổ.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào."
              },
              "pour_points": {
                "label": "Điểm đổ",
                "description": "Raster điểm đổ; các giá trị ô khác không và không phải NoData trở thành ID cửa xả."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Nếu true, diễn giải các giá trị con trỏ theo mã hóa D8 của ESRI."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "depth_to_water": {
            "name": "Độ sâu đến mực nước",
            "description": "Tính độ sâu đến mực nước theo bản đồ (depth-to-water) sử dụng tích lũy chi phí thấp nhất từ các đối tượng nguồn suối/hồ.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "stream_raster": {
                "label": "Raster suối",
                "description": "Raster suối"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "distance_to_outlet": {
            "name": "Khoảng cách đến cửa ra",
            "description": "Tính khoảng cách hạ lưu đến cửa ra cho mỗi ô suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "downslope_distance_to_stream": {
            "name": "Khoảng cách hạ lưu đến suối",
            "description": "Tính khoảng cách hạ lưu từ mỗi ô DEM đến suối gần nhất dọc theo đường dòng chảy.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM không có vùng trũng đầu vào."
              },
              "streams": {
                "label": "Suối",
                "description": "Raster suối đầu vào; các ô suối là những giá trị `> 0` và không phải NoData."
              },
              "dinf": {
                "label": "D-infinity",
                "description": "Nếu true, dùng định tuyến D-infinity; nếu không, dùng định tuyến D8."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "downslope_index": {
            "name": "Chỉ số hạ lưu",
            "description": "Tính chỉ số hạ lưu Hjerdt et al. (2004) sử dụng hướng dòng chảy D8.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output_type": {
                "label": "Kiểu đầu ra",
                "description": "Đại lượng đầu ra: tangent, degrees, radians, distance (mặc định tangent)."
              },
              "vertical_drop": {
                "label": "Độ chênh cao",
                "description": "Ngưỡng chênh cao thẳng đứng d cho việc duyệt xuôi dốc."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "edge_contamination": {
            "name": "Nhiễm biên",
            "description": "Xác định các ô DEM có diện tích thượng lưu mở rộng ra ngoài biên DEM đối với các sơ đồ định tuyến dòng chảy thông dụng.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM không có vùng trũng đầu vào."
              },
              "flow_type": {
                "label": "Kiểu dòng chảy",
                "description": "Phương pháp định tuyến cần dùng: một trong `\"d8\"`, `\"mfd\"`/`\"fd8\"` hoặc `\"dinf\"`."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ đứng tùy chọn. Các giá trị `<= 0` được coi là `1.0`."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "elev_relative_to_watershed_min_max": {
            "name": "Độ cao tương đối so với min/max lưu vực",
            "description": "Tính vị trí độ cao tương đối của một ô DEM trong mỗi lưu vực dưới dạng phần trăm.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "watersheds": {
                "label": "Lưu vực",
                "description": "Đường dẫn raster ID lưu vực hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "elevation_above_stream": {
            "name": "Độ cao trên suối",
            "description": "Tính độ cao so với suối gần nhất được đo dọc theo đường dòng chảy hạ lưu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM không có vùng trũng đầu vào."
              },
              "streams": {
                "label": "Suối",
                "description": "Raster suối đầu vào; các ô suối là những giá trị `> 0` và không phải NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "elevation_above_stream_euclidean": {
            "name": "Độ cao trên suối Euclid",
            "description": "Tính độ cao so với suối gần nhất sử dụng khoảng cách đường thẳng (Euclid).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "streams": {
                "label": "Suối",
                "description": "Raster suối đầu vào; các ô suối là những giá trị `> 0` và không phải NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "find_noflow_cells": {
            "name": "Tìm ô không dòng chảy",
            "description": "Tìm các ô DEM không có lân cận D8 nào thấp hơn.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "interior_only": {
                "label": "Chỉ phần bên trong",
                "description": "Nếu true, chỉ đánh dấu các ô không có dòng chảy thực sự nằm bên trong (loại trừ các cửa xả ở biên raster và kề NoData)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "find_parallel_flow": {
            "name": "Tìm dòng chảy song song",
            "description": "Xác định các ô suối có hướng dòng chảy D8 song song.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8 đầu vào."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "hydrologic_connectivity": {
            "name": "Liên thông thủy văn",
            "description": "Tính các chỉ số kết nối DUL và UDSA từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "convergence_threshold": {
                "label": "Ngưỡng hội tụ",
                "description": "Ngưỡng khởi phát suối tùy chọn tính bằng số ô đóng góp."
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Tham số tương thích để kiểm soát mức phân tán."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ đứng tùy chọn."
              },
              "output1": {
                "label": "Đầu ra 1",
                "description": "Đường dẫn đầu ra tùy chọn cho raster DUL."
              },
              "output2": {
                "label": "Đầu ra 2",
                "description": "Đường dẫn đầu ra tùy chọn cho raster UDSA."
              }
            }
          },
          "relative_stream_power_index": {
            "name": "Chỉ số năng lượng dòng tương đối",
            "description": "Tính chỉ số năng lượng dòng chảy tương đối từ diện tích lưu vực riêng và độ dốc.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Đường dẫn raster diện tích lưu vực riêng hoặc đối tượng raster có kiểu."
              },
              "slope": {
                "label": "Độ dốc",
                "description": "Raster độ dốc tính bằng độ."
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Số mũ diện tích lưu vực riêng p (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "sediment_transport_index": {
            "name": "Chỉ số vận chuyển trầm tích",
            "description": "Tính chỉ số vận chuyển trầm tích (hệ số LS) từ diện tích lưu vực riêng và độ dốc.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Đường dẫn raster diện tích lưu vực riêng hoặc đối tượng raster có kiểu."
              },
              "slope": {
                "label": "Độ dốc",
                "description": "Raster độ dốc tính bằng độ."
              },
              "sca_exponent": {
                "label": "Số mũ SCA",
                "description": "Số mũ diện tích lưu vực riêng n (mặc định 0.4)."
              },
              "slope_exponent": {
                "label": "Số mũ độ dốc",
                "description": "Số mũ độ dốc m (mặc định 1.3)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "wetness_index": {
            "name": "Chỉ số độ ẩm",
            "description": "Tính chỉ số độ ẩm địa hình ln(SCA / tan(slope)).",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Đường dẫn raster diện tích lưu vực riêng hoặc đối tượng raster có kiểu."
              },
              "slope": {
                "label": "Độ dốc",
                "description": "Raster độ dốc tính bằng độ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "extract_streams": {
            "name": "Trích xuất suối",
            "description": "Trích xuất suối dựa trên ngưỡng tích lũy dòng chảy.",
            "params": {
              "flow_accumulation": {
                "label": "Tích lũy dòng chảy",
                "description": "Raster tích lũy dòng chảy đầu vào."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Giá trị tích lũy nhỏ nhất cần có để thuộc về một lòng suối."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, nền không phải suối là 0 thay vì NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster suối đầu ra tùy chọn."
              }
            }
          },
          "extract_valleys": {
            "name": "Trích xuất thung lũng",
            "description": "Trích xuất thung lũng từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước bộ lọc"
              },
              "line_thin": {
                "label": "Làm mảnh đường",
                "description": "Làm mảnh đường"
              },
              "variant": {
                "label": "Biến thể",
                "description": "Biến thể"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "prune_vector_streams": {
            "name": "Tỉa suối vector",
            "description": "Cắt tỉa mạng lưới suối vector dựa trên độ lớn Shreve.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào dùng để xác định hướng dòng chảy"
              },
              "streams": {
                "label": "Suối",
                "description": "Mạng lưới suối vector đầu vào"
              },
              "max_ridge_cutting_height": {
                "label": "Chiều cao cắt sống núi tối đa",
                "description": "Mức tăng độ cao tối đa cho phép khi kết nối các đoạn suối hạ lưu"
              },
              "snap_distance": {
                "label": "Khoảng cách bắt dính",
                "description": "Khoảng cách bắt dính tối đa cho kết nối điểm cuối"
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Độ lớn Shreve nhỏ nhất cần giữ lại"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra"
              }
            }
          },
          "raster_streams_to_vector": {
            "name": "Suối raster thành vector",
            "description": "Chuyển đổi mạng lưới suối raster sang vector.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams_raster": {
                "label": "Raster suối",
                "description": "Raster suối"
              },
              "all_vertices": {
                "label": "Tất cả đỉnh",
                "description": "Tất cả đỉnh"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "rasterize_streams": {
            "name": "Raster hóa suối",
            "description": "Raster hóa mạng lưới suối vector.",
            "params": {
              "input_vector": {
                "label": "Vector đầu vào",
                "description": "Vector đầu vào"
              },
              "reference_raster": {
                "label": "Raster tham chiếu",
                "description": "Raster tham chiếu"
              },
              "use_feature_id": {
                "label": "Dùng ID đối tượng",
                "description": "Dùng ID đối tượng"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "remove_short_streams": {
            "name": "Loại bỏ suối ngắn",
            "description": "Loại bỏ các đoạn suối ngắn hơn chiều dài tối thiểu.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "min_length": {
                "label": "Chiều dài tối thiểu",
                "description": "Chiều dài tối thiểu"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "repair_stream_vector_topology": {
            "name": "Sửa tô pô vector suối",
            "description": "Sửa chữa tô pô của mạng lưới suối vector.",
            "params": {
              "input_vector": {
                "label": "Vector đầu vào",
                "description": "Vector đầu vào"
              },
              "snap": {
                "label": "Bắt dính",
                "description": "Bắt dính"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "river_centerlines": {
            "name": "Đường tim sông",
            "description": "Trích xuất đường tâm sông từ raster mặt nước sử dụng trục trung tuyến.",
            "params": {
              "raster": {
                "label": "Raster",
                "description": "Raster nhị phân nước/không phải nước"
              },
              "min_length": {
                "label": "Chiều dài tối thiểu",
                "description": "Chiều dài đường tâm nhỏ nhất tính bằng ô raster"
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính tìm kiếm (ô) dùng để kết nối các điểm cuối lân cận"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường tâm đầu ra"
              }
            }
          },
          "farthest_channel_head": {
            "name": "Đầu kênh xa nhất",
            "description": "Tính khoảng cách đến đầu kênh xa nhất.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "find_main_stem": {
            "name": "Tìm dòng chính",
            "description": "Xác định dòng chính của mạng lưới suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "length_of_upstream_channels": {
            "name": "Chiều dài kênh thượng nguồn",
            "description": "Tính tổng chiều dài kênh thượng nguồn.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "long_profile": {
            "name": "Trắc dọc",
            "description": "Tạo mặt cắt dọc suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams_raster": {
                "label": "Raster suối",
                "description": "Raster suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "long_profile_from_points": {
            "name": "Trắc dọc từ điểm",
            "description": "Tạo mặt cắt dọc từ các điểm vector.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "points": {
                "label": "Điểm",
                "description": "Điểm"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "hack_stream_order": {
            "name": "Cấp suối Hack",
            "description": "Gán cấp suối Hack cho các ô suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Raster suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Dùng con trỏ kiểu ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Gán không cho nền"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "horton_ratios": {
            "name": "Tỉ số Horton",
            "description": "Tính các tỷ số phân nhánh, chiều dài, diện tích thoát nước và độ dốc của Horton.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "streams_raster": {
                "label": "Raster suối",
                "description": "Raster suối nhị phân (dương = suối)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo văn bản đầu ra (tùy chọn)."
              }
            }
          },
          "horton_stream_order": {
            "name": "Cấp suối Horton",
            "description": "Gán cấp suối Horton cho các ô suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Raster suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Dùng con trỏ kiểu ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Gán không cho nền"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "shreve_stream_magnitude": {
            "name": "Độ lớn suối Shreve",
            "description": "Tính độ lớn suối Shreve.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Raster suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Dùng con trỏ kiểu ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Gán không cho nền"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "strahler_order_basins": {
            "name": "Bồn thu nước theo cấp Strahler",
            "description": "Khoanh vẽ các bồn thu nước lưu vực được gán nhãn theo cấp Horton-Strahler của đoạn suối thoát nước của chúng.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ D8."
              },
              "streams": {
                "label": "Suối",
                "description": "Raster mạng lưới suối trong đó các ô suối có giá trị > 0 và không phải NoData."
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Cờ mã hóa con trỏ ESRI."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "strahler_stream_order": {
            "name": "Cấp suối Strahler",
            "description": "Gán cấp suối Strahler cho các ô suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Raster suối (giá trị dương = ô suối)"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Dùng giá trị con trỏ kiểu ESRI (mặc định: Whitebox)"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Gán không cho nền thay vì NoData"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "stream_link_class": {
            "name": "Lớp đoạn suối",
            "description": "Phân loại các đoạn suối thành bên trong, bên ngoài hoặc đầu nguồn.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "stream_link_identifier": {
            "name": "Định danh đoạn suối",
            "description": "Gán ID duy nhất cho mỗi đoạn suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "stream_link_length": {
            "name": "Chiều dài đoạn suối",
            "description": "Tính tổng chiều dài cho mỗi đoạn suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "linkid": {
                "label": "ID đoạn",
                "description": "ID đoạn"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "stream_link_slope": {
            "name": "Độ dốc đoạn suối",
            "description": "Tính độ dốc trung bình cho mỗi đoạn suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "linkid": {
                "label": "ID đoạn",
                "description": "ID đoạn"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "stream_slope_continuous": {
            "name": "Độ dốc suối liên tục",
            "description": "Tính giá trị độ dốc cho mỗi ô suối.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "topological_stream_order": {
            "name": "Cấp suối tô pô",
            "description": "Gán cấp suối tô pô dựa trên số đoạn.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "tributary_identifier": {
            "name": "Định danh chi lưu",
            "description": "Gán ID duy nhất cho mỗi phụ lưu.",
            "params": {
              "d8_pntr": {
                "label": "Con trỏ D8",
                "description": "Raster con trỏ dòng chảy D8"
              },
              "streams": {
                "label": "Suối",
                "description": "Suối"
              },
              "esri_pntr": {
                "label": "Con trỏ ESRI",
                "description": "Con trỏ ESRI"
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nền bằng 0"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "vector_stream_network_analysis": {
            "name": "Phân tích mạng lưới suối vector",
            "description": "Phân tích toàn diện mạng lưới suối vector.",
            "params": {
              "streams": {
                "label": "Suối",
                "description": "Lớp vector mạng lưới suối đầu vào."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster độ cao đầu vào (DEM)."
              },
              "max_ridge_cutting_height": {
                "label": "Chiều cao cắt sống núi tối đa",
                "description": "Chiều cao cắt sống núi tối đa cho phép."
              },
              "snap_distance": {
                "label": "Khoảng cách bắt dính",
                "description": "Dung sai khoảng cách bắt dính để dọn dẹp mạng lưới."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn."
              }
            }
          },
          "add_point_coordinates_to_table": {
            "name": "Thêm tọa độ điểm vào bảng",
            "description": "Sao chép một lớp điểm và bổ sung các trường thuộc tính XCOORD và YCOORD.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "clean_vector": {
            "name": "Làm sạch vector",
            "description": "Loại bỏ các hình học vector rỗng và không hợp lệ (ví dụ: đường/đa giác quá nhỏ) trong khi bảo toàn các đối tượng và thuộc tính hợp lệ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "csv_points_to_vector": {
            "name": "Điểm CSV thành vector",
            "description": "Nhập các bản ghi điểm từ tệp CSV vào một lớp vector điểm.",
            "params": {
              "input_file": {
                "label": "Tệp đầu vào",
                "description": "Đường dẫn tệp CSV đầu vào."
              },
              "x_field_num": {
                "label": "Số thứ tự trường X",
                "description": "Chỉ số bắt đầu từ 0 cho trường tọa độ X. Mặc định là 0."
              },
              "y_field_num": {
                "label": "Số thứ tự trường Y",
                "description": "Chỉ số bắt đầu từ 0 cho trường tọa độ Y. Mặc định là 1."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG tùy chọn cho hệ tọa độ đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "export_table_to_csv": {
            "name": "Xuất bảng sang CSV",
            "description": "Xuất bảng thuộc tính vector ra tệp CSV.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "output_csv_file": {
                "label": "Tệp CSV đầu ra",
                "description": "Đường dẫn tệp CSV đầu ra."
              },
              "headers": {
                "label": "Tiêu đề",
                "description": "Bao gồm hàng tiêu đề trong đầu ra. Mặc định là true."
              }
            }
          },
          "join_tables": {
            "name": "Kết nối bảng",
            "description": "Kết nối thuộc tính từ một bảng vector ngoài vào bảng vector chính sử dụng các trường khóa.",
            "params": {
              "primary_vector": {
                "label": "Vector chính",
                "description": "Đường dẫn vector chính để nhận các trường được nối."
              },
              "primary_key_field": {
                "label": "Trường khóa chính",
                "description": "Trường khóa chính trong vector chính."
              },
              "foreign_vector": {
                "label": "Vector ngoài",
                "description": "Đường dẫn vector ngoài chứa các trường nguồn."
              },
              "foreign_key_field": {
                "label": "Trường khóa ngoài",
                "description": "Trường khóa ngoài trong vector ngoài."
              },
              "import_field": {
                "label": "Trường nhập",
                "description": "Trường đơn tùy chọn cần nhập; mặc định là tất cả các trường không phải khóa và không phải FID."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Mặc định là một đường dẫn GeoJSON suy ra bên cạnh đầu vào chính."
              }
            }
          },
          "merge_table_with_csv": {
            "name": "Gộp bảng với CSV",
            "description": "Hợp nhất thuộc tính từ một bảng CSV vào bảng thuộc tính vector theo các trường khóa.",
            "params": {
              "primary_vector": {
                "label": "Vector chính",
                "description": "Đường dẫn vector chính để nhận các trường được gộp."
              },
              "primary_key_field": {
                "label": "Trường khóa chính",
                "description": "Trường khóa chính trong vector chính."
              },
              "foreign_csv_filename": {
                "label": "Tên tệp CSV ngoài",
                "description": "Tệp CSV chứa bảng ngoài."
              },
              "foreign_key_field": {
                "label": "Trường khóa ngoài",
                "description": "Tên trường khóa ngoài trong tiêu đề CSV."
              },
              "import_field": {
                "label": "Trường nhập",
                "description": "Trường CSV đơn tùy chọn cần nhập; mặc định là tất cả các trường không phải khóa."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Mặc định là một đường dẫn GeoJSON suy ra bên cạnh đầu vào chính."
              }
            }
          },
          "merge_vectors": {
            "name": "Gộp vector",
            "description": "Kết hợp hai hoặc nhiều vector đầu vào có cùng kiểu hình học thành một vector đầu ra duy nhất.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các đường dẫn vector đầu vào (cần ít nhất hai)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "reinitialize_attribute_table": {
            "name": "Khởi tạo lại bảng thuộc tính",
            "description": "Tạo bản sao của một lớp vector chỉ với thuộc tính FID được tạo lại.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Nếu bỏ trống, sẽ ghi đè lên đường dẫn đầu vào."
              }
            }
          },
          "vector_summary_statistics": {
            "name": "Thống kê tóm tắt vector",
            "description": "Tính số lượng, tổng, trung bình, nhỏ nhất, lớn nhất và độ lệch chuẩn theo nhóm phân loại và xuất ra CSV.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Tên trường nhóm."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Tên trường giá trị số."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "fix_dangling_arcs": {
            "name": "Sửa cung treo",
            "description": "Sửa các cung treo bị thiếu và bị thừa trong mạng lưới đường bằng cách bắt dính các điểm đầu cuối của đường trong khoảng cách ngưỡng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector polyline đầu vào."
              },
              "snap": {
                "label": "Bắt dính",
                "description": "Ngưỡng khoảng cách bắt dính theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "lines_to_polygons": {
            "name": "Đường thành đa giác",
            "description": "Chuyển đổi đối tượng polyline thành đối tượng đa giác, coi phần đầu tiên là vòng ngoài và các phần sau là lỗ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector polyline đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "multipart_to_singlepart": {
            "name": "Đa phần thành đơn phần",
            "description": "Chuyển đổi một vector chứa các đối tượng nhiều phần thành vector chỉ chứa các đối tượng một phần.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào (polyline, đa giác hoặc đa điểm)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Mặc định là một tệp GeoJSON có dấu thời gian bên cạnh đầu vào."
              },
              "exclude_holes": {
                "label": "Loại trừ lỗ",
                "description": "Khi true, các lỗ đa giác vẫn gắn với vòng ngoài bao quanh chúng (mặc định: false)."
              }
            }
          },
          "polygons_to_lines": {
            "name": "Đa giác thành đường",
            "description": "Chuyển đổi các đối tượng đa giác và đa đa giác thành đường theo ranh giới của chúng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "remove_polygon_holes": {
            "name": "Loại bỏ lỗ đa giác",
            "description": "Loại bỏ các vòng trong khỏi đối tượng đa giác trong khi bảo toàn thuộc tính.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "singlepart_to_multipart": {
            "name": "Đơn phần thành đa phần",
            "description": "Hợp nhất các đối tượng một phần thành đối tượng nhiều phần, được nhóm theo một trường phân loại tùy chọn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Mặc định là một tệp GeoJSON có dấu thời gian bên cạnh đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường thuộc tính tùy chọn để nhóm các đối tượng. Khi bỏ trống, tất cả đối tượng được gộp thành một hình học."
              }
            }
          },
          "topology_rule_autofix": {
            "name": "Tự động sửa quy tắc tô pô",
            "description": "Tự động áp dụng các sửa lỗi an toàn, có thể kiểm toán cho các vi phạm tô pô được phát hiện bởi topology_rule_validate: bắt dính điểm đầu cuối giữa các đối tượng, bắt dính/chiếu điểm đầu cuối treo, và chiếu điểm lên đường. polygon_must_not_have_gaps không có sửa lỗi tự động và được báo cáo là không có thay đổi nào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "rule_set": {
                "label": "Bộ quy tắc",
                "description": "Cấu hình quy tắc dưới dạng mảng/đối tượng JSON, chuỗi CSV hoặc đường dẫn tệp. Các quy tắc có sửa lỗi tự động: line_endpoints_must_snap_within_tolerance, line_must_not_have_dangles, point_must_be_covered_by_line. polygon_must_not_have_gaps được chấp nhận nhưng không bao giờ tạo ra thay đổi."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Dung sai cho các thao tác bắt dính theo đơn vị tọa độ. Mặc định là 0.01."
              },
              "dry_run": {
                "label": "Chạy thử",
                "description": "Nếu true (MẶC ĐỊNH), chỉ xem trước: báo cáo thay đổi được xuất ra nhưng không ghi đầu ra. Truyền false để áp dụng các sửa lỗi."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra cho các đối tượng đã sửa. Nếu bỏ trống, được suy ra bên cạnh đầu vào."
              },
              "change_report": {
                "label": "Báo cáo thay đổi",
                "description": "Đường dẫn báo cáo JSON tùy chọn ghi nhật ký kiểm tra thay đổi."
              }
            }
          },
          "topology_rule_validate": {
            "name": "Kiểm tra quy tắc tô pô",
            "description": "Kiểm tra tô pô vector theo các quy tắc trong bộ quy tắc (tự giao, chồng lấn, khoảng trống, đầu treo, độ phủ điểm, bắt dính điểm đầu cuối) và xuất ra các vi phạm ở cấp đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "rule_set": {
                "label": "Bộ quy tắc",
                "description": "Cấu hình quy tắc dưới dạng mảng/đối tượng JSON, chuỗi CSV hoặc đường dẫn tệp. Mặc định là toàn bộ 6 quy tắc MVP. Hỗ trợ: 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": "Dung sai bắt dính",
                "description": "Dung sai cho quy tắc line_endpoints_must_snap_within_tolerance theo đơn vị tọa độ. Mặc định là 1.0."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra cho các vi phạm. Nếu bỏ trống, được suy ra bên cạnh đầu vào."
              },
              "report": {
                "label": "Báo cáo",
                "description": "Đường dẫn báo cáo tóm tắt JSON tùy chọn."
              }
            }
          },
          "topology_validation_report": {
            "name": "Báo cáo kiểm tra tô pô",
            "description": "Kiểm toán một lớp vector để phát hiện các vấn đề tô pô và ghi báo cáo CSV theo từng đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra."
              }
            }
          },
          "convert_nodata_to_zero": {
            "name": "Chuyển NoData thành 0",
            "description": "Thay thế các ô NoData của raster bằng 0 trong khi giữ nguyên các ô hợp lệ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "modify_nodata_value": {
            "name": "Sửa đổi giá trị NoData",
            "description": "Thay đổi giá trị NoData của raster và ghi lại các ô NoData hiện có thành giá trị mới.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "new_value": {
                "label": "Giá trị mới",
                "description": "Giá trị NoData mới. Mặc định là -32768.0."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "new_raster_from_base_raster": {
            "name": "Raster mới từ raster nền",
            "description": "Tạo raster mới sử dụng phạm vi, kích thước và CRS của một raster cơ sở.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Đường dẫn raster cơ sở."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              },
              "out_val": {
                "label": "Giá trị ra",
                "description": "Giá trị điền tùy chọn. Mặc định là NoData của raster."
              },
              "data_type": {
                "label": "Kiểu dữ liệu",
                "description": "Kiểu dữ liệu tùy chọn: 'float', 'double' hoặc 'integer'."
              }
            }
          },
          "new_raster_from_base_vector": {
            "name": "Raster mới từ vector nền",
            "description": "Tạo raster mới từ phạm vi của một vector cơ sở và kích thước ô, được lấp đầy bằng một giá trị tùy chọn.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Đường dẫn vector cơ sở."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô lưới đầu ra (> 0)."
              },
              "out_val": {
                "label": "Giá trị ra",
                "description": "Giá trị điền tùy chọn. Mặc định là NoData (-32768)."
              },
              "data_type": {
                "label": "Kiểu dữ liệu",
                "description": "Từ khóa kiểu dữ liệu đầu ra tùy chọn: integer, float hoặc double."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "raster_to_vector_lines": {
            "name": "Raster thành đường vector",
            "description": "Chuyển đổi các ô đường raster khác không, không phải NoData thành đối tượng vector polyline.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào (một kênh)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "raster_to_vector_points": {
            "name": "Raster thành điểm vector",
            "description": "Chuyển đổi các ô khác không, không phải NoData trong raster thành đối tượng điểm nằm tại tâm ô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "raster_to_vector_polygons": {
            "name": "Raster thành đa giác vector",
            "description": "Chuyển đổi các vùng raster khác không, không phải NoData thành đối tượng vector đa giác với thuộc tính FID và VALUE.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào (một kênh)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra. Nếu bỏ trống, một đường dẫn GeoJSON sẽ được suy ra bên cạnh đầu vào."
              }
            }
          },
          "remove_raster_polygon_holes": {
            "name": "Loại bỏ lỗ đa giác raster",
            "description": "Loại bỏ các lỗ nền bên trong (các vùng 0 hoặc NoData được bao quanh bởi tiền cảnh) khỏi đa giác raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào (một kênh)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Kích thước lỗ tối đa tùy chọn tính bằng ô cần loại bỏ. 0 nghĩa là tất cả các lỗ khép kín."
              },
              "use_diagonals": {
                "label": "Dùng đường chéo",
                "description": "Dùng liên thông 8 lân cận cho việc gộp cụm và kết nối biên."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "set_nodata_value": {
            "name": "Đặt giá trị NoData",
            "description": "Đặt giá trị NoData cho raster và ánh xạ các ô NoData hiện có sang giá trị nền được chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "back_value": {
                "label": "Giá trị nền",
                "description": "Giá trị nền cần gán làm NoData. Mặc định là 0.0."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, trả về raster trong bộ nhớ."
              }
            }
          },
          "vector_lines_to_raster": {
            "name": "Đường vector thành raster",
            "description": "Raster hóa hình học đường và ranh giới đa giác thành lưới raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào (đường hoặc đa giác)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường số tùy chọn cần khắc. Mặc định là FID."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Khi true, khởi tạo nền đầu ra bằng 0 thay vì NoData."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp 'base'. Nếu bỏ trống và không có base, kích thước ô tự động là phạm vi lớn nhất / 500."
              },
              "base": {
                "label": "Nền",
                "description": "Đường dẫn raster cơ sở tùy chọn xác định lưới và phạm vi đầu ra."
              }
            }
          },
          "vector_points_to_raster": {
            "name": "Điểm vector thành raster",
            "description": "Raster hóa vector điểm hoặc đa điểm thành lưới sử dụng phép gán được chọn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đầu vào (điểm/đa điểm)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả nằm trong bộ nhớ."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số tùy chọn dùng cho các giá trị raster. Mặc định là FID."
              },
              "assign": {
                "label": "Gán",
                "description": "Phép gán: last, first, min, max, sum, num, mean."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Khi true, khởi tạo nền bằng 0; nếu không, là NoData."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra. Bắt buộc khi không cung cấp 'base'."
              },
              "base": {
                "label": "Nền",
                "description": "Đường dẫn raster cơ sở tùy chọn để xác định phạm vi/lưới."
              }
            }
          },
          "vector_polygons_to_raster": {
            "name": "Đa giác vector thành raster",
            "description": "Raster hóa vector đa giác thành lưới, hỗ trợ giá trị ghi dựa trên thuộc tính.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn vector đa giác đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Tên trường số tùy chọn cho các giá trị khắc (mặc định là FID)."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Khi true, khởi tạo nền đầu ra bằng 0 thay vì NoData."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp 'base'."
              },
              "base": {
                "label": "Nền",
                "description": "Đường dẫn raster cơ sở tùy chọn xác định lưới và phạm vi đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ."
              }
            }
          },
          "local_morans_i_lisa_raster": {
            "name": "Moran's I cục bộ (LISA) raster",
            "description": "Tính phân tích cụm LISA từ các điểm và xuất ra raster phân loại (HH/LL/HL/LH/NS). Cho phép tích hợp dựa trên raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào chứa các điểm quan trắc."
              },
              "field": {
                "label": "Trường",
                "description": "Trường thuộc tính dạng số cần phân tích."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Giá trị k cho chế độ k_nearest (mặc định 8)."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách cho chế độ distance_band."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Áp dụng chuẩn hóa theo hàng cho các trọng số (mặc định true)."
              },
              "island_policy": {
                "label": "Chính sách đảo",
                "description": "Cách xử lý đối tượng cô lập: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ngưỡng ý nghĩa trong [0, 1]; mặc định 0.05."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô raster đầu ra (tùy chọn; tự động tính từ phạm vi)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra (phân loại: 0=NS, 1=HH, 2=LL, 3=HL, 4=LH)."
              }
            }
          },
          "getis_ord_gi_star_raster": {
            "name": "Getis-Ord Gi* raster",
            "description": "Tính phân loại điểm nóng/điểm lạnh Gi* từ các điểm và xuất ra raster (-1=lạnh, 0=NS, 1=nóng). Dành cho phân tích dựa trên điểm nóng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào chứa các điểm quan trắc."
              },
              "field": {
                "label": "Trường",
                "description": "Trường thuộc tính dạng số cần phân tích."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Giá trị k cho chế độ k_nearest (mặc định 8)."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách cho chế độ distance_band."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Áp dụng chuẩn hóa theo hàng cho các trọng số (mặc định true)."
              },
              "island_policy": {
                "label": "Chính sách đảo",
                "description": "Cách xử lý đối tượng cô lập: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ngưỡng ý nghĩa trong [0, 1]; mặc định 0.05."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô raster đầu ra (tùy chọn; tự động tính từ phạm vi)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra (phân loại: -1=Cold, 0=NS, 1=Hot)."
              }
            }
          },
          "ordinary_kriging": {
            "name": "Kriging thông thường",
            "description": "Thực hiện nội suy kriging thông thường để ước lượng giá trị tại các ô lưới chưa được lập bản đồ dựa trên một mẫu các phép đo điểm. Kriging thông thường là một phương pháp địa thống kê tận dụng cấu trúc tự tương quan không gian để cung cấp cả giá trị dự đoán và phương sai kriging tương ứng (độ bất định của dự đoán). Công cụ tự động ước lượng variogram thực nghiệm từ dữ liệu điểm đầu vào và khớp một mô hình variogram lý thuyết (Spherical, Exponential hoặc Gaussian) để nắm bắt sự phụ thuộc không gian.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường thuộc tính số chứa các giá trị cần nội suy."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị bản đồ (bắt buộc nếu không có base_raster)."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "local_kriging": {
            "name": "Kriging cục bộ",
            "description": "Thực hiện nội suy kriging thông thường cục bộ sử dụng k láng giềng gần nhất, cung cấp khả năng ước lượng không gian hiệu quả cho các tập dữ liệu lớn. Cách tiếp cận này thiết thực hơn về mặt tính toán so với kriging thông thường toàn cục đối với các tập dữ liệu có hàng nghìn điểm.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường thuộc tính số chứa các giá trị cần nội suy."
              },
              "k_neighbors": {
                "label": "Số lân cận K",
                "description": "Số lân cận gần nhất cần dùng; mặc định là 10."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị bản đồ (bắt buộc nếu không có base_raster)."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "simple_kriging": {
            "name": "Kriging đơn giản",
            "description": "Thực hiện nội suy kriging đơn giản khi giá trị trung bình của trường không gian đã được biết trước. Phương pháp này giảm phương sai kriging và cung cấp dự đoán ổn định hơn khi giá trị trung bình được biết một cách đáng tin cậy từ thông tin bên ngoài.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường thuộc tính số chứa các giá trị cần nội suy."
              },
              "known_mean": {
                "label": "Trung bình đã biết",
                "description": "Giá trị trung bình đã biết của trường không gian."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị bản đồ (bắt buộc nếu không có base_raster)."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "universal_kriging": {
            "name": "Kriging phổ quát",
            "description": "Thực hiện nội suy kriging phổ quát khi hiện tượng không gian có xu hướng hoặc độ trôi có hệ thống. Kết hợp kriging với ước lượng bề mặt xu hướng đa thức.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường thuộc tính số chứa các giá trị cần nội suy."
              },
              "trend_order": {
                "label": "Bậc xu thế",
                "description": "Bậc xu thế đa thức (1=tuyến tính, 2=bậc hai); mặc định là 1."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị bản đồ (bắt buộc nếu không có base_raster)."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "spacetime_kriging": {
            "name": "Kriging không-thời gian",
            "description": "Thực hiện nội suy kriging không gian-thời gian để mô hình hóa đồng thời biến thiên không gian và thời gian trong các phép đo điểm. Lý tưởng cho dữ liệu chuỗi thời gian phân bố theo không gian.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường thuộc tính số chứa các giá trị cần nội suy."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường thuộc tính thời gian chứa các giá trị thời gian."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị bản đồ (bắt buộc nếu không có base_raster)."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "spatial_lag_regression_raster": {
            "name": "Hồi quy trễ không gian raster",
            "description": "Ước lượng mô hình SAR và xuất ra bề mặt giá trị khớp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "response_field": {
                "label": "Trường phản hồi",
                "description": "Biến đáp ứng."
              },
              "predictor_fields": {
                "label": "Trường dự báo",
                "description": "Các trường dự báo."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận."
              },
              "k": {
                "label": "K",
                "description": "k cho k_nearest."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Chuẩn hóa trọng số theo hàng."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô raster đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra."
              }
            }
          },
          "spatial_error_regression_raster": {
            "name": "Hồi quy sai số không gian raster",
            "description": "Ước lượng mô hình SEM và xuất ra bề mặt giá trị khớp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "response_field": {
                "label": "Trường phản hồi",
                "description": "Biến đáp ứng."
              },
              "predictor_fields": {
                "label": "Trường dự báo",
                "description": "Các trường dự báo."
              },
              "weights_mode": {
                "label": "Chế độ trọng số",
                "description": "Chế độ lân cận."
              },
              "k": {
                "label": "K",
                "description": "k cho k_nearest."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Ngưỡng khoảng cách."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Chuẩn hóa trọng số theo hàng."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô raster đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra."
              }
            }
          },
          "geographically_weighted_regression_raster": {
            "name": "Hồi quy trọng số địa lý raster",
            "description": "Ước lượng GWR và xuất ra các bề mặt raster hệ số cục bộ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "response_field": {
                "label": "Trường phản hồi",
                "description": "Biến đáp ứng."
              },
              "predictor_fields": {
                "label": "Trường dự báo",
                "description": "Các trường dự báo."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kiểu kernel."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô raster đầu ra."
              },
              "output_prefix": {
                "label": "Tiền tố đầu ra",
                "description": "Tiền tố raster đầu ra."
              }
            }
          },
          "inhomogeneous_intensity_raster": {
            "name": "Cường độ không đồng nhất raster",
            "description": "Tính bề mặt ước lượng mật độ kernel (KDE) trực quan hóa cường độ điểm không gian. Làm rõ các điểm nóng và điểm lạnh vượt ra ngoài mật độ đơn thuần.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kiểu kernel."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô raster đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster cường độ đầu ra."
              }
            }
          },
          "add": {
            "name": "Cộng",
            "description": "Cộng hai raster theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "average_overlay": {
            "name": "Chồng lớp trung bình",
            "description": "Tính giá trị trung bình theo từng ô trên một chồng raster, bỏ qua NoData trừ khi tất cả đầu vào đều là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "bool_and": {
            "name": "AND logic",
            "description": "Tính phép AND logic của hai raster theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "bool_not": {
            "name": "NOT logic",
            "description": "Tính phép NOT logic của mỗi ô raster, xuất ra 1 cho các ô có giá trị bằng không và 0 cho các trường hợp còn lại.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "bool_or": {
            "name": "OR logic",
            "description": "Tính phép OR logic của hai raster theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "bool_xor": {
            "name": "XOR logic",
            "description": "Tính phép XOR logic của hai raster theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "count_if": {
            "name": "Đếm nếu",
            "description": "Đếm số raster đầu vào có giá trị ô bằng một giá trị so sánh.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison_value": {
                "label": "Giá trị so sánh",
                "description": "Giá trị so sánh cần đếm trong chồng raster."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "divide": {
            "name": "Chia",
            "description": "Chia raster thứ nhất cho raster thứ hai theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "highest_position": {
            "name": "Vị trí cao nhất",
            "description": "Trả về chỉ số (bắt đầu từ 0) trong chồng raster chứa giá trị cao nhất tại mỗi ô.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "lowest_position": {
            "name": "Vị trí thấp nhất",
            "description": "Trả về chỉ số (bắt đầu từ 0) trong chồng raster chứa giá trị thấp nhất tại mỗi ô.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "max_absolute_overlay": {
            "name": "Chồng lớp trị tuyệt đối lớn nhất",
            "description": "Tính giá trị tuyệt đối lớn nhất theo từng ô trên một chồng raster, lan truyền NoData nếu bất kỳ ô đầu vào nào là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "max_overlay": {
            "name": "Chồng lớp lớn nhất",
            "description": "Tính giá trị lớn nhất theo từng ô trên một chồng raster, lan truyền NoData nếu bất kỳ ô đầu vào nào là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "min_absolute_overlay": {
            "name": "Chồng lớp trị tuyệt đối nhỏ nhất",
            "description": "Tính giá trị tuyệt đối nhỏ nhất theo từng ô trên một chồng raster, lan truyền NoData nếu bất kỳ ô đầu vào nào là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "min_overlay": {
            "name": "Chồng lớp nhỏ nhất",
            "description": "Tính giá trị nhỏ nhất theo từng ô trên một chồng raster, lan truyền NoData nếu bất kỳ ô đầu vào nào là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "modulo": {
            "name": "Chia lấy dư",
            "description": "Tính phần dư của phép chia raster thứ nhất cho raster thứ hai theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "multiply": {
            "name": "Nhân",
            "description": "Nhân hai raster theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "multiply_overlay": {
            "name": "Chồng lớp nhân",
            "description": "Tính tích theo từng ô trên một chồng raster, lan truyền NoData nếu bất kỳ ô đầu vào nào là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "percent_equal_to": {
            "name": "Phần trăm bằng",
            "description": "Tính tỷ lệ các raster trong chồng có giá trị bằng raster so sánh tại mỗi ô.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "So sánh",
                "description": "Đường dẫn raster so sánh hoặc handle raster trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "percent_greater_than": {
            "name": "Phần trăm lớn hơn",
            "description": "Tính tỷ lệ các raster trong chồng có giá trị lớn hơn raster so sánh tại mỗi ô.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "So sánh",
                "description": "Đường dẫn raster so sánh hoặc handle raster trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "percent_less_than": {
            "name": "Phần trăm nhỏ hơn",
            "description": "Tính tỷ lệ các raster trong chồng có giá trị nhỏ hơn raster so sánh tại mỗi ô.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "So sánh",
                "description": "Đường dẫn raster so sánh hoặc handle raster trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "pick_from_list": {
            "name": "Chọn từ danh sách",
            "description": "Chọn giá trị theo từng ô từ một chồng raster sử dụng raster vị trí (bắt đầu từ 0).",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pos_input": {
                "label": "Đầu vào vị trí",
                "description": "Raster vị trí trong chồng, đánh chỉ số từ 0."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "power": {
            "name": "Lũy thừa",
            "description": "Nâng raster thứ nhất lên lũy thừa của raster thứ hai theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "standard_deviation_overlay": {
            "name": "Chồng lớp độ lệch chuẩn",
            "description": "Tính độ lệch chuẩn theo từng ô trên một chồng raster, lan truyền NoData nếu bất kỳ ô đầu vào nào là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "subtract": {
            "name": "Trừ",
            "description": "Trừ raster thứ hai khỏi raster thứ nhất theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "sum_overlay": {
            "name": "Chồng lớp tổng",
            "description": "Tính tổng theo từng ô trên một chồng raster, lan truyền NoData nếu bất kỳ ô đầu vào nào là NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào dưới dạng mảng đường dẫn hoặc chuỗi phân tách bằng dấu chấm phẩy/dấu phẩy."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "update_nodata_cells": {
            "name": "Cập nhật ô NoData",
            "description": "Gán cho các ô NoData trong input1 giá trị từ các ô hợp lệ tương ứng trong input2.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster chính cần cập nhật."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster phụ cung cấp các giá trị thay thế."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "weighted_overlay": {
            "name": "Chồng lớp có trọng số",
            "description": "Kết hợp các raster yếu tố sử dụng trọng số đã chuẩn hóa, cờ chi phí tùy chọn và các ràng buộc nhị phân tùy chọn.",
            "params": {
              "factors": {
                "label": "Yếu tố",
                "description": "Chồng raster nhân tố đầu vào."
              },
              "weights": {
                "label": "Trọng số",
                "description": "Các trọng số dạng số tương ứng với từng raster nhân tố."
              },
              "cost": {
                "label": "Chi phí",
                "description": "Các cờ boolean tùy chọn cho biết các nhân tố chi phí."
              },
              "constraints": {
                "label": "Ràng buộc",
                "description": "Chồng raster ràng buộc tùy chọn; các giá trị <= 0 buộc đầu ra bằng không."
              },
              "scale_max": {
                "label": "Tỉ lệ tối đa",
                "description": "Giá trị tỉ lệ lớn nhất được dùng sau khi chuẩn hóa nhân tố."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "weighted_sum": {
            "name": "Tổng có trọng số",
            "description": "Tính tổng có trọng số trên một chồng raster sau khi chuẩn hóa trọng số để có tổng bằng một.",
            "params": {
              "input_rasters": {
                "label": "Raster đầu vào",
                "description": "Chồng raster đầu vào."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "weights": {
                "label": "Trọng số",
                "description": "Các trọng số dạng số tương ứng với từng raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "image_correlation_neighbourhood_analysis": {
            "name": "Phân tích lân cận tương quan ảnh",
            "description": "Thực hiện phân tích tương quan theo cửa sổ di động giữa hai raster và trả về các raster hệ số tương quan và giá trị p.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster đầu vào thứ nhất."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào thứ hai."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước cửa sổ trượt tính bằng ô (nhỏ nhất 3, mặc định 11)."
              },
              "correlation_stat": {
                "label": "Thống kê tương quan",
                "description": "Đại lượng tương quan: pearson, spearman hoặc kendall (mặc định pearson)."
              },
              "output1": {
                "label": "Đầu ra 1",
                "description": "Đường dẫn đầu ra tùy chọn cho raster tương quan."
              },
              "output2": {
                "label": "Đầu ra 2",
                "description": "Đường dẫn đầu ra tùy chọn cho raster mức ý nghĩa (giá trị p)."
              }
            }
          },
          "natural_neighbour_interpolation": {
            "name": "Nội suy lân cận tự nhiên",
            "description": "Nội suy raster từ các mẫu điểm sử dụng trọng số diện tích láng giềng tự nhiên Sibson thực sự.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "clip_to_hull": {
                "label": "Cắt theo bao",
                "description": "Giới hạn phép nội suy trong bao lồi của các điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "nearest_neighbour_interpolation": {
            "name": "Nội suy lân cận gần nhất",
            "description": "Nội suy raster từ các mẫu điểm bằng cách gán cho mỗi ô giá trị của mẫu gần nhất.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa tùy chọn theo đơn vị bản đồ; mặc định là vô hạn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "conditional_evaluation": {
            "name": "Đánh giá điều kiện",
            "description": "Thực hiện đánh giá điều kiện if-then-else trên các ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "statement": {
                "label": "Câu lệnh",
                "description": "Biểu thức điều kiện được tính cho từng ô."
              },
              "true": {
                "label": "Đúng",
                "description": "Giá trị hoặc raster/biểu thức dùng khi điều kiện đúng."
              },
              "false": {
                "label": "Sai",
                "description": "Giá trị hoặc raster/biểu thức dùng khi điều kiện sai."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "reclass": {
            "name": "Phân loại lại",
            "description": "Phân loại lại giá trị raster sử dụng các khoảng hoặc các cặp gán chính xác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "reclass_values": {
                "label": "Giá trị phân loại lại",
                "description": "Các giá trị phân loại lại dưới dạng các hàng [new, from, to_less_than] hoặc [new, old] khi assign_mode=true."
              },
              "assign_mode": {
                "label": "Chế độ gán",
                "description": "Nếu true, dùng chế độ gán chính xác với các cặp [new_value, old_value]."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "reclass_equal_interval": {
            "name": "Phân loại lại khoảng đều",
            "description": "Phân loại lại giá trị raster thành các khoảng có độ rộng bằng nhau trên một dải giá trị tùy chọn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "interval_size": {
                "label": "Kích thước khoảng",
                "description": "Độ rộng khoảng chia đều."
              },
              "start_value": {
                "label": "Giá trị bắt đầu",
                "description": "Cận dưới tùy chọn cho việc phân loại lại; mặc định là giá trị nhỏ nhất của raster."
              },
              "end_value": {
                "label": "Giá trị kết thúc",
                "description": "Cận trên tùy chọn cho việc phân loại lại; mặc định là giá trị lớn nhất của raster."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "buffer_raster": {
            "name": "Vùng đệm raster",
            "description": "Tạo vùng đệm nhị phân quanh các ô raster khác không, không phải NoData trong một khoảng cách được chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào trong đó các ô khác không là đối tượng cần tạo vùng đệm."
              },
              "buffer_size": {
                "label": "Kích thước vùng đệm",
                "description": "Ngưỡng khoảng cách vùng đệm."
              },
              "grid_cell_units": {
                "label": "Đơn vị ô lưới",
                "description": "Nếu true, diễn giải buffer_size theo đơn vị ô lưới thay vì đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "cost_allocation": {
            "name": "Phân bổ chi phí",
            "description": "Gán mỗi ô vào một vùng nguồn sử dụng raster liên kết ngược (backlink) từ phân tích khoảng cách chi phí.",
            "params": {
              "source": {
                "label": "Nguồn",
                "description": "Raster nguồn với các ô nguồn có giá trị dương."
              },
              "backlink": {
                "label": "Liên kết ngược",
                "description": "Raster liên kết ngược từ cost_distance."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "cost_distance": {
            "name": "Khoảng cách chi phí",
            "description": "Tính các raster chi phí di chuyển tích lũy và liên kết ngược từ bề mặt nguồn và bề mặt chi phí.",
            "params": {
              "source": {
                "label": "Nguồn",
                "description": "Raster nguồn với các ô nguồn có giá trị dương."
              },
              "cost": {
                "label": "Chi phí",
                "description": "Raster chi phí/ma sát."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn cho chi phí tích lũy."
              },
              "backlink_output": {
                "label": "Đầu ra liên kết ngược",
                "description": "Đường dẫn raster đầu ra tùy chọn cho liên kết ngược."
              }
            }
          },
          "cost_pathway": {
            "name": "Đường đi chi phí",
            "description": "Truy vết các đường đi chi phí thấp nhất từ các ô đích sử dụng raster liên kết ngược.",
            "params": {
              "destination": {
                "label": "Đích",
                "description": "Raster đích với các ô đích có giá trị dương."
              },
              "backlink": {
                "label": "Liên kết ngược",
                "description": "Raster liên kết ngược từ cost_distance."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, nền đầu ra là không thay vì NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "euclidean_allocation": {
            "name": "Phân bổ Euclid",
            "description": "Gán cho mỗi ô hợp lệ giá trị của ô mục tiêu khác không gần nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào với các ô mục tiêu khác không."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "euclidean_distance": {
            "name": "Khoảng cách Euclid",
            "description": "Tính khoảng cách Euclid đến ô mục tiêu khác không gần nhất trong raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào với các ô mục tiêu khác không."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "abs": {
            "name": "Trị tuyệt đối",
            "description": "Tính giá trị tuyệt đối của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "aggregate_raster": {
            "name": "Gộp raster",
            "description": "Giảm độ phân giải raster bằng cách gộp các khối sử dụng mean, sum, min, max hoặc range.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "aggregation_factor": {
                "label": "Hệ số gộp",
                "description": "Kích thước khối tính bằng ô nguồn."
              },
              "aggregation_type": {
                "label": "Kiểu gộp",
                "description": "Một trong mean, sum, maximum, minimum hoặc range."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "anova": {
            "name": "ANOVA",
            "description": "Thực hiện ANOVA một yếu tố trên các giá trị raster được nhóm theo các loại của raster lớp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đo lường."
              },
              "features": {
                "label": "Đặc trưng",
                "description": "Đường dẫn raster lớp/nhóm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "arccos": {
            "name": "Arccos",
            "description": "Tính cosin ngược (arccos) của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "arcosh": {
            "name": "Arcosh",
            "description": "Tính cosin hyperbolic ngược của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "arcsin": {
            "name": "Arcsin",
            "description": "Tính sin ngược (arcsin) của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "arctan": {
            "name": "Arctan",
            "description": "Tính tang ngược (arctan) của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "arsinh": {
            "name": "Arsinh",
            "description": "Tính sin hyperbolic ngược của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "artanh": {
            "name": "Artanh",
            "description": "Tính tang hyperbolic ngược của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "atan2": {
            "name": "Atan2",
            "description": "Tính tang ngược bốn góc phần tư sử dụng hai raster theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "block_maximum": {
            "name": "Cực đại theo khối",
            "description": "Raster hóa đối tượng điểm bằng cách gán giá trị lớn nhất quan sát được trong mỗi ô đầu ra.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn cần raster hóa; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "block_minimum": {
            "name": "Cực tiểu theo khối",
            "description": "Raster hóa đối tượng điểm bằng cách gán giá trị nhỏ nhất quan sát được trong mỗi ô đầu ra.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn cần raster hóa; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "boundary_shape_complexity": {
            "name": "Độ phức tạp hình dạng ranh giới",
            "description": "Tính độ phức tạp hình dạng ranh giới của mảng raster sử dụng chỉ số nhánh khung xương sau khi làm mảnh đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster ID mảnh đầu vào với các ID dạng số nguyên dương."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "ceil": {
            "name": "Làm tròn lên",
            "description": "Làm tròn lên mỗi ô raster đến số nguyên gần nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "centroid_raster": {
            "name": "Trọng tâm raster",
            "description": "Tính ô tâm cho mỗi ID mảng có giá trị dương trong raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster mảnh đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "clip_raster_to_polygon": {
            "name": "Cắt raster theo đa giác",
            "description": "Cắt raster theo phạm vi đa giác; các ô bên ngoài đa giác được đặt thành NoData.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "polygons": {
                "label": "Đa giác",
                "description": "Lớp vector đa giác đầu vào."
              },
              "maintain_dimensions": {
                "label": "Giữ nguyên kích thước",
                "description": "Giữ nguyên kích thước raster gốc thay vì cắt theo phạm vi đa giác."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "clump": {
            "name": "Gom cụm",
            "description": "Nhóm các ô raster liền kề có giá trị bằng nhau thành các định danh mảng duy nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster phân loại đầu vào."
              },
              "diag": {
                "label": "Đường chéo",
                "description": "Nếu true, bao gồm liên thông chéo (8 lân cận); nếu không, dùng 4 lân cận."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, coi các ô có giá trị bằng không là nền và giữ chúng bằng không trong đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "cos": {
            "name": "Cos",
            "description": "Tính cosin của mỗi giá trị ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "cosh": {
            "name": "Cosh",
            "description": "Tính cosin hyperbolic của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "create_plane": {
            "name": "Tạo mặt phẳng",
            "description": "Tạo raster từ một phương trình mặt phẳng sử dụng hình học của raster cơ sở.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Raster cơ sở xác định hình học đầu ra."
              },
              "gradient": {
                "label": "Gradient",
                "description": "Độ dốc của mặt phẳng tính bằng độ."
              },
              "aspect": {
                "label": "Hướng dốc",
                "description": "Hướng dốc của mặt phẳng tính bằng độ."
              },
              "constant": {
                "label": "Hằng số",
                "description": "Hằng số cộng trong phương trình mặt phẳng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "crispness_index": {
            "name": "Chỉ số độ sắc nét",
            "description": "Tính chỉ số độ sắc nét (crispness) cho raster xác suất thành viên.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "cross_tabulation": {
            "name": "Bảng chéo",
            "description": "Thực hiện lập bảng chéo trên hai raster phân loại.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster đầu vào 1."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào 2."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "cumulative_distribution": {
            "name": "Phân phối tích lũy",
            "description": "Chuyển đổi giá trị raster thành xác suất phân bố tích lũy.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "dbscan": {
            "name": "DBSCAN",
            "description": "Thực hiện phân cụm dựa trên mật độ DBSCAN không giám sát trên một chồng raster đầu vào.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách phân tách bằng dấu phẩy/dấu chấm phẩy hoặc mảng JSON các đường dẫn raster đầu vào (các kênh đặc trưng)."
              },
              "scaling_method": {
                "label": "Phương pháp co giãn",
                "description": "Chuẩn hóa tỉ lệ đặc trưng: 'none' (mặc định), 'normalize' (khoảng 0-1) hoặc 'standardize' (điểm z)."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Epsilon: bán kính tìm kiếm lân cận trong không gian đặc trưng (mặc định 1.0)."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Số lân cận nhỏ nhất trong phạm vi epsilon để trở thành điểm lõi (mặc định 5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn cho nhãn ID cụm."
              }
            }
          },
          "decrement": {
            "name": "Giảm",
            "description": "Trừ một giá trị (mặc định 1.0) khỏi mỗi ô raster không phải NoData.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "value": {
                "label": "Giá trị",
                "description": "Lượng cần trừ khỏi mỗi ô. Mặc định là 1.0."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "edge_proportion": {
            "name": "Tỉ lệ biên",
            "description": "Tính tỷ lệ các ô của mỗi mảng là ô biên và ánh xạ ngược lại vào các ô của mảng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster ID mảnh đầu vào với các ID dạng số nguyên dương."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "equal_to": {
            "name": "Bằng",
            "description": "Kiểm tra xem hai raster có bằng nhau hay không theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "erase_polygon_from_raster": {
            "name": "Xóa đa giác khỏi raster",
            "description": "Đặt các ô raster bên trong đa giác thành NoData trong khi bảo toàn các ô trong lỗ của đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "polygons": {
                "label": "Đa giác",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "exp": {
            "name": "Exp",
            "description": "Tính e mũ giá trị của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "exp2": {
            "name": "Exp2",
            "description": "Tính 2 mũ giá trị của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "fft_random_field": {
            "name": "Trường ngẫu nhiên FFT",
            "description": "Tạo trường ngẫu nhiên có tự tương quan không gian sử dụng tổng hợp phổ FFT.",
            "params": {
              "base_raster": {
                "label": "Raster nền",
                "description": "Đường dẫn raster cơ sở dùng cho hình học lưới."
              },
              "range": {
                "label": "Khoảng biến thiên",
                "description": "Tầm tương quan xấp xỉ theo đơn vị bản đồ. Mặc định: 1.0."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "filter_raster_features_by_area": {
            "name": "Lọc đối tượng raster theo diện tích",
            "description": "Loại bỏ các đối tượng raster gán nhãn số nguyên nhỏ hơn ngưỡng số ô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào chứa các nhãn lớp dạng số nguyên."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Kích thước đối tượng nhỏ nhất tính bằng ô cần giữ lại."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, các đối tượng bị loại bỏ được gán 0; nếu không, chúng được gán NoData."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "find_patch_edge_cells": {
            "name": "Tìm ô biên mảnh",
            "description": "Xác định các ô biên cho mỗi ID mảng raster dương; các ô mảng không phải biên được đặt thành không.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster ID mảnh đầu vào; các giá trị dương được coi là ô mảnh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "floor": {
            "name": "Làm tròn xuống",
            "description": "Làm tròn xuống mỗi ô raster đến số nguyên gần nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "greater_than": {
            "name": "Lớn hơn",
            "description": "Kiểm tra xem raster thứ nhất có lớn hơn raster thứ hai hay không theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "heat_map": {
            "name": "Bản đồ nhiệt",
            "description": "Tạo raster bản đồ nhiệt mật độ kernel từ các lần xuất hiện điểm.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường trọng số dạng số tùy chọn; mặc định là các lần xuất hiện không có trọng số."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông kernel theo đơn vị bản đồ."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "kernel_function": {
                "label": "Hàm kernel",
                "description": "Kiểu hàm kernel; mặc định là quartic."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "idw_interpolation": {
            "name": "Nội suy IDW",
            "description": "Nội suy raster từ các mẫu điểm sử dụng trọng số nghịch đảo khoảng cách.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Số mũ khoảng cách IDW; mặc định là 2.0."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính lân cận tùy chọn theo đơn vị bản đồ; <=0 sẽ dùng phương án dự phòng k lân cận gần nhất."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Số lân cận tối thiểu sẽ dùng; mặc định là 0."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "image_autocorrelation": {
            "name": "Tự tương quan ảnh",
            "description": "Tính chỉ số Moran's I cho một hoặc nhiều ảnh raster.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách đường dẫn raster đầu vào."
              },
              "contiguity": {
                "label": "Tính liền kề",
                "description": "Quy tắc lân cận: rook, king/queen hoặc bishop."
              }
            }
          },
          "image_correlation": {
            "name": "Tương quan ảnh",
            "description": "Tính ma trận tương quan Pearson cho hai hoặc nhiều ảnh raster.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách đường dẫn raster đầu vào."
              }
            }
          },
          "image_regression": {
            "name": "Hồi quy ảnh",
            "description": "Thực hiện hồi quy tuyến tính hai biến giữa hai raster và xuất ra raster phần dư cùng báo cáo.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster biến độc lập."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster biến phụ thuộc."
              },
              "standardize_residuals": {
                "label": "Chuẩn hóa phần dư",
                "description": "Có chuẩn hóa phần dư theo sai số chuẩn của mô hình hay không."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster phần dư."
              }
            }
          },
          "increment": {
            "name": "Tăng",
            "description": "Cộng một giá trị (mặc định 1.0) vào mỗi ô raster không phải NoData.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "value": {
                "label": "Giá trị",
                "description": "Lượng cộng thêm vào mỗi ô. Mặc định là 1.0."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "inplace_add": {
            "name": "Cộng tại chỗ",
            "description": "Thực hiện phép cộng tại chỗ (input1 += input2).",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào cần chỉnh sửa."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào hoặc hằng số."
              }
            }
          },
          "inplace_divide": {
            "name": "Chia tại chỗ",
            "description": "Thực hiện phép chia tại chỗ (input1 /= input2).",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào cần chỉnh sửa."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào hoặc hằng số khác 0."
              }
            }
          },
          "inplace_multiply": {
            "name": "Nhân tại chỗ",
            "description": "Thực hiện phép nhân tại chỗ (input1 *= input2).",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào cần chỉnh sửa."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào hoặc hằng số."
              }
            }
          },
          "inplace_subtract": {
            "name": "Trừ tại chỗ",
            "description": "Thực hiện phép trừ tại chỗ (input1 -= input2).",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào cần chỉnh sửa."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào hoặc hằng số."
              }
            }
          },
          "integer_division": {
            "name": "Chia lấy nguyên",
            "description": "Chia hai raster và cắt bỏ phần thập phân của mỗi kết quả về phía không.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "inverse_pca": {
            "name": "PCA nghịch đảo",
            "description": "Tái tạo các ảnh kênh ban đầu từ các raster thành phần PCA sử dụng các vector riêng đã lưu.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Đường dẫn các raster thành phần."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pca_report": {
                "label": "Báo cáo PCA",
                "description": "Chuỗi báo cáo JSON từ PCA."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cơ sở tùy chọn."
              }
            }
          },
          "is_nodata": {
            "name": "Là NoData",
            "description": "Xuất 1 cho các ô NoData và 0 cho tất cả các ô hợp lệ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "kappa_index": {
            "name": "Chỉ số Kappa",
            "description": "Tính hệ số kappa của Cohen và các chỉ số thống nhất giữa hai raster phân loại.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster phân loại đầu vào."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster tham chiếu đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "ks_normality_test": {
            "name": "Kiểm định chuẩn KS",
            "description": "Đánh giá xem các giá trị raster có tuân theo phân bố chuẩn hay không.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Kích thước mẫu ngẫu nhiên tùy chọn. Bỏ trống để dùng toàn bộ ô hợp lệ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "less_than": {
            "name": "Nhỏ hơn",
            "description": "Kiểm tra xem raster thứ nhất có nhỏ hơn raster thứ hai hay không theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "list_unique_values_raster": {
            "name": "Liệt kê giá trị duy nhất raster",
            "description": "Liệt kê các loại raster hợp lệ duy nhất và tần suất của chúng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra tùy chọn."
              },
              "strict_parity": {
                "label": "Kiểm tra tương đương nghiêm ngặt",
                "description": "Khi true, trả về kết quả tần suất theo lớp đầy đủ (mặc định true)."
              },
              "max_values": {
                "label": "Giá trị tối đa",
                "description": "Số giá trị duy nhất tối đa được đưa vào khi strict_parity là false (mặc định 10000)."
              }
            }
          },
          "ln": {
            "name": "Ln",
            "description": "Tính logarit tự nhiên của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "log10": {
            "name": "Log10",
            "description": "Tính logarit cơ số 10 của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "log2": {
            "name": "Log2",
            "description": "Tính logarit cơ số 2 của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "map_features": {
            "name": "Ánh xạ đối tượng",
            "description": "Lập bản đồ các đối tượng địa hình nhô cao rời rạc từ raster sử dụng phát triển vùng theo mức ưu tiên giảm dần.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "min_feature_height": {
                "label": "Chiều cao đối tượng tối thiểu",
                "description": "Khoảng cách thẳng đứng tối thiểu để các đối tượng được coi là độc lập."
              },
              "min_feature_size": {
                "label": "Kích thước đối tượng tối thiểu",
                "description": "Kích thước đối tượng nhỏ nhất tính theo ô."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "max": {
            "name": "Max",
            "description": "Thực hiện phép MAX trên hai raster hoặc trên một raster và một giá trị hằng số.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster thứ nhất hoặc hằng số."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster thứ hai hoặc hằng số."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "min": {
            "name": "Min",
            "description": "Thực hiện phép MIN trên hai raster hoặc trên một raster và một giá trị hằng số.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster thứ nhất hoặc hằng số."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster thứ hai hoặc hằng số."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "modified_shepard_interpolation": {
            "name": "Nội suy Shepard cải tiến",
            "description": "Nội suy raster từ các mẫu điểm sử dụng phép hòa trộn Shepard cải tiến có trọng số cục bộ.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Số mũ trọng số Shepard; mặc định là 2.0."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính lân cận tùy chọn theo đơn vị bản đồ."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Số lân cận tối thiểu; mặc định là 8."
              },
              "use_quadratic_basis": {
                "label": "Dùng cơ sở bậc hai",
                "description": "Áp dụng hiệu chỉnh cơ sở bậc hai cục bộ (chế độ tương thích cũ)."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "use_data_hull": {
                "label": "Dùng bao dữ liệu",
                "description": "Giới hạn phép nội suy trong bao lồi của các điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "narrowness_index": {
            "name": "Chỉ số độ hẹp",
            "description": "Tính chỉ số độ hẹp của mảng raster bằng diện tích chia cho diện tích đường tròn lớn nhất nằm bên trong, dựa trên khoảng cách lớn nhất đến biên.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster ID mảnh đầu vào với các ID dạng số nguyên dương."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "negate": {
            "name": "Đổi dấu",
            "description": "Đổi dấu giá trị của mỗi ô raster không phải NoData.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "nibble": {
            "name": "Gặm",
            "description": "Lấp các vùng nền sử dụng phân bổ theo láng giềng gần nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào cần xử lý nibble."
              },
              "mask": {
                "label": "Mặt nạ",
                "description": "Raster mặt nạ nhị phân."
              },
              "use_nodata": {
                "label": "Dùng NoData",
                "description": "Coi NoData đầu vào là giá trị lớp (không phải nền)."
              },
              "nibble_nodata": {
                "label": "Gặm NoData",
                "description": "Đồng thời nibble vào các vùng NoData nằm ngoài mặt nạ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "not_equal_to": {
            "name": "Khác",
            "description": "Kiểm tra xem hai raster có khác nhau hay không theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "paired_sample_t_test": {
            "name": "Kiểm định t mẫu cặp",
            "description": "Thực hiện kiểm định t mẫu cặp trên hai raster sử dụng các cặp ô hợp lệ.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster đầu vào thứ nhất."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào thứ hai."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Kích thước mẫu tùy chọn có hoàn lại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "phi_coefficient": {
            "name": "Hệ số Phi",
            "description": "Thực hiện đánh giá mức thống nhất phân loại nhị phân sử dụng hệ số phi.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster nhị phân thứ nhất."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster nhị phân thứ hai."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              }
            }
          },
          "principal_component_analysis": {
            "name": "Phân tích thành phần chính",
            "description": "Thực hiện PCA trên một chồng raster, trả về các ảnh thành phần và báo cáo JSON.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Đường dẫn các raster đầu vào (≥3)."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "num_components": {
                "label": "Số thành phần",
                "description": "Số thành phần. Mặc định: tất cả."
              },
              "standardized": {
                "label": "Chuẩn hóa",
                "description": "Dùng ma trận tương quan. Mặc định: false."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cơ sở tùy chọn."
              }
            }
          },
          "print_geotiff_tags": {
            "name": "In thẻ GeoTIFF",
            "description": "Tạo báo cáo văn bản mô tả các thẻ TIFF/GeoTIFF và siêu dữ liệu chính của một raster thuộc họ GeoTIFF đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              }
            }
          },
          "quantiles": {
            "name": "Phân vị",
            "description": "Biến đổi giá trị raster thành các lớp phân vị.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "num_quantiles": {
                "label": "Số phân vị",
                "description": "Số phân vị (mặc định 5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "radial_basis_function_interpolation": {
            "name": "Nội suy hàm cơ sở xuyên tâm",
            "description": "Nội suy raster từ các mẫu điểm sử dụng trọng số tương đồng hàm cơ sở bán kính cục bộ.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "approximate_mode": {
                "label": "Chế độ xấp xỉ",
                "description": "Nếu true, dùng trọng số xấp xỉ nhanh NG; nếu false, giải các hệ RBF cục bộ (kiểu cũ)."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính lân cận tùy chọn theo đơn vị bản đồ."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Số lân cận tối thiểu sẽ dùng."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "func_type": {
                "label": "Loại hàm",
                "description": "Loại hàm cơ sở xuyên tâm (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Bậc đa thức",
                "description": "Gợi ý bậc đa thức (none, constant, quadratic)."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Tham số hình dạng/số mũ của hàm cơ sở, tùy theo func_type."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "radius_of_gyration": {
            "name": "Bán kính hồi chuyển",
            "description": "Tính bán kính quán tính theo từng mảng và ánh xạ giá trị ngược lại vào các ô của mảng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster ID mảnh đầu vào với các ID dạng số nguyên dương."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "random_field": {
            "name": "Trường ngẫu nhiên",
            "description": "Tạo raster chứa các giá trị ngẫu nhiên theo phân bố chuẩn tắc.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Đường dẫn raster cơ sở dùng cho hình học lưới."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "random_forest_classification_fit": {
            "name": "Huấn luyện phân loại rừng ngẫu nhiên",
            "description": "Khớp mô hình phân loại random forest và trả về các byte mô hình đã tuần tự hóa.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm/đa giác."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường lớp trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "split_criterion": {
                "label": "Tiêu chí tách",
                "description": "Gợi ý tiêu chí tách cây (giữ lại để tương thích với phiên bản cũ)."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây trong rừng (mặc định 200)."
              },
              "min_samples_leaf": {
                "label": "Số mẫu tối thiểu ở lá",
                "description": "Số mẫu tối thiểu cần có tại một nút lá (mặc định 1)."
              },
              "min_samples_split": {
                "label": "Số mẫu tối thiểu để tách",
                "description": "Số mẫu tối thiểu cần có để tách một nút trong (mặc định 2)."
              },
              "test_proportion": {
                "label": "Tỉ lệ kiểm tra",
                "description": "Tham số tương thích cũ; dành cho chẩn đoán trong tương lai."
              }
            }
          },
          "random_forest_classification_predict": {
            "name": "Dự đoán phân loại rừng ngẫu nhiên",
            "description": "Áp dụng mô hình phân loại random forest đã tuần tự hóa cho các biến dự báo đa kênh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "model_bytes": {
                "label": "Byte mô hình",
                "description": "Chuỗi byte mô hình do random_forest_classification_fit tạo ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "random_forest_regression_fit": {
            "name": "Huấn luyện hồi quy rừng ngẫu nhiên",
            "description": "Khớp mô hình hồi quy random forest và trả về các byte mô hình đã tuần tự hóa.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "training_data": {
                "label": "Dữ liệu huấn luyện",
                "description": "Đường dẫn dữ liệu huấn luyện vector điểm."
              },
              "field": {
                "label": "Trường",
                "description": "Trường mục tiêu dạng số trong các thuộc tính của training_data."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Chế độ co giãn đặc trưng: none (mặc định), normalize, standardize."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây trong rừng (mặc định 200)."
              },
              "min_samples_leaf": {
                "label": "Số mẫu tối thiểu ở lá",
                "description": "Số mẫu tối thiểu cần có tại một nút lá (mặc định 1)."
              },
              "min_samples_split": {
                "label": "Số mẫu tối thiểu để tách",
                "description": "Số mẫu tối thiểu cần có để tách một nút trong (mặc định 2)."
              },
              "test_proportion": {
                "label": "Tỉ lệ kiểm tra",
                "description": "Tham số tương thích cũ; dành cho chẩn đoán trong tương lai."
              }
            }
          },
          "random_forest_regression_predict": {
            "name": "Dự đoán hồi quy rừng ngẫu nhiên",
            "description": "Áp dụng mô hình hồi quy random forest đã tuần tự hóa cho các biến dự báo đa kênh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Mảng các raster đầu vào một kênh."
              },
              "model_bytes": {
                "label": "Byte mô hình",
                "description": "Chuỗi byte mô hình do random_forest_regression_fit tạo ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "random_sample": {
            "name": "Mẫu ngẫu nhiên",
            "description": "Tạo raster chứa các ô mẫu có vị trí ngẫu nhiên với ID duy nhất.",
            "params": {
              "base": {
                "label": "Nền",
                "description": "Đường dẫn raster cơ sở dùng cho hình học lưới và mặt nạ ô hợp lệ."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Số ô mẫu cần tạo."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "raster_area": {
            "name": "Diện tích raster",
            "description": "Ước lượng diện tích đa giác raster theo từng lớp bằng đơn vị ô lưới hoặc đơn vị bản đồ và ghi tổng của lớp vào mỗi ô thuộc lớp đó.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster phân loại đầu vào."
              },
              "units": {
                "label": "Đơn vị",
                "description": "Đơn vị diện tích: 'map units' (mặc định) hoặc 'grid cells'."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, các ô có giá trị 0 sẽ bị loại khỏi phân tích."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "raster_calculator": {
            "name": "Máy tính raster",
            "description": "Đánh giá một biểu thức toán học trên danh sách các raster đầu vào theo từng ô.",
            "params": {
              "expression": {
                "label": "Biểu thức",
                "description": "Biểu thức toán học với tên biến raster đặt trong dấu nháy."
              },
              "inputs": {
                "label": "Đầu vào",
                "description": "Đường dẫn các raster đầu vào theo thứ tự."
              },
              "auto_reproject": {
                "label": "Tự động chiếu lại",
                "description": "Nếu true (mặc định), tự động chiếu lại các raster trong chồng để khớp với inputs[0] khi hệ tọa độ khác nhau."
              },
              "auto_reproject_method": {
                "label": "Phương pháp tự động chiếu lại",
                "description": "Tùy chọn ghi đè phương pháp lấy mẫu lại khi chiếu lại: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "raster_cell_assignment": {
            "name": "Gán giá trị ô raster",
            "description": "Tạo raster dẫn xuất từ một raster cơ sở, gán giá trị hàng, cột, x hoặc y cho mỗi ô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster cơ sở đầu vào."
              },
              "what_to_assign": {
                "label": "Giá trị cần gán",
                "description": "Đối tượng gán giá trị: column, row, x hoặc y."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "raster_histogram": {
            "name": "Lược đồ raster",
            "description": "Xây dựng biểu đồ tần suất với số bin cố định cho các ô raster hợp lệ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra tùy chọn (bí danh: output_html_file)."
              },
              "bins": {
                "label": "Số khoảng",
                "description": "Số khoảng của lược đồ (mặc định log2(rows*cols)+1)."
              }
            }
          },
          "raster_perimeter": {
            "name": "Chu vi raster",
            "description": "Ước lượng chu vi đa giác raster theo từng lớp sử dụng bảng tra cứu khử răng cưa và ghi tổng của lớp vào mỗi ô thuộc lớp đó.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster phân loại đầu vào."
              },
              "units": {
                "label": "Đơn vị",
                "description": "Đơn vị chu vi: 'map units' (mặc định) hoặc 'grid cells'."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Nếu true, các ô có giá trị 0 sẽ bị loại khỏi phân tích."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "raster_summary_stats": {
            "name": "Thống kê tóm tắt raster",
            "description": "Tính các thống kê tóm tắt cơ bản cho các ô raster hợp lệ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo đầu ra tùy chọn (.json hoặc .csv)."
              }
            }
          },
          "reciprocal": {
            "name": "Nghịch đảo",
            "description": "Tính nghịch đảo (1/x) của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "rescale_value_range": {
            "name": "Co giãn khoảng giá trị",
            "description": "Điều chỉnh tỷ lệ tuyến tính các giá trị raster về một dải đích.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "out_min": {
                "label": "Giá trị nhỏ nhất ra",
                "description": "Giá trị đầu ra nhỏ nhất."
              },
              "out_max": {
                "label": "Lớn nhất ra",
                "description": "Giá trị đầu ra lớn nhất."
              },
              "clip_min": {
                "label": "Cắt dưới",
                "description": "Giá trị đầu vào nhỏ nhất tùy chọn để cắt ngưỡng trước khi đổi thang."
              },
              "clip_max": {
                "label": "Cắt trên",
                "description": "Giá trị đầu vào lớn nhất tùy chọn để cắt ngưỡng trước khi đổi thang."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "root_mean_square_error": {
            "name": "Sai số toàn phương trung bình",
            "description": "Tính RMSE và các thống kê độ chính xác liên quan giữa hai raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster so sánh."
              },
              "base": {
                "label": "Nền",
                "description": "Đường dẫn raster cơ sở."
              }
            }
          },
          "round": {
            "name": "Làm tròn",
            "description": "Làm tròn mỗi ô raster đến số nguyên gần nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "shape_complexity_index_raster": {
            "name": "Chỉ số độ phức tạp hình dạng raster",
            "description": "Tính độ phức tạp hình dạng của mảng raster từ tần suất chuyển tiếp ngang/dọc được chuẩn hóa theo khoảng trải của mảng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster ID mảnh đầu vào với các ID dạng số nguyên dương."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "sieve": {
            "name": "Sàng lọc",
            "description": "Loại bỏ các mảng nhỏ bị cô lập dưới ngưỡng số ô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster phân loại đầu vào."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Kích thước mảnh tối thiểu tính theo ô cần giữ lại."
              },
              "zero_background": {
                "label": "Nền bằng 0",
                "description": "Đặt về 0 các ô nền (giá trị 0) trong kết quả đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "sin": {
            "name": "Sin",
            "description": "Tính sin của mỗi giá trị ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "sinh": {
            "name": "Sinh",
            "description": "Tính sin hyperbolic của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "sqrt": {
            "name": "Căn bậc hai",
            "description": "Tính căn bậc hai của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "square": {
            "name": "Bình phương",
            "description": "Bình phương mỗi giá trị ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "tan": {
            "name": "Tan",
            "description": "Tính tang của mỗi giá trị ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "tanh": {
            "name": "Tanh",
            "description": "Tính tang hyperbolic của mỗi ô raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "tin_interpolation": {
            "name": "Nội suy TIN",
            "description": "Nội suy raster từ các mẫu điểm sử dụng tam giác hóa Delaunay và nội suy mặt phẳng trong mỗi tam giác.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm đầu vào."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính số tùy chọn; mặc định quay về dùng FID."
              },
              "use_z": {
                "label": "Dùng Z",
                "description": "Dùng giá trị Z từ hình học điểm thay vì từ thuộc tính."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra khi không cung cấp base_raster."
              },
              "base_raster": {
                "label": "Raster nền",
                "description": "Raster cơ sở tùy chọn kiểm soát hình học đầu ra."
              },
              "max_triangle_edge_length": {
                "label": "Chiều dài cạnh tam giác tối đa",
                "description": "Chiều dài cạnh tam giác tối đa cho phép theo đơn vị bản đồ (tùy chọn)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "to_degrees": {
            "name": "Sang độ",
            "description": "Chuyển đổi mỗi ô raster từ radian sang độ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "to_radians": {
            "name": "Sang radian",
            "description": "Chuyển đổi mỗi ô raster từ độ sang radian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "trend_surface": {
            "name": "Mặt xu thế",
            "description": "Khớp bề mặt xu hướng đa thức cho raster sử dụng hồi quy bình phương tối thiểu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "polynomial_order": {
                "label": "Bậc đa thức",
                "description": "Bậc đa thức 1–10. Mặc định: 1."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "trend_surface_vector_points": {
            "name": "Mặt xu thế từ điểm vector",
            "description": "Khớp bề mặt xu hướng đa thức cho dữ liệu điểm vector sử dụng hồi quy bình phương tối thiểu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector điểm đầu vào."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô raster đầu ra theo đơn vị bản đồ."
              },
              "field_name": {
                "label": "Tên trường",
                "description": "Trường thuộc tính chứa giá trị Z. Mặc định: 'FID'."
              },
              "polynomial_order": {
                "label": "Bậc đa thức",
                "description": "Bậc đa thức 1–10. Mặc định: 1."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "truncate": {
            "name": "Cắt cụt",
            "description": "Cắt bỏ phần thập phân của mỗi giá trị ô raster, chỉ giữ phần nguyên.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "turning_bands_simulation": {
            "name": "Mô phỏng dải xoay",
            "description": "Tạo trường ngẫu nhiên có tự tương quan không gian sử dụng thuật toán dải quay (turning bands).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster cơ sở."
              },
              "range": {
                "label": "Khoảng biến thiên",
                "description": "Phạm vi tương quan theo đơn vị bản đồ. Mặc định: 1.0."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số hướng dải. Mặc định: 1000."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "two_sample_ks_test": {
            "name": "Kiểm định KS hai mẫu",
            "description": "Thực hiện kiểm định Kolmogorov-Smirnov hai mẫu trên hai phân bố giá trị raster.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster đầu vào thứ nhất."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào thứ hai."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Kích thước mẫu tùy chọn có hoàn lại cho mỗi raster."
              }
            }
          },
          "wilcoxon_signed_rank_test": {
            "name": "Kiểm định hạng có dấu Wilcoxon",
            "description": "Thực hiện kiểm định hạng có dấu Wilcoxon trên các hiệu raster theo cặp.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Đường dẫn raster đầu vào thứ nhất."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Đường dẫn raster đầu vào thứ hai."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Kích thước mẫu tùy chọn có hoàn lại."
              }
            }
          },
          "z_scores": {
            "name": "Điểm Z",
            "description": "Chuẩn hóa giá trị raster thành điểm z sử dụng trung bình và độ lệch chuẩn toàn cục.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "zonal_statistics": {
            "name": "Thống kê theo vùng",
            "description": "Tóm tắt các giá trị của raster dữ liệu trong các vùng được xác định bởi một raster đối tượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster dữ liệu đầu vào."
              },
              "features": {
                "label": "Đặc trưng",
                "description": "Đường dẫn raster định nghĩa vùng."
              },
              "stat_type": {
                "label": "Kiểu thống kê",
                "description": "Thống kê: 'mean', 'median', 'min', 'max', 'range', 'standard deviation', 'diversity', 'total'. Mặc định: 'mean'."
              },
              "zero_is_background": {
                "label": "0 là nền",
                "description": "Loại trừ các ô thuộc vùng 0. Mặc định: false."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "assess_route": {
            "name": "Đánh giá tuyến",
            "description": "Phân đoạn các đường tuyến và đánh giá các chỉ số địa hình theo từng đoạn từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "routes": {
                "label": "Tuyến",
                "description": "Đường dẫn vector tuyến polyline đầu vào."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính tìm kiếm tầm nhìn tính theo ô lưới (mặc định 15, nhỏ nhất 4)."
              },
              "segment_length": {
                "label": "Chiều dài đoạn",
                "description": "Chiều dài đoạn tuyến mục tiêu theo đơn vị bản đồ (mặc định 100.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn."
              }
            }
          },
          "breakline_mapping": {
            "name": "Lập bản đồ đường gãy",
            "description": "Lập bản đồ các đường gãy bằng cách phân ngưỡng độ cong tổng (curvedness) đã biến đổi logarit và vector hóa các đối tượng dạng tuyến đã làm mảnh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng log độ cong nhỏ nhất dùng để trích xuất đường gãy (mặc định 0.8)."
              },
              "min_length": {
                "label": "Chiều dài tối thiểu",
                "description": "Chiều dài đường đầu ra nhỏ nhất tính theo ô lưới (mặc định 3)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (mặc định là tệp .shp tạm)."
              }
            }
          },
          "convergence_index": {
            "name": "Chỉ số hội tụ",
            "description": "Hội tụ/phân kỳ dòng chảy từ sự thẳng hàng của hướng dốc cục bộ. Xác định thung lũng (hội tụ) và sống núi (phân kỳ) mà không cần định tuyến dòng chảy đầy đủ. Là phương án thay thế hiệu quả cho các thuật toán hướng dòng chảy.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "dem_void_filling": {
            "name": "Lấp lỗ trống DEM",
            "description": "Lấp các khoảng trống DEM sử dụng một bề mặt thứ cấp và các độ lệch độ cao được nội suy để hợp nhất liền mạch.",
            "params": {
              "fill": {
                "label": "Lấp",
                "description": "Đường dẫn raster DEM lấp hoặc đối tượng raster có kiểu dùng để lấp các khoảng trống."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào (có khoảng trống) hoặc đối tượng raster có kiểu."
              },
              "edge_treatment": {
                "label": "Xử lý biên",
                "description": "Cách xử lý biên khoảng trống: 'dem', 'fill' hoặc 'average' (mặc định 'dem')."
              },
              "mean_plane_dist": {
                "label": "Khoảng cách mặt phẳng trung bình",
                "description": "Khoảng cách tính theo ô từ biên khoảng trống, vượt quá khoảng này độ lệch được đặt bằng độ lệch trung bình toàn cục (mặc định 20)."
              },
              "weight_value": {
                "label": "Giá trị trọng số",
                "description": "Số mũ nội suy nghịch đảo khoảng cách dùng để nội suy độ lệch gần biên (mặc định 2.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "deviation_from_mean_elevation": {
            "name": "Độ lệch khỏi độ cao trung bình",
            "description": "Tính điểm z địa hình cục bộ sử dụng trung bình và độ lệch chuẩn cục bộ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng bộ lọc (số lẻ) tính theo ô (mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao bộ lọc (số lẻ) tính theo ô (mặc định filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "difference_from_mean_elevation": {
            "name": "Hiệu so với độ cao trung bình",
            "description": "Tính chênh lệch giữa mỗi độ cao và độ cao trung bình cục bộ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng bộ lọc (số lẻ) tính theo ô (mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao bộ lọc (số lẻ) tính theo ô (mặc định filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "directional_relief": {
            "name": "Độ nổi theo hướng",
            "description": "Tính địa hình tương đối theo hướng bằng cách dò tia độ cao theo một phương vị được chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị hướng tính bằng độ theo chiều kim đồng hồ từ hướng bắc."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tia tối đa tùy chọn theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "elev_above_pit": {
            "name": "Độ cao trên hố",
            "description": "Tính độ cao so với ô hố hạ lưu gần nhất (hoặc vùng trũng ở biên).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "elev_above_pit_dist": {
            "name": "Khoảng cách độ cao trên hố",
            "description": "Bí danh tương thích cho elev_above_pit.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "elevation_percentile": {
            "name": "Phân vị độ cao",
            "description": "Thứ hạng phân vị độ cao cục bộ trong vùng lân cận (0-100). Xác định thung lũng (% thấp), sống núi (% cao) và sườn dốc (% trung bình). Chỉ số phân loại dạng địa hình không phụ thuộc vào độ cao tuyệt đối.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng bộ lọc (số lẻ) tính theo ô (mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao bộ lọc (số lẻ) tính theo ô (mặc định filter_size_x). Bí danh: filtery."
              },
              "sig_digits": {
                "label": "Số chữ số có nghĩa",
                "description": "Số chữ số thập phân có nghĩa được giữ lại khi phân khoảng (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "embankment_mapping": {
            "name": "Lập bản đồ bờ đắp",
            "description": "Lập bản đồ nền đắp giao thông từ DEM và mạng lưới đường giao thông, với tùy chọn loại bỏ bề mặt nền đắp thông qua nội suy. Tác giả: John Lindsay và Nigel VanNieuwenhuizen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "roads_vector": {
                "label": "Vector đường giao thông",
                "description": "Đường dẫn vector đường giao thông đầu vào (hình học polyline)."
              },
              "embankment_max_width": {
                "label": "Chiều rộng bờ đắp tối đa",
                "description": "Chiều rộng nền đắp tối đa theo đơn vị bản đồ (mặc định 60.0)."
              },
              "max_upwards_increment": {
                "label": "Gia số hướng lên tối đa",
                "description": "Mức tăng lên cục bộ tối đa cho phép trong quá trình lan rộng (mặc định 0.05)."
              },
              "min_road_width": {
                "label": "Chiều rộng đường tối thiểu",
                "description": "Chiều rộng đường được vẽ nhỏ nhất theo đơn vị bản đồ (mặc định 6.0)."
              },
              "remove_embankments": {
                "label": "Loại bỏ bờ đắp",
                "description": "Nếu true, xuất thêm DEM đã loại bỏ nền đắp thông qua nội suy cục bộ."
              },
              "search_dist": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tái định vị hạt giống đường theo đơn vị bản đồ (mặc định 2.5)."
              },
              "spillout_slope": {
                "label": "Độ dốc tràn",
                "description": "Độ dốc tràn tối đa tính bằng độ cho các chuyển tiếp lên dốc (mặc định 4.0)."
              },
              "typical_embankment_max_height": {
                "label": "Chiều cao bờ đắp điển hình tối đa",
                "description": "Chiều cao tối đa điển hình của nền đắp theo đơn vị độ cao (mặc định 2.0)."
              },
              "typical_embankment_width": {
                "label": "Chiều rộng bờ đắp điển hình",
                "description": "Chiều rộng điển hình của nền đắp theo đơn vị bản đồ (mặc định 30.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho mặt nạ nền đắp."
              },
              "output_dem": {
                "label": "DEM đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho DEM đã loại bỏ nền đắp khi remove_embankments=true."
              }
            }
          },
          "exposure_towards_wind_flux": {
            "name": "Độ phơi hướng gió",
            "description": "Tính mức độ phơi lộ của địa hình so với hướng gió chủ đạo và sự che chắn của đường chân trời phía đầu gió.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị gió chủ đạo tính bằng độ theo chiều kim đồng hồ từ hướng bắc."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa cho góc chân trời phía đầu gió theo đơn vị bản đồ."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ thẳng đứng tùy chọn cho các DEM đã chiếu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "feature_preserving_smoothing": {
            "name": "Làm trơn bảo toàn đặc trưng",
            "description": "Làm trơn độ gồ ghề DEM trong khi bảo toàn các điểm gãy độ dốc bằng phương pháp lọc vector pháp tuyến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước bộ lọc (số lẻ) tính theo ô (mặc định 11)."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp làm trơn (mặc định 3)."
              },
              "max_elevation_diff": {
                "label": "Chênh lệch độ cao tối đa",
                "description": "Mức thay đổi thẳng đứng tối đa cho phép so với DEM gốc (mặc định inf)."
              },
              "normal_diff_threshold": {
                "label": "Ngưỡng hiệu pháp tuyến",
                "description": "Chênh lệch góc pháp tuyến tối đa tính bằng độ (mặc định 8.0)."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "feature_preserving_smoothing_multiscale": {
            "name": "Làm trơn bảo toàn đặc trưng đa tỉ lệ",
            "description": "Làm trơn độ gồ ghề DEM bằng phương pháp tiếp nối đa thang từ thô đến mịn. Mỗi thang suy ra lại các pháp tuyến, áp dụng khuếch tán trường pháp tuyến vững chắc thích ứng, và tái tạo độ cao bằng phép giải Poisson có sàng lọc (screened Poisson).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "smoothing_amount": {
                "label": "Mức làm trơn",
                "description": "Mức làm trơn tổng thể trong [0,1] (mặc định 0.65). Giá trị lớn hơn làm tăng mức khuếch tán, đặc biệt ở các tỉ lệ thô."
              },
              "edge_preservation": {
                "label": "Bảo toàn biên",
                "description": "Cường độ bảo toàn biên trong [0,1] (mặc định 0.75). Giá trị lớn hơn hạn chế mạnh hơn việc làm trơn qua các điểm gãy độ dốc lớn."
              },
              "scale_levels": {
                "label": "Số mức tỉ lệ",
                "description": "Số mức kim tự tháp cho quá trình làm trơn từ thô đến mịn (mặc định 3)."
              },
              "fidelity": {
                "label": "Độ trung thực",
                "description": "Trọng số trung thực dữ liệu trong tái dựng Poisson có sàng lọc (mặc định 0.45). Giá trị lớn hơn giữ kết quả gần với DEM nguồn hơn."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "fetch_analysis": {
            "name": "Phân tích đà gió",
            "description": "Tính khoảng cách phía đầu gió đến chướng ngại địa hình đầu tiên dọc theo một phương vị được chỉ định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị gió tính bằng độ theo chiều kim đồng hồ từ hướng bắc."
              },
              "hgt_inc": {
                "label": "Gia số chiều cao",
                "description": "Ngưỡng mức tăng chiều cao theo m/m (mặc định 0.05)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "fill_missing_data": {
            "name": "Lấp dữ liệu thiếu",
            "description": "Lấp các khoảng trống NoData sử dụng trọng số nghịch đảo khoảng cách từ các ô hợp lệ ở biên khoảng trống.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster đầu vào hoặc đối tượng raster có kiểu."
              },
              "exclude_edge_nodata": {
                "label": "Loại trừ NoData ở biên",
                "description": "Loại trừ các vùng NoData nối với biên khỏi quá trình lấp (mặc định false). Bí danh: no_edges."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Bán kính tìm kiếm tính theo ô lưới (mặc định 11)."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Số mũ nghịch đảo khoảng cách (mặc định 2.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "find_ridges": {
            "name": "Tìm sống núi",
            "description": "Xác định các ô sống núi và đỉnh tiềm năng trong DEM, với tùy chọn làm mảnh đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "line_thin": {
                "label": "Làm mảnh đường",
                "description": "Áp dụng làm mảnh đường lặp (mặc định true)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "hillshade": {
            "name": "Bóng đổ địa hình",
            "description": "Trực quan hóa bóng đổ địa hình có hướng với một nguồn sáng (thang xám 0-255). Các tham số phương vị và độ cao kiểm soát hướng ánh sáng. Trực quan hóa địa hình nhanh để kiểm tra DEM và hiển thị bản đồ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster DEM đầu vào"
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số phóng đại thẳng đứng áp dụng cho giá trị độ cao"
              },
              "altitude": {
                "label": "Góc cao",
                "description": "Độ cao chiếu sáng trên đường chân trời tính bằng độ"
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị chiếu sáng tính bằng độ theo chiều kim đồng hồ từ hướng bắc"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "hypsometrically_tinted_hillshade": {
            "name": "Bóng đổ địa hình tô màu theo độ cao",
            "description": "Tạo kết xuất địa hình kiểu Thụy Sĩ bằng cách hòa trộn bóng đổ địa hình đa phương vị với tô màu phân tầng độ cao và tùy chọn hiệu ứng mù khí quyển.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "solar_altitude": {
                "label": "Góc cao mặt trời",
                "description": "Độ cao mặt trời tính bằng độ [0, 90]."
              },
              "hillshade_weight": {
                "label": "Trọng số bóng đổ địa hình",
                "description": "Trọng số hòa trộn đổ bóng địa hình trong [0, 1]."
              },
              "brightness": {
                "label": "Độ sáng",
                "description": "Điều chỉnh độ sáng trong [0, 1]."
              },
              "atmospheric_effects": {
                "label": "Hiệu ứng khí quyển",
                "description": "Mức mù khí quyển trong [0, 1]."
              },
              "palette": {
                "label": "Bảng màu",
                "description": "Tên bảng màu (atlas, high_relief, arid, soft, muted, viridis, dem, grey, white, v.v.)."
              },
              "reverse_palette": {
                "label": "Đảo bảng màu",
                "description": "Đảo ngược thứ tự bảng màu."
              },
              "full_360_mode": {
                "label": "Chế độ 360 độ",
                "description": "Dùng chiếu sáng 8 hướng thay cho chế độ 4 hướng."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số nhân phóng đại thẳng đứng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra."
              }
            }
          },
          "local_hypsometric_analysis": {
            "name": "Phân tích đường cong độ cao cục bộ",
            "description": "Tính tích phân đường cong độ cao (hypsometric integral) cục bộ nhỏ nhất trên một dải thang lân cận được lấy mẫu phi tuyến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 4)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Kích thước bước cơ sở tính theo ô (mặc định 1). Bí danh: step."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số tỉ lệ cần đánh giá (mặc định 10)."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Độ phi tuyến của bước tỉ lệ trong [1,4] (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster giá trị HI nhỏ nhất cục bộ."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster tỉ lệ có HI nhỏ nhất."
              }
            }
          },
          "low_points_on_headwater_divides": {
            "name": "Điểm thấp trên đường phân thủy đầu nguồn",
            "description": "Định vị các điểm đèo thấp dọc theo đường phân thủy giữa các lưu vực con đầu nguồn lân cận.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM không còn vùng trũng đầu vào hoặc đối tượng raster có kiểu."
              },
              "streams": {
                "label": "Suối",
                "description": "Đường dẫn raster suối đầu vào (giá trị dương cho biết ô thuộc lòng dẫn)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (mặc định là tệp .shp tạm)."
              }
            }
          },
          "max_downslope_elev_change": {
            "name": "Biến thiên độ cao hạ lưu lớn nhất",
            "description": "Tính mức giảm độ cao lớn nhất đến các ô lân cận thấp hơn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "max_upslope_elev_change": {
            "name": "Biến thiên độ cao thượng lưu lớn nhất",
            "description": "Tính mức tăng độ cao lớn nhất đến các ô lân cận cao hơn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "min_downslope_elev_change": {
            "name": "Biến thiên độ cao hạ lưu nhỏ nhất",
            "description": "Tính mức giảm độ cao không âm nhỏ nhất đến các ô lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "multidirectional_hillshade": {
            "name": "Bóng đổ địa hình đa hướng",
            "description": "Bóng đổ địa hình đa hướng (8+ nguồn sáng) loại bỏ lỗi đổ bóng do một nguồn sáng. Khả năng nhận thấy đối tượng cân bằng cho địa hình phức tạp; được ưa chuộng cho ấn phẩm và phân tích chi tiết.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster DEM đầu vào"
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số phóng đại thẳng đứng áp dụng cho giá trị độ cao"
              },
              "altitude": {
                "label": "Góc cao",
                "description": "Độ cao chiếu sáng trên đường chân trời tính bằng độ"
              },
              "full_360_mode": {
                "label": "Chế độ 360 độ",
                "description": "Kết hợp 8 nguồn sáng trên toàn bộ 360 độ thay vì 4 nguồn mặc định"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra"
              }
            }
          },
          "num_downslope_neighbours": {
            "name": "Số ô lân cận hạ lưu",
            "description": "Đếm số ô trong 8 lân cận thấp hơn mỗi ô DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "num_upslope_neighbours": {
            "name": "Số ô lân cận thượng lưu",
            "description": "Đếm số ô trong 8 lân cận cao hơn mỗi ô DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "profile": {
            "name": "Hồ sơ",
            "description": "Tạo biểu đồ mặt cắt độ cao HTML cho một hoặc nhiều đối tượng polyline đầu vào được lấy mẫu từ một raster bề mặt.",
            "params": {
              "lines_vector": {
                "label": "Vector đường",
                "description": "Đường dẫn vector polyline đầu vào."
              },
              "surface": {
                "label": "Bề mặt",
                "description": "Đường dẫn raster bề mặt đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra."
              }
            }
          },
          "slope_vs_aspect_plot": {
            "name": "Biểu đồ độ dốc so với hướng dốc",
            "description": "Tạo biểu đồ phân tích độ dốc theo hướng dốc dạng xuyên tâm HTML cho một DEM đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "aspect_bin_size": {
                "label": "Kích thước khoảng hướng dốc",
                "description": "Kích thước khoảng hướng dốc tính bằng độ (mặc định 2.0)."
              },
              "min_slope": {
                "label": "Độ dốc tối thiểu",
                "description": "Bỏ qua các độ dốc thấp hơn ngưỡng này tính bằng độ (mặc định 0.1)."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ thẳng đứng cho các giá trị độ cao."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra."
              }
            }
          },
          "slope_vs_elev_plot": {
            "name": "Biểu đồ độ dốc so với độ cao",
            "description": "Tạo biểu đồ phân tích độ dốc theo độ cao HTML cho một hoặc nhiều DEM.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Đường dẫn các DEM đầu vào dưới dạng chuỗi phân tách bằng ';' hoặc ',', hoặc dạng danh sách."
              },
              "watershed": {
                "label": "Lưu vực",
                "description": "Các raster lưu vực tùy chọn tương ứng với từng DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra."
              }
            }
          },
          "surface_area_ratio": {
            "name": "Tỉ số diện tích bề mặt",
            "description": "Tỷ số diện tích bề mặt 3D / diện tích mặt bằng (phương pháp Jenness). >1.0=địa hình gồ ghề, ≈1.0=bằng phẳng. Chỉ số độ gồ ghề không thứ nguyên cho phép so sánh địa hình giữa các khu vực.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "topographic_hachures": {
            "name": "Nét gạch địa hình",
            "description": "Tạo các polyline nét gạch địa hình (hachure) từ DEM sử dụng các đường dòng chảy xuôi dốc và ngược dốc được khởi tạo từ đường đồng mức. Ghi nhận tác giả cũ được cố ý giữ nguyên cho công cụ này.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "base": {
                "label": "Nền",
                "description": "Độ cao của đường bình độ cơ sở (mặc định 0.0)."
              },
              "depth": {
                "label": "Độ sâu",
                "description": "Độ sâu lấp đệ quy dùng ở các vùng phân kỳ (mặc định 16)."
              },
              "discretization": {
                "label": "Rời rạc hóa",
                "description": "Chiều dài bước đường dòng theo đơn vị ô trung bình (mặc định 0.5)."
              },
              "distmax": {
                "label": "Khoảng cách tối đa",
                "description": "Hệ số khoảng cách tối đa dùng để chèn thêm nét chải địa hình (mặc định 2.0)."
              },
              "distmin": {
                "label": "Khoảng cách tối thiểu",
                "description": "Hệ số khoảng cách tối thiểu dùng để cắt bớt các nét chải địa hình lân cận (mặc định 0.5)."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Giá trị khoảng cách giữa các đường bình độ (mặc định 10.0)."
              },
              "separation": {
                "label": "Khoảng phân tách",
                "description": "Khoảng cách danh nghĩa giữa các hạt giống trên đường đồng mức theo đơn vị ô trung bình (mặc định 2.0)."
              },
              "slopemin": {
                "label": "Độ dốc tối thiểu",
                "description": "Góc dốc nhỏ nhất tính bằng độ để tiếp tục dò vẽ (mặc định 0.5)."
              },
              "smooth": {
                "label": "Làm trơn",
                "description": "Kích thước bộ lọc làm trơn đường đồng mức (nên dùng số nguyên lẻ, mặc định 9)."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Góc uốn nhỏ nhất của đường đồng mức tính bằng độ được giữ lại khi đơn giản hóa (mặc định 10.0)."
              },
              "turnmax": {
                "label": "Góc rẽ tối đa",
                "description": "Góc rẽ tối đa cho phép tính bằng độ khi dò vẽ nét chải địa hình (mặc định 45.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "map_off_terrain_objects": {
            "name": "Lập bản đồ đối tượng phi địa hình",
            "description": "Lập bản đồ các phân đoạn đối tượng không thuộc địa hình trong DSM sử dụng phát triển vùng có ràng buộc độ dốc và tùy chọn lọc theo kích thước đối tượng tối thiểu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DSM đầu vào hoặc đối tượng raster có kiểu."
              },
              "max_slope": {
                "label": "Độ dốc tối đa",
                "description": "Độ dốc kết nối tối đa tính bằng độ [1, 90] (mặc định inf, giới hạn ở 90)."
              },
              "min_feature_size": {
                "label": "Kích thước đối tượng tối thiểu",
                "description": "Kích thước phân đoạn nhỏ nhất được giữ lại tính theo ô (mặc định 0). Các phân đoạn nhỏ hơn được gán vào lớp nền 1."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "remove_off_terrain_objects": {
            "name": "Loại bỏ đối tượng phi địa hình",
            "description": "Loại bỏ các đối tượng dốc không thuộc địa hình khỏi DEM sử dụng chuẩn hóa top-hat trắng, phát triển vùng có ràng buộc độ dốc và nội suy cục bộ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Chiều rộng đối tượng lớn nhất dự kiến tính theo ô; được ép về kích thước lẻ >= 3 (mặc định 11)."
              },
              "slope_threshold": {
                "label": "Ngưỡng độ dốc",
                "description": "Độ dốc biên đối tượng nhỏ nhất tính bằng độ (mặc định 15.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "ridge_and_valley_vectors": {
            "name": "Vector sống núi và thung lũng",
            "description": "Trích xuất các vector đường tâm sống núi và thung lũng từ DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước lân cận cho phân vị độ cao."
              },
              "ep_threshold": {
                "label": "Ngưỡng EP",
                "description": "Ngưỡng phân vị độ cao [5, 50]."
              },
              "slope_threshold": {
                "label": "Ngưỡng độ dốc",
                "description": "Ngưỡng độ dốc nhỏ nhất tính bằng độ."
              },
              "min_length": {
                "label": "Chiều dài tối thiểu",
                "description": "Chiều dài đường tim nhỏ nhất tính theo ô."
              },
              "output_ridges": {
                "label": "Đầu ra sống núi",
                "description": "Đường dẫn đầu ra cho đường tim sống núi."
              },
              "output_valleys": {
                "label": "Đầu ra thung lũng",
                "description": "Đường dẫn đầu ra cho đường tim thung lũng."
              }
            }
          },
          "smooth_vegetation_residual": {
            "name": "Làm trơn dư thực vật",
            "description": "Giảm độ gồ ghề dư của tán cây bằng cách che các phản hồi DEV cục bộ cao ở các thang nhỏ và nội suy lại các độ cao bị che.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ DEV lớn nhất tính theo ô (mặc định 30)."
              },
              "dev_threshold": {
                "label": "Ngưỡng độ lệch",
                "description": "Độ lớn DEV nhỏ nhất dùng để đánh dấu các ô gồ ghề (mặc định 1.0)."
              },
              "scale_threshold": {
                "label": "Ngưỡng tỉ lệ",
                "description": "Tỉ lệ lớn nhất được coi là độ gồ ghề (mặc định 5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "average_horizon_distance": {
            "name": "Khoảng cách chân trời trung bình",
            "description": "Tính khoảng cách trung bình đến đường chân trời trên các hướng phương vị.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM/DSM đầu vào."
              },
              "az_fraction": {
                "label": "Phân số phương vị",
                "description": "Bước góc phương vị tính bằng độ [1, 45]."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa theo đơn vị bản đồ."
              },
              "observer_hgt_offset": {
                "label": "Độ cao quan sát viên",
                "description": "Độ cao của người quan sát so với địa hình."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra."
              }
            }
          },
          "horizon_angle": {
            "name": "Góc chân trời",
            "description": "Tính góc chân trời (độ dốc lớn nhất) dọc theo một hướng phương vị được chỉ định.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị tính bằng độ [0, 360)."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra."
              }
            }
          },
          "horizon_area": {
            "name": "Diện tích chân trời",
            "description": "Tính diện tích đa giác đường chân trời (hecta).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM/DSM đầu vào."
              },
              "az_fraction": {
                "label": "Phân số phương vị",
                "description": "Bước góc phương vị tính bằng độ [1, 45]."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa theo đơn vị bản đồ."
              },
              "observer_hgt_offset": {
                "label": "Độ cao quan sát viên",
                "description": "Độ cao của người quan sát so với địa hình."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra."
              }
            }
          },
          "openness": {
            "name": "Độ mở",
            "description": "Độ mở địa hình Yokoyama: các chỉ số phơi lộ dương (sống núi/đỉnh lộ thiên) và âm (thung lũng khép kín). Phân loại dạng địa hình và phân tích khả năng nhìn thấy/vi khí hậu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "dist": {
                "label": "Khoảng cách",
                "description": "Khoảng cách tìm kiếm tính theo ô (mặc định 20)."
              },
              "neg_output": {
                "label": "Đầu ra âm",
                "description": "Đường dẫn đầu ra tùy chọn cho độ mở âm."
              },
              "pos_output": {
                "label": "Đầu ra dương",
                "description": "Đường dẫn đầu ra tùy chọn cho độ mở dương."
              }
            }
          },
          "shadow_animation": {
            "name": "Hoạt ảnh bóng đổ",
            "description": "Tạo trình xem HTML tương tác và ảnh GIF động thể hiện bóng địa hình trong suốt một ngày.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM/DSM đầu vào."
              },
              "date": {
                "label": "Ngày",
                "description": "Ngày theo định dạng DD/MM/YYYY."
              },
              "delay": {
                "label": "Trễ",
                "description": "Độ trễ mỗi khung hình GIF tính bằng mili giây."
              },
              "image_height": {
                "label": "Chiều cao ảnh",
                "description": "Chiều cao ảnh hiển thị tính bằng điểm ảnh."
              },
              "label": {
                "label": "Nhãn",
                "description": "Nhãn tùy chọn hiển thị trong trình xem."
              },
              "location": {
                "label": "Vị trí",
                "description": "Chuỗi vị trí LAT/LON/UTC_OFFSET, ví dụ 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm chân trời tối đa theo đơn vị bản đồ."
              },
              "palette": {
                "label": "Bảng màu",
                "description": "Tên bảng màu phân tầng độ cao (ví dụ soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time_interval": {
                "label": "Khoảng thời gian",
                "description": "Khoảng thời gian giữa các khung hình tính bằng phút [1, 60]."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn HTML đầu ra."
              }
            }
          },
          "shadow_image": {
            "name": "Ảnh bóng đổ",
            "description": "Tạo raster cường độ bóng địa hình cho một ngày, giờ và vị trí được chỉ định.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM/DSM đầu vào."
              },
              "date": {
                "label": "Ngày",
                "description": "Ngày theo định dạng DD/MM/YYYY."
              },
              "location": {
                "label": "Vị trí",
                "description": "Chuỗi vị trí LAT/LON/UTC_OFFSET, ví dụ 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm chân trời tối đa theo đơn vị bản đồ."
              },
              "palette": {
                "label": "Bảng màu",
                "description": "Tên bảng màu phân tầng độ cao (ví dụ soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time": {
                "label": "Thời gian",
                "description": "Giờ địa phương theo định dạng HH:MM hoặc HH:MMAM/HH:MMPM."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "sky_view_factor": {
            "name": "Hệ số tầm nhìn bầu trời",
            "description": "Tính tỷ lệ bầu trời có thể nhìn thấy từ DEM/DSM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM/DSM đầu vào."
              },
              "az_fraction": {
                "label": "Phân số phương vị",
                "description": "Bước góc phương vị tính bằng độ [1, 45]."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa theo đơn vị bản đồ."
              },
              "observer_hgt_offset": {
                "label": "Độ cao quan sát viên",
                "description": "Độ cao của người quan sát so với địa hình."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra."
              }
            }
          },
          "skyline_analysis": {
            "name": "Phân tích đường chân trời",
            "description": "Thực hiện phân tích đường chân trời cho một hoặc nhiều điểm quan sát và ghi vết đường chân trời dạng vector cùng báo cáo HTML.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM/DSM đầu vào."
              },
              "points": {
                "label": "Điểm",
                "description": "Đường dẫn vector điểm đầu vào."
              },
              "az_fraction": {
                "label": "Phân số phương vị",
                "description": "Bước góc phương vị tính bằng độ [0.01, 45]."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tối đa theo đơn vị bản đồ."
              },
              "observer_hgt_offset": {
                "label": "Độ cao quan sát viên",
                "description": "Độ cao của người quan sát so với địa hình."
              },
              "output_as_polygons": {
                "label": "Đầu ra dạng đa giác",
                "description": "Ghi đường chân trời dạng đa giác thay vì dạng polyline."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn báo cáo HTML tùy chọn."
              }
            }
          },
          "time_in_daylight": {
            "name": "Thời gian có ánh sáng ban ngày",
            "description": "Tính tỷ lệ thời gian ban ngày mà mỗi ô được chiếu sáng (không nằm trong bóng của địa hình/đối tượng).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM/DSM đầu vào."
              },
              "az_fraction": {
                "label": "Phân số phương vị",
                "description": "Kích thước khoảng góc phương vị tính bằng độ (0, 360)."
              },
              "end_day": {
                "label": "Ngày kết thúc",
                "description": "Ngày kết thúc trong năm (1..366)."
              },
              "end_time": {
                "label": "Giờ kết thúc",
                "description": "Thời gian kết thúc HH:MM:SS hoặc 'sunset'."
              },
              "latitude": {
                "label": "Vĩ độ",
                "description": "Vĩ độ ghi đè tùy chọn tính bằng độ; nếu không sẽ suy ra từ hệ tọa độ của DEM."
              },
              "longitude": {
                "label": "Kinh độ",
                "description": "Kinh độ ghi đè tùy chọn tính bằng độ; nếu không sẽ suy ra từ hệ tọa độ của DEM."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm chân trời tối đa theo đơn vị bản đồ."
              },
              "start_day": {
                "label": "Ngày bắt đầu",
                "description": "Ngày bắt đầu trong năm (1..366)."
              },
              "start_time": {
                "label": "Thời gian bắt đầu",
                "description": "Thời gian bắt đầu HH:MM:SS hoặc 'sunrise'."
              },
              "utc_offset": {
                "label": "Chênh lệch UTC",
                "description": "Chuỗi độ lệch UTC tùy chọn dạng UTC+00:00; nếu bỏ trống sẽ được ước tính từ kinh độ trung tâm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn."
              }
            }
          },
          "viewshed": {
            "name": "Vùng nhìn thấy",
            "description": "Tính số trạm quan sát được từ các trạm điểm trên DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "stations": {
                "label": "Trạm",
                "description": "Tệp vector điểm đầu vào chứa các trạm quan sát."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao trạm quan sát so với mặt đất theo đơn vị z của DEM (mặc định 2.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "visibility_index": {
            "name": "Chỉ số tầm nhìn",
            "description": "Tính chỉ số khả năng nhìn thấy dựa trên địa hình từ các vùng nhìn thấy được lấy mẫu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm tầm nhìn tối đa theo đơn vị bản đồ."
              },
              "resolution_factor": {
                "label": "Hệ số độ phân giải",
                "description": "Hệ số độ phân giải lấy mẫu [1, 25]."
              },
              "station_height": {
                "label": "Chiều cao trạm",
                "description": "Chiều cao người quan sát so với mặt đất."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra."
              }
            }
          },
          "accumulation_curvature": {
            "name": "Độ cong tích lũy",
            "description": "Tính độ cong tích lũy từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "aspect": {
            "name": "Hướng dốc",
            "description": "Hướng của độ dốc lớn nhất (0°=Bắc, 90°=Đông, 180°=Nam, 270°=Tây). Rất quan trọng cho phân tích bức xạ mặt trời, mẫu phân bố thực vật, vi khí hậu và mức độ phơi lộ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "casorati_curvature": {
            "name": "Độ cong Casorati",
            "description": "Tính độ cong Casorati từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "curvedness": {
            "name": "Độ cong tổng hợp",
            "description": "Tính bộ mô tả dạng bề mặt độ cong tổng (curvedness) từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "difference_curvature": {
            "name": "Độ cong hiệu",
            "description": "Tính độ cong hiệu từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "gaussian_curvature": {
            "name": "Độ cong Gauss",
            "description": "Tính độ cong Gauss (nội tại) (tích của các độ cong chính). Cho biết tô pô bề mặt cục bộ: dương (lòng chảo/vòm), âm (yên ngựa), bằng không (hình trụ). Phân loại địa hình thành các nhóm dạng địa hình: đối tượng lồi (sống núi), đối tượng lõm (thung lũng), đối tượng yên ngựa (đèo/khe). Được sử dụng trong phân loại dạng địa hình nâng cao.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra để dễ đọc hơn (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "generating_function": {
            "name": "Hàm sinh",
            "description": "Tính hàm sinh từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "horizontal_excess_curvature": {
            "name": "Độ cong dư ngang",
            "description": "Tính độ cong dư theo phương ngang từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "maximal_curvature": {
            "name": "Độ cong cực đại",
            "description": "Tính độ cong cực đại (độ cong chính lớn nhất) từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "mean_curvature": {
            "name": "Độ cong trung bình",
            "description": "Tính độ cong trung bình (trung bình của các độ cong chính). Liên quan đến độ cong tổng nhưng nhấn mạnh độ mượt của bề mặt. Giá trị gần 0 cho thấy địa hình mượt; giá trị cao cho thấy thay đổi độ cong đột ngột. Hữu ích cho đặc trưng hóa bề mặt và phát hiện đường gãy.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra để dễ đọc hơn (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "minimal_curvature": {
            "name": "Độ cong cực tiểu",
            "description": "Tính độ cong cực tiểu (độ cong chính nhỏ nhất) từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "plan_curvature": {
            "name": "Độ cong mặt bằng",
            "description": "Tính độ cong mặt bằng (theo đường đồng mức) đo mức hội tụ/phân kỳ của dòng chảy qua các đường đồng mức. Giá trị dương (hội tụ) cho thấy dòng chảy tập trung về phía trung tâm (lõm); giá trị âm (phân kỳ) cho thấy dòng chảy phân tán ra khỏi trung tâm (lồi). Xác định các vùng tập trung dòng chảy ngang (thung lũng) so với vùng phân tán (sống núi). Thiết yếu cho dự báo phân bố độ ẩm đất và mức độ nhạy cảm sạt lở.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra để dễ đọc hơn (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "principal_curvature_direction": {
            "name": "Hướng độ cong chính",
            "description": "Tính góc hướng độ cong chính (độ).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "profile_curvature": {
            "name": "Độ cong trắc dọc",
            "description": "Tính độ cong mặt cắt (xuôi dốc) đo mức gia tốc/giảm tốc của dòng chảy theo hướng dốc. Giá trị dương (lõm) cho thấy vùng dòng chảy gia tốc (xói mòn); giá trị âm (lồi) cho thấy vùng dòng chảy giảm tốc (bồi tụ). Làm rõ hình dạng sườn dốc: lõm (đáy thung lũng, xói mòn), lồi (sống núi, bóc mòn vật liệu), thẳng (chuyển tiếp).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra để dễ đọc hơn (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "relative_aspect": {
            "name": "Hướng dốc tương đối",
            "description": "Tính hướng dốc địa hình tương đối so với một phương vị do người dùng chỉ định (0 đến 180 độ).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị tham chiếu tính bằng độ theo chiều kim đồng hồ từ hướng bắc."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ đứng tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "ring_curvature": {
            "name": "Độ cong vòng",
            "description": "Tính độ cong vòng (bình phương độ xoắn của đường dòng chảy) từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "rotor": {
            "name": "Rotor",
            "description": "Tính rotor (độ xoắn của đường dòng chảy) từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "shape_index": {
            "name": "Chỉ số hình dạng",
            "description": "Tính bộ mô tả dạng bề mặt chỉ số hình dạng (shape index) từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "slope": {
            "name": "Độ dốc",
            "description": "Gradient độ dốc Zevenbergen-Thorne (độ/radian/phần trăm). Chỉ số hình thái địa hình cơ bản; là đầu vào cho các bước tính độ cong, hướng dòng chảy, đổ bóng và khả năng nhìn thấy.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "units": {
                "label": "Đơn vị",
                "description": "Đơn vị đầu ra: degrees, radians, percent."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "tangential_curvature": {
            "name": "Độ cong tiếp tuyến",
            "description": "Tính độ cong tiếp tuyến (thành phần hướng Đông-Tây), tương tự độ cong mặt bằng nhưng có hướng. Được sử dụng để đặc trưng hóa độ cong toàn diện, nắm bắt sự phân kỳ dòng chảy ngang vuông góc với hướng dốc. Thường được kết hợp với độ cong mặt cắt để hiểu đầy đủ độ cong 3D.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra để dễ đọc hơn (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "total_curvature": {
            "name": "Độ cong tổng",
            "description": "Tính độ cong tổng (trung bình bình phương của các độ cong chính). Chỉ số vô hướng không phụ thuộc hướng. Giá trị cao cho thấy địa hình cong mạnh (đỉnh, hố); giá trị thấp cho thấy địa hình phẳng. Hữu ích như một chỉ số độ gồ ghề không thứ nguyên cho phân loại địa hình và phát hiện dị thường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra để dễ đọc hơn (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "unsphericity": {
            "name": "Độ phi cầu",
            "description": "Tính độ cong phi cầu (một nửa hiệu của các độ cong chính) từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "vertical_excess_curvature": {
            "name": "Độ cong dư đứng",
            "description": "Tính độ cong dư theo phương đứng từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi z tùy chọn (mặc định 1.0). Bí danh: zfactor."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Tùy chọn biến đổi log các giá trị đầu ra (mặc định false). Bí danh: log."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "average_normal_vector_angular_deviation": {
            "name": "Độ lệch góc trung bình của vector pháp tuyến",
            "description": "Tính độ lệch góc trung bình cục bộ giữa các pháp tuyến bề mặt gốc và đã làm trơn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước lân cận (số lẻ) tính theo ô (mặc định 11). Bí danh: filter."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ đứng tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "circular_variance_of_aspect": {
            "name": "Phương sai tròn của hướng dốc",
            "description": "Tính phương sai vòng tròn cục bộ của hướng dốc trong vùng lân cận di động.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter": {
                "label": "Bộ lọc",
                "description": "Kích thước lân cận (số lẻ) tính theo ô (mặc định 11)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "edge_density": {
            "name": "Mật độ biên",
            "description": "Tính mật độ cục bộ của các điểm gãy độ dốc sử dụng chênh lệch góc của vector pháp tuyến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước lân cận (số lẻ) tính theo ô (mặc định 11). Bí danh: filter."
              },
              "norm_diff": {
                "label": "Hiệu pháp tuyến",
                "description": "Ngưỡng góc của vectơ pháp tuyến tính bằng độ (mặc định 5)."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ đứng tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "ruggedness_index": {
            "name": "Chỉ số gồ ghề",
            "description": "Độ gồ ghề địa hình thông qua TRI của Riley (tổng bình phương chênh lệch độ cao). Chỉ số phân loại địa hình không phụ thuộc thang: thấp=đồng bằng mượt, cao=núi gồ ghề. Lập bản đồ dạng địa hình sinh thái và địa mạo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "spherical_std_dev_of_normals": {
            "name": "Độ lệch chuẩn cầu của pháp tuyến",
            "description": "Tính độ lệch chuẩn cầu của các pháp tuyến bề mặt cục bộ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước lân cận (số lẻ) tính theo ô (mặc định 11). Bí danh: filter."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ đứng tùy chọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "standard_deviation_of_slope": {
            "name": "Độ lệch chuẩn của độ dốc",
            "description": "Tính độ lệch chuẩn cục bộ của độ dốc như một chỉ số độ gồ ghề địa hình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size": {
                "label": "Kích thước bộ lọc",
                "description": "Kích thước bộ lọc (số lẻ) tính theo ô (mặc định 11)."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng bộ lọc (số lẻ) tính theo ô (mặc định filter_size). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao bộ lọc (số lẻ) tính theo ô (mặc định filter_size). Bí danh: filtery."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ trống, kết quả được giữ trong bộ nhớ."
              }
            }
          },
          "elev_relative_to_min_max": {
            "name": "Độ cao tương đối so với min/max",
            "description": "Biểu diễn mỗi độ cao dưới dạng phần trăm (0–100) của dải độ cao của raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "geomorphons": {
            "name": "Geomorphon",
            "description": "Phân loại dạng địa hình sử dụng các mẫu tam phân tầm nhìn theo 8 hướng được suy ra từ so sánh góc thiên đỉnh và góc thiên để, hoặc 10 dạng geomorphon phổ biến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "analyze_residuals": {
                "label": "Phân tích phần dư",
                "description": "Nếu true, khử xu thế DEM bằng một mặt phẳng tuyến tính khớp được trước khi phân loại."
              },
              "flatness_distance": {
                "label": "Khoảng cách phẳng",
                "description": "Khoảng cách tính theo ô mà sau đó ngưỡng độ bằng phẳng giảm dần theo khoảng cách chân trời (mặc định 0)."
              },
              "flatness_threshold": {
                "label": "Ngưỡng phẳng",
                "description": "Ngưỡng độ bằng phẳng tính bằng độ (mặc định 1.0), áp dụng cho chênh lệch góc thiên đỉnh - thiên để."
              },
              "output_forms": {
                "label": "Đầu ra dạng địa hình",
                "description": "Nếu true, xuất ra 10 lớp dạng địa hình phổ biến; nếu không sẽ xuất mã geomorphon tam phân thô được sắp xếp ngược chiều kim đồng hồ từ hướng đông."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tra cứu tối đa tính theo ô cho mỗi hướng (mặc định 50); ô ở điểm cuối được tính vào."
              },
              "skip_distance": {
                "label": "Khoảng cách bỏ qua",
                "description": "Khoảng cách tính theo ô cần bỏ qua trước khi đánh giá đường ngắm (mặc định 0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "hypsometric_analysis": {
            "name": "Phân tích đường cong độ cao",
            "description": "Tạo báo cáo HTML đường cong phân tầng độ cao (diện tích-độ cao) cho một hoặc nhiều DEM.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Đường dẫn các DEM đầu vào dưới dạng chuỗi phân tách bằng ';' hoặc ',', hoặc dạng danh sách."
              },
              "watershed": {
                "label": "Lưu vực",
                "description": "Các raster lưu vực tùy chọn tương ứng với từng DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn báo cáo HTML đầu ra."
              }
            }
          },
          "multiscale_topographic_position_class": {
            "name": "Lớp vị trí địa hình đa tỉ lệ",
            "description": "Phân loại mỗi ô DEM vào hệ thống vị trí địa hình tương đối rộng/cục bộ gồm chín lớp sử dụng hai ảnh ghép thang DEVmax.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "local_min_scale": {
                "label": "Tỉ lệ tối thiểu cục bộ",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô cho dải tỉ lệ cục bộ (mặc định 5)."
              },
              "local_max_scale": {
                "label": "Tỉ lệ tối đa cục bộ",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô cho dải tỉ lệ cục bộ (mặc định 80)."
              },
              "local_step_size": {
                "label": "Kích thước bước cục bộ",
                "description": "Bước tăng tỉ lệ tính theo ô cho dải tỉ lệ cục bộ (mặc định 1). Bí danh: local_step."
              },
              "broad_min_scale": {
                "label": "Tỉ lệ tối thiểu rộng",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô cho dải tỉ lệ rộng (mặc định 500)."
              },
              "broad_max_scale": {
                "label": "Tỉ lệ tối đa rộng",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô cho dải tỉ lệ rộng (mặc định 2000)."
              },
              "broad_step_size": {
                "label": "Kích thước bước rộng",
                "description": "Bước tăng tỉ lệ tính theo ô cho dải tỉ lệ rộng (mặc định 20). Bí danh: broad_step."
              },
              "local_threshold": {
                "label": "Ngưỡng cục bộ",
                "description": "Ngưỡng DEV dùng để phân loại ảnh ghép tỉ lệ cục bộ thành các trạng thái lõm, trung gian và gò (mặc định 0.5)."
              },
              "broad_threshold": {
                "label": "Ngưỡng rộng",
                "description": "Ngưỡng DEV dùng để phân loại ảnh ghép tỉ lệ rộng thành các trạng thái vùng thấp, trung gian và vùng cao (mặc định 0.5)."
              },
              "min_patch_size": {
                "label": "Kích thước mảnh tối thiểu",
                "description": "Kích thước mảnh tối thiểu tùy chọn tính theo ô để lọc mảnh sau phân loại (mặc định 0, tắt)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster phân loại chín lớp."
              },
              "output_confidence": {
                "label": "Đầu ra độ tin cậy",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ tin cậy trong khoảng [0, 1]."
              }
            }
          },
          "pennock_landform_classification": {
            "name": "Phân loại dạng địa hình Pennock",
            "description": "Phân loại các yếu tố dạng địa hình thành bảy lớp địa hình theo Pennock et al. (1987).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "plan_curv_threshold": {
                "label": "Ngưỡng độ cong mặt bằng",
                "description": "Ngưỡng độ cong mặt bằng tính bằng độ (mặc định 0.0)."
              },
              "prof_curv_threshold": {
                "label": "Ngưỡng độ cong trắc dọc",
                "description": "Ngưỡng độ cong mặt cắt tính bằng độ (mặc định 0.1)."
              },
              "slope_threshold": {
                "label": "Ngưỡng độ dốc",
                "description": "Ngưỡng độ dốc tính bằng độ (mặc định 3.0)."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số tỉ lệ thẳng đứng tùy chọn (nếu < 0 và hệ tọa độ là địa lý, sẽ được ước tính từ vĩ độ trung bình)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "percent_elev_range": {
            "name": "Phần trăm khoảng độ cao",
            "description": "Tính vị trí địa hình cục bộ dưới dạng phần trăm của dải độ cao trong vùng lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng bộ lọc (số lẻ) tính theo ô (mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao bộ lọc (số lẻ) tính theo ô (mặc định filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "relative_topographic_position": {
            "name": "Vị trí địa hình tương đối",
            "description": "Tính RTP sử dụng các giá trị độ cao nhỏ nhất, trung bình và lớn nhất trong vùng lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "filter_size_x": {
                "label": "Kích thước bộ lọc X",
                "description": "Chiều rộng bộ lọc (số lẻ) tính theo ô (mặc định 11). Bí danh: filterx."
              },
              "filter_size_y": {
                "label": "Kích thước bộ lọc Y",
                "description": "Chiều cao bộ lọc (số lẻ) tính theo ô (mặc định filter_size_x). Bí danh: filtery."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn."
              }
            }
          },
          "max_anisotropy_dev": {
            "name": "Độ lệch dị hướng lớn nhất",
            "description": "Tính độ dị hướng lớn nhất của độ lệch độ cao trên một dải thang lân cận. Tác giả: Dan Newman.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 3)."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô (mặc định 100)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 2). Bí danh: step."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ lớn dị hướng."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster lưu tỉ lệ có phản hồi lớn nhất."
              }
            }
          },
          "max_anisotropy_dev_signature": {
            "name": "Đặc trưng độ lệch dị hướng lớn nhất",
            "description": "Tính các đặc trưng dị hướng đa thang cho các vị trí điểm đầu vào và ghi báo cáo HTML. Tác giả: Dan Newman.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "points": {
                "label": "Điểm",
                "description": "Đường dẫn tệp vector điểm hoặc đa điểm đầu vào."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 1)."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô (mặc định 100)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 1). Bí danh: step."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho báo cáo đặc trưng dạng HTML."
              }
            }
          },
          "max_difference_from_mean": {
            "name": "Hiệu so với trung bình lớn nhất",
            "description": "Tính hiệu tuyệt đối lớn nhất so với trung bình trên một dải thang lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 1)."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô (mặc định 100)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 1). Bí danh: step."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ lớn chênh lệch lớn nhất."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster lưu tỉ lệ có phản hồi lớn nhất."
              }
            }
          },
          "max_elevation_deviation": {
            "name": "Độ lệch độ cao lớn nhất",
            "description": "Tính độ lệch độ cao chuẩn hóa lớn nhất (DEVmax) trên một dải thang lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 1)."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô (mặc định 100)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 1). Bí danh: step."
              },
              "min_vertical": {
                "label": "Chênh cao tối thiểu",
                "description": "Ngưỡng độ lệch chuẩn cục bộ nhỏ nhất; các phản hồi địa hình yếu hơn sẽ bị loại bỏ (mặc định 0.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ lớn DEVmax."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster lưu tỉ lệ có phản hồi lớn nhất."
              }
            }
          },
          "max_elev_dev_signature": {
            "name": "Đặc trưng độ lệch độ cao lớn nhất",
            "description": "Tính các đặc trưng độ lệch độ cao đa thang cho các vị trí điểm đầu vào và ghi báo cáo HTML.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "points": {
                "label": "Điểm",
                "description": "Đường dẫn tệp vector điểm hoặc đa điểm đầu vào."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 1)."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô (mặc định 100)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 10). Bí danh: step."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho báo cáo đặc trưng dạng HTML."
              }
            }
          },
          "multiscale_curvatures": {
            "name": "Độ cong đa tỉ lệ",
            "description": "Tính các độ cong đa thang và các chỉ số dựa trên độ cong từ DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu. Bí danh: dem."
              },
              "curv_type": {
                "label": "Kiểu độ cong",
                "description": "Loại độ cong."
              },
              "out_mag": {
                "label": "Độ lớn ra",
                "description": "Đường dẫn đầu ra tùy chọn cho độ lớn. Bí danh: output."
              },
              "out_scale": {
                "label": "Tỉ lệ ra",
                "description": "Đường dẫn đầu ra tùy chọn cho tỉ lệ khi num_steps > 1."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính lân cận tìm kiếm nhỏ nhất tính theo ô lưới."
              },
              "step": {
                "label": "Bước",
                "description": "Kích thước bước."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số bước tỉ lệ được lấy mẫu."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Hệ số phi tuyến của bước."
              },
              "log_transform": {
                "label": "Biến đổi log",
                "description": "Áp dụng biến đổi log có dấu. Bí danh: log."
              },
              "standardize": {
                "label": "Chuẩn hóa",
                "description": "Chuẩn hóa mỗi tỉ lệ về điểm z."
              }
            }
          },
          "multiscale_elevated_index": {
            "name": "Chỉ số nâng cao đa tỉ lệ",
            "description": "Tính các raster chỉ số nhô cao đa thang (MsEI) và thang then chốt sử dụng phần dư không gian thang Gauss.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính tìm kiếm nhỏ nhất tính theo ô lưới (mặc định 2)."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số tỉ lệ cần đánh giá (mặc định 100)."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Độ phi tuyến của bước tỉ lệ trong [1,4] (mặc định 1.1)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Kích thước bước cơ sở tính theo ô (mặc định 1). Bí danh: step."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster chỉ số."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster tỉ lệ then chốt."
              }
            }
          },
          "multiscale_elevation_percentile": {
            "name": "Phân vị độ cao đa tỉ lệ",
            "description": "Tính phân vị độ cao cục bộ cực trị nhất trên một dải thang lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 4)."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số tỉ lệ cần đánh giá (mặc định 10)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 1). Bí danh: step."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Số mũ tỉ lệ phi tuyến; >1.0 dồn các tỉ lệ về phía độ phân giải mịn hơn (mặc định 1.0)."
              },
              "sig_digits": {
                "label": "Số chữ số có nghĩa",
                "description": "Số chữ số thập phân có nghĩa dùng khi phân khoảng phân vị (mặc định 3)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ lớn phân vị."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster lưu tỉ lệ có phản hồi phân vị cực trị nhất."
              }
            }
          },
          "multiscale_low_lying_index": {
            "name": "Chỉ số vùng thấp đa tỉ lệ",
            "description": "Tính các raster chỉ số trũng thấp đa thang (MsLLI) và thang then chốt sử dụng phần dư không gian thang Gauss.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính tìm kiếm nhỏ nhất tính theo ô lưới (mặc định 2)."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số tỉ lệ cần đánh giá (mặc định 100)."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Độ phi tuyến của bước tỉ lệ trong [1,4] (mặc định 1.1)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Kích thước bước cơ sở tính theo ô (mặc định 1). Bí danh: step."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster chỉ số."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster tỉ lệ then chốt."
              }
            }
          },
          "multiscale_roughness": {
            "name": "Độ nhám đa tỉ lệ",
            "description": "Tính độ nhám bề mặt trên một dải thang lân cận.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 1)."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô (mặc định 100)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 1). Bí danh: step."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ lớn độ gồ ghề."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster lưu tỉ lệ có phản hồi lớn nhất."
              }
            }
          },
          "multiscale_roughness_signature": {
            "name": "Đặc trưng độ nhám đa tỉ lệ",
            "description": "Tính các đặc trưng độ nhám đa thang cho các vị trí điểm đầu vào và ghi báo cáo HTML.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "points": {
                "label": "Điểm",
                "description": "Đường dẫn tệp vector điểm hoặc đa điểm đầu vào."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 1)."
              },
              "max_scale": {
                "label": "Tỉ lệ tối đa",
                "description": "Bán kính nửa cửa sổ lớn nhất tính theo ô (mặc định 100)."
              },
              "step_size": {
                "label": "Kích thước bước",
                "description": "Bước tăng tỉ lệ tính theo ô (mặc định 1). Bí danh: step."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho báo cáo đặc trưng dạng HTML."
              }
            }
          },
          "multiscale_std_dev_normals": {
            "name": "Độ lệch chuẩn pháp tuyến đa tỉ lệ",
            "description": "Tính độ lệch chuẩn cầu lớn nhất của các pháp tuyến bề mặt trên một dải thang được lấy mẫu phi tuyến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 4)."
              },
              "step": {
                "label": "Bước",
                "description": "Kích thước bước cơ sở tính theo ô dùng trong lịch trình tỉ lệ phi tuyến (mặc định 1)."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số tỉ lệ được lấy mẫu (mặc định 10)."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Số mũ phi tuyến cho lịch trình tỉ lệ (mặc định 1.0)."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ lớn độ lệch chuẩn cầu."
              },
              "output_scale": {
                "label": "Tỉ lệ đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster lưu tỉ lệ có phản hồi lớn nhất."
              }
            }
          },
          "multiscale_std_dev_normals_signature": {
            "name": "Đặc trưng độ lệch chuẩn pháp tuyến đa tỉ lệ",
            "description": "Tính các đặc trưng thang độ lệch chuẩn cầu cho các vị trí điểm đầu vào và ghi báo cáo HTML.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "points": {
                "label": "Điểm",
                "description": "Đường dẫn tệp vector điểm hoặc đa điểm đầu vào."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 4)."
              },
              "step": {
                "label": "Bước",
                "description": "Kích thước bước cơ sở tính theo ô dùng trong lịch trình tỉ lệ phi tuyến (mặc định 1)."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số tỉ lệ được lấy mẫu (mặc định 10)."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Số mũ phi tuyến cho lịch trình tỉ lệ (mặc định 1.0)."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số chuyển đổi Z khi đơn vị thẳng đứng và đơn vị nằm ngang khác nhau (mặc định 1.0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho báo cáo đặc trưng dạng HTML."
              }
            }
          },
          "multiscale_topographic_position_image": {
            "name": "Ảnh vị trí địa hình đa tỉ lệ",
            "description": "Tạo ảnh vị trí địa hình đa thang RGB đóng gói từ các raster DEVmax cục bộ, trung bình và rộng.",
            "params": {
              "local": {
                "label": "Cục bộ",
                "description": "Đường dẫn raster DEVmax tỉ lệ cục bộ đầu vào."
              },
              "meso": {
                "label": "Trung",
                "description": "Đường dẫn raster DEVmax tỉ lệ trung đầu vào."
              },
              "broad": {
                "label": "Rộng",
                "description": "Đường dẫn raster DEVmax tỉ lệ rộng đầu vào."
              },
              "hillshade": {
                "label": "Bóng đổ địa hình",
                "description": "Đường dẫn raster đổ bóng địa hình tùy chọn dùng để điều biến chiếu sáng."
              },
              "lightness": {
                "label": "Độ sáng",
                "description": "Hệ số tỉ lệ độ sáng của ảnh (mặc định 1.2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho raster RGB đóng gói."
              }
            }
          },
          "topographic_position_animation": {
            "name": "Hoạt ảnh vị trí địa hình",
            "description": "Tạo trình xem HTML tương tác và ảnh GIF động của DEV hoặc DEVmax trên các thang được lấy mẫu phi tuyến.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn raster DEM đầu vào hoặc đối tượng raster có kiểu."
              },
              "delay": {
                "label": "Trễ",
                "description": "Độ trễ mỗi khung hình GIF tính bằng mili giây."
              },
              "image_height": {
                "label": "Chiều cao ảnh",
                "description": "Chiều cao ảnh hiển thị tính bằng điểm ảnh."
              },
              "label": {
                "label": "Nhãn",
                "description": "Nhãn tùy chọn hiển thị trong trình xem."
              },
              "min_scale": {
                "label": "Tỉ lệ tối thiểu",
                "description": "Bán kính nửa cửa sổ nhỏ nhất tính theo ô (mặc định 1)."
              },
              "num_steps": {
                "label": "Số bước",
                "description": "Số bước hoạt hình (mặc định 10)."
              },
              "palette": {
                "label": "Bảng màu",
                "description": "Tên bảng màu dùng để tô màu các giá trị DEV."
              },
              "step_nonlinearity": {
                "label": "Độ phi tuyến của bước",
                "description": "Số mũ tỉ lệ phi tuyến trong [1, 4] điều khiển khoảng cách từ thô đến mịn."
              },
              "use_dev_max": {
                "label": "Dùng độ lệch tối đa",
                "description": "Nếu true, các khung hình tích lũy phản hồi DEV tuyệt đối mạnh nhất gặp được cho đến thời điểm đó."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn HTML đầu ra."
              }
            }
          },
          "topo_render": {
            "name": "Kết xuất địa hình",
            "description": "Tạo kết xuất địa hình giả 3D sử dụng tô màu bảng màu, bóng đổ địa hình, bóng và suy giảm.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Đường dẫn raster DEM đầu vào."
              },
              "palette": {
                "label": "Bảng màu",
                "description": "Tên bảng màu (soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "reverse_palette": {
                "label": "Đảo bảng màu",
                "description": "Đảo ngược thứ tự bảng màu."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị nguồn sáng tính bằng độ [0, 360]."
              },
              "altitude": {
                "label": "Góc cao",
                "description": "Độ cao nguồn sáng tính bằng độ [0, 90]."
              },
              "clipping_polygon": {
                "label": "Đa giác cắt",
                "description": "Đường dẫn vector đa giác tùy chọn; chỉ các ô DEM nằm trong đa giác mới được kết xuất."
              },
              "background_hgt_offset": {
                "label": "Độ cao nền",
                "description": "Độ lệch thẳng đứng từ độ cao nhỏ nhất của DEM đến mặt phẳng nền."
              },
              "background_clr": {
                "label": "Màu nền",
                "description": "Màu nền RGBA dưới dạng mảng [r,g,b,a]."
              },
              "attenuation_parameter": {
                "label": "Tham số suy giảm",
                "description": "Số mũ suy giảm theo khoảng cách (>= 0)."
              },
              "ambient_light": {
                "label": "Ánh sáng môi trường",
                "description": "Mức ánh sáng môi trường trong [0, 1]."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số nhân phóng đại thẳng đứng."
              },
              "max_dist": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách tìm kiếm bóng đổ tối đa theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra."
              }
            }
          },
          "add_surface_information": {
            "name": "Thêm thông tin bề mặt",
            "description": "Bổ sung các thống kê bề mặt theo từng đối tượng từ một raster độ cao — Z, chiều dài bề mặt 3D, diện tích bề mặt 3D, Z nhỏ nhất/lớn nhất/trung bình và độ dốc nhỏ nhất/lớn nhất/trung bình — dưới dạng các trường thuộc tính mà không thay đổi hình học đầu vào, giống ArcGIS Add Surface Information.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm, đường hoặc đa giác) có cùng hệ tọa độ với bề mặt."
              },
              "surface": {
                "label": "Bề mặt",
                "description": "Raster độ cao/bề mặt cần lấy mẫu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "properties": {
                "label": "Thuộc tính",
                "description": "Danh sách các nhóm thuộc tính bề mặt cần thêm, phân tách bằng dấu phẩy: Z, SURFACE_LENGTH, SURFACE_AREA, MIN_MAX_MEAN_Z, MIN_MAX_AVG_SLOPE. Mặc định: tất cả các nhóm phù hợp với hình học của lớp."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng dày hóa theo đơn vị hệ tọa độ dùng khi lấy mẫu đường/chu vi; các đoạn dài được tách nhỏ để bám theo bề mặt. Mặc định: kích thước ô của raster."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Cách lấy mẫu bề mặt tại đỉnh: 'bilinear' (mặc định) hoặc 'nearest'."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh bề mặt cần lấy mẫu, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "add_z_information": {
            "name": "Thêm thông tin Z",
            "description": "Bổ sung các thống kê hình học suy ra từ Z cho các đối tượng 3D — Z điểm/nhỏ nhất/lớn nhất/trung bình, chiều dài 3D, diện tích bề mặt lưới và thể tích, thống kê độ dốc và số đỉnh (ArcGIS Add Z Information). vector_summary_statistics và attribute_histogram tóm tắt thuộc tính chứ không phải hình học, còn polygon_volume / surface_volume đo raster so với một mặt phẳng tham chiếu, nên hiện chưa có công cụ nào chú giải một đối tượng vector 3D từ chính giá trị Z của nó.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng điểm, đường, đa giác hoặc multipatch 3D. Lưu ý rằng giá trị Z bằng 0 không thể phân biệt với Z vắng mặt, do đó 'features_with_z' chỉ mang tính gợi ý chứ không phải bảo đảm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các đối tượng đầu vào kèm theo các trường được yêu cầu. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "properties": {
                "label": "Thuộc tính",
                "description": "Tập con phân tách bằng dấu phẩy gồm spot_z, min_z, max_z, mean_z, length_3d, surface_area, volume, min_slope, max_slope, mean_slope, point_count, vertex_count. Mặc định: tất cả (các trường không phù hợp với một hình học sẽ để trống)."
              },
              "noise_filtering": {
                "label": "Lọc nhiễu",
                "description": "Phần trăm (0-50) được cắt bỏ ở mỗi đầu của phân bố Z trước khi tính min_z / max_z, để một đỉnh đột biến đơn lẻ không quyết định các giá trị cực trị được báo cáo. Mặc định 0."
              }
            }
          },
          "adjust_3d_z": {
            "name": "Điều chỉnh Z 3D",
            "description": "Áp dụng chuyển đổi đơn vị Z, độ lệch thẳng đứng và/hoặc hệ số nhân cho các tọa độ Z của các đối tượng 3D.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (các đối tượng nên có tọa độ Z)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "factor": {
                "label": "Hệ số",
                "description": "Hệ số nhân áp dụng cho Z (mặc định 1.0). Hữu ích cho phóng đại thẳng đứng hoặc đổi tỉ lệ theo mốc chuẩn."
              },
              "offset": {
                "label": "Độ lệch",
                "description": "Độ lệch thẳng đứng cộng thêm được áp dụng sau hệ số, theo đơn vị đích (mặc định 0.0)."
              },
              "from_unit": {
                "label": "Từ đơn vị",
                "description": "Đơn vị Z nguồn định sẵn (meters, feet, us_feet, centimeters, millimeters, kilometers, miles, yards, inches). Yêu cầu to_unit."
              },
              "to_unit": {
                "label": "Sang đơn vị",
                "description": "Đơn vị Z đích định sẵn. Yêu cầu from_unit. Z được nhân theo tỉ lệ (số mét trên from_unit / số mét trên to_unit)."
              }
            }
          },
          "adjust_stream_to_raster": {
            "name": "Điều chỉnh suối theo raster",
            "description": "Di chuyển các đỉnh của đường suối lên đường dòng chảy suy ra từ DEM để thủy văn dạng vector và bề mặt độ cao khớp nhau, bằng cách bắt dính các nút vào các ô có tích lũy dòng chảy cao và lần theo chuỗi con trỏ D8 giữa chúng. Là phép nghịch đảo của khắc suối. Giống ArcGIS Adjust Stream To Raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng polyline suối cần điều chỉnh."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster bề mặt xác định đường dòng chảy thực."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho suối đã điều chỉnh. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "snap_distance": {
                "label": "Khoảng cách bắt dính",
                "description": "Bán kính tìm kiếm theo đơn vị bản đồ để bắt dính các nút vào ô có tích lũy dòng chảy cao (mặc định: 5 ô)."
              },
              "channel_threshold": {
                "label": "Ngưỡng kênh",
                "description": "Giá trị tích lũy dòng chảy (tính theo ô) mà từ đó trở lên một ô được coi là lòng dẫn khi bắt dính (mặc định: 1% giá trị tích lũy lớn nhất của DEM)."
              },
              "remove_disconnected": {
                "label": "Loại bỏ phần rời rạc",
                "description": "Loại bỏ các đường hoàn toàn không định tuyến được (mặc định true). Khi false, chúng được giữ nguyên và được đánh dấu."
              },
              "output_stream_raster": {
                "label": "Đầu ra raster suối",
                "description": "Raster tùy chọn đánh dấu các ô suối đã điều chỉnh."
              },
              "output_flow_direction": {
                "label": "Đầu ra hướng dòng chảy",
                "description": "Raster con trỏ dòng chảy D8 tùy chọn được dẫn xuất từ DEM."
              },
              "output_split_points": {
                "label": "Đầu ra điểm tách",
                "description": "Các điểm tùy chọn nơi việc dò theo con trỏ dòng chảy thất bại và phải dùng phương án dự phòng chi phí nhỏ nhất."
              }
            }
          },
          "aggregate_multidimensional_raster": {
            "name": "Gộp raster đa chiều",
            "description": "Gom các lát cắt của một khối raster theo chiều của nó thành các nhóm và rút gọn mỗi nhóm thành một kênh đầu ra — ảnh hằng ngày thành ảnh tổ hợp hằng tháng, một thập kỷ thành trung bình hằng năm (ArcGIS Aggregate Multidimensional Raster). cell_statistics của vòng 17 chỉ rút gọn một chồng ảnh thành một lớp duy nhất và không có khái niệm chiều, còn multidimensional_anomaly của vòng 16 thực hiện phép toán ngược lại và giữ nguyên số lát cắt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lát cắt) hoặc danh sách các raster đã đồng đăng ký, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đa kênh đầu ra, mỗi khoảng một kênh. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "dimension": {
                "label": "Chiều",
                "description": "Tên của chiều, chỉ dùng trong báo cáo (mặc định 'slice')."
              },
              "dimension_values": {
                "label": "Giá trị chiều",
                "description": "Tọa độ của từng lát cắt, phân tách bằng dấu phẩy, tăng nghiêm ngặt. Mặc định là chỉ số lát cắt đánh số từ 1."
              },
              "aggregation_definition": {
                "label": "Định nghĩa gộp",
                "description": "'all' (mặc định), 'interval_value', 'interval_count' hoặc 'interval_ranges'."
              },
              "interval_value": {
                "label": "Giá trị khoảng",
                "description": "Độ rộng khoảng theo đơn vị của chiều, dùng cho 'interval_value'."
              },
              "interval_count": {
                "label": "Số khoảng",
                "description": "Số khoảng có độ rộng bằng nhau, dùng cho 'interval_count'."
              },
              "interval_ranges": {
                "label": "Dải khoảng",
                "description": "Các khoảng được chỉ định rõ dạng 'start:end,start:end', dùng cho 'interval_ranges'."
              },
              "aggregation_method": {
                "label": "Phương pháp gộp",
                "description": "'mean' (mặc định), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' hoặc 'variety'."
              },
              "percentile_value": {
                "label": "Giá trị phân vị",
                "description": "Phân vị trong [0, 100] cho phương pháp 'percentile' (mặc định 50)."
              },
              "ignore_nodata": {
                "label": "Bỏ qua NoData",
                "description": "Bỏ qua các lát cắt NoData theo từng ô (mặc định true). Khi false, chỉ một lát cắt NoData sẽ khiến toàn bộ khoảng trở thành NoData tại ô đó."
              }
            }
          },
          "aggregate_points": {
            "name": "Gộp điểm",
            "description": "Gom các điểm nằm trong khoảng cách gộp với nhau thành các đa giác cụm (bao lồi hoặc hợp có vùng đệm), mỗi đa giác mang số lượng điểm và tùy chọn tổng các trường theo từng cụm, giống ArcGIS Aggregate Points.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (Point hoặc MultiPoint)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "aggregation_distance": {
                "label": "Khoảng cách gộp",
                "description": "Khoảng cách tối đa giữa các điểm để chúng thuộc cùng một cụm (đơn vị bản đồ)."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Số điểm tối thiểu để một cụm được xuất ra (mặc định 2; đặt 1 để giữ lại các cụm đơn lẻ)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'convex_hull' (mặc định) hoặc 'buffer' (hợp các vùng đệm rồi co lại)."
              },
              "sum_fields": {
                "label": "Trường tổng",
                "description": "Các trường số cần tính tổng theo từng cụm, phân tách bằng dấu phẩy (cột đầu ra 'sum_<field>')."
              }
            }
          },
          "aggregate_polygons": {
            "name": "Gộp đa giác",
            "description": "Kết hợp các đa giác nằm trong khoảng cách gộp thành các đa giác lớn hơn (phép đóng hình thái), với các bộ lọc diện tích tối thiểu và kích thước lỗ tối thiểu cùng một lớp rào cản tùy chọn mà việc gộp không được vượt qua.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào, định dạng được tự động nhận diện (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "aggregation_distance": {
                "label": "Khoảng cách gộp",
                "description": "Các đa giác cách nhau trong khoảng này (đơn vị hệ tọa độ) sẽ được gộp. Bán kính phép đóng hình thái học được đặt bằng một nửa giá trị này."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Loại bỏ các đa giác đã gộp có diện tích (đơn vị hệ tọa độ bình phương) nhỏ hơn giá trị này. Mặc định: giữ lại tất cả."
              },
              "min_hole_size": {
                "label": "Kích thước lỗ tối thiểu",
                "description": "Lấp các lỗ bên trong có diện tích (đơn vị hệ tọa độ bình phương) nhỏ hơn giá trị này. Mặc định: giữ lại tất cả các lỗ."
              },
              "barrier": {
                "label": "Rào cản",
                "description": "Lớp vector rào cản tùy chọn (đường hoặc đa giác) mà phép gộp không được vượt qua; các cầu nối băng qua rào cản sẽ bị cắt đứt. Các đa giác đầu vào hiện có không bao giờ bị tách."
              }
            }
          },
          "align_features": {
            "name": "Căn chỉnh đối tượng",
            "description": "Làm cho các cạnh đường/đa giác nguồn khớp với một lớp đích tin cậy ở gần trong một khoảng cách tìm kiếm, kéo cả dải cạnh (không chỉ các điểm đầu cuối) với độ chuyển tiếp trơn và các ranh giới chung trùng khớp, giống ArcGIS Align Features.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector nguồn cần căn chỉnh (đường hoặc đa giác)."
              },
              "target": {
                "label": "Mục tiêu",
                "description": "Lớp đích tin cậy (đường hoặc ranh giới đa giác) mà các đỉnh nguồn được kéo về phía đó."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tối đa (đơn vị hệ tọa độ) mà một đỉnh nguồn có thể bị kéo về phía đích. Bắt buộc."
              },
              "match_field": {
                "label": "Trường khớp",
                "description": "Trường thuộc tính nguồn tùy chọn; chỉ những cạnh đích có giá trị target_match_field trùng khớp mới là ứng viên cho các đỉnh của đối tượng đó."
              },
              "target_match_field": {
                "label": "Trường khớp mục tiêu",
                "description": "Trường thuộc tính đích được so sánh với match_field. Mặc định là tên của match_field nếu bỏ qua; yêu cầu phải có match_field."
              }
            }
          },
          "analyze_changes_ccdc": {
            "name": "Phân tích biến động bằng CCDC",
            "description": "Phát hiện biến động liên tục CCDC trên một chuỗi thời gian ảnh dày đặc (giống ArcGIS Analyze Changes Using CCDC): hồi quy OLS điều hòa (theo mùa) cho từng điểm ảnh, sau đó kiểm định phần dư trượt (k×RMSE, số dị thường liên tiếp tối thiểu) để xác định các điểm gãy và khớp lại các đoạn. Xuất ra các raster số điểm gãy, ngày gãy đầu tiên và RMSE/độ dốc/biên độ của đoạn ban đầu — lịch sử biến động theo mùa, nhiều điểm gãy mà landtrendr theo năm và change_vector_analysis hai thời điểm không thể tạo ra.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh duy nhất (mỗi kênh là một lát thời gian) HOẶC một danh sách phân tách bằng dấu phẩy các đường dẫn raster một kênh đã đồng đăng ký, theo thứ tự thời gian."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster số điểm gãy đầu ra (số điểm gãy phát hiện được trên mỗi điểm ảnh). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "dates": {
                "label": "Ngày",
                "description": "Các mốc thời gian dạng số phân tách bằng dấu phẩy (năm thập phân hoặc số ngày) tương ứng với các lát cắt. Mặc định 0,1,2,..."
              },
              "period": {
                "label": "Chu kỳ",
                "description": "Độ dài của một chu kỳ mùa theo đơn vị của 'dates' (mặc định 1.0 cho năm thập phân; dùng 365 cho số ngày)."
              },
              "harmonic_order": {
                "label": "Bậc điều hòa",
                "description": "Số cặp điều hòa sin/cosin ở tần số hằng năm (mặc định 1 = chỉ theo năm; 2 bổ sung số hạng nửa năm)."
              },
              "change_threshold": {
                "label": "Ngưỡng thay đổi",
                "description": "Ngưỡng dị thường tính bằng bội số k của RMSE của đoạn (mặc định 3.0). Phần dư > k×RMSE sẽ đánh dấu một quan sát."
              },
              "min_consecutive": {
                "label": "Số liên tiếp tối thiểu",
                "description": "Số quan sát bị đánh dấu liên tiếp cần có để xác định một điểm gãy (mặc định 3)."
              },
              "min_observations": {
                "label": "Số quan sát tối thiểu",
                "description": "Số quan sát hợp lệ tối thiểu dùng để khởi tạo mô hình điều hòa của một đoạn (mặc định 12). Các điểm ảnh có ít quan sát hợp lệ hơn sẽ thành no-data."
              },
              "band": {
                "label": "Kênh",
                "description": "Với đầu vào là danh sách phân tách bằng dấu phẩy: kênh (đánh số từ 1) cần đọc từ mỗi raster (mặc định 1). Bị bỏ qua với một đầu vào đa kênh duy nhất."
              },
              "break_date_output": {
                "label": "Đầu ra ngày gián đoạn",
                "description": "Raster tùy chọn chứa ngày của điểm gãy đầu tiên được phát hiện trên mỗi điểm ảnh (no-data ở nơi không có điểm gãy)."
              },
              "rmse_output": {
                "label": "Đầu ra RMSE",
                "description": "Raster tùy chọn chứa RMSE của mô hình điều hòa ở đoạn ban đầu."
              },
              "slope_output": {
                "label": "Đầu ra độ dốc",
                "description": "Raster tùy chọn chứa hệ số xu thế tuyến tính (độ dốc) của đoạn ban đầu."
              },
              "amplitude_output": {
                "label": "Đầu ra biên độ",
                "description": "Raster tùy chọn chứa biên độ điều hòa bậc một sqrt(a²+b²) của đoạn ban đầu."
              }
            }
          },
          "apply_radiometric_calibration": {
            "name": "Áp dụng hiệu chuẩn bức xạ",
            "description": "Chuyển các giá trị số thô của SAR thành tán xạ ngược đã hiệu chuẩn — beta nought, sigma nought hoặc gamma nought — để các lần thu nhận có thể so sánh về mặt vật lý và áp dụng được các ngưỡng đã công bố (ArcGIS Apply Radiometric Calibration). Không có công cụ nào trong cả hai danh mục làm việc này: rescale_value_range chỉ là kéo giãn tuyến tính không có ý nghĩa bức xạ, còn multilook, sar_coherence, các bộ lọc nhiễu đốm Lee và compute_sar_indices đều tiêu thụ bất kỳ giá trị nào được đưa vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster SAR ở dạng giá trị số, biên độ, cường độ hoặc dB (xem 'input_units')."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster tán xạ ngược đã hiệu chuẩn đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "calibration_type": {
                "label": "Kiểu hiệu chuẩn",
                "description": "'sigma0' (mặc định), 'beta0', hoặc 'gamma0'. sigma0 và gamma0 yêu cầu 'incidence_angle'."
              },
              "calibration_constant": {
                "label": "Hằng số hiệu chuẩn",
                "description": "Hằng số hiệu chuẩn A của cảm biến (mặc định 1.0). Bị bỏ qua khi có 'calibration_lut'."
              },
              "calibration_lut": {
                "label": "LUT hiệu chuẩn",
                "description": "Raster đã đồng đăng ký tùy chọn chứa hằng số hiệu chuẩn A theo từng ô, ghi đè 'calibration_constant'."
              },
              "incidence_angle": {
                "label": "Góc tới",
                "description": "Góc tới cục bộ tính bằng độ: một hằng số, hoặc một đường dẫn raster đã đồng đăng ký. Bắt buộc với 'sigma0' và 'gamma0'."
              },
              "input_units": {
                "label": "Đơn vị đầu vào",
                "description": "'dn' (mặc định), 'amplitude', 'intensity', hoặc 'db'. dn và amplitude được bình phương thành công suất; db được đưa về tuyến tính trước."
              },
              "output_units": {
                "label": "Đơn vị đầu ra",
                "description": "'linear' (mặc định) hoặc 'db'."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần hiệu chuẩn (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "apportion_polygon": {
            "name": "Phân bổ đa giác",
            "description": "Chuyển các thuộc tính số từ một lớp đa giác nguồn sang một lớp đa giác đích, phân bổ theo diện tích chồng lấp (tái tổng hợp dasymetric giữa các hệ thống vùng), giống ArcGIS Apportion Polygon.",
            "params": {
              "target": {
                "label": "Mục tiêu",
                "description": "Lớp đa giác đích (nhận các giá trị được phân bổ; các đối tượng và thuộc tính của nó được giữ nguyên)."
              },
              "source": {
                "label": "Nguồn",
                "description": "Lớp đa giác nguồn mang các giá trị cần phân phối."
              },
              "fields": {
                "label": "Trường",
                "description": "(Các) tên trường số trên lớp nguồn cần phân bổ, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (một bản sao của lớp đích kèm các cột đã phân bổ). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'area' (mặc định; chia theo diện tích chồng lấp) hoặc 'weight' (chia theo diện tích chồng lấp nhân với 'weight_field' của lớp đích)."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số của lớp đích dùng làm trọng số bổ sung khi method=weight."
              },
              "suffix": {
                "label": "Hậu tố",
                "description": "Hậu tố cho các cột đầu ra đã phân bổ. Mặc định '_app'."
              }
            }
          },
          "areal_interpolation": {
            "name": "Nội suy diện tích",
            "description": "Dự đoán các giá trị tổng hợp cho các đa giác đích từ các đa giác nguồn có địa lý khác, bằng cách khớp một bề mặt nền trơn rồi tích phân lại thay vì lấy trọng số theo diện tích (ArcGIS Areal Interpolation Layer To Polygons). apportion_polygon giả định đại lượng là đồng nhất bên trong mỗi đa giác nguồn — lỗi kinh điển của vấn đề đơn vị diện tích khả biến — và không cho sai số chuẩn; bộ kriging đi kèm hoàn toàn dựa trên điểm và không thể nhận các quan sát dạng đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đa giác nguồn mang trường đã đo."
              },
              "target": {
                "label": "Mục tiêu",
                "description": "Các đa giác đích cần dự đoán giá trị."
              },
              "field": {
                "label": "Trường",
                "description": "Trường giá trị dạng số trên các đa giác nguồn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các đa giác đích có bổ sung PREDICTED, PRED_STD_ERR và các chẩn đoán. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "field_type": {
                "label": "Kiểu trường",
                "description": "'count' (mặc định): một tổng có tính cộng, được co giãn lại để bảo toàn tổng của lớp nguồn. 'average': một giá trị trung bình có tính cường độ, được dự đoán trực tiếp mà không co giãn lại."
              },
              "discretization": {
                "label": "Rời rạc hóa",
                "description": "Số điểm bên trong xấp xỉ dùng để biểu diễn miền diện tích của mỗi đa giác (mặc định 25). Giá trị lớn hơn cho độ chính xác cao hơn nhưng chậm hơn nhiều."
              },
              "model": {
                "label": "Mô hình",
                "description": "Mô hình variogram: 'exponential' (mặc định), 'spherical', hoặc 'gaussian'."
              },
              "preserve_total": {
                "label": "Bảo toàn tổng",
                "description": "Co giãn lại các dự đoán dạng đếm sao cho tổng của lớp đích khớp với tổng của lớp nguồn (mặc định true cho 'count', luôn tắt với 'average'). Chỉ áp dụng khi các đối tượng đích phủ kín các đối tượng nguồn — hệ số đã áp dụng được báo cáo dưới tên 'mass_scale' để nhận biết trường hợp phủ một phần."
              }
            }
          },
          "attribute_uncertainty": {
            "name": "Độ bất định thuộc tính",
            "description": "Lan truyền sai số Monte-Carlo có hạt giống trên một thuộc tính không chắc chắn (giống ArcGIS Attribute Uncertainty): rút các hiện thực NORMAL/UNIFORM từ một trường sai số theo từng đối tượng hoặc cặp cận, rồi bổ sung các thống kê trung bình/độ lệch chuẩn/p5/p50/p95/CV.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector (hoặc bảng) đầu vào có thuộc tính không chắc chắn."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số chứa giá trị ước lượng (trung bình/tâm của phân bố) cho mỗi đối tượng."
              },
              "error_field": {
                "label": "Trường sai số",
                "description": "Trường số chứa độ bất định đối xứng: sai số chuẩn cho NORMAL, hoặc nửa độ rộng cho UNIFORM. Cung cấp trường này HOẶC cả lower_field/upper_field."
              },
              "lower_field": {
                "label": "Trường cận dưới",
                "description": "Trường số chứa cận dưới của giá trị. Dùng cùng với upper_field thay cho error_field."
              },
              "upper_field": {
                "label": "Trường cận trên",
                "description": "Trường số chứa cận trên của giá trị. Dùng cùng với lower_field thay cho error_field."
              },
              "distribution": {
                "label": "Phân phối",
                "description": "Phân bố sai số: NORMAL (mặc định) hoặc UNIFORM."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số hiện thực Monte-Carlo cho mỗi đối tượng (mặc định 1000)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên tất định (mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra có bổ sung các thống kê. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "band_collection_statistics": {
            "name": "Thống kê tập hợp kênh",
            "description": "Giá trị nhỏ nhất/lớn nhất/trung bình/độ lệch chuẩn theo từng kênh cùng với các ma trận hiệp phương sai và tương quan giữa các kênh của một chồng raster (giống ArcGIS Band Collection Statistics) — bản tóm tắt đa biến (tiền đề cho PCA / phân loại) mà bộ công cụ đi kèm còn thiếu; khác với cell_statistics theo từng điểm ảnh.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lớp) hoặc một danh sách phân tách bằng dấu phẩy các raster đã đồng đăng ký."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV tùy chọn cho báo cáo thống kê. Các ma trận luôn được trả về trong kết quả."
              },
              "detail": {
                "label": "Chi tiết",
                "description": "'detailed' (mặc định) bao gồm các ma trận hiệp phương sai/tương quan; 'brief' chỉ trả về thống kê theo từng kênh."
              }
            }
          },
          "bivariate_spatial_association": {
            "name": "Liên kết không gian hai biến",
            "description": "Thống kê L của Lee ở mức toàn cục và cục bộ, đo nơi hai biến liên tục đồng biến thiên theo không gian, với giá trị p từ kiểm định hoán vị có hạt giống và một lớp Cao-Cao/Cao-Thấp/Thấp-Cao/Thấp-Thấp cho mỗi đối tượng — giống ArcGIS Bivariate Spatial Association. Là đối tác cho trường liên tục của colocation_analysis.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào có hai trường số."
              },
              "x_field": {
                "label": "Trường X",
                "description": "Trường biến số thứ nhất."
              },
              "y_field": {
                "label": "Trường Y",
                "description": "Trường biến số thứ hai."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đầu ra có các trường L cục bộ, giá trị p và lớp phân loại. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số lân cận gần nhất cho các trọng số không gian (mặc định 8)."
              },
              "permutations": {
                "label": "Số hoán vị",
                "description": "Số hoán vị cho kiểm định ý nghĩa (mặc định 199; 0 để tắt)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên của phép hoán vị (mặc định 1), để kết quả có thể tái lập."
              }
            }
          },
          "block_statistics": {
            "name": "Thống kê theo khối",
            "description": "Phân chia raster thành các khối không chồng lấp, rút gọn mỗi khối theo một thống kê và ghi giá trị đó trở lại mọi ô trong khối ở độ phân giải đầu vào (ArcGIS Block Statistics). Bổ sung cho focal_statistics (cửa sổ chồng lấp), zonal_statistics (theo lớp vùng) và cell_statistics (trên một chồng ảnh) đã có; khác với aggregate_raster đi kèm, công cụ này giữ nguyên kích thước ô, nên đầu vào - trung bình khối cho ra một bề mặt phần dư cục bộ, và bổ sung các thống kê phân loại đa số/thiểu số/trung vị/độ đa dạng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "Một trong các giá trị mean (mặc định), majority, maximum, median, minimum, minority, range, std, sum, variety."
              },
              "neighborhood": {
                "label": "Lân cận",
                "description": "Hình dạng khối: rectangle (mặc định), circle, annulus, hoặc wedge."
              },
              "size": {
                "label": "Kích thước",
                "description": "Kích thước khối tính bằng ô: 'width,height' cho rectangle (mặc định '3,3'), 'radius' cho circle/wedge, hoặc 'inner,outer' cho annulus."
              },
              "start_angle": {
                "label": "Góc bắt đầu",
                "description": "Góc bắt đầu của hình quạt tính bằng độ ngược chiều kim đồng hồ từ hướng đông (mặc định 0)."
              },
              "end_angle": {
                "label": "Góc kết thúc",
                "description": "Góc kết thúc của hình quạt tính bằng độ ngược chiều kim đồng hồ từ hướng đông (mặc định 90)."
              },
              "ignore_nodata": {
                "label": "Bỏ qua NoData",
                "description": "Nếu true (mặc định), các khối chỉ được tính từ các ô hợp lệ; nếu false, chỉ cần một ô no-data là cả khối thành no-data."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "boundary_clean": {
            "name": "Làm sạch ranh giới",
            "description": "Làm trơn ranh giới các vùng của raster phân loại và loại bỏ nhiễu đốm bằng lọc đa số hoặc làm sạch ranh giới theo kiểu mở rộng/thu hẹp, bước dọn dẹp tiêu chuẩn trước khi chuyển thành đa giác — giống ArcGIS Boundary Clean / Majority Filter.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster phân loại (giá trị nguyên) đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'majority' (khử nhiễu đốm theo đa số lân cận; mặc định) hoặc 'expand_shrink' (làm trơn kiểu Boundary Clean)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Kiểu liên thông lân cận: 4 (rook) hoặc 8 (queen; mặc định)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "chỉ ở chế độ majority: 'majority' (đa số tuyệt đối của các lân cận; mặc định) hoặc 'half' (ít nhất một nửa)."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lượt chạy (mặc định 1)."
              },
              "sort": {
                "label": "Sắp xếp",
                "description": "chỉ ở chế độ expand_shrink: thứ tự ưu tiên vùng theo số ô — 'descending' (vùng lớn hơn thắng; mặc định), 'ascending' (vùng nhỏ hơn thắng), hoặc 'none'."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "buffer_3d": {
            "name": "Vùng đệm 3D",
            "description": "Tạo vùng đệm cho các điểm và đường 3D thành hình học khối (hình cầu và hình viên nang) được xuất ra dưới dạng bề mặt tam giác hóa, giống ArcGIS Buffer 3D.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm hoặc polyline 3D đầu vào (thiếu Z sẽ được coi là 0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Bán kính vùng đệm theo đơn vị bản đồ."
              },
              "distance_field": {
                "label": "Trường khoảng cách",
                "description": "Trường bán kính theo từng đối tượng tùy chọn, ghi đè 'distance'."
              },
              "shape": {
                "label": "Hình dạng",
                "description": "round (mặc định; đầu mút dạng bán cầu) hoặc flat (hình trụ với đầu mút phẳng)."
              },
              "quality": {
                "label": "Chất lượng",
                "description": "Độ phân giải chia lưới: số đoạn quanh chu vi (mặc định 12, tối thiểu 4, tối đa 64)."
              }
            }
          },
          "buffer_vector": {
            "name": "Vùng đệm vector",
            "description": "Mở rộng hình học theo một khoảng cách chỉ định, tạo các vùng đệm đa giác với kiểu đầu mút/kiểu nối có thể tùy chỉnh. Tùy chọn hòa tan sẽ gộp các vùng đệm chồng lấp thành các đa giác thống nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Khoảng cách vùng đệm theo đơn vị bản đồ."
              },
              "quadrant_segments": {
                "label": "Số đoạn mỗi phần tư",
                "description": "Độ phân giải cung tính bằng số đoạn trên mỗi góc phần tư; mặc định là 8."
              },
              "cap_style": {
                "label": "Kiểu đầu mút",
                "description": "Kiểu đầu mút của đường: round, flat, hoặc square."
              },
              "join_style": {
                "label": "Kiểu nối",
                "description": "Kiểu nối góc: round, bevel, hoặc mitre."
              },
              "mitre_limit": {
                "label": "Giới hạn góc nhọn",
                "description": "Giới hạn nối kiểu mitre dùng khi join_style=mitre; mặc định là 5.0."
              },
              "dissolve": {
                "label": "Hòa tan",
                "description": "Hòa tan các vùng đệm chồng lấp thành một đa giác thống nhất; mặc định là false."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra."
              }
            }
          },
          "build_balanced_zones": {
            "name": "Xây dựng vùng cân bằng",
            "description": "Gom các đa giác liền kề thành một số lượng vùng liên thông mục tiêu, cân bằng về số đối tượng, tổng một thuộc tính hoặc tính đồng nhất thuộc tính, bằng phân hoạch cây khung SKATER.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác đầu vào, định dạng được tự phát hiện (hoặc một handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "zones": {
                "label": "Vùng",
                "description": "Số vùng mục tiêu cần tạo."
              },
              "criterion": {
                "label": "Tiêu chí",
                "description": "Mục tiêu cân bằng: 'homogeneity' (mặc định), 'equal_count', hoặc 'equal_sum' (của trường đầu tiên)."
              },
              "fields": {
                "label": "Trường",
                "description": "(Các) trường phân tích dạng số phân tách bằng dấu phẩy. Bắt buộc với 'homogeneity' và 'equal_sum'; quyết định trọng số cạnh của cây khung."
              },
              "contiguity": {
                "label": "Tính liền kề",
                "description": "Quy tắc liền kề: 'rook' (chung cạnh, mặc định) hoặc 'queen' (chung cạnh hoặc chung đỉnh)."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Khoảng cách tối đa để hai đoạn ranh giới được coi là chung nhau (rook). Mặc định 1e-6."
              }
            }
          },
          "build_seamlines": {
            "name": "Xây dựng đường nối ảnh",
            "description": "Cho một tập các raster chồng lấp (và các đường bao tùy chọn), tính xem mỗi ảnh nên được cắt ở đâu để ảnh ghép nối theo một đường ghép ít lộ nhất, xuất ra một đa giác đường ghép không chồng lấp cho mỗi ảnh thông qua phép gán Voronoi, theo thứ tự ưu tiên, theo bức xạ hoặc nhận biết biên. Giống ArcGIS Build Seamlines.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các đường dẫn raster cần ghép, phân tách bằng dấu phẩy/chấm phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đa giác đường ghép đầu ra (mỗi raster đầu vào một đối tượng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "footprints": {
                "label": "Đường bao",
                "description": "Lớp đa giác tùy chọn cho biết phạm vi hợp lệ của mỗi raster, theo thứ tự đầu vào. Được suy ra từ dữ liệu hợp lệ khi bỏ qua."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'voronoi' (mặc định), 'order', 'radiometry' hoặc 'edge_detection'."
              },
              "sort_ascending": {
                "label": "Sắp xếp tăng dần",
                "description": "Với phương pháp 'order': true (mặc định) ưu tiên các raster trước, false ưu tiên các raster sau."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô phân tích (mặc định: kích thước ô nhỏ nhất trong các đầu vào)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh (đánh số từ 1) dùng cho các phương pháp theo bức xạ (mặc định 1)."
              },
              "min_region_size": {
                "label": "Kích thước vùng tối thiểu",
                "description": "Gán lại cho ảnh lân cận những vùng đã gán nhỏ hơn số ô này (mặc định 0, tức là giữ tất cả)."
              },
              "blend_width": {
                "label": "Chiều rộng pha trộn",
                "description": "Chiều rộng làm mờ biên theo đơn vị bản đồ, được ghi thành một thuộc tính cho bước ghép ảnh sau đó (mặc định 0)."
              },
              "blend_type": {
                "label": "Kiểu pha trộn",
                "description": "'both' (mặc định), 'inside' hoặc 'outside'; được ghi thành một thuộc tính."
              }
            }
          },
          "calculate_adjacent_fields": {
            "name": "Tính trường liền kề",
            "description": "Điền tám trường tờ lân cận theo hướng (N, NE, E, SE, S, SW, W, NW) trên mỗi ô của lưới chỉ mục loạt bản đồ bằng tên của trang kề bên, dùng cho nhãn lề 'tiếp tục ở tờ …' — giống ArcGIS Calculate Adjacent Fields.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lưới chỉ mục loạt bản đồ dạng đa giác đầu vào (ví dụ đầu ra của grid_index_features)."
              },
              "page_name_field": {
                "label": "Trường tên trang",
                "description": "Trường có giá trị dùng để gán nhãn cho mỗi trang (được ghi vào các trường định hướng của các tờ lân cận)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đa giác đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "include_diagonal": {
                "label": "Bao gồm đường chéo",
                "description": "Cũng điền bốn trường chéo góc (NE, SE, SW, NW) từ các ô tiếp giáp ở góc. Mặc định true."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Lượng tử hóa các đỉnh về một lưới có kích thước này (đơn vị hệ tọa độ) trước khi đối sánh ranh giới. Mặc định 0 (dùng tọa độ chính xác)."
              }
            }
          },
          "calculate_central_meridian_and_parallels": {
            "name": "Tính kinh tuyến trung tâm và vĩ tuyến chuẩn",
            "description": "Tính kinh tuyến trung tâm và hai vĩ tuyến chuẩn cho từng đối tượng từ phạm vi của mỗi đối tượng, dùng cho loạt bản đồ và trang atlas, giống ArcGIS Calculate Central Meridian And Parallels.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng đầu vào ở tọa độ địa lý (kinh độ/vĩ độ), thường là lưới trang từ grid_index_features."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "field": {
                "label": "Trường",
                "description": "Tên của trường kinh tuyến trung tâm cần ghi (mặc định 'central_meridian')."
              },
              "standard_offset": {
                "label": "Độ lệch chuẩn",
                "description": "Tỉ lệ của biên độ vĩ độ dùng để lùi mỗi vĩ tuyến chuẩn vào phía trong so với mép của đối tượng (mặc định 0.1667, quy tắc 1/6 của Esri). Phải nằm trong [0, 0.5)."
              }
            }
          },
          "calculate_composite_index": {
            "name": "Tính chỉ số tổng hợp",
            "description": "Kết hợp nhiều thuộc tính số thành một chỉ số tổng hợp (giống ArcGIS Calculate Composite Index): co giãn theo từng biến (min-max/z-score/phân vị) với tùy chọn đảo ngược, kết hợp có trọng số (trung bình/tổng/trung bình nhân) và co giãn lại đầu ra — phiên bản phía vector của fuzzy_overlay.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector (hoặc bảng) đầu vào có các trường biến dạng số."
              },
              "fields": {
                "label": "Trường",
                "description": "Các trường biến phân tách bằng dấu phẩy; thêm ':reverse' vào một trường mà giá trị cao của nó phải làm giảm chỉ số (ví dụ 'income:reverse,unemployment')."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra có bổ sung các trường chỉ số. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "scaling": {
                "label": "Co giãn",
                "description": "Co giãn theo từng biến: 'minmax' (mặc định), 'zscore', 'percentile', hoặc 'none'."
              },
              "weights": {
                "label": "Trọng số",
                "description": "Các trọng số phân tách bằng dấu phẩy tương ứng với 'fields' (mặc định: trọng số bằng nhau)."
              },
              "combine": {
                "label": "Kết hợp",
                "description": "Cách kết hợp các biến đã co giãn: 'mean' (mặc định), 'sum', hoặc 'geometric_mean'."
              },
              "output_range": {
                "label": "Khoảng đầu ra",
                "description": "Co giãn lại chỉ số tổng hợp: 'minmax' (0–1, mặc định), 'zero_to_100', 'zscore', hoặc 'none'."
              }
            }
          },
          "calculate_distance_band": {
            "name": "Tính dải khoảng cách",
            "description": "Báo cáo khoảng cách nhỏ nhất, trung bình và lớn nhất mà tại đó mọi đối tượng có ít nhất N lân cận (giống ArcGIS Calculate Distance Band from Neighbor Count) — chẩn đoán ngưỡng đảm bảo không đối tượng nào bị bỏ lại với không lân cận trước khi thực hiện thống kê không gian dựa trên khoảng cách. generate_spatial_weights_matrix đi kèm xây dựng ma trận nhưng không bao giờ báo cáo dải khoảng cách này.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm/đối tượng đầu vào (hệ tọa độ phẳng; khoảng cách theo đơn vị của hệ đó)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số lân cận k (>= 1). Mặc định 1."
              },
              "distance_method": {
                "label": "Phương pháp khoảng cách",
                "description": "'euclidean' (mặc định) hoặc 'manhattan'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV tùy chọn cho bảng feature_id,kth_neighbor_distance."
              }
            }
          },
          "calculate_end_time": {
            "name": "Tính thời gian kết thúc",
            "description": "Điền trường thời gian kết thúc từ thời gian bắt đầu của bản ghi kế tiếp trong mỗi nhóm thực thể, biến các quan sát tức thời thành các bản ghi có khoảng thời gian (ArcGIS Calculate End Time). transform_fields thực hiện biến đổi theo từng giá trị và summary_statistics tổng hợp theo nhóm, nhưng không công cụ nào thực hiện việc điền theo thời gian có thứ tự hàng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector hoặc bảng đầu vào."
              },
              "start_field": {
                "label": "Trường bắt đầu",
                "description": "Trường dấu thời gian: một giá trị epoch dạng số, hoặc một chuỗi ngày/ngày-giờ theo ISO-8601."
              },
              "end_field": {
                "label": "Trường kết thúc",
                "description": "Trường nhận thời điểm kết thúc (mặc định 'END_TIME'). Được tạo mới nếu chưa có, bị ghi đè nếu đã có."
              },
              "id_fields": {
                "label": "Trường ID",
                "description": "Các trường phân nhóm phân tách bằng dấu phẩy hoặc dấu chấm phẩy. Thời điểm kết thúc chỉ được suy ra trong phạm vi một nhóm, không bao giờ vượt qua ranh giới nhóm."
              },
              "last_record": {
                "label": "Bản ghi cuối",
                "description": "Nội dung cần ghi cho hàng cuối cùng của mỗi nhóm: 'null' (mặc định), 'same_as_start', hoặc 'duration' (thời điểm bắt đầu + default_duration)."
              },
              "default_duration": {
                "label": "Thời lượng mặc định",
                "description": "Số giây được cộng vào thời điểm bắt đầu khi last_record là 'duration'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "calculate_grid_convergence_angle": {
            "name": "Tính góc hội tụ lưới",
            "description": "Tính cho từng đối tượng góc hội tụ lưới giữa bắc lưới và bắc thực từ kinh độ/vĩ độ trọng tâm và một kinh tuyến trung tâm (mặc định là kinh tuyến trung tâm UTM của chính đối tượng), ghi vào một trường để xoay ký hiệu/nhãn đúng trên các bản đồ đã chiếu — giống ArcGIS Calculate Grid Convergence Angle. Theo quy ước địa lý (thuận chiều kim đồng hồ từ hướng bắc) hoặc số học (ngược chiều kim đồng hồ từ hướng đông). Thuần toán học, không dùng PROJ; không liên quan đến chỉ số địa hình convergence_index đi kèm. Hình học được đọc dưới dạng độ kinh/vĩ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (kiểu hình học bất kỳ) ở tọa độ địa lý (kinh độ/vĩ độ tính bằng độ, EPSG:4326)."
              },
              "angle_field": {
                "label": "Trường góc",
                "description": "Tên của trường số thực chứa góc hội tụ tính bằng độ. Mặc định 'GRID_CONV'."
              },
              "angle_type": {
                "label": "Kiểu góc",
                "description": "Quy ước góc: 'geographic' (độ theo chiều kim đồng hồ từ hướng bắc, dương về phía đông) hoặc 'arithmetic' (độ ngược chiều kim đồng hồ từ hướng đông, bằng 90 − geographic). Mặc định 'geographic'."
              },
              "central_meridian": {
                "label": "Kinh tuyến trung tâm",
                "description": "Kinh độ của kinh tuyến trung tâm tính bằng độ. Nếu bỏ qua, mỗi đối tượng dùng kinh tuyến trung tâm của múi UTM riêng suy ra từ kinh độ của nó."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "calculate_missing_z_values": {
            "name": "Tính giá trị Z thiếu",
            "description": "Điền các giá trị Z giữ chỗ hoặc bị thiếu dọc theo các đối tượng 3D bằng cách nội suy từ các giá trị Z hợp lệ ở hai bên, giống ArcGIS Calculate Missing Z Values.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào có các đỉnh 3D."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "placeholder": {
                "label": "Giá trị thay thế",
                "description": "Giá trị đánh dấu Z bị thiếu (ví dụ -9999). Các đỉnh hoàn toàn không có Z luôn được coi là thiếu."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp lấp: 'linear' (mặc định; nội suy theo khoảng cách dọc đối tượng) hoặc 'nearest'."
              },
              "extrapolate": {
                "label": "Ngoại suy",
                "description": "Lấp các khoảng trống ở đầu/cuối bằng cách mở rộng đỉnh hợp lệ gần nhất (mặc định false; các đỉnh chưa được lấp sẽ được đếm thay vì lấp)."
              }
            }
          },
          "calculate_motion_statistics": {
            "name": "Tính thống kê chuyển động",
            "description": "Chú giải các điểm quỹ đạo có dấu thời gian bằng các thống kê chuyển động — tốc độ, gia tốc, góc phương vị, khoảng cách đoạn và tích lũy, thời gian trôi qua và cờ dừng — nhóm theo quỹ đạo và sắp xếp theo thời gian, giống ArcGIS Calculate Motion Statistics.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa các quan sát có dấu thời gian."
              },
              "track_field": {
                "label": "Trường quỹ đạo",
                "description": "Trường xác định mỗi vệt di chuyển/đối tượng chuyển động."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: số giây dạng số hoặc một dấu thời gian ISO-8601."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector điểm đầu ra (các thuộc tính gốc + các trường chuyển động). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "window": {
                "label": "Cửa sổ",
                "description": "Số điểm phía trước dùng cho 'avg_speed' đã làm trơn (mặc định 1 = tức thời)."
              },
              "idle_distance": {
                "label": "Khoảng cách dừng",
                "description": "Bán kính đứng yên: một điểm được coi là đứng yên khi đối tượng chuyển động đi không quá khoảng cách này trong idle_duration giây gần nhất. Mặc định 0 (tắt phát hiện đứng yên)."
              },
              "idle_duration": {
                "label": "Thời lượng dừng",
                "description": "Cửa sổ nhìn lại (giây) để phát hiện trạng thái đứng yên. Mặc định 60."
              }
            }
          },
          "calculate_polygon_main_angle": {
            "name": "Tính góc chính đa giác",
            "description": "Ghi hướng chủ đạo của mỗi đa giác (hướng cạnh dài của hình chữ nhật bao có diện tích nhỏ nhất, theo thuật toán rotating calipers) vào một trường góc — giống ArcGIS Calculate Polygon Main Angle. Là hướng vector theo từng đa giác mà patch_orientation đi kèm (chỉ dành cho raster) còn thiếu; dùng cho xoay ký hiệu/nhãn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác đầu ra có bổ sung trường góc. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "angle_field": {
                "label": "Trường góc",
                "description": "Tên của trường góc cần ghi (mặc định 'MainAngle')."
              },
              "convention": {
                "label": "Quy ước",
                "description": "'arithmetic' (ngược chiều kim đồng hồ từ hướng đông; mặc định), 'geographic' (theo chiều kim đồng hồ từ hướng bắc), hoặc 'graphic' (theo chiều kim đồng hồ từ hướng đông)."
              }
            }
          },
          "calculate_rates": {
            "name": "Tính tỉ lệ",
            "description": "Tính các tỷ lệ đã làm trơn từ các trường số đếm và dân số (giống ArcGIS Calculate Rates): tỷ lệ thô, Bayes thực nghiệm toàn cục Marshall, hoặc Bayes thực nghiệm không gian trên k lân cận gần nhất — bước ổn định tiêu chuẩn trước khi phân tích điểm nóng về tỷ lệ bệnh tật/tội phạm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác hoặc điểm đầu vào có các trường số lượng và dân số."
              },
              "count_field": {
                "label": "Trường đếm",
                "description": "Trường chứa số lượng sự kiện (tử số)."
              },
              "population_field": {
                "label": "Trường dân số",
                "description": "Trường chứa dân số có nguy cơ (mẫu số)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đầu ra có bổ sung các trường tỉ suất. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'crude', 'eb_global' (mặc định), hoặc 'eb_spatial'."
              },
              "per": {
                "label": "Trên mỗi",
                "description": "Hệ số nhân tỉ suất, ví dụ 100000 cho tỉ suất trên 100 nghìn (mặc định 100000)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "chỉ với eb_spatial: số lân cận gần nhất dùng cho tỉ suất tham chiếu cục bộ (mặc định 8)."
              }
            }
          },
          "calculate_transformation_errors": {
            "name": "Tính sai số biến đổi",
            "description": "Khớp một phép biến đổi đồng dạng/affine/chiếu từ các liên kết dịch chuyển và báo cáo sai số phần dư của từng liên kết cùng RMSE tổng thể, để có thể tìm và loại bỏ các điểm khống chế xấu trước khi biến đổi. Giống ArcGIS Calculate Transformation Errors.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đường nối chuyển dịch: đỉnh đầu tiên là điểm nguồn (từ), đỉnh cuối cùng là điểm đích (tới)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho bảng đường nối có bổ sung các trường phần dư. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'affine' (mặc định, 6 tham số), 'similarity' (4) hoặc 'projective' (8)."
              },
              "keep_geometry": {
                "label": "Giữ hình học",
                "description": "Giữ hình học của mỗi đường nối trong đầu ra (mặc định true). Đặt false để có một bảng thuần túy."
              }
            }
          },
          "calculate_transit_service_frequency": {
            "name": "Tính tần suất phục vụ giao thông công cộng",
            "description": "Tần suất dịch vụ vận tải công cộng GTFS theo cửa sổ: với một ngày phục vụ (qua calendar/calendar_dates) và một cửa sổ thời gian, đếm số chuyến phục vụ mỗi điểm dừng hoặc đường tuyến và báo cáo số chuyến mỗi giờ, giống ArcGIS Calculate Transit Service Frequency.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tới một thư mục nguồn dữ liệu GTFS đã giải nén."
              },
              "target": {
                "label": "Mục tiêu",
                "description": "'stops' (mỗi điểm dừng một điểm, mặc định) hoặc 'lines' (mỗi tuyến một polyline)."
              },
              "date": {
                "label": "Ngày",
                "description": "Ngày phục vụ dạng YYYYMMDD, được xác định qua calendar.txt/calendar_dates.txt. Nếu bỏ qua, mọi dịch vụ đều được tính."
              },
              "start_time": {
                "label": "Thời gian bắt đầu",
                "description": "Thời điểm bắt đầu cửa sổ dạng HH:MM hoặc HH:MM:SS (thời gian GTFS có thể vượt quá 24:00). Nếu bỏ qua, cả ngày sẽ được tính."
              },
              "duration_minutes": {
                "label": "Thời lượng (phút)",
                "description": "Độ dài cửa sổ tính bằng phút (dùng kèm start_time; đồng thời xác định mẫu số theo giờ)."
              },
              "count": {
                "label": "Số lượng",
                "description": "'departures' (mặc định) hoặc 'arrivals' — trường thời gian dừng nào được đếm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "calculate_utm_zone": {
            "name": "Tính múi UTM",
            "description": "Tính múi UTM tối ưu và mã EPSG WGS84 cho từng đối tượng từ kinh độ/vĩ độ trọng tâm của nó, thêm một trường múi (1–60) và một trường EPSG (326##/327##) — dùng cho loạt bản đồ có phép chiếu thích ứng, giống ArcGIS Calculate UTM Zone. Thuần toán học với các ngoại lệ Na Uy/Svalbard; không dùng PROJ. Hình học được đọc dưới dạng độ kinh/vĩ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (kiểu hình học bất kỳ) ở tọa độ địa lý (kinh độ/vĩ độ tính bằng độ, EPSG:4326)."
              },
              "zone_field": {
                "label": "Trường vùng",
                "description": "Tên của trường số nguyên chứa số hiệu múi UTM (1–60). Mặc định 'utm_zone'."
              },
              "epsg_field": {
                "label": "Trường EPSG",
                "description": "Tên của trường số nguyên chứa mã EPSG UTM theo WGS84 (326## cho bắc bán cầu, 327## cho nam bán cầu). Mặc định 'utm_epsg'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "cartogram": {
            "name": "Bản đồ biến dạng",
            "description": "Làm biến dạng các đa giác sao cho diện tích tỷ lệ với một giá trị thuộc tính: không liền kề (co giãn mỗi đa giác quanh trọng tâm của nó) hoặc Dorling (các hình tròn tỷ lệ có loại bỏ chồng lấp).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào, định dạng được tự động nhận diện (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số mà diện tích của mỗi đối tượng phải tỉ lệ thuận với giá trị của nó."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'non_contiguous' (mặc định; co giãn các đa giác tại chỗ) hoặc 'dorling' (các hình tròn tỉ lệ)."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp khử chồng lấp của phương pháp Dorling (mặc định 100). Bị bỏ qua với non_contiguous."
              }
            }
          },
          "causal_inference_analysis": {
            "name": "Phân tích suy luận nhân quả",
            "description": "Ước lượng hiệu ứng nhân quả của một can thiệp nhị phân lên một kết quả thông qua ghép cặp điểm xu hướng, trọng số nghịch đảo xác suất hoặc hiệu chỉnh hồi quy, với khoảng tin cậy bootstrap có hạt giống và một bảng cân bằng hiệp biến cho từng biến gây nhiễu trước/sau hiệu chỉnh (giống ArcGIS Causal Inference Analysis).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào."
              },
              "outcome_field": {
                "label": "Trường kết quả",
                "description": "Trường kết quả (biến phụ thuộc) dạng số."
              },
              "treatment_field": {
                "label": "Trường can thiệp",
                "description": "Trường can thiệp dạng nhị phân (0/1, hoặc Boole). Phiên bản này không hỗ trợ can thiệp liên tục."
              },
              "confounding_fields": {
                "label": "Trường gây nhiễu",
                "description": "(Các) trường gây nhiễu dạng số phân tách bằng dấu phẩy cần hiệu chỉnh."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'ps_matching' (mặc định, ghép cặp theo lân cận gần nhất có ngưỡng caliper trên điểm xu hướng), 'ipw' (lấy trọng số nghịch đảo xác suất đã ổn định hóa), hoặc 'regression_adjustment' (kết quả ~ can thiệp + các biến gây nhiễu)."
              },
              "add_spatial_confounders": {
                "label": "Thêm yếu tố gây nhiễu không gian",
                "description": "Nếu true, mở rộng tập biến gây nhiễu bằng tọa độ x/y của mỗi đối tượng cộng với trung bình theo k lân cận gần nhất của từng biến gây nhiễu (mặc định false)."
              },
              "balance_threshold": {
                "label": "Ngưỡng cân bằng",
                "description": "Ngưỡng chênh lệch trung bình chuẩn hóa cho phép kiểm tra cân bằng sau hiệu chỉnh (mặc định 0.1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (bản sao đầu vào + các cột điểm xu hướng / trọng số / mã ghép cặp). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống nguyên cho khoảng tin cậy bootstrap tất định (mặc định 42)."
              }
            }
          },
          "cell_position_statistics": {
            "name": "Thống kê vị trí ô",
            "description": "Thống kê vị trí và thứ hạng theo từng ô trên một chồng các raster đã căn chỉnh (ArcGIS Highest Position, Lowest Position, Popularity và Rank): lớp nào giữ giá trị cực trị, giá trị xuất hiện một số lần cho trước, hoặc giá trị nhỏ thứ n. cell_statistics rút gọn một chồng ảnh thành một giá trị và không bao giờ báo cáo giá trị đó đến từ lớp nào, còn find_argument_statistics đi kèm làm việc dọc theo trục đối số của một raster đa kênh mà không có ngữ nghĩa chọn theo mức phổ biến/thứ hạng.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lớp) hoặc một danh sách phân tách bằng dấu phẩy các raster đã đồng đăng ký."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "'highest_position' (mặc định), 'lowest_position', 'popularity', hoặc 'rank'."
              },
              "selector": {
                "label": "Bộ chọn",
                "description": "Bắt buộc với 'popularity' và 'rank': một đường dẫn raster đã đồng đăng ký, hoặc một số hằng, cho biết số lần xuất hiện theo từng ô (popularity) hoặc thứ hạng (đánh số từ 1) cần chọn."
              },
              "ignore_nodata": {
                "label": "Bỏ qua NoData",
                "description": "Bỏ qua các quan sát no-data ở mỗi ô (mặc định true). Khi false, chỉ cần một quan sát no-data là ô đó thành no-data."
              },
              "process_as_multiband": {
                "label": "Xử lý dạng đa kênh",
                "description": "'single_band' (mặc định): mọi kênh của mọi đầu vào là một lớp của một chồng duy nhất. 'multi_band': kênh i của mọi đầu vào tạo thành một chồng riêng, cho ra kết quả đa kênh."
              }
            }
          },
          "cell_records_to_sectors": {
            "name": "Bản ghi ô thành cung",
            "description": "Xây dựng hình học vùng phủ ăng-ten từ các điểm trạm phát sóng: các đa giác hình quạt hoặc các đường phân giác sector từ góc phương vị, độ rộng chùm và bán kính của từng trạm — giống ArcGIS Cell Site Records To Feature Class / Generate Sector Lines.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa các ăng-ten/trạm phát."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "output_type": {
                "label": "Kiểu đầu ra",
                "description": "Hình học cần xuất: 'wedge' (các đa giác vùng phủ, mặc định) hoặc 'line' (các đường phân giác của cung)."
              },
              "azimuth_field": {
                "label": "Trường phương vị",
                "description": "Trường chứa phương vị của mỗi ăng-ten (độ la bàn, 0 = bắc, theo chiều kim đồng hồ). Sẽ dùng 'azimuth' nếu thiếu."
              },
              "beamwidth_field": {
                "label": "Trường độ rộng chùm",
                "description": "Trường chứa độ rộng búp sóng của mỗi ăng-ten tính bằng độ. Sẽ dùng 'beamwidth' nếu thiếu."
              },
              "radius_field": {
                "label": "Trường bán kính",
                "description": "Trường chứa bán kính phủ sóng của mỗi ăng-ten theo đơn vị hệ tọa độ. Sẽ dùng 'radius' nếu thiếu."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Phương vị mặc định tính bằng độ la bàn khi không chỉ định trường / giá trị bị thiếu. Mặc định 0."
              },
              "beamwidth": {
                "label": "Độ rộng chùm",
                "description": "Độ rộng búp sóng mặc định tính bằng độ (0 < bw ≤ 360; ≥ 360 = vô hướng). Mặc định 65."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính phủ sóng mặc định theo đơn vị hệ tọa độ (phải dương). Mặc định 1000."
              },
              "segments": {
                "label": "Phân đoạn",
                "description": "Số đoạn thẳng dùng để xấp xỉ mỗi cung của hình quạt (≥ 1). Mặc định 16."
              }
            }
          },
          "cell_statistics": {
            "name": "Thống kê ô",
            "description": "Thống kê theo từng điểm ảnh trên một chồng các raster đã căn chỉnh (giống ArcGIS Cell Statistics): trung bình, đa số, lớn nhất, trung vị, nhỏ nhất, thiểu số, phân vị, khoảng biến thiên, độ lệch chuẩn, tổng hoặc độ đa dạng — bộ rút gọn đa raster cục bộ mà sum_overlay/weighted_sum đi kèm (chỉ tính tổng) và các công cụ lân cận/theo vùng không cung cấp.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lớp) hoặc một danh sách phân tách bằng dấu phẩy các raster đã đồng đăng ký."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster một kênh đầu ra chứa giá trị đã rút gọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "'mean' (mặc định), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum' hoặc 'variety'."
              },
              "ignore_nodata": {
                "label": "Bỏ qua NoData",
                "description": "Bỏ qua các quan sát no-data ở mỗi ô (mặc định true). Khi false, chỉ cần một quan sát no-data là ô đó thành no-data."
              },
              "percentile_value": {
                "label": "Giá trị phân vị",
                "description": "Phân vị trong [0, 100] cho thống kê 'percentile' (mặc định 50 = trung vị)."
              }
            }
          },
          "central_feature": {
            "name": "Đối tượng trung tâm / Hướng trung bình tuyến tính",
            "description": "Đối tượng trung tâm (đối tượng đầu vào có tổng khoảng cách đến tất cả các đối tượng khác nhỏ nhất) hoặc trung bình hướng tuyến tính (góc phương vị trung bình, phương sai vòng và chiều dài trung bình của các đối tượng đường) — hai thành viên của nhóm Đo lường phân bố địa lý mà directional_distribution còn thiếu (ArcGIS Central Feature / Linear Directional Mean).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (các điểm cho central_feature; các đường cho linear_directional_mean)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "'central_feature' (mặc định) hoặc 'linear_directional_mean'."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số tùy chọn dùng làm trọng số cho mỗi đối tượng (chỉ với central_feature)."
              },
              "case_field": {
                "label": "Trường trường hợp",
                "description": "Trường tùy chọn để nhóm các đối tượng; mỗi giá trị riêng biệt cho một kết quả."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Độ đo khoảng cách cho central_feature: 'euclidean' (mặc định) hoặc 'manhattan'."
              },
              "orientation_only": {
                "label": "Chỉ hướng",
                "description": "Coi các đường là vô hướng (hướng lấy theo mod 180°) cho linear_directional_mean. Mặc định false."
              }
            }
          },
          "change_point_detection": {
            "name": "Phát hiện điểm thay đổi",
            "description": "Phát hiện các thay đổi đột ngột trong chuỗi thời gian tại mỗi vị trí của một khối không gian-thời gian H3 (giống ArcGIS Change Point Detection): phân đoạn nhị phân trên hàm chi phí dịch chuyển trung bình hoặc dịch chuyển độ dốc với mức phạt theo độ nhạy (hoặc một số điểm thay đổi cố định), báo cáo cho mỗi ô số lần thay đổi, năm của thay đổi lớn nhất và các trung bình theo đoạn. Là phép phân đoạn thời gian mà change_vector_analysis hai thời điểm và các kiểm định Mann-Kendall đơn điệu không thể làm được.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào chứa các sự kiện có dấu thời gian (kinh độ/vĩ độ)."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: một số hoặc một dấu thời gian ISO-8601."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác H3 đầu ra với các thuộc tính điểm thay đổi. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số cần tổng hợp trong mỗi nhóm (mặc định: số lượng điểm)."
              },
              "change_type": {
                "label": "Kiểu thay đổi",
                "description": "'mean' (dịch chuyển mức; mặc định) hoặc 'slope' (dịch chuyển xu thế)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'auto' (dựa trên mức phạt, mặc định) hoặc 'defined' (đúng num_change_points)."
              },
              "num_change_points": {
                "label": "Số điểm thay đổi",
                "description": "phương pháp defined: số điểm thay đổi cần tìm tại mỗi vị trí (mặc định 1)."
              },
              "sensitivity": {
                "label": "Độ nhạy",
                "description": "phương pháp auto: hệ số phạt; giá trị cao hơn = ít điểm thay đổi hơn (mặc định 1.0)."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Độ rộng của một bước thời gian theo đơn vị của time_field (mặc định 1)."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 đến 15 (mặc định 7)."
              }
            }
          },
          "classification_accuracy_assessment": {
            "name": "Đánh giá độ chính xác phân loại",
            "description": "Chấm điểm một raster đã phân loại (hoặc các điểm đã mang lớp dự đoán) so với các điểm tham chiếu được gán nhãn thực địa, tạo ra ma trận nhầm lẫn, độ chính xác tổng thể, độ chính xác của người sản xuất/người sử dụng theo từng lớp và hệ số kappa của Cohen — giống ArcGIS Compute Confusion Matrix.",
            "params": {
              "points": {
                "label": "Điểm",
                "description": "Lớp điểm tham chiếu (đánh giá độ chính xác) mang trường lớp thực địa."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Thuộc tính trên các điểm chứa nhãn lớp thực địa (tham chiếu)."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Raster đã phân loại cần lấy mẫu tại mỗi điểm tham chiếu (ô gần nhất). Cung cấp tham số này HOẶC 'classified_field'."
              },
              "classified_field": {
                "label": "Trường đã phân loại",
                "description": "Thuộc tính trên các điểm đã chứa sẵn lớp dự đoán (theo bản đồ), dùng thay cho việc lấy mẫu từ raster. Cung cấp tham số này HOẶC 'input'."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của raster đã phân loại cần lấy mẫu (đánh số từ 1, mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra cho các điểm tham chiếu được chú giải bằng REF_CLASS, MAP_CLASS, CORRECT. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "collapse_dual_lines_to_centerline": {
            "name": "Gộp đường đôi thành đường tim",
            "description": "Phát hiện các cặp đường gần như song song trong một dung sai chiều rộng (đường đôi, viền đường) và thay thế mỗi cặp bằng một đường tim duy nhất, kết nối lại các giao lộ — giống ArcGIS Collapse Dual Lines To Centerline.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường đầu vào (hệ tọa độ phẳng; chiều rộng theo đơn vị của hệ đó)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "min_width": {
                "label": "Chiều rộng tối thiểu",
                "description": "Khoảng cách tối thiểu giữa hai đường được ghép cặp, theo đơn vị hệ tọa độ (mặc định 0)."
              },
              "max_width": {
                "label": "Chiều rộng tối đa",
                "description": "Khoảng cách tối đa giữa hai đường được ghép cặp, theo đơn vị hệ tọa độ. Bắt buộc (chiều rộng thu gọn)."
              },
              "attribute": {
                "label": "Thuộc tính",
                "description": "Trường tùy chọn phải trùng khớp thì hai đường mới được ghép cặp (ví dụ tên hoặc lớp của đường giao thông)."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Bước làm dày điểm để kiểm tra tính song song, theo đơn vị hệ tọa độ. Mặc định: max_width / 2."
              },
              "min_overlap": {
                "label": "Chồng lấn tối thiểu",
                "description": "Tỉ lệ tối thiểu của một đường phải chạy song song với đường bạn của nó để được ghép cặp (0-1, mặc định 0.5)."
              }
            }
          },
          "collapse_hydro_polygon": {
            "name": "Thu gọn đa giác thủy văn",
            "description": "Thu gọn các đa giác mặt nước hẹp thành đường tim trong khi giữ các đoạn rộng dưới dạng đa giác (giống ArcGIS Collapse Hydro Polygon): lần theo đường tim của mỗi đa giác dọc theo trục chính của nó qua các điểm giữa của mặt cắt vuông góc, đo chiều rộng cục bộ và thu gọn ở nơi chiều rộng trung vị bằng hoặc dưới một ngưỡng. Là phép tổng quát hóa đa giác→đường theo ngưỡng chiều rộng mà collapse_dual_lines_to_centerline (viền đường) và river_centerlines (raster) không làm được.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác mặt nước đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đường tim đầu ra cho các đa giác được thu gọn (hẹp). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "collapse_width": {
                "label": "Chiều rộng thu gọn",
                "description": "Các đa giác có chiều rộng trung vị bằng hoặc nhỏ hơn giá trị này sẽ được thu gọn thành đường tim."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng cách giữa các trạm mặt cắt ngang dọc theo trục (mặc định: collapse_width / 2)."
              },
              "min_length": {
                "label": "Chiều dài tối thiểu",
                "description": "Loại bỏ các đường tim thu gọn ngắn hơn giá trị này (mặc định 0)."
              },
              "retained": {
                "label": "Giữ lại",
                "description": "Lớp đa giác đầu ra tùy chọn cho các đoạn rộng (không bị thu gọn)."
              }
            }
          },
          "collapse_road_detail": {
            "name": "Thu gọn chi tiết đường giao thông",
            "description": "Thu gọn các vòng và đoạn lệch nhỏ của đường giao thông (vòng xuyến, nút xương chó, đoạn lệch) dưới một ngưỡng đường kính thành các kết nối xuyên suốt đơn để hiển thị ở tỉ lệ nhỏ, bảo toàn tính liên thông của mạng lưới — giống ArcGIS Collapse Road Detail.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường giao thông đầu vào, định dạng được tự phát hiện (hoặc một handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "collapse_distance": {
                "label": "Khoảng cách thu gọn",
                "description": "Đường kính chi tiết tối đa cần thu gọn. Các vòng lặp/khúc quanh có đường kính bao nhỏ hơn giá trị này (tính bằng mét với hệ tọa độ địa lý, theo đơn vị hệ tọa độ trong các trường hợp khác) sẽ được thu gọn; các trường hợp lớn hơn được giữ nguyên."
              },
              "road_class_field": {
                "label": "Trường cấp đường",
                "description": "Trường lớp đường giao thông tùy chọn. Khi được đặt, chỉ những vòng lặp mà mọi đường ở ranh giới đều có cùng giá trị lớp mới bị thu gọn (các nút giao giữa các lớp khác nhau được giữ nguyên)."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Khoảng cách mà trong đó các điểm đầu cuối của đường được coi là cùng một nút giao. Mặc định 1e-6."
              }
            }
          },
          "collect_events": {
            "name": "Gom sự kiện",
            "description": "Gộp các điểm sự cố trùng vị trí thành các vị trí duy nhất, mỗi vị trí mang một số đếm ICOUNT về số sự kiện tại đó, giống ArcGIS Collect Events.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (Point hoặc MultiPoint)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai bắt dính theo đơn vị bản đồ; các điểm có tọa độ làm tròn về cùng một ô được coi là trùng nhau (mặc định 1e-8, tức là gần như chính xác tuyệt đối)."
              }
            }
          },
          "colocation_analysis": {
            "name": "Phân tích đồng vị trí",
            "description": "Thương số đồng vị trí cục bộ (Leslie & Kronenfeld) đo xem các điểm thuộc loại A có xuất hiện vượt trội trong số các lân cận thuộc loại B hay không, với giá trị p từ kiểm định hoán vị có hạt giống — giống ArcGIS Colocation Analysis.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào có một trường phân nhóm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (một bản sao của đầu vào kèm các trường đồng định vị). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "category_field": {
                "label": "Trường danh mục",
                "description": "Trường chứa nhóm của mỗi điểm."
              },
              "category_a": {
                "label": "Danh mục A",
                "description": "Nhóm trọng tâm (A): các điểm có mức đồng định vị với B được đo."
              },
              "category_b": {
                "label": "Danh mục B",
                "description": "Nhóm lân cận (B): các điểm mà A được đối chiếu với."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số lân cận gần nhất k (mặc định 8)."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Trọng số lân cận: 'gaussian' (suy giảm theo khoảng cách, mặc định) hoặc 'uniform'."
              },
              "permutations": {
                "label": "Số hoán vị",
                "description": "Số lần hoán vị nhãn cho kiểm định ý nghĩa (mặc định 99; 0 để tắt)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên của phép hoán vị (mặc định 1), để kết quả có thể tái lập."
              }
            }
          },
          "color_polygons": {
            "name": "Tô màu đa giác",
            "description": "Gán cho mỗi đa giác một chỉ số màu nguyên nhỏ sao cho không có hai đa giác kề nhau có cùng giá trị (giống ArcGIS Calculate Color Theorem Field) — tạo kiểu bản đồ choropleth an toàn về kề cận thông qua tô màu đồ thị DSATUR trên quan hệ tiếp giáp chung cạnh (hoặc chung góc).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác đầu ra có bổ sung trường màu. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "field": {
                "label": "Trường",
                "description": "Tên của trường chỉ số màu cần ghi (mặc định 'color_id')."
              },
              "adjacency": {
                "label": "Liền kề",
                "description": "'edge' (rook, chung ranh giới; mặc định) hoặc 'edge_or_corner' (queen, chung ranh giới hoặc chung đỉnh)."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Kích thước lưới để bắt dính các đỉnh trước khi đối sánh ranh giới (mặc định 0 = chính xác)."
              }
            }
          },
          "combine": {
            "name": "Kết hợp",
            "description": "Gán một id vùng duy nhất cho mỗi tổ hợp giá trị duy nhất trên hai hay nhiều raster phân loại đã đồng đăng ký, kèm một bảng thuộc tính giá trị (id, số đếm, một cột cho mỗi đầu vào).",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách các raster phân loại/số nguyên đã đồng đăng ký (>=2) cần kết hợp, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn cho lưới id điều kiện duy nhất. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "csv_output": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn CSV tùy chọn cho bảng thuộc tính giá trị (value, count, một cột cho mỗi raster đầu vào)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ mỗi raster đầu vào (đánh số từ 1). Mặc định 1."
              }
            }
          },
          "compare_spatial_weights": {
            "name": "So sánh trọng số không gian",
            "description": "Xếp hạng các cách khái niệm hóa trọng số không gian ứng viên (KNN, dải khoảng cách cố định, tiếp giáp theo cạnh / cạnh+góc, Delaunay) theo mức độ mỗi cách nắm bắt sự phân cụm không gian của một hay nhiều trường phân tích, bằng chỉ số Moran's I toàn cục chuẩn hóa theo hàng cùng z-score và giá trị p hai phía — giống ArcGIS Compare Neighborhood Conceptualizations. Xuất ra một bảng so sánh đã xếp hạng và phương pháp tốt nhất duy nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm/đường/đa giác; tính liền kề yêu cầu đa giác)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng so sánh đầu ra — một tệp CSV (phần mở rộng .csv) hoặc một bảng vector không có hình học. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "input_fields": {
                "label": "Trường đầu vào",
                "description": "Danh sách tên các trường số cần phân tích phân cụm không gian, phân tách bằng dấu phẩy."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường chứa id duy nhất của mỗi đối tượng (chấp nhận để tương thích; không bắt buộc để tính Moran's I)."
              },
              "methods": {
                "label": "Phương pháp",
                "description": "Các cách khái niệm hóa ứng viên, phân tách bằng dấu phẩy, chọn từ: knn, fixed_distance_band, contiguity_edges, contiguity_edges_corners, delaunay. Mặc định 'knn,contiguity_edges,contiguity_edges_corners'. Các phương pháp không áp dụng được cho hình học (hoặc gây lỗi) sẽ được bỏ qua."
              },
              "number_of_neighbors": {
                "label": "Số lân cận",
                "description": "Số lân cận gần nhất k cho phương pháp knn. Mặc định 8."
              },
              "threshold_distance": {
                "label": "Khoảng cách ngưỡng",
                "description": "Ngưỡng cắt dải khoảng cách theo đơn vị bản đồ. Chỉ bắt buộc khi fixed_distance_band nằm trong các phương pháp."
              }
            }
          },
          "composite_bands": {
            "name": "Tổ hợp kênh",
            "description": "Xếp chồng nhiều raster đơn kênh thành một raster đa kênh, theo thứ tự đã cho (ArcGIS Composite Bands). create_colour_composite đi kèm cố định ở ba kênh RGB, nên trước đây không có cách nào lắp ráp đầu vào N kênh mà band_collection_statistics, principal_component_analysis, spectral_index và bộ OBIA đều yêu cầu.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các đường dẫn raster phân tách bằng dấu phẩy hoặc dấu chấm phẩy, theo thứ tự kênh đầu ra. Ít nhất một."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh lấy từ mỗi đầu vào khi bản thân đầu vào là đa kênh (đánh số từ 1, mặc định 1)."
              },
              "nodata_policy": {
                "label": "Chính sách NoData",
                "description": "'any' (mặc định): một ô là NoData nếu bất kỳ kênh nào là NoData. 'all': chỉ khi mọi kênh đều là NoData."
              },
              "nodata": {
                "label": "NoData",
                "description": "Giá trị NoData cho đầu ra (mặc định: giá trị NoData của đầu vào đầu tiên)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đa kênh đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "compute_accuracy_for_object_detection": {
            "name": "Tính độ chính xác phát hiện đối tượng",
            "description": "Chấm điểm các đối tượng được phát hiện so với dữ liệu thực địa bằng ghép cặp IoU, báo cáo precision, recall, average precision theo từng lớp và mAP tổng thể, giống ArcGIS Compute Accuracy For Object Detection.",
            "params": {
              "detected": {
                "label": "Phát hiện",
                "description": "Các đối tượng được phát hiện (đa giác hoặc hộp bao)."
              },
              "ground_truth": {
                "label": "Thực địa",
                "description": "Các đối tượng tham chiếu để đối chiếu chấm điểm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng độ chính xác đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "detected_class_field": {
                "label": "Trường lớp phát hiện",
                "description": "Trường nhãn lớp trên các phát hiện. Bỏ qua để chấm điểm mọi thứ như một lớp duy nhất."
              },
              "ground_truth_class_field": {
                "label": "Trường lớp thực địa",
                "description": "Trường nhãn lớp trên dữ liệu thực địa. Bỏ qua để chấm điểm mọi thứ như một lớp duy nhất."
              },
              "confidence_field": {
                "label": "Trường độ tin cậy",
                "description": "Trường điểm tin cậy trên các phát hiện, dùng để xếp hạng khi tính độ chính xác trung bình. Nếu không có, các phát hiện được chấm điểm theo thứ tự đầu vào."
              },
              "min_iou": {
                "label": "IoU tối thiểu",
                "description": "Giá trị intersection-over-union nhỏ nhất để một phát hiện được tính là khớp (mặc định 0.5)."
              }
            }
          },
          "compute_sar_indices": {
            "name": "Tính chỉ số SAR",
            "description": "Tính các chỉ số SAR phân cực — RVI (Chỉ số thực vật radar), RFDI (Chỉ số suy thoái rừng radar), CSI (Chỉ số cấu trúc tán) và DPSVI (Chỉ số thực vật SAR phân cực kép) — từ tán xạ ngược đa phân cực (ArcGIS Compute SAR Indices). spectral_index chỉ bao phủ phép toán kênh quang học: các công thức và quy ước kênh của nó thuộc miền phản xạ và không có khái niệm về các kênh phân cực, nên chuỗi SAR của danh mục (multilook, sar_coherence, các bộ lọc nhiễu đốm) hiện chưa có điểm kết thúc phân tích nào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster SAR đã hiệu chuẩn đa phân cực (mỗi kênh một phân cực)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster chỉ số đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "index": {
                "label": "Chỉ số",
                "description": "'rvi' (mặc định), 'rfdi', 'csi', hoặc 'dpsvi'."
              },
              "polarization_bands": {
                "label": "Kênh phân cực",
                "description": "Ánh xạ kênh đánh số từ 1, ví dụ 'vv=1,vh=2' hoặc 'hh=1,hv=2,vv=3'. Mặc định theo số kênh: 2 kênh = 'vv=1,vh=2', từ 3 kênh trở lên = 'hh=1,hv=2,vv=3'."
              },
              "input_units": {
                "label": "Đơn vị đầu vào",
                "description": "'linear' (mặc định) hoặc 'db'. Đầu vào dB được chuyển sang công suất tuyến tính trước khi tính tỉ số, vì tỉ số của decibel không có ý nghĩa."
              }
            }
          },
          "construct_sight_lines": {
            "name": "Xây dựng đường ngắm",
            "description": "Xây dựng các đối tượng đường ngắm giữa các điểm quan sát và các đối tượng mục tiêu, với độ lệch chiều cao của người quan sát/mục tiêu, lấy mẫu dọc theo các mục tiêu dạng tuyến và dạng vùng, các trường góc phương vị và góc đứng tùy chọn, cùng khoảng cách 2D hoặc 3D. Giống ArcGIS Construct Sight Lines.",
            "params": {
              "observers": {
                "label": "Điểm quan sát",
                "description": "Các đối tượng điểm quan sát."
              },
              "targets": {
                "label": "Mục tiêu",
                "description": "Các đối tượng điểm, đường hoặc đa giác mục tiêu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tuyến nhìn đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "observer_height_field": {
                "label": "Trường chiều cao quan sát viên",
                "description": "Trường tùy chọn cho biết độ chênh chiều cao của mỗi điểm quan sát (được cộng vào giá trị Z của nó)."
              },
              "target_height_field": {
                "label": "Trường chiều cao mục tiêu",
                "description": "Trường tùy chọn cho biết độ chênh chiều cao của mỗi mục tiêu (được cộng vào giá trị Z của nó)."
              },
              "join_field": {
                "label": "Trường kết nối",
                "description": "Trường tùy chọn có mặt trên cả hai đầu vào; chỉ các điểm quan sát và mục tiêu có cùng giá trị mới được ghép cặp. Nếu không có, mỗi điểm quan sát được ghép với mọi mục tiêu."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng cách theo đơn vị bản đồ giữa các điểm mục tiêu được tạo dọc theo ranh giới đường/đa giác (mặc định: mỗi đỉnh một điểm)."
              },
              "output_direction": {
                "label": "Đầu ra hướng",
                "description": "Thêm các trường AZIMUTH và VERT_ANGLE (mặc định false)."
              },
              "distance_method": {
                "label": "Phương pháp khoảng cách",
                "description": "'2d' (mặc định) hoặc '3d' cho trường DISTANCE."
              }
            }
          },
          "contiguous_cartogram": {
            "name": "Bản đồ biến dạng liền kề",
            "description": "Bản đồ biến dạng cân bằng mật độ (khuếch tán Gastner-Newman): làm biến dạng diện tích các đa giác theo tỷ lệ với một thuộc tính trong khi vẫn giữ bản đồ là một tấm liên thông với các đường biên chung (ArcGIS Generate Contiguous Cartogram). Công cụ cartogram đã có chỉ triển khai các phương pháp không liền kề và Dorling, cả hai đều phá vỡ quan hệ kề cận, và tài liệu mô-đun của chính nó để dạng liền kề lại cho sau.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác liền kề."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Thuộc tính số dương mà diện tích cần trở nên tỉ lệ với tổng của nó."
              },
              "grid_size": {
                "label": "Kích thước lưới",
                "description": "Độ phân giải lưới mật độ; phải là lũy thừa của hai (mặc định 256). Đây là tham số chi phối độ chính xác/chi phí."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số bước khuếch tán (mặc định 20). Nhiều bước hơn sẽ cân bằng mật độ tốt hơn nhưng đổi lại biến dạng nhiều hơn."
              },
              "blur": {
                "label": "Làm mờ",
                "description": "Mức làm trơn Gauss trước cho trường mật độ, tính theo ô lưới (mặc định 0.5). Ngăn biến dạng cực đoan do một bước nhảy mật độ đột ngột gây ra."
              },
              "sea_density": {
                "label": "Mật độ biển",
                "description": "Mật độ bên ngoài khu vực nghiên cứu: 'mean' (mặc định) hoặc 'min'. Lựa chọn này thay đổi đáng kể kết quả ở rìa bản đồ."
              },
              "densify_spacing": {
                "label": "Khoảng cách thêm đỉnh",
                "description": "Chiều dài phân đoạn cạnh lớn nhất tính theo ô lưới trước khi chèn thêm đỉnh (mặc định 1.0). Nếu không, các đường biên thẳng dài sẽ tách khỏi các đa giác lân cận."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác đầu ra với các đỉnh đã dịch chuyển và các thuộc tính gốc. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "contour_list": {
            "name": "Danh sách đường đồng mức",
            "description": "Tạo các đường đồng mức tại một danh sách giá trị tường minh thay vì theo khoảng cách cố định, dưới dạng các đường nối chuỗi hoặc các đa giác tô đầy, mỗi đối tượng được gán nhãn theo mức của nó (ArcGIS Contour List). contours_from_raster đi kèm chỉ nhận 'interval' và 'base', nên các dãy không đều mà các bản đồ thực tế sử dụng — các bậc độ sâu IHO, các cấp tái diễn lũ, các ngưỡng lớp đã công bố — cần chạy một lần cho mỗi giá trị rồi gộp lại, và vẫn không thể xuất ra thành một lớp được gán nhãn theo mức.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster bề mặt đầu vào."
              },
              "contour_values": {
                "label": "Giá trị đường đồng mức",
                "description": "Danh sách các mức cần vẽ đường đồng mức, theo đơn vị z của chính raster, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đường đồng mức đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "geometry_type": {
                "label": "Kiểu hình học",
                "description": "'polyline' (mặc định) cho các đường đồng mức, hoặc 'polygon' cho vùng được lấp tại hoặc trên mỗi mức."
              },
              "min_length": {
                "label": "Chiều dài tối thiểu",
                "description": "Loại bỏ các đường đồng mức ngắn hơn giá trị này, theo đơn vị bản đồ, giúp xóa các mảnh vụn do bề mặt nhiễu tạo ra."
              },
              "close_rings": {
                "label": "Đóng vòng",
                "description": "Lặp lại đỉnh đầu tiên trên các đường đồng mức khép kín (mặc định true)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần vẽ đường đồng mức (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "contour_with_barriers": {
            "name": "Đường đồng mức có rào cản",
            "description": "Lần theo các đường đồng mức đẳng trị của một bề mặt, kết thúc tại các đối tượng rào cản thay vì cắt qua chúng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster bề mặt liên tục đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra tùy chọn (driver xác định theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp vector rào cản tùy chọn (đường hoặc đa giác). Các đường đồng mức sẽ không cắt qua các đối tượng này."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Khoảng cách giữa các đường đồng mức theo đơn vị bề mặt. Các mức là base + k*interval trong khoảng giá trị dữ liệu. Bị bỏ qua nếu 'levels' được cung cấp."
              },
              "base": {
                "label": "Nền",
                "description": "Giá trị gốc mà khoảng cách được tính từ đó (mặc định 0)."
              },
              "levels": {
                "label": "Số mức",
                "description": "Các giá trị đường đồng mức cụ thể, phân tách bằng dấu phẩy (ví dụ \"10,20,30\"). Ghi đè interval/base."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "convert_coordinate_notation": {
            "name": "Chuyển đổi ký hiệu tọa độ",
            "description": "Chuyển đổi tọa độ của mỗi đối tượng giữa các ký pháp — độ thập phân (DD), độ-phút-giây (DMS), độ-phút thập phân (DDM), UTM và MGRS/USNG — ghi vào một trường mới theo ký pháp đích, giống ArcGIS Convert Coordinate Notation. Thuần toán học lưới (Mercator ngang Krüger + ký tự MGRS trên WGS84); không dùng PROJ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm (hoặc bảng) đầu vào."
              },
              "input_notation": {
                "label": "Ký hiệu đầu vào",
                "description": "Ký pháp của tọa độ đầu vào: DD, DMS, DDM, UTM, hoặc MGRS."
              },
              "output_notation": {
                "label": "Ký hiệu đầu ra",
                "description": "Ký pháp đích cần ghi: DD, DMS, DDM, UTM, hoặc MGRS."
              },
              "coord_field": {
                "label": "Trường tọa độ",
                "description": "Trường chứa chuỗi tọa độ đầu vào. Nếu bỏ qua, hình học điểm sẽ được dùng (chỉ hợp lệ khi input_notation=DD; hình học x=lon, y=lat)."
              },
              "output_field": {
                "label": "Trường đầu ra",
                "description": "Tên trường cần ghi. Mặc định: ký pháp đầu ra viết thường (ví dụ 'utm')."
              },
              "precision": {
                "label": "Độ chính xác",
                "description": "Số chữ số MGRS trên mỗi trục (1=10km … 5=1m, tối đa 9). Mặc định 5. Bị bỏ qua với các ký pháp khác."
              },
              "update_geometry": {
                "label": "Cập nhật hình học",
                "description": "Nếu true, dựng lại hình học của mỗi đối tượng thành điểm lon/lat trong EPSG:4326 từ tọa độ đã phân tích. Mặc định false (giữ nguyên hình học/hệ tọa độ đầu vào)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "convert_sar_units": {
            "name": "Chuyển đổi đơn vị SAR",
            "description": "Chuyển đổi một raster SAR giữa các biểu diễn biên độ, cường độ, công suất tuyến tính, decibel, phức-sang-cường độ và pha đã mở-sang-dịch chuyển (ArcGIS Convert SAR Units). raster_calculator có thể tính toán phép số học nhưng không mang ngữ nghĩa hay cơ chế bảo vệ nào — nó trả về -inf cho các ô có giá trị bằng không khi chuyển đổi log, và không có công cụ nào trong danh mục ghi lại raster SAR đang ở đơn vị nào, nên các bộ lọc nhiễu đốm và chỉ số tỷ lệ thường xuyên bị áp dụng lên sai biểu diễn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster SAR đầu vào. Với 'complex_to_intensity' đây là raster I/Q hai kênh (theo quy ước multilook / sar_coherence)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "conversion": {
                "label": "Chuyển đổi",
                "description": "'linear_to_db', 'db_to_linear', 'amplitude_to_intensity', 'intensity_to_amplitude', 'complex_to_intensity', hoặc 'phase_to_displacement'."
              },
              "wavelength": {
                "label": "Bước sóng",
                "description": "Bước sóng radar tính bằng mét cho 'phase_to_displacement' (mặc định 0.05546576, băng C của Sentinel-1)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1). Bị bỏ qua với 'complex_to_intensity', vốn luôn đọc kênh 1 và 2 làm I và Q."
              }
            }
          },
          "coregister_rasters": {
            "name": "Đồng đăng ký raster",
            "description": "Tự động căn chỉnh một raster thứ cấp với raster tham chiếu bằng tương quan chéo chuẩn hóa trên một lưới ô, tinh chỉnh đỉnh dưới mức điểm ảnh, khớp phép biến đổi bình phương tối thiểu có loại bỏ ngoại lai, và lấy mẫu lại (ArcGIS Apply Coregistration). Đây là điều kiện tiên quyết còn thiếu cho toàn bộ chuỗi InSAR của danh mục: sar_coherence, flatten_interferogram và goldstein_phase_filter đều yêu cầu đầu vào đã đồng đăng ký mà không có công cụ nào tạo ra nó. georeference_raster_from_control_points cần các điểm khống chế chọn bằng tay, image_correlation chỉ chấm điểm độ tương đồng, còn warp_raster cần được cung cấp sẵn một phép biến đổi.",
            "params": {
              "reference": {
                "label": "Tham chiếu",
                "description": "Raster tham chiếu. Đầu ra được ghi trên lưới của raster này."
              },
              "secondary": {
                "label": "Thứ cấp",
                "description": "Raster cần căn chỉnh theo raster tham chiếu. Tất cả các kênh của nó đều được lấy mẫu lại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster phụ đã lấy mẫu lại trên lưới tham chiếu, ở đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "tie_points": {
                "label": "Điểm buộc",
                "description": "Lớp điểm đầu ra gồm các điểm khống chế được chấp nhận cùng độ dịch chuyển và hệ số tương quan đo được. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh dùng để so khớp (đánh số từ 1, mặc định 1). Đầu vào hai kênh được so khớp trên biên độ phức trừ khi tham số này được cung cấp."
              },
              "transform": {
                "label": "Biến đổi",
                "description": "'translation', 'affine' (mặc định), hoặc 'polynomial2'."
              },
              "tile_size": {
                "label": "Kích thước ô",
                "description": "Cạnh của mỗi ô so khớp, tính theo số ô lưới (mặc định 32)."
              },
              "grid_size": {
                "label": "Kích thước lưới",
                "description": "Số ô trên mỗi trục (mặc định 8, tức 64 ô)."
              },
              "max_shift": {
                "label": "Dịch chuyển tối đa",
                "description": "Nửa chiều rộng của cửa sổ tìm kiếm nguyên, tính theo số ô (mặc định 8)."
              },
              "min_correlation": {
                "label": "Tương quan tối thiểu",
                "description": "Loại bỏ các điểm khống chế có tương quan chuẩn hóa đỉnh thấp hơn giá trị này (mặc định 0.3)."
              },
              "outlier_sigma": {
                "label": "Sigma ngoại lai",
                "description": "Cắt bỏ các điểm khống chế có sai số dư khớp vượt quá số lần độ lệch chuẩn này (mặc định 3.0). Đặt bằng 0 để tắt việc cắt bỏ."
              },
              "resample": {
                "label": "Lấy mẫu lại",
                "description": "'bilinear' (mặc định) hoặc 'nearest'."
              }
            }
          },
          "corridor": {
            "name": "Hành lang",
            "description": "Hành lang chi phí tối thiểu giữa hai bề mặt chi phí tích lũy (ArcGIS Corridor): cộng hai raster khoảng cách chi phí thành một bề mặt hành lang có giá trị nhỏ nhất là đường đi chi phí tối thiểu, sau đó tùy chọn đặt ngưỡng để lấy dải gần tối ưu. Chế độ trực tiếp (hai raster chi phí) hoặc chế độ tiện lợi (một raster ma sát + hai raster nguồn).",
            "params": {
              "cost1": {
                "label": "Chi phí 1",
                "description": "Raster chi phí tích lũy thứ nhất (từ nguồn A). Chế độ trực tiếp."
              },
              "cost2": {
                "label": "Chi phí 2",
                "description": "Raster chi phí tích lũy thứ hai (từ nguồn B). Chế độ trực tiếp."
              },
              "cost": {
                "label": "Chi phí",
                "description": "Raster ma sát/chi phí di chuyển. Chế độ tiện lợi (dùng với source1/source2)."
              },
              "source1": {
                "label": "Nguồn 1",
                "description": "Raster nguồn thứ nhất (các ô dương là nguồn). Chế độ tiện lợi."
              },
              "source2": {
                "label": "Nguồn 2",
                "description": "Raster nguồn thứ hai (các ô dương là nguồn). Chế độ tiện lợi."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster hành lang đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Chỉ giữ lại các ô có chi phí hành lang bằng hoặc thấp hơn giá trị tuyệt đối này (phần còn lại bị che thành NoData)."
              },
              "percent": {
                "label": "Phần trăm",
                "description": "Chỉ giữ lại các ô nằm trong tỉ lệ phần trăm này trên mức chi phí hành lang nhỏ nhất (ví dụ 5 = trong phạm vi 5%). Bị bỏ qua nếu 'threshold' được đặt."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ (các) raster đầu vào (đánh số từ 1). Mặc định 1."
              }
            }
          },
          "cost_back_link": {
            "name": "Liên kết ngược chi phí",
            "description": "Xuất ra raster hướng lân cận 0-8 mã hóa, cho mọi ô, bước tiếp theo dọc theo tuyến chi phí tối thiểu quay về nguồn gần nhất, cùng bề mặt chi phí tích lũy (ArcGIS Cost Back Link và Path Back Link). cost_distance, cost_pathway và cost_allocation đều tính cái này bên trong rồi bỏ đi, nên việc lần ngược N điểm đến hiện tốn N lần giải chi phí đầy đủ thay vì một lượt tích lũy cộng N lượt đi bộ rẻ.",
            "params": {
              "source": {
                "label": "Nguồn",
                "description": "Các ô nguồn: một raster (mọi ô khác 0 và không phải NoData đều là nguồn) hoặc một lớp vector điểm/đa điểm."
              },
              "cost": {
                "label": "Chi phí",
                "description": "Raster chi phí trên mỗi đơn vị khoảng cách. Tùy chọn khi 'surface' được cung cấp (khi đó chi phí mặc định là 1 ở mọi nơi, cho ra khoảng cách bề mặt thuần túy)."
              },
              "surface": {
                "label": "Bề mặt",
                "description": "Raster độ cao tùy chọn, cho phép biến thể Path Back Link: khoảng cách ngang được thay bằng khoảng cách bề mặt thực sqrt(dxy^2 + dz^2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster liên kết ngược đầu ra (0 = nguồn, 1-8 = hướng về phía nguồn, 1 = hướng đông, ngược chiều kim đồng hồ). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "out_distance": {
                "label": "Khoảng cách ra",
                "description": "Raster chi phí tích lũy. Luôn được tạo ra; chuyển sang đối tượng trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Ngưỡng cắt tích lũy tùy chọn: các ô có chi phí lớn hơn giá trị này được coi là không thể tiếp cận."
              }
            }
          },
          "cost_connectivity": {
            "name": "Liên thông chi phí",
            "description": "Mạng lưới chi phí tối thiểu kết nối nhiều địa điểm trên một bề mặt chi phí (giống ArcGIS Cost Connectivity / Optimal Region Connections): phân bổ Dijkstra đa nguồn, các đường đi chi phí tối thiểu theo cặp giữa các vùng kề nhau và cây khung nhỏ nhất của chúng — mạng lưới chi phí tối thiểu mà cost_distance và path_distance đơn nguồn đi kèm không thể xây dựng.",
            "params": {
              "sources": {
                "label": "Nguồn",
                "description": "Lớp điểm gồm các vị trí/vùng cần kết nối."
              },
              "cost": {
                "label": "Chi phí",
                "description": "Raster chi phí/ma sát (chi phí đi qua mỗi ô; các ô NoData là rào cản)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp polyline đầu ra gồm các tuyến đường chi phí nhỏ nhất. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "connections": {
                "label": "Kết nối",
                "description": "'mst' (cây khung nhỏ nhất kết nối tất cả các vị trí; mặc định) hoặc 'all_neighbors' (mọi tuyến giữa các vùng liền kề)."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường tùy chọn để gán nhãn cho các nguồn (mặc định: chỉ số đánh từ 1)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của raster chi phí (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "count_overlapping_features": {
            "name": "Đếm đối tượng chồng lấn",
            "description": "Làm phẳng các đa giác chồng lấp thành các vùng rời nhau, mỗi vùng được gán thuộc tính là số lượng (và tùy chọn là các id) của các đối tượng đầu vào phủ lên nó, giống ArcGIS Count Overlapping Features.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào (các đối tượng có thể chồng lấn)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra (driver xác định theo phần mở rộng) có trường 'count'. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "min_count": {
                "label": "Số lượng tối thiểu",
                "description": "Chỉ giữ lại các vùng được phủ bởi ít nhất số đối tượng này (mặc định 1; dùng 2 để chỉ lấy phần chồng lấn)."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường tùy chọn để nhận dạng mỗi đối tượng đầu vào (dùng trong cột ids / báo cáo). Mặc định: chỉ số của đối tượng."
              },
              "report_ids": {
                "label": "ID báo cáo",
                "description": "Đường dẫn CSV tùy chọn cho bảng nối region_id,feature_id (mỗi đối tượng phủ là một hàng)."
              }
            }
          },
          "create_accuracy_assessment_points": {
            "name": "Tạo điểm đánh giá độ chính xác",
            "description": "Tạo các điểm tham chiếu phân bố ngẫu nhiên được phân tầng theo các lớp của một raster đã phân loại hoặc một lớp đa giác, điền sẵn lớp trên bản đồ và sẵn sàng cho việc gán nhãn thực địa (ArcGIS Create Accuracy Assessment Points). classification_accuracy_assessment tiêu thụ các điểm như vậy nhưng không công cụ nào tạo ra chúng, còn create_spatial_sampling_locations phân tầng theo đối tượng đa giác hoặc trường thay vì theo lớp raster và không có phân bổ cân bằng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đã phân loại, hoặc lớp đa giác đã phân loại kèm 'class_field'."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Thuộc tính lớp, bắt buộc khi 'input' là lớp vector. Bị bỏ qua với đầu vào raster, vốn dùng giá trị ô."
              },
              "num_points": {
                "label": "Số điểm",
                "description": "Tổng số điểm tham chiếu (mặc định 500)."
              },
              "sampling_strategy": {
                "label": "Chiến lược lấy mẫu",
                "description": "Một trong 'stratified_random' (mặc định, phân bổ tỉ lệ với diện tích lớp), 'equalized_stratified' (số lượng bằng nhau cho mỗi lớp), 'random' (bỏ qua lớp)."
              },
              "min_points_per_class": {
                "label": "Số điểm tối thiểu mỗi lớp",
                "description": "Giá trị sàn áp dụng với 'stratified_random' để các lớp hiếm không bị loại bỏ (mặc định 1)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của đầu vào raster (đánh số từ 1, mặc định 1)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên tất định (mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp điểm đầu ra với CLASSVALUE (lớp trên bản đồ), GrndTruth (-1 cho đến khi được thu thập) và Stratum. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "create_cartographic_partitions": {
            "name": "Tạo phân vùng bản đồ",
            "description": "Tạo các đa giác phân vùng thích ứng, không chồng lấp, mỗi đa giác chứa xấp xỉ một số lượng đối tượng mục tiêu (dày hơn ở nơi dữ liệu tập trung) để các tác vụ tổng quát hóa / tạo mặt nạ lớn có thể được chia ô an toàn về độ phủ — phiên bản thuần Rust tương ứng với ArcGIS Create Cartographic Partitions.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (bất kỳ kiểu hình học nào). Mỗi đối tượng được rút gọn thành một điểm đại diện và được gán vào một phân vùng."
              },
              "feature_count": {
                "label": "Số đối tượng",
                "description": "Số đối tượng tối đa mong muốn trên mỗi phân vùng. Một ô tiếp tục được tách khi nó còn chứa nhiều hơn số đối tượng này. Mặc định 1000."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đa giác đầu ra gồm các phân vùng (driver xác định theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "create_overpass": {
            "name": "Tạo cầu vượt",
            "description": "Xây dựng các đa giác mặt nạ che (và các đường trang trí vạch cánh tùy chọn) tại nơi một đường 'phía trên' cắt qua một đường 'phía dưới', để đường phía dưới bị che tại chỗ giao cắt.",
            "params": {
              "above": {
                "label": "Trên",
                "description": "Vector đường gồm các đối tượng đi BÊN TRÊN nút giao (mặt nạ được định hướng dọc theo các đối tượng này). Định dạng được tự động nhận diện, hoặc đối tượng trong bộ nhớ."
              },
              "below": {
                "label": "Dưới",
                "description": "Vector đường gồm các đối tượng bị che BÊN DƯỚI nút giao (các đường sẽ bị khoét bỏ). Định dạng được tự động nhận diện, hoặc đối tượng trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho các đa giác mặt nạ (driver xác định theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_decoration": {
                "label": "Trang trí đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho các đường trang trí dạng vạch cánh. Nếu bỏ qua, kết quả được lưu trong bộ nhớ (vẫn được trả về dưới tên 'output_decoration')."
              },
              "margin_along": {
                "label": "Lề dọc",
                "description": "Nửa chiều dài của mỗi mặt nạ dọc theo đường bên trên, theo đơn vị hệ tọa độ (chiều dài mặt nạ bằng 2 lần giá trị này). Mặc định 1.0."
              },
              "margin_across": {
                "label": "Lề ngang",
                "description": "Nửa chiều rộng của mỗi mặt nạ ngang qua đường bên trên, theo đơn vị hệ tọa độ (chiều rộng mặt nạ bằng 2 lần giá trị này). Mặc định 1.0."
              },
              "wing_type": {
                "label": "Kiểu cánh",
                "description": "Kiểu trang trí: 'none', 'perpendicular' (mặc định; một vạch ngang qua mỗi đầu mặt nạ) hoặc 'parallel' (các đường viền bao dọc theo mỗi bên)."
              }
            }
          },
          "create_routes": {
            "name": "Tạo tuyến",
            "description": "Hòa tan các đối tượng đường theo trường định danh tuyến, sắp xếp các đoạn thành một polyline duy nhất cho mỗi tuyến và gán số đo tuyến tính (giá trị m) từ chiều dài hình học hoặc từ các trường số đo đầu/cuối.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đường đầu vào, định dạng được tự động nhận diện (hoặc đối tượng trong bộ nhớ)."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Thuộc tính nhận dạng mỗi tuyến; các đường đầu vào được nhóm theo thuộc tính này, mỗi giá trị khác nhau cho ra một tuyến đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector tuyến đầu ra tùy chọn (driver xác định theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "measure_source": {
                "label": "Nguồn số đo",
                "description": "Cách gán trị đo: LENGTH (0..chiều dài hình học), ONE_FIELD (bắt đầu từ một trường, kết thúc = điểm bắt đầu + chiều dài), hoặc TWO_FIELDS (điểm bắt đầu/kết thúc lấy từ các trường, nội suy ở giữa). Mặc định LENGTH."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường số cho biết trị đo tại điểm bắt đầu của mỗi tuyến (dùng bởi ONE_FIELD và TWO_FIELDS). Được đọc từ phân đoạn đầu tiên của tuyến."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường số cho biết trị đo tại điểm kết thúc của mỗi tuyến (dùng bởi TWO_FIELDS). Được đọc từ phân đoạn đầu tiên của tuyến."
              },
              "measure_factor": {
                "label": "Hệ số số đo",
                "description": "Hệ số nhân áp dụng cho trị đo tự nhiên (theo chiều dài), ví dụ 0.001 để đổi mét thành kilômét. Mặc định 1.0."
              },
              "measure_offset": {
                "label": "Độ lệch số đo",
                "description": "Giá trị cộng thêm vào mọi trị đo dọc tuyến (dịch chuyển toàn bộ giá trị m của tuyến). Mặc định 0.0."
              },
              "ignore_gaps": {
                "label": "Bỏ qua khoảng trống",
                "description": "Với LENGTH/ONE_FIELD, loại trừ các bước nhảy thẳng giữa các phân đoạn rời rạc khỏi trị đo tích lũy để các khoảng hở không làm tăng khoảng cách. Mặc định false."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Các điểm đầu mút nằm trong khoảng cách này (đơn vị hệ tọa độ) được coi là trùng nhau khi ghép nối các phân đoạn. Mặc định 1e-6."
              }
            }
          },
          "create_spatial_sampling_locations": {
            "name": "Tạo vị trí lấy mẫu không gian",
            "description": "Tạo điểm lấy mẫu trên vùng nghiên cứu dạng đa giác theo thiết kế ngẫu nhiên đơn giản, phân tầng, hệ thống (vuông/lục giác/tam giác) hoặc theo cụm, với tính ngẫu nhiên tái lập được nhờ hạt giống.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác khu vực nghiên cứu (hoặc đối tượng trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra tùy chọn (driver xác định theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'simple_random' (mặc định), 'stratified', 'systematic', hoặc 'cluster'."
              },
              "num_samples": {
                "label": "Số mẫu",
                "description": "Tổng số điểm mẫu cho simple_random, stratified và cluster. Mặc định 100."
              },
              "strata_field": {
                "label": "Trường tầng",
                "description": "Với stratified: nhóm các đối tượng đầu vào thành các tầng theo thuộc tính này. Nếu bỏ qua, mỗi đối tượng đầu vào là một tầng riêng."
              },
              "allocation": {
                "label": "Phân bổ",
                "description": "Với stratified: 'proportional' theo diện tích tầng (mặc định), 'equal' cho mỗi tầng, hoặc 'population_field' tỉ lệ với tổng của một trường."
              },
              "population_field": {
                "label": "Trường dân số",
                "description": "Với allocation=population_field: trường số có tổng theo từng tầng quyết định việc phân bổ."
              },
              "bin_shape": {
                "label": "Hình dạng ô",
                "description": "Với systematic: mạng lưới 'square' (mặc định), 'hexagon', hoặc 'triangle'."
              },
              "bin_size": {
                "label": "Kích thước ô",
                "description": "Khoảng cách (đơn vị hệ tọa độ) cho mạng lưới systematic và các ô nhóm cluster. Bắt buộc với các phương pháp đó."
              },
              "num_clusters": {
                "label": "Số cụm",
                "description": "Với cluster: số ô nhóm cần chọn ngẫu nhiên. Mặc định 10."
              },
              "min_distance": {
                "label": "Khoảng cách tối thiểu",
                "description": "Khoảng cách nhỏ nhất giữa các điểm simple_random / stratified / cluster (đơn vị hệ tọa độ). Mặc định 0 (không ràng buộc)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên tất định (mặc định 1)."
              }
            }
          },
          "create_spatially_balanced_points": {
            "name": "Tạo điểm cân bằng không gian",
            "description": "Tạo các điểm lấy mẫu phân bố đều trong không gian (tựa ngẫu nhiên Halton) bên trong đa giác ràng buộc, tùy chọn có trọng số theo raster xác suất bao gồm, mỗi điểm được gắn thứ tự mẫu cân bằng, giống ArcGIS Create Spatially Balanced Points.",
            "params": {
              "constraint": {
                "label": "Ràng buộc",
                "description": "Lớp đa giác ràng buộc; các điểm được tạo bên trong các đa giác này."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "num_points": {
                "label": "Số điểm",
                "description": "Số điểm mẫu cần tạo."
              },
              "probability": {
                "label": "Xác suất",
                "description": "Raster xác suất chọn mẫu tùy chọn; các ô có giá trị cao hơn có khả năng được lấy mẫu cao hơn (được chuẩn hóa theo giá trị lớn nhất của nó)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống ngẫu nhiên để lấy mẫu có thể tái lập (mặc định 1)."
              }
            }
          },
          "create_underpass": {
            "name": "Tạo hầm chui",
            "description": "Tại các giao cắt đường, xây dựng đa giác mặt nạ định hướng theo đối tượng phía trên và cắt một khoảng hở tương ứng khỏi đối tượng phía dưới để nó được hiểu là đi bên dưới (ArcGIS Create Underpass). Là công cụ chị em của create_overpass đã phát hành, vốn che đường phía dưới để đường phía trên liền mạch; hầm chui thì cần vết ngắt trang trí, đó là điểm phân biệt cửa hầm với cầu. Xuất cả mặt nạ lẫn các đường phía dưới đã cắt.",
            "params": {
              "above": {
                "label": "Trên",
                "description": "Vector đường gồm các đối tượng đi BÊN TRÊN nút giao (các mặt nạ được định hướng dọc theo các đối tượng này). Định dạng được tự động nhận diện, hoặc đối tượng trong bộ nhớ."
              },
              "below": {
                "label": "Dưới",
                "description": "Vector đường gồm các đối tượng đi BÊN DƯỚI nút giao (các đường sẽ được tạo khoảng hở). Định dạng được tự động nhận diện, hoặc đối tượng trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho các đa giác mặt nạ chui dưới. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_lines": {
                "label": "Đầu ra đường",
                "description": "Đường dẫn đầu ra tùy chọn cho lớp bên dưới đã được cắt bỏ các khoảng hở chui dưới. Nếu bỏ qua, kết quả được lưu trong bộ nhớ (vẫn được trả về dưới tên 'output_lines')."
              },
              "margin_along": {
                "label": "Lề dọc",
                "description": "Nửa chiều dài của mỗi mặt nạ đo DỌC THEO đường bên trên, theo đơn vị hệ tọa độ; mặt nạ trải dài gấp 2 lần giá trị này theo hướng đó. Mặc định 1.0."
              },
              "margin_across": {
                "label": "Lề ngang",
                "description": "Nửa chiều rộng của mỗi mặt nạ NGANG QUA đường bên trên, theo đơn vị hệ tọa độ. Với nút giao vuông góc, đây là giá trị quyết định khoảng hở cắt vào đường bên dưới, nên chiều dài bị loại bỏ bằng 2 lần giá trị này. Mặc định 1.0."
              },
              "min_angle": {
                "label": "Góc tối thiểu",
                "description": "Bỏ qua các nút giao mà hai đường gặp nhau ở góc nhỏ hơn giá trị này (tính bằng độ), vì mặt nạ gần song song thì không ổn định. Mặc định 15."
              }
            }
          },
          "cul_de_sac_masks": {
            "name": "Mặt nạ đường cụt",
            "description": "Tạo đa giác mặt nạ che khuất theo tỉ lệ tại các vòng cụt (cul-de-sac) trong mạng lưới đường, giống ArcGIS Cul-De-Sac Masks.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp tim đường giao thông."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đa giác mặt nạ đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "reference_scale": {
                "label": "Tỉ lệ tham chiếu",
                "description": "Mẫu số tỉ lệ bản đồ mà mặt nạ được định kích thước theo đó (ví dụ 24000 cho 1:24,000)."
              },
              "symbol_width": {
                "label": "Chiều rộng ký hiệu",
                "description": "Chiều rộng viền bao đường theo đơn vị trang (xem 'page_unit') tại tỉ lệ tham chiếu."
              },
              "margin": {
                "label": "Lề",
                "description": "Lề bổ sung quanh ký hiệu, theo đơn vị trang (mặc định 0)."
              },
              "page_unit": {
                "label": "Đơn vị trang",
                "description": "Đơn vị của 'symbol_width' và 'margin': điểm (mặc định, 1/72 inch), mm, hoặc inch."
              },
              "map_units_per_meter": {
                "label": "Đơn vị bản đồ trên mỗi mét",
                "description": "Số đơn vị hệ tọa độ trên mỗi mét (mặc định 1, đúng với các hệ tọa độ chiếu theo mét). Với lớp dùng đơn vị độ, hãy dùng khoảng 0.000008983."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai bắt dính tọa độ khi nối các điểm đầu mút đường thành nút mạng lưới (mặc định 0.001 đơn vị bản đồ)."
              },
              "attributes": {
                "label": "Thuộc tính",
                "description": "ids_only (mặc định) | all — có chuyển các thuộc tính của đối tượng nguồn sang mặt nạ hay không."
              }
            }
          },
          "cut_fill": {
            "name": "Đào đắp",
            "description": "Biến động thể tích giữa hai bề mặt DEM (trước/sau) hoặc giữa một bề mặt và mặt phẳng tham chiếu: raster biến thiên độ cao có dấu cùng với thể tích đào, đắp và thể tích ròng, tùy chọn gắn nhãn thể tích theo từng vùng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster 'trước' (hoặc bề mặt duy nhất trong chế độ mặt phẳng)."
              },
              "after": {
                "label": "Sau",
                "description": "Raster 'sau' (chế độ hai bề mặt). Phải dùng chung lưới với 'input'. Cung cấp tham số này hoặc 'plane'."
              },
              "plane": {
                "label": "Mặt phẳng",
                "description": "Độ cao mặt phẳng tham chiếu (chế độ thể tích bề mặt): thay đổi được đo bằng input trừ đi giá trị này. Cung cấp tham số này hoặc 'after'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn cho thay đổi độ cao có dấu (Δz). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ (các) raster đầu vào (đánh số từ 1). Mặc định 1."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Các ô có |Δz| bằng hoặc nhỏ hơn giá trị này (đơn vị z của hệ tọa độ) được coi là không thay đổi. Mặc định 0."
              },
              "region_output": {
                "label": "Đầu ra vùng",
                "description": "Đường dẫn raster tùy chọn cho nhãn các vùng đào/đắp liền kề (id vùng >= 1; các ô không thay đổi là NoData)."
              },
              "csv_output": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn CSV tùy chọn cho bảng thể tích theo từng vùng (region_id, type, cell_count, volume)."
              }
            }
          },
          "darcy_flow": {
            "name": "Dòng chảy Darcy",
            "description": "Trường vận tốc Darcy nước ngầm ở trạng thái ổn định từ các raster cột nước, độ dẫn thủy lực và độ rỗng — một raster độ lớn dòng chảy (vận tốc Darcy) và một raster hướng dòng chảy xuôi gradient (v = -(T/n)·∇head), tùy chọn truy vết hạt đối lưu (RK2) từ các điểm hạt giống thành polyline đường dòng — giống ArcGIS Darcy Flow / Particle Track.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster cột nước ngầm (độ cao mực nước ngầm). Kích thước ô được lấy từ raster này."
              },
              "transmissivity": {
                "label": "Độ dẫn thủy lực",
                "description": "Raster hệ số dẫn nước (đã đồng đăng ký với raster cột nước)."
              },
              "porosity": {
                "label": "Độ rỗng",
                "description": "Raster độ rỗng hữu hiệu (đã đồng đăng ký với raster cột nước; giá trị phải > 0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster độ lớn vận tốc Darcy đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "direction": {
                "label": "Hướng",
                "description": "Đường dẫn raster hướng dòng chảy đầu ra tùy chọn (góc phương vị tính bằng độ, từ hướng bắc theo chiều kim đồng hồ, xuôi theo gradient). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ mỗi raster đầu vào (đánh số từ 1, mặc định 1)."
              },
              "seeds": {
                "label": "Điểm hạt giống",
                "description": "Vector điểm tùy chọn gồm các hạt giống phần tử. Khi được cung cấp, các đường dòng được truy vết từ mỗi hạt giống."
              },
              "streamlines": {
                "label": "Đường dòng",
                "description": "Đường dẫn vector đường đầu ra tùy chọn cho các đường dòng phần tử được truy vết (yêu cầu 'seeds')."
              },
              "step": {
                "label": "Bước",
                "description": "Độ dài bước theo dõi phần tử theo đơn vị hệ tọa độ (mặc định: kích thước ô của raster cột nước)."
              },
              "max_steps": {
                "label": "Số bước tối đa",
                "description": "Số bước tích phân tối đa cho mỗi phần tử (mặc định 1000)."
              }
            }
          },
          "delineate_built_up_areas": {
            "name": "Khoanh vùng xây dựng",
            "description": "Tổng quát hóa các đường bao nhà dày đặc thành đa giác khu dân cư / phạm vi đô thị trơn mượt bằng cách nhóm các nhà gần nhau (phép đóng hình thái), với bộ lọc số nhà tối thiểu và diện tích tối thiểu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác đường bao công trình đầu vào, định dạng được tự động nhận diện (hoặc đối tượng trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "grouping_distance": {
                "label": "Khoảng cách nhóm",
                "description": "Các công trình có đường bao nằm trong khoảng cách này (đơn vị hệ tọa độ) được gộp thành một khu vực xây dựng. Bán kính đóng hình thái học được đặt bằng nửa giá trị này."
              },
              "min_building_count": {
                "label": "Số nhà tối thiểu",
                "description": "Loại bỏ các khu vực xây dựng chứa ít công trình hơn số này (mặc định 1 — giữ lại mọi nhóm)."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Loại bỏ các khu vực xây dựng có diện tích (đơn vị hệ tọa độ bình phương) nhỏ hơn giá trị này, và lấp các lỗ bên trong nhỏ hơn giá trị đó. Mặc định: giữ lại tất cả."
              },
              "simplify_tolerance": {
                "label": "Dung sai đơn giản hóa",
                "description": "Dung sai Douglas–Peucker (đơn vị hệ tọa độ) áp dụng cho ranh giới khu vực xây dựng để làm thưa vùng đệm bo tròn dày đặc đỉnh. Mặc định 0 (không đơn giản hóa)."
              }
            }
          },
          "delineate_depressions": {
            "name": "Khoanh vùng trũng",
            "description": "Khoanh vùng các vùng trũng lồng nhau từ raster vùng trũng bằng phương pháp tập mức (lidar slicing.py).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster vùng trũng đầu vào (ví dụ đầu ra của extract_sinks)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster id vùng trũng tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "level_output": {
                "label": "Đầu ra mức",
                "description": "Đường dẫn đầu ra tùy chọn cho raster cấp vùng trũng."
              },
              "csv_output": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho tệp CSV thuộc tính vùng trũng."
              },
              "vector_output": {
                "label": "Đầu ra vector",
                "description": "Đường dẫn đầu ra tùy chọn cho các đa giác vùng trũng dưới dạng GeoJSON (đã nối thuộc tính)."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Số điểm ảnh nhỏ nhất cho một vùng trũng (mặc định 10)."
              },
              "min_depth": {
                "label": "Độ sâu tối thiểu",
                "description": "Độ sâu vùng trũng nhỏ nhất (chấp nhận để tương thích; không sử dụng, khớp với lidar)."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Khoảng cắt lớp cho phương pháp level-set (mặc định 0.3)."
              }
            }
          },
          "delineate_mounts": {
            "name": "Khoanh vùng gò",
            "description": "Khoanh vùng phân cấp lồng nhau của các đối tượng nhô cao (gò) trong DEM (lidar mounts.py).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster id đỉnh núi tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "level_output": {
                "label": "Đầu ra mức",
                "description": "Đường dẫn đầu ra tùy chọn cho raster cấp đỉnh núi."
              },
              "csv_output": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho tệp CSV thuộc tính đỉnh núi."
              },
              "vector_output": {
                "label": "Đầu ra vector",
                "description": "Đường dẫn đầu ra tùy chọn cho các đa giác đỉnh núi dưới dạng GeoJSON (đã nối thuộc tính)."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Số điểm ảnh nhỏ nhất cho một đỉnh núi (mặc định 10)."
              },
              "min_height": {
                "label": "Chiều cao tối thiểu",
                "description": "Chiều cao đỉnh núi nhỏ nhất (chấp nhận để tương thích; không sử dụng, khớp với lidar)."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Khoảng cắt lớp cho phương pháp level-set (mặc định 0.3)."
              },
              "delta": {
                "label": "Delta",
                "description": "Giá trị gốc được cộng thêm khi lật DEM (mặc định 100)."
              }
            }
          },
          "dem_filter": {
            "name": "Bộ lọc DEM",
            "description": "Làm trơn DEM bằng bộ lọc trung bình, trung vị hoặc Gauss (lidar filtering.py).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "filter": {
                "label": "Bộ lọc",
                "description": "Loại bộ lọc: 'mean', 'median', hoặc 'gaussian' (mặc định 'mean')."
              },
              "kernel_size": {
                "label": "Kích thước kernel",
                "description": "Kích thước cửa sổ tính theo điểm ảnh cho bộ lọc mean/median (mặc định 3)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Độ lệch chuẩn cho bộ lọc Gauss (mặc định 1.0)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần lọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "dendrogram": {
            "name": "Biểu đồ cây",
            "description": "Xây dựng cây gộp phân cấp trên các chữ ký lớp để cho thấy mức độ tách biệt giữa các lớp, giống ArcGIS Dendrogram.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đã phân cụm có trường lớp và các trường số xác định không gian đặc trưng."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường chứa mã định danh lớp / cụm."
              },
              "fields": {
                "label": "Trường",
                "description": "Các trường số xác định không gian đặc trưng, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng gộp đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Khoảng cách giữa các chữ ký: 'variance' (mặc định; chuẩn hóa theo độ phân tán trong lớp) hoặc 'mean_only'."
              },
              "standardize": {
                "label": "Chuẩn hóa",
                "description": "Chuẩn hóa Z cho từng trường trước khi tính khoảng cách để các trường có biên độ lớn không chiếm ưu thế (mặc định true)."
              },
              "output_text": {
                "label": "Văn bản đầu ra",
                "description": "Đường dẫn tùy chọn cho bản kết xuất cây dạng văn bản thuần có thụt lề."
              }
            }
          },
          "densify_sampling_network": {
            "name": "Tăng mật độ mạng lưới lấy mẫu",
            "description": "Đề xuất vị trí lấy mẫu mới tại các ô có bề mặt sai số chuẩn dự đoán kriging cao nhất, tuân thủ khoảng cách ức chế tối thiểu, giống ArcGIS Densify Sampling Network.",
            "params": {
              "prediction_error": {
                "label": "Sai số dự đoán",
                "description": "Raster sai số chuẩn của dự báo đầu vào (ví dụ bề mặt phương sai/sai số kriging). Các mẫu mới sẽ nhắm vào những ô có sai số cao nhất của nó."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "count": {
                "label": "Số lượng",
                "description": "Số vị trí lấy mẫu mới cần đề xuất."
              },
              "inhibition_distance": {
                "label": "Khoảng cách ức chế",
                "description": "Khoảng cách nhỏ nhất giữa các mẫu được đề xuất theo đơn vị bản đồ (mặc định 0 = không hạn chế; chỉ lấy các ô có sai số cao nhất)."
              },
              "mask": {
                "label": "Mặt nạ",
                "description": "Lớp đa giác tùy chọn; chỉ các ô có tâm nằm bên trong mới là ứng viên hợp lệ."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của raster sai số dự báo cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "detect_bright_ocean_objects": {
            "name": "Phát hiện đối tượng sáng trên biển",
            "description": "Tìm tàu thuyền và các mục tiêu điểm sáng khác trên mặt nước trong ảnh SAR bằng bộ phát hiện CFAR hai tham số, và xuất chúng dưới dạng hộp bao có hướng kèm chiều dài, chiều rộng, hướng đi và tán xạ ngược đỉnh (ArcGIS Detect Bright Ocean Objects). Cả hai sổ đăng ký đều chưa có bộ phát hiện theo nhiễu nền cục bộ: ngưỡng toàn cục không thể dùng được vì nhiễu biển sáng lên theo gió và góc tới, matched_filter_target_detection là bộ phát hiện quang học theo phổ, còn detect_image_anomalies dùng mô hình toàn cục thay vì cửa sổ trượt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster tán xạ ngược SAR."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác đầu ra gồm các đối tượng được phát hiện. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "geometry_type": {
                "label": "Kiểu hình học",
                "description": "'bounding_box' (mặc định) cho hình chữ nhật nhỏ nhất có định hướng, hoặc 'perimeter' cho đường bao phát hiện đã truy vết."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng phát hiện CFAR tính theo số độ lệch chuẩn của nền (mặc định 5.0)."
              },
              "guard_size": {
                "label": "Kích thước vùng bảo vệ",
                "description": "Nửa chiều rộng tính theo ô của dải bảo vệ bị loại khỏi ước lượng nền (mặc định 3). Phải nhỏ hơn background_size."
              },
              "background_size": {
                "label": "Kích thước vùng nền",
                "description": "Nửa chiều rộng tính theo ô của vành nền (mặc định 12)."
              },
              "mask_features": {
                "label": "Đối tượng mặt nạ",
                "description": "Lớp đa giác che đất liền hoặc mặt nước. Các ô bị mặt nạ loại trừ sẽ không được kiểm tra cũng không được dùng làm nền."
              },
              "mask_type": {
                "label": "Kiểu mặt nạ",
                "description": "'land_polygon' (mặc định; phân tích bên ngoài các đa giác) hoặc 'water_polygon' (phân tích bên trong chúng)."
              },
              "min_object_length": {
                "label": "Chiều dài đối tượng tối thiểu",
                "description": "Loại bỏ các đối tượng ngắn hơn giá trị này, theo đơn vị bản đồ."
              },
              "max_object_length": {
                "label": "Chiều dài đối tượng tối đa",
                "description": "Loại bỏ các đối tượng dài hơn giá trị này, theo đơn vị bản đồ."
              },
              "min_object_width": {
                "label": "Chiều rộng đối tượng tối thiểu",
                "description": "Loại bỏ các đối tượng hẹp hơn giá trị này, theo đơn vị bản đồ."
              },
              "max_object_width": {
                "label": "Chiều rộng đối tượng tối đa",
                "description": "Loại bỏ các đối tượng rộng hơn giá trị này, theo đơn vị bản đồ."
              },
              "min_cells": {
                "label": "Số ô tối thiểu",
                "description": "Loại bỏ các phát hiện nhỏ hơn số ô này (mặc định 2), giúp triệt tiêu các đỉnh nhiễu đốm đơn lẻ."
              },
              "input_units": {
                "label": "Đơn vị đầu vào",
                "description": "'intensity' (mặc định), 'dn', 'amplitude', hoặc 'db'. Việc phát hiện chạy trên công suất tuyến tính, nơi thống kê nhiễu nền có ý nghĩa."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần tìm kiếm (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "detect_dark_ocean_areas": {
            "name": "Phát hiện vùng tối trên biển",
            "description": "Tìm các mảng tối bất thường trên mặt nước trong ảnh SAR — vệt dầu, rò rỉ tự nhiên, màng tảo, vùng gió yếu — dưới dạng các vùng nằm thấp hơn nền biển cục bộ một số độ lệch chuẩn xác định, báo cáo kèm độ tương phản theo dB (ArcGIS Detect Dark Ocean Areas). Là phần bổ sung của detect_bright_ocean_objects và khác với extract_water_sar: cảnh toàn nước là đơn mode, nên phép tách Otsu chỉ đơn giản chia đôi nhiễu biển và báo cáo nửa đại dương là vệt dầu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster tán xạ ngược SAR trên mặt nước."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác đầu ra gồm các vùng tối. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_raster": {
                "label": "Raster đầu ra",
                "description": "Mặt nạ nhị phân đầu ra (1 tối, 0 nền). Luôn được tạo; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'statistical' (mặc định; một số độ lệch chuẩn định trước dưới trung bình nền), 'otsu' hoặc 'fixed'."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Với 'statistical', bao nhiêu độ lệch chuẩn dưới trung bình thì được coi là tối (mặc định 2.0). Với 'fixed', mức dB mà tại hoặc dưới đó một ô được coi là tối."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Loại bỏ các vùng tối nhỏ hơn diện tích này tính theo đơn vị bản đồ bình phương. Vệt dầu thì lớn và liền mạch; nhiễu đốm thì không."
              },
              "min_contrast_db": {
                "label": "Độ tương phản tối thiểu (dB)",
                "description": "Loại bỏ các vùng nằm thấp hơn nền ít hơn số dB này. Vệt dầu khoáng thường thấp hơn nền quá 5 dB."
              },
              "mask_features": {
                "label": "Đối tượng mặt nạ",
                "description": "Lớp đa giác giới hạn phân tích trong vùng nước. Đất liền sáng và sẽ làm tăng giả tạo ước lượng nền."
              },
              "mask_type": {
                "label": "Kiểu mặt nạ",
                "description": "'land_polygon' (mặc định; phân tích bên ngoài các đa giác) hoặc 'water_polygon' (phân tích bên trong chúng)."
              },
              "histogram_bins": {
                "label": "Số khoảng lược đồ",
                "description": "Số khoảng dùng cho lược đồ Otsu (mặc định 256)."
              },
              "input_units": {
                "label": "Đơn vị đầu vào",
                "description": "'intensity' (mặc định), 'dn', 'amplitude' hoặc 'db'."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần tìm kiếm (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "detect_feature_changes": {
            "name": "Phát hiện biến động đối tượng",
            "description": "Đối sánh hai bộ dữ liệu đường theo khoảng cách Hausdorff và phân loại từng đối tượng thành không đổi / không gian / thuộc tính / không gian_thuộc tính / mới, cùng các đối tượng gốc đã bị xóa — điểm vào cho phát hiện biến động vector và hợp nhất dữ liệu, giống ArcGIS Detect Feature Changes.",
            "params": {
              "update": {
                "label": "Cập nhật",
                "description": "Lớp vector đường đã cập nhật (trạng thái mới)."
              },
              "base": {
                "label": "Nền",
                "description": "Lớp vector đường cơ sở (trạng thái trước) để so sánh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đường đầu ra (các đối tượng cập nhật đã được phân loại, cùng các đối tượng cơ sở đã bị xóa). Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách lớn nhất (đơn vị hệ tọa độ) để khớp một đường cập nhật với một đường cơ sở. Bắt buộc."
              },
              "spatial_tolerance": {
                "label": "Dung sai không gian",
                "description": "Khoảng cách Hausdorff mà dưới đó một hình học đã khớp được coi là không thay đổi (đơn vị hệ tọa độ). Mặc định: search_distance / 5."
              },
              "compare_fields": {
                "label": "Trường so sánh",
                "description": "Trường (các trường) phân tách bằng dấu phẩy có mặt trên cả hai lớp để so sánh thay đổi thuộc tính."
              }
            }
          },
          "detect_graphic_conflict": {
            "name": "Phát hiện xung đột đồ họa",
            "description": "Tìm nơi phạm vi ký hiệu hóa (theo độ rộng vẽ) của hai lớp đối tượng — hoặc một lớp so với chính nó — chồng lấn hoặc chen chúc trong khoảng cách tách tối thiểu, xuất một đa giác xung đột cho mỗi cặp xung đột được gắn ID của cả hai đối tượng nguồn và diện tích chồng lấn, giống ArcGIS Detect Graphic Conflict.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm, đường hoặc đa giác)."
              },
              "conflict": {
                "label": "Xung đột",
                "description": "Lớp vector thứ hai để đối chiếu với 'input'. Bỏ qua để kiểm tra 'input' với chính nó."
              },
              "symbol_width": {
                "label": "Chiều rộng ký hiệu",
                "description": "Chiều rộng/đường kính ký hiệu hóa của các đối tượng 'input', tính theo đơn vị bản đồ."
              },
              "conflict_symbol_width": {
                "label": "Chiều rộng ký hiệu xung đột",
                "description": "Chiều rộng/đường kính ký hiệu hóa của các đối tượng 'conflict', tính theo đơn vị bản đồ. Mặc định: giống 'symbol_width'. Bị bỏ qua khi không có 'conflict'."
              },
              "conflict_distance": {
                "label": "Khoảng cách xung đột",
                "description": "Khoảng tách bắt buộc thêm ngoài việc tiếp xúc, tính theo đơn vị bản đồ. Mặc định 0."
              },
              "line_connection_allowance": {
                "label": "Cho phép nối đường",
                "description": "Bán kính quanh một điểm cuối chung của hai đối tượng đường cùng lớp mà trong đó phần chồng lấn của chúng được coi là kết nối đầu-cuối bình thường, không phải xung đột. Mặc định 0 (không cho phép)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra với các trường 'input_fid', 'conflict_fid' và 'overlap_area'. Nếu bỏ qua, lưu trong bộ nhớ."
              }
            }
          },
          "detect_image_anomalies": {
            "name": "Phát hiện bất thường trên ảnh",
            "description": "Chấm điểm mọi điểm ảnh của ảnh đa kênh theo khoảng cách Mahalanobis tới thống kê kênh của toàn cảnh (hoặc của cửa sổ trượt) — bộ phát hiện bất thường Reed–Xiaoli (RX) — với tùy chọn mặt nạ ngưỡng phân vị, giống ArcGIS Detect Image Anomalies.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đa kênh đầu vào (từ 2 kênh trở lên)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster điểm số dị thường đầu ra (F32). Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'global' (thống kê toàn cảnh, mặc định) hoặc 'local' (thống kê cửa sổ trượt)."
              },
              "window": {
                "label": "Cửa sổ",
                "description": "Kích thước cửa sổ lẻ (điểm ảnh) cho chế độ local (mặc định 15)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Phân vị tùy chọn (0-100) của phân bố điểm số mà trên đó một mặt nạ dị thường nhị phân được ghi ra."
              },
              "mask_output": {
                "label": "Đầu ra mặt nạ",
                "description": "Đường dẫn đầu ra cho mặt nạ dị thường nhị phân (yêu cầu 'threshold'). Nếu bỏ qua khi có ngưỡng, lưu trong bộ nhớ."
              }
            }
          },
          "detect_incidents": {
            "name": "Phát hiện sự cố",
            "description": "Đánh dấu nơi một điều kiện bắt đầu và kết thúc dọc theo từng quỹ đạo: nhóm các điểm có dấu thời gian theo quỹ đạo, sắp xếp theo thời gian, đánh giá phép so sánh bắt đầu (và tùy chọn kết thúc) trên một thuộc tính số, rồi xuất các đợt sự cố dưới dạng điểm được đánh dấu hoặc đoạn đường theo từng đợt kèm ID và thời lượng — giống ArcGIS Detect Incidents.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa các quan sát có dấu thời gian."
              },
              "track_field": {
                "label": "Trường quỹ đạo",
                "description": "Trường xác định mỗi vệt di chuyển/đối tượng di chuyển (ví dụ id phương tiện hoặc động vật)."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: số giây dạng số hoặc một dấu thời gian ISO-8601."
              },
              "start_condition": {
                "label": "Điều kiện bắt đầu",
                "description": "Điều kiện mở một sự cố, ví dụ 'speed > 30'. Cú pháp: '<field> <op> <number>' với op là một trong > >= < <= == != , tùy chọn hai mệnh đề nối bằng AND."
              },
              "end_condition": {
                "label": "Điều kiện kết thúc",
                "description": "Điều kiện tùy chọn kết thúc một sự cố (cùng cú pháp). Nếu bỏ qua, sự cố kết thúc khi điều kiện bắt đầu không còn đúng."
              },
              "mode": {
                "label": "Chế độ",
                "description": "Chế độ đầu ra: 'points' (mặc định, mọi điểm được sao chép qua kèm các trường sự cố) hoặc 'segments' (một polyline cho mỗi sự cố)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "dice": {
            "name": "Xúc xắc",
            "description": "Tách các đa giác hoặc polyline có số đỉnh vượt giới hạn thành lưới các mảnh nhỏ hơn (giống ArcGIS Dice) để chồng lớp và chia ô ở bước sau vẫn nhanh — một quadtree thích nghi giao hình học với từng phần tư cho đến khi mọi mảnh đều dưới giới hạn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác hoặc polyline đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đầu ra gồm các mảnh đã cắt nhỏ. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "vertex_limit": {
                "label": "Giới hạn đỉnh",
                "description": "Số đỉnh lớn nhất trên mỗi đối tượng đầu ra (mặc định 10000). Các đối tượng bằng hoặc dưới mức này được giữ nguyên."
              }
            }
          },
          "difference_3d": {
            "name": "Hiệu 3D",
            "description": "Trừ một tập khối 3D khỏi một tập khác, báo cáo thể tích bị loại bỏ và thể tích còn lại của từng đối tượng bị trừ (ArcGIS Difference 3D). union_3d là phép chồng lớp 3D duy nhất trong cả hai sổ đăng ký và erase chỉ là 2D cho đa giác, nên chưa có cách tính thể tích đào còn lại sau một khối cắt hoặc thể tích luồng khói ngoài đường bao loại trừ. Thể tích của đối tượng bị trừ là chính xác; thể tích bị loại bỏ được ước tính bằng chiếm chỗ voxel ở độ phân giải được báo cáo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các khối rắn 3D khép kín bị trừ (MultiPolygon lưới tam giác có Z)."
              },
              "subtract": {
                "label": "Trừ",
                "description": "Các khối rắn 3D khép kín dùng để trừ khỏi mỗi khối bị trừ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Bảng đầu ra, mỗi khối bị trừ một hàng. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Số ô voxel dọc theo trục dài nhất của hộp bao mỗi khối bị trừ (mặc định 64). Giá trị cao hơn thì chính xác hơn và chậm hơn."
              },
              "keep_geometry": {
                "label": "Giữ hình học",
                "description": "Chuyển hình học gốc của mỗi khối bị trừ sang hàng đầu ra của nó (mặc định false: bảng chỉ có thuộc tính). Hình học là khối bị trừ CHƯA CẮT — không tạo ra lưới hợp nhất chính xác."
              }
            }
          },
          "diffusion_interpolation_with_barriers": {
            "name": "Nội suy khuếch tán có rào cản",
            "description": "Nội suy các số đo điểm rời rạc thành raster bằng cách mô phỏng khuếch tán nhiệt chảy VÒNG QUANH các rào cản tuyệt đối (không thông lượng) thay vì xuyên qua chúng (giống ArcGIS Diffusion Interpolation With Barriers). Các mẫu được cố định như ô không đổi; mọi ô khác hội tụ về trung bình của các ô lân cận không phải rào cản qua `number_iterations` lượt quét Jacobi của phương trình Laplace/nhiệt, nên ảnh hưởng suy giảm theo khoảng cách khuếch tán. Khác với kernel đường đi ngắn nhất không qua rào cản của interpolate_with_barriers và với bộ làm trơn raster anisotropic_diffusion_filter.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa các phép đo mẫu (Point / MultiPoint)."
              },
              "z_field": {
                "label": "Trường Z",
                "description": "Trường số trên các điểm chứa giá trị cần nội suy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster nội suy đầu ra (GeoTIFF). Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô / độ phân giải đầu ra theo đơn vị bản đồ (mét với hệ tọa độ địa lý, đơn vị hệ tọa độ nếu khác). Bắt buộc."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp vector rào cản tùy chọn (polyline hoặc đa giác) chặn sự khuếch tán. Polyline chặn các ô mà đoạn của chúng đi qua; đa giác chặn các ô có tâm nằm bên trong. Bỏ qua để có đối chứng không rào cản."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Trọng số nới lỏng lambda mỗi lần lặp trong (0, 0.25] (mặc định 0.2): mỗi ô tự do dịch chuyển theo tỉ lệ này về phía trung bình lân cận của nó trong mỗi lượt quét."
              },
              "number_iterations": {
                "label": "Số lần lặp",
                "description": "Số lượt quét nới lỏng Jacobi của phương trình nhiệt (mặc định 100). Càng nhiều lần lặp thì ảnh hưởng lan càng xa."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số tùy chọn cho trọng số của mỗi điểm (mặc định 1), chỉ dùng để lấy trung bình các mẫu trùng nhau rơi vào cùng một ô đầu ra."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Ghi đè mã EPSG của hệ tọa độ đầu vào (ví dụ khi lớp không được gán nhãn). 4326 sẽ kích hoạt phép chiếu mét cục bộ."
              }
            }
          },
          "dimension_reduction": {
            "name": "Giảm chiều",
            "description": "Phân tích thành phần chính trên các thuộc tính số của đối tượng (giống ArcGIS Dimension Reduction): chuẩn hóa các trường đã chọn, phân tích trị riêng ma trận tương quan/hiệp phương sai bằng phép quay Jacobi tự cài đặt, và ghi điểm thành phần PC1..PCk trở lại các đối tượng cùng báo cáo trị riêng/phương sai/hệ số tải — phiên bản dành cho thuộc tính vector của principal_component_analysis đi kèm vốn chỉ làm việc với kênh ảnh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector (hoặc bảng) đầu vào có các trường thuộc tính số."
              },
              "fields": {
                "label": "Trường",
                "description": "Danh sách phân tách bằng dấu phẩy gồm ít nhất hai trường số cần rút gọn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra có thêm các trường điểm số thành phần chính. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "table": {
                "label": "Bảng",
                "description": "Đường dẫn CSV tùy chọn cho báo cáo thành phần (giá trị riêng, phương sai giải thích, lũy tích, hệ số tải theo từng biến). Luôn được trả về trong kết quả."
              },
              "num_components": {
                "label": "Số thành phần",
                "description": "Số thành phần đầu tiên cần giữ. Mặc định: đủ để đạt 'min_variance', nếu không thì tất cả các trường."
              },
              "min_variance": {
                "label": "Phương sai tối thiểu",
                "description": "Giữ số thành phần ít nhất mà phương sai giải thích lũy tích đạt tỉ lệ này (0-1). Bị bỏ qua nếu đã đặt 'num_components'."
              },
              "standardize": {
                "label": "Chuẩn hóa",
                "description": "Chuẩn hóa từng trường (z-score) trước khi thực hiện PCA để các thang đo có thể so sánh — phân tích ma trận tương quan. Mặc định true; false sẽ phân tích ma trận hiệp phương sai."
              }
            }
          },
          "dimensional_moving_statistics": {
            "name": "Thống kê trượt theo chiều",
            "description": "Chạy cửa sổ trượt dọc theo chiều của khối raster, ghi một lát cắt đã làm trơn cho mỗi lát cắt đầu vào — phép trung bình hoặc trung vị trượt tại chỗ biến chuỗi thời gian vệ tinh nhiễu thành chuỗi dùng được (ArcGIS Dimensional Moving Statistics). time_series_smoothing của vòng 17 chỉ dành cho vector, các bộ lọc tiêu cự đi kèm di chuyển cửa sổ theo không gian trong một lát cắt, còn aggregate_multidimensional_raster rút ngắn khối thành các khoảng. Bao gồm trung bình tròn, nếu không có thì việc lấy trung bình hướng dốc hoặc pha qua điểm bao quanh là vô nghĩa.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lát cắt) hoặc danh sách các raster đã đồng đăng ký, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đa kênh đầu ra với mỗi kênh tương ứng một lát đầu vào. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "dimension": {
                "label": "Chiều",
                "description": "Tên của chiều, chỉ dùng trong báo cáo (mặc định 'slice')."
              },
              "backward_window": {
                "label": "Cửa sổ lùi",
                "description": "Số lát trước lát hiện tại cần đưa vào (mặc định 1)."
              },
              "forward_window": {
                "label": "Cửa sổ tiến",
                "description": "Số lát sau lát hiện tại cần đưa vào (mặc định 1)."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "'mean' (mặc định), 'circular_mean', 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'std' hoặc 'sum'."
              },
              "percentile_value": {
                "label": "Giá trị phân vị",
                "description": "Phân vị trong [0, 100] cho thống kê 'percentile' (mặc định 50)."
              },
              "period": {
                "label": "Chu kỳ",
                "description": "Chu kỳ bao vòng cho 'circular_mean' (mặc định 360, tức độ; dùng 6.283185307179586 cho radian)."
              },
              "min_valid": {
                "label": "Số hợp lệ tối thiểu",
                "description": "Số quan trắc không phải NoData tối thiểu trong cửa sổ trước khi ghi ra một giá trị (mặc định 1)."
              },
              "nodata_handling": {
                "label": "Xử lý NoData",
                "description": "'data' (mặc định; bỏ qua NoData và tính từ phần còn lại), 'nodata' (bất kỳ NoData nào trong cửa sổ đều làm đầu ra thành NoData) hoặc 'fill_nodata' (ghi giá trị cả khi bản thân lát trung tâm là NoData)."
              }
            }
          },
          "directional_distribution": {
            "name": "Phân bố theo hướng",
            "description": "Thống kê mô tả phân bố địa lý: tâm trung bình, tâm trung vị, đối tượng trung tâm, khoảng cách chuẩn (đường tròn) và ellipse độ lệch chuẩn — với tùy chọn trọng số và nhóm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (ưu tiên điểm; các hình học khác dùng điểm đại diện là trung bình các đỉnh)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "Đại lượng cần tính: 'mean_center', 'median_center', 'central_feature', 'standard_distance' hoặc 'standard_deviational_ellipse'."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số tùy chọn để gán trọng số cho mỗi đối tượng (ví dụ dân số). Mặc định: mọi đối tượng có trọng số 1."
              },
              "case_field": {
                "label": "Trường trường hợp",
                "description": "Trường tùy chọn để nhóm các đối tượng; mỗi giá trị khác biệt tạo ra một đối tượng đầu ra."
              },
              "n_std": {
                "label": "Số độ lệch chuẩn",
                "description": "Hệ số nhân độ lệch chuẩn (1, 2 hoặc 3) cho đường tròn khoảng cách chuẩn và ellipse độ lệch chuẩn. Mặc định 1."
              }
            }
          },
          "directional_trend": {
            "name": "Xu thế theo hướng",
            "description": "Chiếu các điểm mẫu lên một phương vị đã chọn và khớp đa thức bậc 1-3 của giá trị theo khoảng cách để phát hiện xu thế toàn cục/dị hướng trước khi phân tích variogram (giống Directional Trend của ArcGIS). 'determine' quét các phương vị để tìm hướng có phương sai được giải thích lớn nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (ưu tiên điểm; các hình học khác dùng điểm đại diện là trung bình các đỉnh)."
              },
              "field": {
                "label": "Trường",
                "description": "Trường thuộc tính số cần phân tích xu hướng."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "Góc phương vị la bàn tính bằng độ (0 = bắc, theo chiều kim đồng hồ) để chiếu lên, hoặc 'determine' (mặc định) để quét 0-179° tìm hướng có phương sai giải thích lớn nhất."
              },
              "order": {
                "label": "Bậc",
                "description": "Bậc đa thức 1, 2 hoặc 3 (mặc định 2)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (driver theo phần mở rộng). Nếu bỏ qua, lưu trong bộ nhớ. Các điểm mang proj_dist, value, fitted và residual."
              }
            }
          },
          "directional_variogram": {
            "name": "Phân tích variogram theo hướng",
            "description": "Tính variogram theo nhiều hướng để phát hiện tính dị hướng không gian. Cho thấy các mẫu liên tục theo hướng, rất cần thiết cho kriging thực tế.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm chứa các giá trị đo"
              },
              "field": {
                "label": "Trường",
                "description": "Trường chứa các giá trị đo"
              },
              "directions": {
                "label": "Hướng",
                "description": "Danh sách các góc phương vị (0-180°) cần phân tích, phân tách bằng dấu phẩy"
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai hướng tính bằng độ (mặc định 22.5)"
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách trễ lớn nhất cần tính (mặc định 1000)"
              },
              "bin_size": {
                "label": "Kích thước ô",
                "description": "Kích thước các khoảng trễ (mặc định 50)"
              },
              "output_json": {
                "label": "JSON đầu ra",
                "description": "Đường dẫn tệp đầu ra cho kết quả variogram theo hướng"
              },
              "output_html": {
                "label": "HTML đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho biểu đồ hoa gió dạng HTML"
              }
            }
          },
          "disperse_markers": {
            "name": "Phân tán điểm đánh dấu",
            "description": "Giãn các ký hiệu điểm trùng hoặc chồng lấn ra đến khoảng cách tâm-tâm tối thiểu (mẫu mở rộng/vòng/chữ thập/vuông) để các điểm xếp chồng vẫn nhìn thấy riêng biệt, giống ArcGIS Disperse Markers.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "min_spacing": {
                "label": "Khoảng cách tối thiểu",
                "description": "Khoảng cách tâm-đến-tâm nhỏ nhất cần đảm bảo giữa các điểm đã phân cụm, tính theo đơn vị bản đồ."
              },
              "pattern": {
                "label": "Mẫu",
                "description": "'expanded' (mặc định, các vòng đồng tâm + lực đẩy cục bộ), 'ring' (một đường tròn), 'cross' (bốn nhánh) hoặc 'square' (lưới)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống nguyên để phá thế hòa một cách tất định khi các thành viên ban đầu trùng nhau hoàn toàn (mặc định 0)."
              }
            }
          },
          "dissolve_route_events": {
            "name": "Hòa tan sự kiện tuyến",
            "description": "Gộp các sự kiện tuyến chạm nhau hoặc chồng lấn trên cùng một tuyến thành các khoảng số đo đơn, hoặc chỉ khi các trường hòa tan trùng khớp ('dissolve') hoặc bằng cách nối chuỗi các giá trị khác nhau ('concatenate'). Giống ArcGIS Dissolve Route Events.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Bảng sự kiện đầu vào (sự kiện dạng đường có trị đo từ/đến)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng sự kiện đầu ra. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường chứa mã định danh tuyến."
              },
              "from_measure_field": {
                "label": "Trường số đo đầu",
                "description": "Trường chứa trị đo bắt đầu của mỗi sự kiện."
              },
              "to_measure_field": {
                "label": "Trường số đo cuối",
                "description": "Trường chứa trị đo kết thúc của mỗi sự kiện. Với sự kiện dạng điểm, dùng cùng trường như 'from_measure_field'."
              },
              "dissolve_fields": {
                "label": "Trường hòa tan",
                "description": "Tên trường (các trường) phân tách bằng dấu phẩy/chấm phẩy phải khớp nhau để hai đoạn được gộp (hoặc có giá trị được nối lại)."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'dissolve' (mặc định) hoặc 'concatenate'."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Khoảng hở trị đo mà dưới đó hai đoạn được coi là liền kề (mặc định 0)."
              },
              "separator": {
                "label": "Dấu phân cách",
                "description": "Ký tự phân tách dùng để nối các giá trị ở chế độ 'concatenate' (mặc định ', ')."
              }
            }
          },
          "edgematch_features": {
            "name": "Khớp biên đối tượng",
            "description": "Nối các bộ dữ liệu đường qua ranh giới ô/mảnh bản đồ (giống ArcGIS Generate Edgematch Links + Edgematch Features): khớp một-một các điểm cuối treo trong dung sai và hòa giải chúng (điểm giữa hoặc bắt dính), với tùy chọn lớp liên kết khớp. Là phép khớp một-một giữa các đối tượng mà snap_endnodes bắt dính mù không có.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường đầu vào (ví dụ hai ô kề nhau đã được gộp) để khớp biên."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đường đã hiệu chỉnh đầu ra. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Khoảng cách lớn nhất giữa các điểm cuối lơ lửng để khớp chúng với nhau."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'midpoint' (dịch cả hai đầu về trung điểm của chúng; mặc định) hoặc 'move_endpoint' (bắt dính đầu thứ hai vào đầu thứ nhất)."
              },
              "match_fields": {
                "label": "Trường khớp",
                "description": "Các trường tùy chọn phân tách bằng dấu phẩy; một cặp khớp phải trùng nhau ở các trường này (giúp phân định các ứng viên)."
              },
              "links": {
                "label": "Liên kết",
                "description": "Lớp đường đầu ra tùy chọn gồm các liên kết khớp (dùng cho kiểm tra chất lượng)."
              }
            }
          },
          "eighty_twenty_analysis": {
            "name": "Phân tích 80/20",
            "description": "Bắt dính các điểm sự cố vào các vị trí có trọng số và tính độ tập trung Pareto ('X% sự cố xảy ra tại Y% vị trí'), gắn cho mỗi vị trí thứ hạng, phần trăm sự cố tích lũy và dải đầu/đuôi, giống ArcGIS Eighty Twenty Analysis.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm sự cố đầu vào (Point hoặc MultiPoint)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "cluster_tolerance": {
                "label": "Dung sai cụm",
                "description": "Khoảng cách mà trong đó các sự cố được bắt dính vào một vị trí (đơn vị bản đồ, mặc định 0 = chỉ các điểm trùng nhau hoàn toàn)."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số tùy chọn cho trọng số của mỗi sự cố (mặc định: mỗi sự cố tính là 1)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng phần trăm tập trung xác định 'phần đầu' Pareto (mặc định 80)."
              }
            }
          },
          "eliminate_polygon_part": {
            "name": "Loại bỏ phần đa giác",
            "description": "Loại bỏ các lỗ bên trong (và tùy chọn các phần ngoài nhỏ) của đa giác có diện tích dưới ngưỡng diện tích tuyệt đối hoặc phần trăm, giữ nguyên thuộc tính.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào, tự động nhận dạng định dạng (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "condition": {
                "label": "Điều kiện",
                "description": "Phép kiểm tra kích thước: 'AREA' (mặc định) so sánh với 'min_area'; 'PERCENT' so sánh diện tích phần/lỗ theo tỉ lệ phần trăm trên tổng diện tích ngoài của đối tượng với 'percentage'."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Điều kiện AREA: loại bỏ các phần/lỗ có diện tích (đơn vị hệ tọa độ bình phương) nhỏ hơn giá trị này. Bắt buộc khi condition = AREA."
              },
              "percentage": {
                "label": "Phần trăm",
                "description": "Điều kiện PERCENT: loại bỏ các phần/lỗ có diện tích, tính theo phần trăm (0-100) trên tổng diện tích ngoài của đối tượng, nhỏ hơn giá trị này. Bắt buộc khi condition = PERCENT."
              },
              "part_option": {
                "label": "Tùy chọn phần",
                "description": "Đối tượng nào đủ điều kiện bị loại bỏ: 'CONTAINED_ONLY' (mặc định) chỉ loại bỏ các vòng bên trong (lỗ); 'ANY' còn loại bỏ cả các phần ngoài nhỏ trừ phần lớn nhất duy nhất."
              }
            }
          },
          "eliminate_polygons": {
            "name": "Loại bỏ đa giác",
            "description": "Gộp các đa giác mảnh vụn (theo diện tích tối đa và/hoặc truy vấn thuộc tính) vào đa giác lân cận, chọn theo đường biên chung dài nhất hoặc diện tích lớn nhất.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào, tự động nhận dạng định dạng (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "max_area": {
                "label": "Diện tích tối đa",
                "description": "Chọn các đa giác có diện tích (đơn vị hệ tọa độ bình phương) bằng hoặc nhỏ hơn giá trị này. Có thể kết hợp với 'where' (cả hai phải khớp)."
              },
              "where": {
                "label": "Điều kiện lọc",
                "description": "Chọn các đa giác khớp với một điều kiện thuộc tính đơn giản 'FIELD OP VALUE', trong đó OP là một trong = != < <= > >= (ví dụ \"class = 0\"). Có thể kết hợp với 'max_area'."
              },
              "exclude": {
                "label": "Loại trừ",
                "description": "Bảo vệ các đối tượng khớp với điều kiện này (cùng cú pháp 'FIELD OP VALUE') khỏi bị loại bỏ; chúng được giữ lại và có thể nhận phần gộp."
              },
              "strategy": {
                "label": "Chiến lược",
                "description": "Đa giác vụn được gộp vào lân cận nào: 'longest_border' (mặc định) hoặc 'largest_area'."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Khoảng cách vuông góc lớn nhất (đơn vị hệ tọa độ) để hai đoạn ranh giới được coi là cạnh chung. Mặc định 1e-6."
              }
            }
          },
          "emerging_hot_spot_analysis": {
            "name": "Phân tích điểm nóng mới nổi",
            "description": "Xu hướng điểm nóng không-thời gian trên khối không-thời gian H3: gom các điểm có dấu thời gian vào ô H3 x bước thời gian, tính Getis-Ord Gi* cho từng ô, và phân loại mỗi ô (điểm nóng hoặc điểm lạnh mới/tăng cường/bền vững/suy giảm/...) bằng kiểm định xu hướng Mann-Kendall, giống ArcGIS Emerging Hot Spot Analysis.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (kinh/vĩ độ địa lý, EPSG:4326). Các hình học khác dùng điểm đại diện là trung bình các đỉnh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (driver theo phần mở rộng). Mỗi ô một đa giác H3. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: một trường số (theo đơn vị riêng của nó) hoặc một chuỗi ngày/ngày-giờ ISO-8601."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Độ rộng của một bước thời gian: một số thuần (khi time_field là số) hoặc một khoảng thời lượng như '1w', '7d', '12h', '1M' cho trường ngày. Mặc định '1w'."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số tùy chọn được cộng tổng vào mỗi khoảng. Mặc định: số lượng điểm trên mỗi khoảng."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 (thô nhất) đến 15 (mịn nhất); mặc định 7 (ô ~5 km²)."
              },
              "neighborhood": {
                "label": "Lân cận",
                "description": "Bán kính lân cận không gian tính theo vòng k của H3 (mặc định 1)."
              },
              "time_window": {
                "label": "Cửa sổ thời gian",
                "description": "Bán kính lân cận thời gian tính theo bước thời gian (mặc định 1)."
              }
            }
          },
          "empirical_bayesian_kriging": {
            "name": "Kriging Bayes thực nghiệm",
            "description": "Nội suy trường điểm qua nhiều tập con cục bộ chồng lấn, mỗi tập con khớp bán variogram riêng mà độ bất định được nắm bắt bằng cách mô phỏng các bán variogram nhiễu từ bộ sinh ngẫu nhiên có hạt giống, rồi pha trộn dự đoán/phương sai kriging của các tập con theo khoảng cách (giống Empirical Bayesian Kriging của ArcGIS) — khác với kriging thông thường/phổ quát/đơn giản/co-kriging đi kèm, vốn đều khớp một bán variogram toàn cục (hoặc một cửa sổ trượt duy nhất) được chấp nhận thủ công.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số trên lớp đầu vào cần nội suy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster dự báo đầu ra. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ. Mặc định: chọn sao cho trục dài hơn của lưới có khoảng 150 ô."
              },
              "subset_size": {
                "label": "Kích thước tập con",
                "description": "Số điểm mục tiêu trên mỗi tập con cục bộ (mặc định 40, tối thiểu 4)."
              },
              "overlap": {
                "label": "Chồng lấn",
                "description": "Tỉ lệ chiều rộng/chiều cao của một ô tập con mà các ô lân cận chồng lấn lên (mặc định 0.25)."
              },
              "simulations": {
                "label": "Số mô phỏng",
                "description": "Số bán biến đồ mô phỏng được rút cho mỗi tập con để thể hiện độ bất định của mô hình (mặc định 5, tối đa 50)."
              },
              "semivariogram": {
                "label": "Bán variogram",
                "description": "Họ mô hình bán biến đồ: 'power' (mặc định), 'linear' hoặc 'exponential'."
              },
              "transform": {
                "label": "Biến đổi",
                "description": "Phép biến đổi dữ liệu trước khi kriging: 'none' (mặc định) hoặc 'log_empirical' (log tự nhiên; yêu cầu trường > 0 ở mọi nơi)."
              },
              "error_output": {
                "label": "Đầu ra sai số",
                "description": "Raster sai số chuẩn của dự báo đầu ra tùy chọn."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên tất định mô phỏng bán biến đồ (mặc định 42)."
              }
            }
          },
          "enclose_multipatch": {
            "name": "Bao kín multipatch",
            "description": "Chuyển các bề mặt lưới tam giác 3D hở thành khối kín, không rò rỉ bằng cách bịt các vòng biên của chúng, để chúng trở thành đầu vào hợp lệ cho phân tích thể tích (ArcGIS Enclose Multipatch). is_closed_3d có thể chẩn đoán lưới hở nhưng không gì sửa được nó, và union_3d / intersect_3d / difference_3d / inside_3d đều từ chối hoặc báo sai với lưới hở — vốn là trạng thái bình thường của đường bao ép khối, vỏ địa hình và bề mặt nhà nhập vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng bề mặt 3D (MultiPolygon lưới tam giác có Z)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các đối tượng khối rắn khép kín đầu ra. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "drop_failed": {
                "label": "Bỏ đối tượng thất bại",
                "description": "Bỏ qua các đối tượng không thể làm kín nước (mặc định false: chúng được xuất ra với CAP_FAILED = true để lỗi hiển thị rõ thay vì âm thầm)."
              }
            }
          },
          "enforce_river_monotonicity": {
            "name": "Áp đặt tính đơn điệu của sông",
            "description": "Khắc DEM sao cho độ cao giảm đơn điệu theo chiều xuôi dòng dọc các polyline sông đã vẽ — một bước hiệu chỉnh thủy văn cho mô hình thủy lực và ngập lụt, giống ArcGIS Enforce River Monotonicity. Không như fill_depressions/fill_burn (loại bỏ hố kín), công cụ này áp đặt trắc dọc đơn điệu dọc theo vector sông đã biết.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp polyline sông đầu vào (LineString / MultiLineString) dùng chung hệ tọa độ với DEM."
              },
              "surface": {
                "label": "Bề mặt",
                "description": "Raster độ cao (DEM) cần hiệu chỉnh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn DEM đã hiệu chỉnh đầu ra (định dạng theo phần mở rộng). Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Mức giảm độ cao tối thiểu bắt buộc trên mỗi bước làm dày, tính theo đơn vị Z (mặc định 0 = không tăng). Giá trị dương buộc trắc diện giảm nghiêm ngặt."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng làm dày tính theo đơn vị hệ tọa độ dọc theo mỗi đường sông. Mặc định: kích thước ô raster (≈ một mẫu trên mỗi ô)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh DEM cần hiệu chỉnh, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "estimate_time_to_event": {
            "name": "Ước tính thời gian đến sự kiện",
            "description": "Ước tính thời gian đến sự kiện qua đường cong sống sót Kaplan-Meier (giống ArcGIS Estimate Time To Event): từ trường thời lượng và trường sự kiện/kiểm duyệt, tính xác suất sống sót của từng đối tượng và thời gian đến sự kiện trung vị của tầng, tùy chọn phân tầng theo trường phân loại.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm hoặc đa giác đầu vào có một trường thời lượng và một trường sự kiện/kiểm duyệt."
              },
              "age_field": {
                "label": "Trường tuổi",
                "description": "Trường chứa thời lượng quan sát được của mỗi đối tượng (thời gian đến sự kiện hoặc đến khi bị kiểm duyệt), một số không âm."
              },
              "event_field": {
                "label": "Trường sự kiện",
                "description": "Trường cho biết sự kiện đã xảy ra (giá trị đúng: 1/true) hay quan sát bị kiểm duyệt (giá trị sai: 0/false)."
              },
              "stratify_field": {
                "label": "Trường phân tầng",
                "description": "Trường phân loại tùy chọn để khớp một đường cong sống sót riêng cho mỗi nhóm."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đầu ra có thêm các trường km_survival, km_median và km_stratum. Nếu bỏ qua, lưu trong bộ nhớ."
              }
            }
          },
          "estimate_variogram": {
            "name": "Ước tính variogram",
            "description": "Tính bán variogram thực nghiệm từ các quan sát điểm để đặc trưng hóa cấu trúc tương quan không gian. Bước đầu tiên thiết yếu trong quy trình địa thống kê.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào có các giá trị"
              },
              "field": {
                "label": "Trường",
                "description": "Trường chứa các giá trị đo"
              },
              "lag_distance": {
                "label": "Khoảng cách trễ",
                "description": "Kích thước khoảng trễ theo đơn vị bản đồ (mặc định: 100.0)"
              },
              "lag_tolerance": {
                "label": "Dung sai trễ",
                "description": "Dung sai khi chia khoảng trễ (mặc định: 50.0)"
              },
              "max_lag_count": {
                "label": "Số trễ tối đa",
                "description": "Số lượng khoảng trễ lớn nhất cần giữ lại (mặc định: 20)"
              }
            }
          },
          "euclidean_direction": {
            "name": "Hướng Euclid",
            "description": "Tính phương vị la bàn từ mỗi ô tới ô nguồn gần nhất, cùng tùy chọn raster khoảng cách và hướng ngược (ArcGIS Euclidean Direction). Hoàn thiện họ Euclid đi kèm, vốn có euclidean_distance (bao xa) và euclidean_allocation (nguồn nào) nhưng chưa có góc phương vị. Dùng biến đổi khoảng cách chính xác mang theo tọa độ nguồn gần nhất; khi có raster rào cản thì định tuyến vòng qua vật cản.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster nguồn: các ô không phải NoData và khác không là nguồn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster hướng đầu ra tùy chọn (độ, theo chiều kim đồng hồ từ hướng bắc). Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "output_distance": {
                "label": "Đầu ra khoảng cách",
                "description": "Đường dẫn tùy chọn cho raster khoảng cách đi kèm."
              },
              "output_back_direction": {
                "label": "Đầu ra hướng ngược",
                "description": "Đường dẫn tùy chọn cho raster hướng ngược: góc phương vị để đi từ ô này trở lại nguồn gần nhất. Bằng với raster hướng khi không cung cấp rào cản; khi có rào cản, đó là bước đầu tiên của đường quay về."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Raster rào cản tùy chọn; các ô khác không và không phải NoData sẽ chặn các đường đi thẳng, buộc phải định tuyến vòng qua chúng."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Các ô xa hơn khoảng này so với mọi nguồn sẽ được ghi là NoData."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của raster nguồn cần đọc, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "evaluate_bin_sizes": {
            "name": "Đánh giá kích thước ô",
            "description": "Quét các kích thước ô gộp ứng viên và báo cáo các chẩn đoán xác định kích thước nào bộc lộ cấu trúc tốt nhất, giống ArcGIS Evaluate Bin Sizes.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng điểm cần gộp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng chẩn đoán đầu ra tùy chọn. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "bin_shape": {
                "label": "Hình dạng ô",
                "description": "hexagon (mặc định; xấp xỉ lệch hàng, xem tài liệu) | square."
              },
              "sizes": {
                "label": "Kích thước",
                "description": "Các kích thước khoảng ứng viên phân tách bằng dấu phẩy (đơn vị bản đồ). Khi bỏ qua, một dải quét hình học được sinh ra từ khoảng cách lân cận gần nhất trung bình."
              },
              "steps": {
                "label": "Số bước",
                "description": "Số ứng viên trong dải quét được sinh ra (mặc định 8, tối đa 64)."
              },
              "analysis_field": {
                "label": "Trường phân tích",
                "description": "Trường số tùy chọn để lấy tổng trên mỗi khoảng thay vì đếm điểm."
              }
            }
          },
          "evaluate_variable_influence": {
            "name": "Đánh giá ảnh hưởng của biến",
            "description": "Báo cáo tầm quan trọng theo hoán vị và các đường cong phụ thuộc riêng phần cho mô hình rừng khớp từ một bảng, trả lời câu hỏi mô hình thực sự dùng biến giải thích nào và mỗi hiệu ứng có hình dạng ra sao (ArcGIS Evaluate Variable Influence). Danh mục có thể khớp mô hình — generalized_linear_regression, exploratory_regression, geographically_weighted_regression, forest_based_forecast, rừng ngẫu nhiên của Whitebox — nhưng không công cụ nào báo cáo hai độ đo này. ArcGIS đọc tệp mô hình .ssm đã huấn luyện; ngăn xếp này không có định dạng mô hình khả chuyển, nên công cụ tự khớp rừng của mình rồi giải thích nó. Hoàn toàn tất định: bagging theo bước cố định và hoán vị cố định, không dùng bộ sinh ngẫu nhiên.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp hoặc bảng chứa các quan trắc huấn luyện."
              },
              "dependent_field": {
                "label": "Trường phụ thuộc",
                "description": "Trường được dự báo."
              },
              "explanatory_fields": {
                "label": "Trường giải thích",
                "description": "Các trường số cần đánh giá, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Bảng đầu ra về mức quan trọng của từng biến. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "output_partial_dependence": {
                "label": "Đầu ra phụ thuộc riêng phần",
                "description": "Bảng đầu ra các đường cong phụ thuộc riêng phần, mỗi hàng ứng với một biến và một điểm lưới. Luôn được tạo; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "model_type": {
                "label": "Kiểu mô hình",
                "description": "'regression' (mặc định) cho biến mục tiêu liên tục, hoặc 'classification' cho biến phân loại."
              },
              "number_of_trees": {
                "label": "Số cây",
                "description": "Số cây trong tập hợp (mặc định 50)."
              },
              "max_depth": {
                "label": "Độ sâu tối đa",
                "description": "Độ sâu cây lớn nhất (mặc định 8)."
              },
              "min_samples_leaf": {
                "label": "Số mẫu tối thiểu ở lá",
                "description": "Số quan trắc ít nhất mà một nút lá có thể chứa (mặc định 3)."
              },
              "grid_points": {
                "label": "Số điểm lưới",
                "description": "Số điểm trên mỗi đường cong phụ thuộc riêng phần (mặc định 12)."
              },
              "permutation_repeats": {
                "label": "Số lần lặp hoán vị",
                "description": "Số hoán vị khác nhau được lấy trung bình cho mỗi biến (mặc định 3). Nhiều hơn thì ổn định hơn và chậm hơn."
              }
            }
          },
          "excel_to_table": {
            "name": "Excel sang bảng",
            "description": "Đọc một trang tính từ sổ làm việc .xlsx/.xls/.xlsb/.ods vào bảng thuộc tính, tự suy luận cột số hay cột văn bản.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn bảng tính Excel/OpenDocument đầu vào (.xlsx, .xls, .xlsb hoặc .ods)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra tùy chọn (driver theo phần mở rộng; khuyến nghị GeoParquet .parquet). Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "sheet": {
                "label": "Trang tính",
                "description": "Trang tính cần đọc, theo tên hoặc chỉ số đánh số từ 0. Mặc định: trang tính đầu tiên."
              },
              "cell_range": {
                "label": "Phạm vi ô",
                "description": "Vùng theo ký hiệu A1 tùy chọn để nhập, ví dụ 'B2:E40'. Mặc định: toàn bộ vùng đã dùng của trang tính."
              },
              "field_names_row": {
                "label": "Hàng tên trường",
                "description": "Hàng chứa tên cột trong vùng đã chọn, đánh số từ 1 (mặc định 1). Các hàng phía trên bị bỏ qua; 0 nghĩa là không có hàng tiêu đề (tự sinh Field1, Field2, ...)."
              }
            }
          },
          "expand_shrink": {
            "name": "Mở rộng / Thu hẹp",
            "description": "Mở rộng (expand) hoặc thu hẹp (shrink) các lớp đã chọn của raster phân loại theo một số ô, giữ nguyên các lớp khác — bước làm sạch chuẩn cho lớp phủ đã phân loại trước khi đa giác hóa, giống ArcGIS Expand / Shrink.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster phân loại (giá trị nguyên) đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "classes": {
                "label": "Lớp",
                "description": "Giá trị lớp (các lớp) cần mở rộng hoặc thu hẹp, phân tách bằng dấu phẩy."
              },
              "cells": {
                "label": "Ô",
                "description": "Số ô cần mở rộng hoặc thu hẹp (>= 1)."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'expand' (mở rộng các lớp đã chọn; mặc định) hoặc 'shrink' (co chúng lại)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "exploratory_interpolation": {
            "name": "Nội suy khám phá",
            "description": "Chạy nhiều phương pháp nội suy (IDW, lân cận gần nhất, mặt xu thế bậc một/bậc hai), kiểm định chéo bỏ-một-ra từng phương pháp, và xếp hạng chúng theo độ chính xác dự đoán (RMSE/MAE) hoặc độ thiên lệch (ME) — giống ArcGIS Exploratory Interpolation. Báo cáo bảng so sánh xếp hạng theo phương pháp và có thể xuất raster dự đoán của phương pháp tốt nhất. Bao hàm cả yêu cầu kiểm định chéo độc lập.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa các phép đo."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số trên các điểm chứa giá trị cần nội suy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Bảng so sánh xếp hạng đầu ra — một CSV (phần mở rộng .csv) hoặc một bảng vector không có hình học. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "methods": {
                "label": "Phương pháp",
                "description": "Tập con các phương pháp cần so sánh, phân tách bằng dấu phẩy/gạch đứng: 'idw', 'nearest', 'trend1', 'trend2'. Mặc định: cả bốn."
              },
              "criterion": {
                "label": "Tiêu chí",
                "description": "Tiêu chí xếp hạng: 'rmse' (mặc định, sai số thấp nhất), 'mae' (sai số tuyệt đối thấp nhất) hoặc 'me' (ít thiên lệch nhất, |sai số trung bình| nhỏ nhất)."
              },
              "power": {
                "label": "Lũy thừa",
                "description": "Số mũ suy giảm theo khoảng cách của IDW (mặc định 2)."
              },
              "output_raster": {
                "label": "Raster đầu ra",
                "description": "GeoTIFF đầu ra tùy chọn: phương pháp xếp hạng tốt nhất được khớp trên toàn bộ mẫu, tính trên một lưới trải khắp phạm vi mẫu."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô của raster thắng cuộc theo đơn vị hệ tọa độ (độ với hệ tọa độ địa lý). Mặc định: chọn sao cho trục dài hơn trải khoảng 256 ô."
              }
            }
          },
          "exploratory_regression": {
            "name": "Hồi quy khám phá",
            "description": "Liệt kê các mô hình OLS trên mọi tổ hợp trường giải thích ứng viên và sàng lọc từng mô hình theo R2 hiệu chỉnh, mức ý nghĩa hệ số, đa cộng tuyến VIF, tính chuẩn phần dư Jarque-Bera và tự tương quan không gian Moran's I của phần dư, báo cáo mọi mô hình cùng tập đạt đã xếp hạng và tóm tắt mức ý nghĩa theo từng biến — giống ArcGIS Exploratory Regression.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào có hình học (dùng cho lân cận Moran's I của phần dư)."
              },
              "dependent_field": {
                "label": "Trường phụ thuộc",
                "description": "Trường số phụ thuộc (đáp ứng)."
              },
              "explanatory_fields": {
                "label": "Trường giải thích",
                "description": "Các trường số giải thích ứng viên cần tìm kiếm, phân tách bằng dấu phẩy."
              },
              "min_vars": {
                "label": "Số biến tối thiểu",
                "description": "Số biến giải thích tối thiểu trên mỗi mô hình ứng viên (mặc định 1)."
              },
              "max_vars": {
                "label": "Số biến tối đa",
                "description": "Số biến giải thích tối đa trên mỗi mô hình ứng viên (mặc định: min(số ứng viên, 6))."
              },
              "max_coef_p": {
                "label": "Giá trị p hệ số tối đa",
                "description": "Giá trị p lớn nhất cho phép đối với mọi hệ số giải thích (mặc định 0.05)."
              },
              "min_adj_r2": {
                "label": "R² hiệu chỉnh tối thiểu",
                "description": "R bình phương hiệu chỉnh tối thiểu (mặc định 0.5)."
              },
              "max_vif": {
                "label": "VIF tối đa",
                "description": "Hệ số phóng đại phương sai lớn nhất cho phép trên mỗi số hạng (mặc định 7.5)."
              },
              "min_jb_p": {
                "label": "Giá trị p JB tối thiểu",
                "description": "Giá trị p Jarque-Bera tối thiểu cho tính chuẩn của phần dư (mặc định 0.1)."
              },
              "min_moran_p": {
                "label": "Giá trị p Moran tối thiểu",
                "description": "Giá trị p tối thiểu cho tự tương quan không gian của phần dư (Moran's I); trên mức này thì phần dư không tụ cụm một cách có ý nghĩa (mặc định 0.1)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số lân cận gần nhất xác định trọng số không gian cho kiểm định Moran's I của phần dư (mặc định 8)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng báo cáo đầu ra — một CSV (phần mở rộng .csv) hoặc một bảng vector không có hình học."
              }
            }
          },
          "extract_locations_from_text": {
            "name": "Trích xuất vị trí từ văn bản",
            "description": "Quét văn bản tự do để tìm tọa độ nhúng — độ thập phân (DD), độ-phút thập phân (DDM), độ-phút-giây (DMS) và tham chiếu lưới MGRS/USNG — và xuất một điểm WGS84 cho mỗi kết quả, giống ArcGIS Extract Locations From Text (nhánh tọa độ). Chỉ quét mẫu thuần túy; không có dịch vụ mã hóa địa lý.",
            "params": {
              "input_text": {
                "label": "Văn bản đầu vào",
                "description": "Văn bản tự do cần quét. Hoặc là văn bản trực tiếp, hoặc là đường dẫn tới một tệp văn bản UTF-8 (được đọc khi giá trị trỏ tới một tệp đang tồn tại)."
              },
              "notations": {
                "label": "Ký hiệu",
                "description": "Tập con các ký pháp cần quét, phân tách bằng dấu phẩy/khoảng trắng: DD, DDM, DMS, MGRS (USNG là bí danh của MGRS). Mặc định: cả bốn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "extract_ocean_winds": {
            "name": "Trích xuất gió trên biển",
            "description": "Truy xuất tốc độ gió đại dương trung tính tương đương ở độ cao 10 m từ tán xạ ngược SAR đã hiệu chuẩn bằng cách nghịch đảo hàm mô hình địa vật lý CMOD5.N (ArcGIS Extract Ocean Winds). Toàn bộ chuỗi SAR đã phát hành vẫn nằm trong miền bức xạ và chưa có gì chuyển tán xạ ngược thành đại lượng địa vật lý, vốn cũng là điều phân biệt mảng gió yếu với vệt dầu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster tán xạ ngược đã hiệu chuẩn (sigma0)."
              },
              "units": {
                "label": "Đơn vị",
                "description": "Đơn vị của 'input': 'dn', 'amplitude', 'intensity' hoặc 'db' (mặc định 'db')."
              },
              "incidence_angle": {
                "label": "Góc tới",
                "description": "Góc tới trên mỗi ô tính bằng độ: một đường dẫn raster, hoặc một số hằng."
              },
              "wind_direction": {
                "label": "Hướng gió",
                "description": "Hướng gió khí tượng tính bằng độ (hướng mà gió thổi TỪ đó), dưới dạng đường dẫn raster hoặc một hằng số. Đây là tiên nghiệm bắt buộc: CMOD có hai ẩn số và một quan trắc."
              },
              "look_direction": {
                "label": "Hướng nhìn",
                "description": "Góc phương vị nhìn của radar tính bằng độ, dưới dạng đường dẫn raster hoặc một hằng số. Dùng để chuyển hướng gió thành góc tương đối mà CMOD sử dụng."
              },
              "polarization": {
                "label": "Phân cực",
                "description": "'vv' (mặc định, CMOD5.N gốc) hoặc 'hh' (áp dụng tỉ số phân cực xấp xỉ)."
              },
              "polarization_ratio_alpha": {
                "label": "Alpha tỉ số phân cực",
                "description": "Alpha trong tỉ số phân cực HH sang VV (mặc định 0.6). Chỉ dùng khi phân cực là 'hh'."
              },
              "water_mask": {
                "label": "Mặt nạ nước",
                "description": "Lớp đa giác hoặc raster tùy chọn giới hạn đầu ra trong vùng nước; tín hiệu phản hồi từ đất liền không có ý nghĩa ở đây."
              },
              "max_wind": {
                "label": "Gió tối đa",
                "description": "Giới hạn trên của khoảng nghịch đảo, m/s (mặc định 50)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster tốc độ gió đầu ra tính bằng m/s. Nếu bỏ qua, lưu trong bộ nhớ."
              }
            }
          },
          "extract_scanned_features": {
            "name": "Trích xuất đối tượng từ bản đồ quét",
            "description": "Vector hóa raster nhị phân (đã quét/phân ngưỡng) thành các đường sạch (truy vết xương) hoặc đa giác, với loại bỏ nhiễu, lấp lỗ, khép khoảng hở và đơn giản hóa.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster nhị phân/đã phân loại đầu vào cần vector hóa."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "feature_type": {
                "label": "Kiểu đối tượng",
                "description": "'lines' (mặc định): tạo bộ xương và dò đường tâm. 'polygons': vector hóa các vùng đặc."
              },
              "foreground_value": {
                "label": "Giá trị tiền cảnh",
                "description": "Giá trị ô đánh dấu tiền cảnh. Nếu bỏ qua, các ô >= 'threshold' (hoặc, nếu không có, mọi ô hợp lệ khác không) là tiền cảnh."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Tiền cảnh là các ô có giá trị >= giá trị này (dùng khi không cung cấp 'foreground_value')."
              },
              "noise_size": {
                "label": "Kích thước nhiễu",
                "description": "Loại bỏ các thành phần tiền cảnh nhỏ hơn số ô này (mặc định 4)."
              },
              "hole_size": {
                "label": "Kích thước lỗ",
                "description": "Lấp các lỗ nền nhỏ hơn số ô này (mặc định 4)."
              },
              "gap_distance": {
                "label": "Khoảng cách khoảng trống",
                "description": "Với 'lines': nối các khoảng hở tới khoảng cách này (đơn vị hệ tọa độ) giữa các điểm cuối đường gần như thẳng hàng. Mặc định 0 (tắt)."
              },
              "simplify_tolerance": {
                "label": "Dung sai đơn giản hóa",
                "description": "Dung sai Douglas-Peucker (đơn vị hệ tọa độ) cho hình học đầu ra. Mặc định ~1 ô."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "extract_sinks": {
            "name": "Trích xuất hố trũng",
            "description": "Trích xuất các vùng trũng (phạm vi vùng trũng tối đa) từ DEM (lidar filling.py).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster DEM đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster vùng trũng tùy chọn. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Số điểm ảnh tối thiểu cho một vùng trũng (giữ lại nếu lớn hơn hẳn; mặc định 10)."
              },
              "region_output": {
                "label": "Đầu ra vùng",
                "description": "Đường dẫn đầu ra tùy chọn cho raster vùng đã gán nhãn."
              },
              "depth_output": {
                "label": "Đầu ra độ sâu",
                "description": "Đường dẫn đầu ra tùy chọn cho raster độ sâu lấp."
              },
              "filled_output": {
                "label": "Đầu ra đã lấp",
                "description": "Đường dẫn đầu ra tùy chọn cho DEM đã lấp vùng trũng."
              },
              "csv_output": {
                "label": "CSV đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho CSV thuộc tính theo từng vùng."
              },
              "vector_output": {
                "label": "Đầu ra vector",
                "description": "Đường dẫn đầu ra tùy chọn cho các đa giác vùng dưới dạng GeoJSON (đã nối thuộc tính)."
              },
              "flat_increment": {
                "label": "Gia số vùng phẳng",
                "description": "Gia số phẳng được thêm vào trong quá trình lấp để đảm bảo thoát nước (mặc định 0)."
              }
            }
          },
          "extract_spectra_from_image": {
            "name": "Trích xuất phổ từ ảnh",
            "description": "Dẫn xuất thư viện phổ từ ảnh đa kênh và các vùng huấn luyện, một phổ cho mỗi lớp, theo bố cục CSV mà spectral_library_matching đọc (ArcGIS Extract Spectra From Image). spectral_library_matching, spectral_angle_mapper và matched_filter_target_detection đều dùng thư viện mà chưa có gì tạo ra nó, nên bộ công cụ phổ chỉ dùng được với các thư viện công bố sẵn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Ảnh đa kênh."
              },
              "training_features": {
                "label": "Đối tượng huấn luyện",
                "description": "Lớp đa giác hoặc điểm khoanh định mỗi lớp hoặc mục tiêu."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Thuộc tính chứa nhãn lớp. Các đối tượng có cùng nhãn được gộp chung thành một phổ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV thư viện phổ đầu ra ('name,b1,b2,...' cho mỗi lớp), sẵn sàng cho 'library_csv' của spectral_library_matching."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "Phép rút gọn trên các ô được phủ: 'mean' (mặc định), 'median', 'max', 'min'."
              },
              "trim_percent": {
                "label": "Phần trăm cắt",
                "description": "Phần trăm bị loại bỏ ở mỗi đuôi trên từng kênh trước khi rút gọn, để triệt tiêu các điểm ảnh biên hỗn hợp (mặc định 0, tối đa 49)."
              },
              "min_cells": {
                "label": "Số ô tối thiểu",
                "description": "Các lớp phủ ít ô hơn mức này sẽ được báo cáo và bỏ qua thay vì tạo ra một 'phổ' chỉ một điểm ảnh (mặc định 1)."
              },
              "wavelengths": {
                "label": "Bước sóng",
                "description": "Bước sóng theo từng kênh phân tách bằng dấu phẩy, tùy chọn, được ghi làm dòng chú thích tiêu đề trong thư viện và trong output_stats."
              },
              "output_stats": {
                "label": "Đầu ra thống kê",
                "description": "Tệp CSV tùy chọn nhận độ lệch chuẩn và số lượng ô theo từng lớp, từng kênh. Được tách riêng để thư viện vẫn phân tích cú pháp được."
              }
            }
          },
          "extract_water_sar": {
            "name": "Trích xuất mặt nước (SAR)",
            "description": "Khoanh vùng mặt nước thoáng và phạm vi ngập lụt từ tán xạ ngược SAR bằng ngưỡng Otsu theo từng cảnh trên decibel, cùng tùy chọn bộ lọc độ dốc DEM và chiều cao so với min để loại bóng radar và bề mặt khô tối (ArcGIS Extract Water). Cả hai sổ đăng ký đều không làm được việc này từ radar: NDWI/MNDWI của spectral_index cần kênh phản xạ lục/NIR/SWIR mà SAR không có, depth_to_water mô hình hóa nơi nước nên có từ địa hình thay vì quan sát nó, còn ngưỡng raster_calculator đặt tay không chuyển được giữa các cảnh vì ranh giới nước/đất dịch chuyển theo gió và góc tới.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster tán xạ ngược SAR."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác nước đầu ra. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "output_raster": {
                "label": "Raster đầu ra",
                "description": "Mặt nạ nước nhị phân đầu ra (1 là nước, 0 là đất). Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "dem": {
                "label": "DEM",
                "description": "DEM tùy chọn, đồng đăng ký với dữ liệu đầu vào, cho phép dùng bộ lọc độ dốc và độ cao."
              },
              "threshold_db": {
                "label": "Ngưỡng (dB)",
                "description": "Ngưỡng cố định tính bằng dB; các ô có giá trị bằng hoặc thấp hơn ngưỡng là nước. Ghi đè ngưỡng Otsu tự động."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Loại bỏ các vùng nước có diện tích nhỏ hơn giá trị này, tính bằng đơn vị bản đồ bình phương."
              },
              "max_slope": {
                "label": "Độ dốc tối đa",
                "description": "Khi có DEM, loại bỏ nước trên địa hình dốc hơn số độ này (mặc định 5). Nước tù không thể đọng trên sườn dốc, nhưng bóng radar ở đó cũng tối không kém."
              },
              "max_height_above_min": {
                "label": "Chiều cao tối đa so với min",
                "description": "Khi có DEM, loại bỏ các ô ứng viên cao hơn ô DEM thấp nhất trong cùng vùng liên thông của chúng quá số đơn vị z này."
              },
              "mask_features": {
                "label": "Đối tượng mặt nạ",
                "description": "Lớp đa giác giới hạn khu vực phân tích."
              },
              "mask_type": {
                "label": "Kiểu mặt nạ",
                "description": "'land_polygon' (mặc định; phân tích bên ngoài các đa giác) hoặc 'water_polygon' (phân tích bên trong chúng)."
              },
              "histogram_bins": {
                "label": "Số khoảng lược đồ",
                "description": "Số khoảng dùng cho lược đồ Otsu (mặc định 256)."
              },
              "input_units": {
                "label": "Đơn vị đầu vào",
                "description": "'intensity' (mặc định), 'dn', 'amplitude' hoặc 'db'."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần phân ngưỡng, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "extrude_between": {
            "name": "Ép khối giữa hai bề mặt",
            "description": "Xây dựng khối kín không rò rỉ trải trong không gian giữa hai bề mặt bên trong mỗi đa giác đầu vào, với thể tích chính xác cho từng đối tượng (ArcGIS Extrude Between). cut_fill cho biến thiên thể tích theo ô giữa hai raster nhưng xuất raster, không giới hạn được theo đường bao và không mang thuộc tính; buffer_3d và minimum_bounding_volume dựng khối từ đối tượng thay vì từ cặp bề mặt. Đầu ra đưa thẳng vào union_3d, intersect_3d, difference_3d và inside_3d.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đường bao đa giác xác định phạm vi ngang của mỗi khối. Chỉ vòng ĐẦU TIÊN của phần đầu tiên được sử dụng: các lỗ bên trong và các phần bổ sung của MultiPolygon bị bỏ qua, vì vậy hãy tách sẵn các đường bao nhiều phần và lấp các lỗ trước khi đùn khối."
              },
              "surface_upper": {
                "label": "Bề mặt trên",
                "description": "Raster bề mặt giới hạn phía trên."
              },
              "surface_lower": {
                "label": "Bề mặt dưới",
                "description": "Raster bề mặt giới hạn phía dưới, đồng đăng ký với bề mặt phía trên."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các đối tượng khối đặc kín (MultiPolygon dạng lưới tam giác có Z). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng cách lấy mẫu đường bao và làm dày biên, tính theo đơn vị hệ tọa độ. Mặc định: kích thước ô mịn hơn trong hai bề mặt."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ mỗi raster bề mặt, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "feature_outline_masks": {
            "name": "Mặt nạ đường viền đối tượng",
            "description": "Tạo đa giác mặt nạ bản đồ với lề quanh các đối tượng (đường viền chính xác, bao lồi hoặc hộp bao), tùy chọn cắt theo lớp thứ hai (Intersecting Layers Masks).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (hình học bất kỳ), định dạng được nhận diện tự động (hoặc tham chiếu trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "margin": {
                "label": "Lề",
                "description": "Khoảng cách lề của mặt nạ. Tính bằng mét với hệ tọa độ địa lý (EPSG:4326 hoặc không xác định, được quy đổi sang độ), ngược lại tính theo đơn vị hệ tọa độ của lớp. Phải là số dương."
              },
              "mask_kind": {
                "label": "Loại mặt nạ",
                "description": "Hình dạng mặt nạ: 'exact' (mặc định, đường bao đối tượng đã tạo vùng đệm), 'convex_hull' (bao lồi được nới rộng), hoặc 'box' (khung bao + lề)."
              },
              "masked_layer": {
                "label": "Lớp bị mặt nạ",
                "description": "Lớp đa giác thứ hai tùy chọn. Khi được cung cấp, các mặt nạ sẽ được cắt theo phần giao với lớp này (Intersecting Layers Masks); các mặt nạ không chồng lấn bị loại bỏ."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường nguồn tùy chọn, giá trị của nó được sao chép vào mỗi mặt nạ dưới tên 'source_id'. Mặc định là chỉ số của đối tượng nguồn."
              }
            }
          },
          "feature_to_line": {
            "name": "Đối tượng thành đường",
            "description": "Phẳng hóa các đối tượng đường/ranh giới đa giác thành các đoạn đường có nút, không chồng lấn, được tách tại mọi giao điểm lẫn nhau và tự giao, giống ArcGIS Feature To Line — bước tiền xử lý xây dựng tô pô mà polygons_to_lines và split_vector_lines đi kèm không cung cấp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường hoặc đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "cluster_tolerance": {
                "label": "Dung sai cụm",
                "description": "Bắt dính các điểm cắt vào lưới theo đơn vị bản đồ này để gộp các nút gần trùng nhau (mặc định 1e-9)."
              },
              "attributes": {
                "label": "Thuộc tính",
                "description": "Khi true (mặc định), gắn cho mỗi phân đoạn đầu ra thuộc tính 'src_fid' là id của đối tượng nguồn."
              }
            }
          },
          "feature_vertices_to_points": {
            "name": "Đỉnh đối tượng thành điểm",
            "description": "Tạo lớp điểm từ các đỉnh đối tượng đã chọn — ALL, START, END, BOTH_ENDS, MID (điểm giữa theo chiều dài cung) hoặc DANGLE (điểm cuối đường không chia sẻ) — với trường FID cha, giống ArcGIS Feature Vertices To Points.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường, đa giác hoặc điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "point_location": {
                "label": "Vị trí điểm",
                "description": "Các đỉnh cần trích xuất: ALL | START | END | BOTH_ENDS | MID | DANGLE. Mặc định ALL."
              }
            }
          },
          "features_to_gpx": {
            "name": "Đối tượng sang GPX",
            "description": "Ghi đối tượng điểm thành waypoint GPX và đối tượng đường thành track GPX, ánh xạ các trường thuộc tính sang tên/mô tả/độ cao/thời gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm hoặc đường cần xuất (giả định WGS84 / EPSG:4326)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp .gpx đầu ra."
              },
              "name_field": {
                "label": "Trường tên",
                "description": "Trường thuộc tính ánh xạ tới phần tử <name> của GPX (tùy chọn)."
              },
              "description_field": {
                "label": "Trường mô tả",
                "description": "Trường thuộc tính ánh xạ tới phần tử <desc> của GPX (tùy chọn)."
              },
              "z_field": {
                "label": "Trường Z",
                "description": "Trường thuộc tính ánh xạ tới độ cao <ele> của GPX (tùy chọn; sẽ dùng giá trị Z của hình học nếu có)."
              },
              "date_field": {
                "label": "Trường ngày",
                "description": "Trường thuộc tính ánh xạ tới dấu thời gian <time> của GPX, một chuỗi ISO-8601 (tùy chọn)."
              }
            }
          },
          "features_to_gtfs": {
            "name": "Đối tượng sang GTFS",
            "description": "Xuất đối tượng điểm sang stops.txt GTFS và đối tượng đường sang shapes.txt GTFS, khép kín vòng chuyển đổi GTFS.",
            "params": {
              "stops_input": {
                "label": "Đầu vào điểm dừng",
                "description": "Lớp vector điểm để ghi thành stops.txt (dùng các trường thuộc tính stop_id/stop_name nếu có)."
              },
              "shapes_input": {
                "label": "Đầu vào hình dạng",
                "description": "Lớp vector đường để ghi thành shapes.txt (dùng trường thuộc tính shape_id nếu có)."
              },
              "output_dir": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục ghi các tệp văn bản GTFS (stops.txt / shapes.txt). Sẽ được tạo nếu chưa có."
              }
            }
          },
          "features_to_kml": {
            "name": "Đối tượng sang KML",
            "description": "Ghi lớp vector thành tài liệu KML 2.2 (hoặc KMZ nén), với thuộc tính dưới dạng ExtendedData và tùy chọn kiểu dáng dùng chung (ArcGIS Layer To KML / Map To KML). kml_to_features đã đọc được KML nhưng chưa có gì ghi nó, không như các cặp đối xứng GPX, GTFS và GeoParquet.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào. Phải ở hệ EPSG:4326 kinh độ/vĩ độ, hệ tọa độ duy nhất mà KML định nghĩa."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp .kml hoặc .kmz đầu ra."
              },
              "name_field": {
                "label": "Trường tên",
                "description": "Thuộc tính dùng cho <name> của mỗi Placemark."
              },
              "description_field": {
                "label": "Trường mô tả",
                "description": "Thuộc tính dùng cho <description>. Khi bỏ trống, toàn bộ thuộc tính được ghi vào <ExtendedData>."
              },
              "z_field": {
                "label": "Trường Z",
                "description": "Thuộc tính cung cấp độ cao, được ghi làm tọa độ thứ ba."
              },
              "altitude_mode": {
                "label": "Chế độ độ cao",
                "description": "'clampToGround' (mặc định), 'relativeToGround', hoặc 'absolute'."
              },
              "color": {
                "label": "Màu",
                "description": "Màu đường/viền dạng hex aabbggrr của KML (ví dụ 'ff0000ff' cho màu đỏ đục)."
              },
              "line_width": {
                "label": "Độ rộng nét",
                "description": "Độ rộng đường tính bằng điểm ảnh (mặc định 1.0)."
              },
              "fill_color": {
                "label": "Màu tô",
                "description": "Màu tô đa giác dạng hex aabbggrr của KML. Bỏ trống nếu không tô."
              }
            }
          },
          "fence_diagram": {
            "name": "Sơ đồ hàng rào",
            "description": "Tạo các tấm mặt cắt đứng 3D tại nơi đường vết cắt qua chồng bề mặt — cách chuẩn để trực quan hóa địa tầng dưới bề mặt hoặc phân tầng khí quyển (ArcGIS Fence Diagram). profile, long_profile và stack_profile lấy mẫu bề mặt dọc theo đường nhưng trả về đường trắc dọc 2D hoặc bảng, không có hình học cho không gian GIỮA các bề mặt liên tiếp, còn voxel_isosurface trích xuất mặt đẳng trị từ khối thay vì mặt cắt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng đường xác định tuyến mặt cắt."
              },
              "surfaces": {
                "label": "Bề mặt",
                "description": "Danh sách các raster bề mặt đồng đăng ký, phân tách bằng dấu phẩy, sắp xếp từ TRÊN xuống DƯỚI."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các tấm mặt cắt 3D, mỗi tuyến một tấm cho mỗi cặp bề mặt. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng cách lấy mẫu dọc tuyến, tính theo đơn vị hệ tọa độ. Mặc định: kích thước ô mịn nhất trong các bề mặt."
              },
              "floor_height": {
                "label": "Chiều cao sàn",
                "description": "Giới hạn dưới không đổi tùy chọn: một bề mặt đáy tổng hợp tại độ cao này, khép kín tấm mặt cắt sâu nhất."
              },
              "ceiling_height": {
                "label": "Chiều cao trần",
                "description": "Giới hạn trên không đổi tùy chọn: một bề mặt đỉnh tổng hợp tại độ cao này."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ mỗi raster bề mặt, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "fill_missing_values": {
            "name": "Lấp giá trị thiếu",
            "description": "Ước tính và lấp các giá trị rỗng trong trường thuộc tính số bằng các lân cận không gian (k gần nhất hoặc dải khoảng cách), tùy chọn giới hạn trong cửa sổ thời gian, với bộ ước lượng chọn được (mean/median/min/max/temporal_trend). Các hàng được lấp được đánh dấu bằng trường cờ (ArcGIS Fill Missing Values).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào chứa trường cần điền."
              },
              "fill_field": {
                "label": "Trường tô",
                "description": "Trường số có các giá trị null cần được ước lượng và điền."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "estimator": {
                "label": "Bộ ước lượng",
                "description": "Cách kết hợp giá trị của các lân cận: 'mean' (mặc định), 'median', 'min', 'max', hoặc 'temporal_trend' (bình phương tối thiểu theo thời gian; cần time_field)."
              },
              "neighbourhood": {
                "label": "Lân cận",
                "description": "Cách chọn theo không gian: 'knn' (mặc định, k lân cận gần nhất) hoặc 'distance_band' (tất cả trong phạm vi search_radius)."
              },
              "k": {
                "label": "K",
                "description": "Số lân cận gần nhất cho 'knn' (mặc định 8)."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính (đơn vị hệ tọa độ) cho cách chọn 'distance_band'."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường số tùy chọn cho biết thời gian/thứ tự của mỗi đối tượng (bắt buộc với 'temporal_trend')."
              },
              "time_window": {
                "label": "Cửa sổ thời gian",
                "description": "Tùy chọn: chỉ giới hạn các lân cận nằm trong khoảng cách thời gian này so với đối tượng đích (cần time_field)."
              },
              "flag_field": {
                "label": "Trường cờ",
                "description": "Tên của trường boolean đánh dấu các bản ghi đã được điền giá trị (mặc định 'imputed')."
              }
            }
          },
          "fill_spill_merge": {
            "name": "Lấp-Tràn-Gộp",
            "description": "Định tuyến một thể tích nước mặt hữu hạn qua DEM để tạo phạm vi hồ/ngập lụt thực tế (lấp một phần vùng trũng với tràn và gộp), cài đặt lại Fill-Spill-Merge của RichDEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào (độ cao)."
              },
              "water_level": {
                "label": "Mực nước",
                "description": "Độ sâu nước mặt đồng nhất áp dụng cho mọi ô. Cung cấp tham số này hoặc 'surface_water'."
              },
              "surface_water": {
                "label": "Nước mặt",
                "description": "Raster độ sâu nước mặt theo từng ô (khớp với DEM). Ghi đè 'water_level' khi cả hai cùng được cung cấp."
              },
              "ocean_level": {
                "label": "Mực nước biển",
                "description": "Mực nước biển tùy chọn: các ô có độ cao bằng hoặc thấp hơn giá trị này và nối thông với mép lưới sẽ trở thành đại dương (mốc ngập lụt ven biển)."
              },
              "edge_outlet": {
                "label": "Cửa ra ở biên",
                "description": "Coi mọi ô ở mép lưới là cửa thoát tự do (mặc định true). Nước chảy tới mép sẽ rời khỏi DEM."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster độ sâu nước tù tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "water_surface": {
                "label": "Mặt nước",
                "description": "Đường dẫn đầu ra tùy chọn cho bề mặt thủy lực (DEM + độ sâu nước)."
              },
              "flood_extent": {
                "label": "Phạm vi ngập",
                "description": "Đường dẫn đầu ra tùy chọn cho mặt nạ phạm vi ngập (1 nơi có nước tù, ngược lại 0)."
              }
            }
          },
          "find_argument_statistics": {
            "name": "Tìm thống kê đối số",
            "description": "Thống kê đối số theo điểm ảnh trên chồng raster (giống ArcGIS Find Argument Statistics): chỉ số lát cắt (hoặc ngày) của giá trị lớn nhất/nhỏ nhất, vị trí trung vị, số lát cắt vượt ngưỡng (thời lượng) hoặc chuỗi liên tiếp dài nhất — các câu trả lời về vị trí đối số mà các phép gộp giá trị của cell-statistics và image_stack_profile đi kèm không đưa ra được.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lát cắt) hoặc danh sách các raster đồng đăng ký phân tách bằng dấu phẩy, theo thứ tự thời gian."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đơn kênh đầu ra chứa chỉ số lát cắt / ngày / số lượng. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "'argmax' (mặc định), 'argmin', 'median_position', 'duration', hoặc 'longest_run'."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng số cho 'duration'/'longest_run' (bắt buộc với các phương pháp này)."
              },
              "comparison": {
                "label": "So sánh",
                "description": "Phép so sánh cho 'duration'/'longest_run': '>' (mặc định), '>=', '<', hoặc '<='."
              },
              "dates": {
                "label": "Ngày",
                "description": "Danh sách ngày dạng số tùy chọn phân tách bằng dấu phẩy (ví dụ ngày trong năm) cho từng lát cắt; argmax/argmin/median sẽ xuất ra ngày tương ứng thay vì chỉ số lát cắt."
              },
              "min_valid": {
                "label": "Số hợp lệ tối thiểu",
                "description": "Số quan trắc không phải NoData tối thiểu trên mỗi điểm ảnh (mặc định 1)."
              }
            }
          },
          "find_dwell_locations": {
            "name": "Tìm vị trí dừng",
            "description": "Phát hiện nơi một thực thể di chuyển đứng yên: các chuỗi điểm định vị của quỹ đạo nằm trong dung sai khoảng cách trong ít nhất một dung sai thời gian, xuất dưới dạng điểm định vị, tâm trung bình hoặc bao lồi, giống ArcGIS Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng điểm có gắn dấu thời gian (các điểm định vị của tuyến di chuyển)."
              },
              "track_field": {
                "label": "Trường quỹ đạo",
                "description": "Trường xác định tuyến mà mỗi điểm định vị thuộc về."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường dấu thời gian (số giây dạng số hoặc văn bản ISO-8601)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "distance_tolerance": {
                "label": "Dung sai khoảng cách",
                "description": "Khoảng cách tối đa (đơn vị bản đồ) mà một điểm định vị được phép nằm cách trọng tâm chạy của lần dừng."
              },
              "time_tolerance": {
                "label": "Dung sai thời gian",
                "description": "Thời lượng tối thiểu (cùng đơn vị với time_field) để một chuỗi đứng yên được tính là một lần dừng."
              },
              "output_type": {
                "label": "Kiểu đầu ra",
                "description": "dwell_features (mặc định) | mean_centers | convex_hulls | all_features."
              }
            }
          },
          "find_identical": {
            "name": "Tìm trùng lặp",
            "description": "Tìm các đối tượng giống hệt nhau về hình học và/hoặc các trường đã chọn, nhóm các bản trùng; 'report' thêm cột dup_group/dup_seq, 'delete' chỉ giữ bản đầu tiên của mỗi nhóm, giống ArcGIS Find Identical / Delete Identical.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào cần loại bỏ trùng lặp."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "fields": {
                "label": "Trường",
                "description": "Các trường cần so sánh, phân tách bằng dấu phẩy. Bỏ trống để chỉ so sánh hình học; kết hợp với 'compare_geometry'."
              },
              "compare_geometry": {
                "label": "So sánh hình học",
                "description": "Hình học có tham gia vào phép kiểm tra trùng lặp hay không (mặc định true; đặt false để chỉ so sánh các trường)."
              },
              "xy_tolerance": {
                "label": "Dung sai XY",
                "description": "Dung sai bắt dính khi so sánh hình học (các đỉnh được làm tròn về lưới này trước khi băm). Mặc định 0 (chính xác tuyệt đối)."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'report' (mặc định; thêm dup_group/dup_seq) hoặc 'delete' (giữ lại đối tượng đầu tiên của mỗi nhóm)."
              }
            }
          },
          "find_meeting_locations": {
            "name": "Tìm vị trí gặp nhau",
            "description": "Phát hiện các cuộc tụ họp khi nhiều quỹ đạo khác nhau ở cùng nhau trong một khoảng cách trong ít nhất một thời lượng tối thiểu (giống ArcGIS Find Meeting Locations) — phép đồng xuất hiện N quỹ đạo mà trace_proximity_events (theo cặp) và reconstruct_tracks (dừng của một quỹ đạo) đã viết không bao phủ. Xuất bao diện tích và điểm đại diện kèm số người tham gia, thời gian bắt đầu/kết thúc và thời lượng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm tuyến di chuyển có gắn dấu thời gian (hệ tọa độ chiếu; khoảng cách theo đơn vị bản đồ)."
              },
              "track_field": {
                "label": "Trường quỹ đạo",
                "description": "Trường xác định mỗi tuyến/thực thể."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: số giây dạng số hoặc một dấu thời gian ISO-8601."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tối đa (đơn vị bản đồ) để các tuyến được coi là ở cùng nhau."
              },
              "min_meeting_duration": {
                "label": "Thời lượng gặp tối thiểu",
                "description": "Thời lượng tối thiểu (đơn vị thời gian) mà một cuộc tụ họp phải kéo dài để được báo cáo."
              },
              "max_meeting_duration": {
                "label": "Thời lượng gặp tối đa",
                "description": "Thời lượng tối đa tùy chọn; các cuộc tụ họp dài hơn sẽ bị loại bỏ."
              },
              "min_participants": {
                "label": "Số người tham gia tối thiểu",
                "description": "Số tuyến khác nhau tối thiểu trong một cuộc tụ họp (mặc định 2)."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Độ rộng của một lát cắt thời gian (đơn vị thời gian). Mặc định: min_meeting_duration."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp điểm đại diện đầu ra (mỗi cuộc gặp một điểm). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "output_area": {
                "label": "Đầu ra diện tích",
                "description": "Lớp diện tích đầu ra tùy chọn (một đa giác bao lồi cho mỗi cuộc gặp). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "find_space_time_matches": {
            "name": "Tìm khớp không-thời gian",
            "description": "Khớp các đối tượng giữa hai lớp điểm có dấu thời gian nằm trong khoảng cách tìm kiếm không gian VÀ trong cửa sổ thời gian của nhau (trước/sau/cả hai), xuất các cặp khớp kèm khoảng cách và độ lệch thời gian, giống ArcGIS Find Space Time Matches.",
            "params": {
              "primary": {
                "label": "Chính",
                "description": "Lớp điểm chính (mỗi đối tượng được đối sánh với lớp phụ)."
              },
              "secondary": {
                "label": "Thứ cấp",
                "description": "Lớp điểm phụ dùng để đối sánh."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường dấu thời gian có mặt trong CẢ HAI lớp (dạng số hoặc ISO-8601)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp kết quả đối sánh đầu ra (mỗi cặp khớp một đường nối). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách không gian tối đa giữa một đối tượng chính và một đối tượng phụ (đơn vị bản đồ)."
              },
              "time_window": {
                "label": "Cửa sổ thời gian",
                "description": "Khoảng cách thời gian tối đa: một số giây hoặc một khoảng thời lượng như '2h', '30m', '7d'."
              },
              "temporal_relationship": {
                "label": "Quan hệ thời gian",
                "description": "'either' (mặc định), 'before' (đối tượng phụ xảy ra trước đối tượng chính), hoặc 'after' (đối tượng phụ xảy ra sau đối tượng chính)."
              },
              "primary_id_field": {
                "label": "Trường ID chính",
                "description": "Trường đặt tên cho mỗi đối tượng chính trong kết quả đầu ra (mặc định: chỉ số đối tượng)."
              },
              "secondary_id_field": {
                "label": "Trường ID thứ cấp",
                "description": "Trường đặt tên cho mỗi đối tượng phụ trong kết quả đầu ra (mặc định: chỉ số đối tượng)."
              }
            }
          },
          "fit_variogram": {
            "name": "Khớp mô hình variogram",
            "description": "Khớp mô hình variogram lý thuyết (cầu, mũ, Gauss) vào dữ liệu bán variogram thực nghiệm để dùng trong kriging.",
            "params": {
              "lags_json": {
                "label": "JSON trễ",
                "description": "Mảng JSON các khoảng độ trễ từ estimate_variogram"
              },
              "model_family": {
                "label": "Họ mô hình",
                "description": "Mô hình: spherical, exponential hoặc gaussian"
              }
            }
          },
          "flatten_interferogram": {
            "name": "Làm phẳng ảnh giao thoa",
            "description": "Loại bỏ thành phần pha địa hình khỏi ảnh giao thoa chưa mở pha bằng DEM và đường đáy giao thoa, để lại tín hiệu biến dạng và khí quyển (chế độ làm phẳng TOPO của ArcGIS Generate Interferogram). sar_coherence đã xuất chính ảnh giao thoa qua output_phase, nhưng không gì trong cả hai sổ đăng ký mô phỏng và trừ được pha địa hình — mà trên bất kỳ địa hình có độ nổi nào thành phần đó chiếm ưu thế, nên ảnh giao thoa chưa làm phẳng không dùng được cho phân tích biến dạng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster pha giao thoa dạng cuộn tính bằng radian (như output_phase của sar_coherence tạo ra), hoặc một ảnh giao thoa I/Q hai kênh."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster độ cao đồng đăng ký."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster pha cuộn đã làm phẳng, được cuộn lại về khoảng (-pi, pi]. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "perpendicular_baseline": {
                "label": "Đường đáy vuông góc",
                "description": "Đường đáy vuông góc B_perp tính bằng mét. Bắt buộc: giá trị này quyết định độ nhạy giữa độ cao và pha, và không có giá trị mặc định nào hợp lý."
              },
              "wavelength": {
                "label": "Bước sóng",
                "description": "Bước sóng radar tính bằng mét (mặc định 0.05546576, băng C của Sentinel-1)."
              },
              "incidence_angle": {
                "label": "Góc tới",
                "description": "Góc tới tính bằng độ: một hằng số (mặc định 39.0, giá trị điển hình ở giữa dải quét IW của Sentinel-1) hoặc đường dẫn tới một raster đồng đăng ký."
              },
              "slant_range": {
                "label": "Khoảng cách nghiêng",
                "description": "Cự ly xiên R từ cảm biến tới mặt đất, tính bằng mét (mặc định 800000)."
              },
              "reference_elevation": {
                "label": "Độ cao tham chiếu",
                "description": "Độ cao được coi là có pha địa hình bằng không. Mặc định: giá trị trung bình của DEM, để kết quả đầu ra không mang độ lệch toàn cục tùy tiện."
              },
              "out_topographic_phase": {
                "label": "Pha địa hình ra",
                "description": "Raster pha địa hình mô phỏng, được CUỘN về khoảng (-pi, pi] giống như kết quả đã làm phẳng — không phải pha mô phỏng tuyệt đối. Luôn được tạo ra; sẽ dùng tham chiếu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh chứa pha, đánh số từ 1. Bỏ trống tham số này với raster pha đơn kênh hoặc ảnh giao thoa I/Q hai kênh (khi đó sẽ được nhận diện tự động); cung cấp giá trị này để đọc pha thực từ một kênh cụ thể của chồng ảnh đa kênh. Raster có nhiều hơn hai kênh BẮT BUỘC phải có tham số này, vì từ ba kênh trở lên không phải là cặp I/Q và việc đoán sẽ trả về giá trị pha có vẻ hợp lý nhưng sai."
              }
            }
          },
          "flip_line": {
            "name": "Lật đường",
            "description": "Đảo thứ tự đỉnh (đầu↔cuối) của các đối tượng polyline để lật hướng số hóa của chúng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đường đầu vào, định dạng được tự động nhận diện (hoặc đối tượng trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "focal_flow": {
            "name": "Dòng chảy tiêu cự",
            "description": "Mã hóa những ô nào trong tám ô lân cận chảy vào ô đó dưới dạng mặt nạ 8 bit (ArcGIS Focal Flow). Không như các công cụ tích lũy D8/D-infinity đi kèm, vốn định tuyến mỗi ô xuôi dốc theo một hướng, công cụ này ghi lại mọi ô lân cận chảy vào — nắm bắt sự hội tụ vào hố, vùng trũng và yên ngựa. Trọng số bit chạy ngược chiều kim đồng hồ từ hướng đông (1, 2, 4, 8, 16, 32, 64, 128); 0 là đỉnh cục bộ, 255 là hố.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster bề mặt đầu vào (độ cao hoặc bất kỳ bề mặt liên tục nào)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Một ô lân cận chỉ được tính là chảy vào nếu nó cao hơn ô trung tâm quá giá trị này (mặc định 0)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "focal_statistics": {
            "name": "Thống kê tiêu cự",
            "description": "Thống kê lân cận theo cửa sổ trượt (chữ nhật/tròn/vành khuyên/hình quạt; số và phân loại).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "statistics": {
                "label": "Thống kê",
                "description": "Đại lượng thống kê: mean, majority, maximum, median, minimum, minority, percentile, range, std, sum hoặc variety (mặc định mean)."
              },
              "neighborhood": {
                "label": "Lân cận",
                "description": "Hình dạng lân cận: rectangle, circle, annulus hoặc wedge (mặc định rectangle)."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng hình chữ nhật tính bằng số ô (mặc định 3)."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao hình chữ nhật tính bằng số ô (mặc định 3)."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính tính bằng số ô cho circle / wedge, và bán kính ngoài cho annulus (mặc định 1)."
              },
              "inner_radius": {
                "label": "Bán kính trong",
                "description": "Bán kính trong tính bằng số ô cho lân cận dạng annulus (mặc định 0)."
              },
              "start_angle": {
                "label": "Góc bắt đầu",
                "description": "Góc bắt đầu của hình quạt tính bằng độ (0 = hướng đông, ngược chiều kim đồng hồ; mặc định 0)."
              },
              "end_angle": {
                "label": "Góc kết thúc",
                "description": "Góc kết thúc của hình quạt tính bằng độ (0 = hướng đông, ngược chiều kim đồng hồ; mặc định 90)."
              },
              "percentile_value": {
                "label": "Giá trị phân vị",
                "description": "Phân vị trong khoảng [0, 100] cho đại lượng thống kê percentile (mặc định 90)."
              },
              "ignore_nodata": {
                "label": "Bỏ qua NoData",
                "description": "Nếu true (mặc định), chỉ tính gộp trên các ô hợp lệ; nếu false, bất kỳ ô NoData nào trong cửa sổ cũng làm kết quả trở thành NoData."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần xử lý, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "forest_based_forecast": {
            "name": "Dự báo dựa trên rừng ngẫu nhiên",
            "description": "Dự báo giá trị về phía trước tại từng vị trí bằng rừng ngẫu nhiên được huấn luyện trên các cửa sổ trễ trượt từ lịch sử của chính vị trí đó, giống ArcGIS Forest-based Forecast.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng có gắn dấu thời gian, mang một id vị trí, một trường thời gian và một trường giá trị."
              },
              "location_field": {
                "label": "Trường vị trí",
                "description": "Trường xác định vị trí mà mỗi quan trắc thuộc về."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường thời gian dạng số dùng để sắp xếp chuỗi của từng vị trí."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số cần dự báo."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng dự báo đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "forecast_steps": {
                "label": "Số bước dự báo",
                "description": "Số bước cần dự báo về phía trước (mặc định 3)."
              },
              "time_window": {
                "label": "Cửa sổ thời gian",
                "description": "Số giá trị trước đó được dùng làm biến dự báo (mặc định: một phần tư độ dài chuỗi, tối thiểu 2)."
              },
              "validation_steps": {
                "label": "Số bước kiểm định",
                "description": "Số bước cuối được giữ lại để tính điểm RMSE (mặc định 0, không kiểm định)."
              },
              "n_trees": {
                "label": "Số cây",
                "description": "Số cây trong rừng (mặc định 50, tối đa 500)."
              },
              "min_leaf_size": {
                "label": "Kích thước lá tối thiểu",
                "description": "Số bản ghi huấn luyện tối thiểu trong một nút lá (mặc định 2)."
              },
              "max_depth": {
                "label": "Độ sâu tối đa",
                "description": "Độ sâu cây lớn nhất (mặc định 8)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên tất định điều khiển việc lấy mẫu bootstrap và chọn tập con biến (mặc định 42)."
              }
            }
          },
          "frequency_comparison": {
            "name": "So sánh tần suất",
            "description": "Đếm, theo từng ô, số raster trong chồng bằng / lớn hơn / nhỏ hơn ô tương ứng của raster giá trị tham chiếu (ArcGIS Equal To Frequency, Greater Than Frequency và Less Than Frequency, cộng thêm các toán tử bao gồm và phủ định). Cả hai sổ đăng ký đều không gộp được một phép so sánh trên chồng raster: cell_statistics không có đầu vào tham chiếu, raster_calculator biểu diễn được một phép so sánh nhưng không đếm được trên chồng có độ dài tùy ý, còn conditional_evaluation là bộ chọn một điều kiện.",
            "params": {
              "value_raster": {
                "label": "Raster giá trị",
                "description": "Raster tham chiếu để so sánh với từng lớp trong chồng raster, đồng đăng ký với dữ liệu đầu vào. Raster tham chiếu đơn kênh được áp dụng chung cho mọi nhóm kênh; raster tham chiếu đa kênh phải có một kênh cho mỗi nhóm và sẽ tiến theo nhóm."
              },
              "inputs": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lớp) hoặc một danh sách phân tách bằng dấu phẩy các raster đã đồng đăng ký."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster số lượng đầu ra (0..n). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "comparison": {
                "label": "So sánh",
                "description": "'equal' (mặc định), 'greater', 'less', 'greater_equal', 'less_equal', hoặc 'not_equal'."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai tuyệt đối cho 'equal'/'not_equal' trên dữ liệu dấu phẩy động (mặc định 0 = chính xác tuyệt đối)."
              },
              "ignore_nodata": {
                "label": "Bỏ qua NoData",
                "description": "Bỏ qua các quan sát no-data ở mỗi ô (mặc định true). Khi false, chỉ cần một quan sát no-data là ô đó thành no-data."
              },
              "process_as_multiband": {
                "label": "Xử lý dạng đa kênh",
                "description": "'single_band' (mặc định): mọi kênh của mọi đầu vào là một lớp của một chồng duy nhất. 'multi_band': kênh i của mọi đầu vào tạo thành một chồng riêng, cho ra kết quả đa kênh."
              }
            }
          },
          "fuzzy_overlay": {
            "name": "Chồng lớp mờ",
            "description": "Co giãn raster thành bề mặt thành viên mờ 0..1 (linear/gaussian/small/large/ms_small/ms_large), hoặc kết hợp nhiều raster thành viên bằng phép mờ AND/OR/PRODUCT/SUM/GAMMA, giống ArcGIS Fuzzy Membership + Fuzzy Overlay.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Chế độ hàm thuộc: raster đầu vào cần biến đổi thành bề mặt giá trị 0..1."
              },
              "inputs": {
                "label": "Đầu vào",
                "description": "Chế độ chồng lớp: danh sách ≥2 raster hàm thuộc phân tách bằng dấu phẩy để kết hợp. Được ưu tiên hơn 'input'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "function": {
                "label": "Hàm",
                "description": "Hàm thuộc: 'linear' (mặc định), 'gaussian', 'small', 'large', 'ms_small', 'ms_large'."
              },
              "overlay": {
                "label": "Chồng lớp",
                "description": "Toán tử chồng lớp: 'and' (min, mặc định), 'or' (max), 'product', 'sum', 'gamma'."
              },
              "midpoint": {
                "label": "Điểm giữa",
                "description": "linear: giá trị ánh xạ tới 0.5 bị bỏ qua (dùng min/max); gaussian/small/large: điểm giữa của hàm; ms_small/ms_large: hệ số nhân của giá trị trung bình (mặc định lấy từ thống kê kênh)."
              },
              "spread": {
                "label": "Độ trải",
                "description": "gaussian/small/large: độ trải rộng (mặc định gaussian 0.1, small/large 5); ms_small/ms_large: hệ số nhân của độ lệch chuẩn (mặc định 1)."
              },
              "min": {
                "label": "Min",
                "description": "linear: giá trị ánh xạ tới độ thuộc 0 (mặc định là giá trị nhỏ nhất của kênh). Nếu min>max thì hàm dốc nghịch biến."
              },
              "max": {
                "label": "Max",
                "description": "linear: giá trị ánh xạ tới độ thuộc 1 (mặc định là giá trị lớn nhất của kênh)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Số mũ gamma của phép chồng lớp trong khoảng [0,1] (mặc định 0.9)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần biến đổi ở chế độ hàm thuộc, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "gaussian_geostatistical_simulations": {
            "name": "Mô phỏng địa thống kê Gauss",
            "description": "Mô phỏng Gauss tuần tự: N hiện thực hóa có điều kiện đồng xác suất của một trường tuân theo dữ liệu mẫu (giống ArcGIS Gaussian Geostatistical Simulations) — đầu ra đa hiện thực hóa có điều kiện mà empirical_bayesian_kriging / kriging thông thường một bề mặt và turning_bands_simulation không điều kiện không cung cấp. Có hạt giống và tất định.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào chứa các giá trị điều kiện (hệ tọa độ chiếu)."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số chứa giá trị cần mô phỏng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đa kênh đầu ra (mỗi kênh là một lần hiện thực hóa). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "num_realizations": {
                "label": "Số hiện thực hóa",
                "description": "Số lần hiện thực hóa / số kênh đầu ra (mặc định 10)."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra tính theo đơn vị hệ tọa độ. Mặc định: cạnh dài hơn của phạm vi / 100."
              },
              "variogram_model": {
                "label": "Mô hình variogram",
                "description": "'exponential' (mặc định), 'spherical', hoặc 'gaussian'."
              },
              "nugget": {
                "label": "Nugget",
                "description": "Nugget thủ công; bỏ trống để ước lượng từ dữ liệu."
              },
              "sill": {
                "label": "Sill",
                "description": "Sill riêng phần thủ công; bỏ trống để ước lượng từ dữ liệu."
              },
              "range": {
                "label": "Khoảng biến thiên",
                "description": "Tầm ảnh hưởng thủ công; bỏ trống để ước lượng từ dữ liệu."
              },
              "max_neighbors": {
                "label": "Số lân cận tối đa",
                "description": "Số điểm đã biết tối đa dùng cho phép kriging của mỗi ô (mặc định 16)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên tất định (mặc định 1)."
              },
              "output_mean": {
                "label": "Đầu ra trung bình",
                "description": "Đường dẫn raster tùy chọn cho giá trị trung bình của tập hợp."
              },
              "output_std": {
                "label": "Đầu ra độ lệch chuẩn",
                "description": "Đường dẫn raster tùy chọn cho độ lệch chuẩn của tập hợp."
              }
            }
          },
          "generalized_linear_regression": {
            "name": "Hồi quy tuyến tính tổng quát",
            "description": "Hồi quy toàn cục (gaussian/OLS, poisson hoặc logistic) của trường phụ thuộc theo các trường giải thích bằng IRLS, với các trường đầu ra giá trị khớp + phần dư và chẩn đoán đầy đủ: hệ số từng số hạng, sai số chuẩn, t/z, xác suất và VIF, cộng thêm AICc, R²/độ lệch và kiểm định phương sai thay đổi Koenker (Breusch–Pagan) studentized — giống ArcGIS Generalized Linear Regression.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào (điểm, hoặc hình học khác — hình học được giữ nguyên khi truyền qua)."
              },
              "dependent_field": {
                "label": "Trường phụ thuộc",
                "description": "Trường số phụ thuộc (biến phản hồi). Với 'logistic' trường này phải nhận giá trị 0/1."
              },
              "explanatory_fields": {
                "label": "Trường giải thích",
                "description": "(Các) trường số giải thích phân tách bằng dấu phẩy."
              },
              "family": {
                "label": "Họ",
                "description": "Họ mô hình: 'gaussian' (OLS, mặc định), 'poisson' (liên kết log, dữ liệu đếm) hoặc 'logistic' (liên kết logit, 0/1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "report": {
                "label": "Báo cáo",
                "description": "Đường dẫn CSV tùy chọn cho báo cáo hệ số + chẩn đoán mô hình."
              }
            }
          },
          "generate_breach_lines": {
            "name": "Tạo đường phá",
            "description": "Cho trước đa giác vùng trũng và DEM, xuất polyline mà theo đó mỗi vùng trũng sẽ được phá để thoát nước, dùng tiêu chí chi phí phá tối thiểu, đường đi ngắn nhất hoặc biến thiên độ cao tối thiểu, kèm độ sâu cắt và thể tích đào cho mỗi đường phá. Giống ArcGIS Generate Breach Lines.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đa giác vùng trũng (ví dụ kết quả của delineate_depressions)."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster bề mặt mà đường phá được khoét qua."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đường phá đầu ra. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "connection_points": {
                "label": "Điểm kết nối",
                "description": "Các đối tượng điểm tùy chọn ràng buộc nơi đường phá có thể kết thúc."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'minimum_breaching_cost' (mặc định), 'shortest_path' hoặc 'minimum_elevation_change'."
              },
              "max_length": {
                "label": "Chiều dài tối đa",
                "description": "Loại bỏ các đường phá dài hơn giá trị này (đơn vị bản đồ); các vùng trũng đó sẽ không được phá."
              }
            }
          },
          "generate_near_table": {
            "name": "Tạo bảng lân cận",
            "description": "Với mỗi đối tượng đầu vào, liệt kê k đối tượng gần nhất (hoặc tất cả trong bán kính tìm kiếm) của lớp lân cận kèm khoảng cách, thứ hạng, tùy chọn góc phương vị và tọa độ XY lân cận — bảng lân cận đa láng giềng, giống ArcGIS Generate Near Table.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm, đường hoặc đa giác) cần đo khoảng cách lân cận."
              },
              "near_features": {
                "label": "Đối tượng lân cận",
                "description": "Lớp vector lân cận dùng để tìm kiếm đối sánh (điểm, đường hoặc đa giác)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (mỗi kết quả lân cận một điểm). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Chỉ giữ lại các đối tượng lân cận nằm trong khoảng cách này (đơn vị bản đồ). Bắt buộc khi closest_count = 0 (tất cả trong bán kính)."
              },
              "closest_count": {
                "label": "Số gần nhất",
                "description": "Số đối tượng lân cận gần nhất cho mỗi đối tượng đầu vào (k, mặc định 1). Dùng 0 để trả về mọi đối tượng lân cận nằm trong search_radius."
              },
              "angle": {
                "label": "Góc",
                "description": "Thêm NEAR_ANGLE (góc phương vị số học tính bằng độ, đông = 0, ngược chiều kim đồng hồ). Mặc định false."
              },
              "location": {
                "label": "Vị trí",
                "description": "Thêm các cột NEAR_X / NEAR_Y cho vị trí lân cận. Mặc định false."
              }
            }
          },
          "generate_network_swm": {
            "name": "Tạo SWM mạng lưới",
            "description": "Xây dựng ma trận trọng số không gian trong đó lân cận và trọng số đến từ khoảng cách di chuyển dọc mạng lưới đường thay vì hình học đường thẳng (ArcGIS Generate Network Spatial Weights). generate_spatial_weights_matrix chỉ cung cấp khái niệm hóa Euclid và tô pô (knn, dải khoảng cách cố định, nghịch đảo khoảng cách, liền kề, Delaunay), nên với các hiện tượng ràng buộc theo mạng lưới nó liên kết cả những đối tượng không thể tới được nhau và làm thiên lệch mọi thống kê phía sau. Đầu ra dùng cùng lược đồ bảng, nên global_morans_i, local_morans_i_lisa, getis_ord_gi_star và compare_spatial_weights dùng được nguyên vẹn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng điểm cần gán trọng số."
              },
              "network": {
                "label": "Mạng lưới",
                "description": "Mạng lưới đường dùng để đo khoảng cách di chuyển."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Bảng trọng số (CSV theo phần mở rộng, hoặc một bảng vector không có hình học), theo cùng lược đồ origin/neighbor/weight mà generate_spatial_weights_matrix tạo ra. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường chứa id duy nhất của mỗi đối tượng. Mặc định: chỉ số đối tượng đánh số từ 0, khớp với generate_spatial_weights_matrix."
              },
              "impedance_field": {
                "label": "Trường trở kháng",
                "description": "Trường chi phí của mạng lưới. Mặc định: chiều dài hình học của mỗi phân đoạn."
              },
              "distance_cutoff": {
                "label": "Ngưỡng khoảng cách",
                "description": "Trở kháng mạng lưới tối đa mà một lân cận được phép nằm ở đó. Mặc định: không giới hạn."
              },
              "max_neighbors": {
                "label": "Số lân cận tối đa",
                "description": "Giới hạn số lân cận cho mỗi điểm gốc, giữ lại những lân cận gần nhất. Mặc định: không giới hạn."
              },
              "conceptualization": {
                "label": "Khái niệm hóa",
                "description": "'fixed' (mặc định, trọng số nhị phân 1 trong ngưỡng cắt) hoặc 'inverse' (trọng số = 1 / trở kháng^số mũ)."
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Số mũ suy giảm cho 'inverse' (mặc định 1)."
              },
              "row_standardization": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Chia trọng số của mỗi điểm gốc cho tổng hàng của chúng để mỗi điểm gốc có tổng bằng 1. Mặc định false, khớp với generate_spatial_weights_matrix."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Khoảng cách mà trong đó hai đỉnh của mạng lưới được hàn thành một nút, tính theo đơn vị hệ tọa độ (mặc định 1e-6). Nếu không, mạng lưới có các phân đoạn gần chạm nhau sẽ bị ngắt kết nối một cách âm thầm, và mọi điểm gốc bị ảnh hưởng sẽ không sinh ra bản ghi nào."
              },
              "search_tolerance": {
                "label": "Dung sai tìm kiếm",
                "description": "Khoảng cách bắt dính tối đa từ một điểm tới mạng lưới. Các điểm ở xa hơn sẽ được báo cáo là chưa bắt dính thay vì bị âm thầm gắn vào một nút ở xa."
              }
            }
          },
          "generate_od_links": {
            "name": "Tạo liên kết điểm đi-điểm đến",
            "description": "Vẽ các đường mong muốn thẳng từ điểm đi đến điểm đến — khớp theo ID chung, trong một khoảng cách, và/hoặc tới k điểm gần nhất — mỗi đường mang ID điểm đi/điểm đến và chiều dài, giống ArcGIS Generate Origin-Destination Links.",
            "params": {
              "origins": {
                "label": "Điểm đi",
                "description": "Lớp điểm gốc (Point hoặc MultiPoint)."
              },
              "destinations": {
                "label": "Điểm đến",
                "description": "Lớp điểm đích (Point hoặc MultiPoint)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "num_nearest": {
                "label": "Số gần nhất",
                "description": "Chỉ giữ lại k điểm đích gần nhất cho mỗi điểm gốc (sau khi áp dụng bộ lọc id/khoảng cách nếu có)."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Chỉ giữ lại các điểm đích nằm trong khoảng cách này tính từ điểm gốc (đơn vị bản đồ)."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường có mặt trong CẢ HAI lớp; chỉ nối các cặp có giá trị trùng khớp. Cũng được ghi ra dưới tên 'link_id'."
              },
              "origin_id_field": {
                "label": "Trường ID điểm đi",
                "description": "Trường trong lớp điểm gốc để ghi ra thành 'origin_id' (mặc định: chỉ số đối tượng)."
              },
              "dest_id_field": {
                "label": "Trường ID điểm đến",
                "description": "Trường trong lớp điểm đích để ghi ra thành 'dest_id' (mặc định: chỉ số đối tượng)."
              }
            }
          },
          "generate_points_along_3d_lines": {
            "name": "Tạo điểm dọc đường 3D",
            "description": "Tạo các điểm cách đều dọc theo đường 3D đo bằng khoảng cách 3D thực (không phải chiều dài mặt bằng 2D mà points_along_lines đi kèm dùng), với Z nội suy, tùy chọn điểm đầu cuối và trường lý trình 3D tích lũy. Giống ArcGIS Generate Points Along 3D Lines.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng polyline 3D đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn điểm đầu ra. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'distance' (mặc định), 'percentage', hoặc 'distance_field'."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Khoảng cách tính bằng đơn vị bản đồ cho phương pháp 'distance'."
              },
              "percentage": {
                "label": "Phần trăm",
                "description": "Khoảng cách tính theo phần trăm (0-100) chiều dài 3D của mỗi đường cho phương pháp 'percentage'."
              },
              "distance_field": {
                "label": "Trường khoảng cách",
                "description": "Trường cho biết khoảng cách riêng của từng đối tượng cho phương pháp 'distance_field'."
              },
              "include_end_points": {
                "label": "Bao gồm điểm đầu cuối",
                "description": "Đồng thời xuất ra đỉnh đầu và đỉnh cuối của mỗi đường (mặc định false)."
              },
              "add_chainage": {
                "label": "Thêm lý trình",
                "description": "Ghi ra trường CHAINAGE chứa khoảng cách 3D cộng dồn tính từ điểm đầu của đường (mặc định false)."
              }
            }
          },
          "generate_spatial_weights_matrix": {
            "name": "Tạo ma trận trọng số không gian",
            "description": "Xuất bảng lân cận/trọng số dạng dài tái sử dụng được (origin_id, neighbor_id, weight) từ một khái niệm hóa đã chọn — KNN, dải khoảng cách cố định, nghịch đảo khoảng cách, liền kề (cạnh / cạnh+góc) hoặc Delaunay — với tùy chọn chuẩn hóa theo hàng, giống ArcGIS Generate Spatial Weights Matrix.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm/đường/đa giác; tính liền kề yêu cầu đa giác)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra — một tệp CSV (phần mở rộng .csv) hoặc một bảng vector không có hình học. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường chứa id duy nhất của mỗi đối tượng. Mặc định: chỉ số đối tượng đánh số từ 0."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Cách khái niệm hóa quan hệ không gian: 'knn', 'fixed_distance_band', 'inverse_distance', 'contiguity_edges', 'contiguity_edges_corners', hoặc 'delaunay'. Mặc định 'knn'."
              },
              "number_of_neighbors": {
                "label": "Số lân cận",
                "description": "Số lân cận gần nhất k (phương pháp = knn). Mặc định 8."
              },
              "threshold_distance": {
                "label": "Khoảng cách ngưỡng",
                "description": "Ngưỡng cắt của dải khoảng cách tính bằng đơn vị bản đồ. Bắt buộc với fixed_distance_band; là ngưỡng cắt tùy chọn với inverse_distance (không đặt = tất cả các đối tượng còn lại)."
              },
              "exponent": {
                "label": "Số mũ",
                "description": "Số mũ suy giảm theo khoảng cách p cho inverse_distance (trọng số = 1/d^p). Mặc định 1."
              },
              "row_standardization": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Chia trọng số của mỗi điểm gốc cho tổng hàng của chúng để tổng trọng số của mỗi điểm gốc bằng 1. Mặc định false."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Lượng tử hóa các đỉnh về lưới có kích thước này (đơn vị hệ tọa độ) trước khi đối sánh đường biên để xét kề nhau. Mặc định 0 (tọa độ chính xác)."
              }
            }
          },
          "generate_subset_polygons": {
            "name": "Tạo đa giác tập con",
            "description": "Phân hoạch lớp điểm dày đặc thành các đa giác chặt, không chồng lấn phủ kín phạm vi điểm, mỗi đa giác chứa số điểm nằm giữa mức tối thiểu và tối đa (ArcGIS Generate Subset Polygons). Bước tiền xử lý chuẩn để nội suy các tập điểm rất lớn. Không như lưới cố định đi kèm, nó thích nghi theo mật độ (tách k-d theo trung vị); không như voronoi_diagram, nó nhóm các điểm thay vì tạo một ô cho mỗi điểm; và không như group_by_proximity, nó xuất đa giác và tuân thủ giới hạn kích thước.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đa giác đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "output_points": {
                "label": "Đầu ra điểm",
                "description": "Đường dẫn tùy chọn cho các điểm đầu vào đã được gắn id tập con. Nếu bỏ trống, kết quả được lưu trong bộ nhớ (vẫn được trả về)."
              },
              "min_points_per_subset": {
                "label": "Số điểm tối thiểu mỗi tập con",
                "description": "Giới hạn dưới về số điểm trong mỗi tập con (mặc định 50)."
              },
              "max_points_per_subset": {
                "label": "Số điểm tối đa mỗi tập con",
                "description": "Giới hạn trên về số điểm trong mỗi tập con (mặc định 200)."
              },
              "coincident_points": {
                "label": "Điểm trùng vị trí",
                "description": "'single' (mặc định; các điểm trùng nhau hoàn toàn chỉ được tính một lần khi xác định kích thước) hoặc 'all' (mỗi điểm được tính riêng)."
              },
              "clip_to_hull": {
                "label": "Cắt theo bao",
                "description": "Cắt các đa giác tập con theo bao lồi của các điểm để kết quả ôm sát dữ liệu thay vì khung bao của nó (mặc định true)."
              }
            }
          },
          "generate_transects_along_lines": {
            "name": "Tạo mặt cắt ngang dọc đường",
            "description": "Đi dọc từng đường theo khoảng cố định và xuất các đường mặt cắt ngang vuông góc có chiều dài cho trước (căn giữa hoặc lệch), phục vụ lấy mẫu biến động bờ biển, ven sông và mặt cắt ngang — giống ArcGIS Generate Transects Along Lines.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Khoảng cách giữa các tuyến cắt ngang dọc theo mỗi đường, tính theo đơn vị hệ tọa độ. Bắt buộc."
              },
              "length": {
                "label": "Chiều dài",
                "description": "Tổng chiều dài tuyến cắt ngang, tính theo đơn vị hệ tọa độ. Bắt buộc."
              },
              "offset": {
                "label": "Độ lệch",
                "description": "Độ lệch có dấu của tâm tuyến cắt ngang so với đường, tính theo đơn vị hệ tọa độ (0 = ở giữa; +/- đẩy sang trái/phải). Mặc định 0."
              },
              "include_ends": {
                "label": "Bao gồm đầu cuối",
                "description": "Đồng thời đặt một tuyến cắt ngang đúng tại điểm đầu và điểm cuối của mỗi đường. Mặc định false."
              }
            }
          },
          "generate_trend_raster": {
            "name": "Tạo raster xu thế",
            "description": "Khớp xu thế thời gian theo từng điểm ảnh trên chuỗi thời gian raster đã đồng đăng ký (giống ArcGIS Generate Trend Raster): độ dốc/hệ số chặn/R² OLS hoặc Mann-Kendall phi tham số + độ dốc Sen kèm giá trị p — xu thế thời gian theo điểm ảnh mà trend_surface (không gian) và change_vector_analysis (hai thời điểm) đi kèm không tạo được.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách các đường dẫn raster đơn kênh đồng đăng ký, phân tách bằng dấu phẩy, theo thứ tự thời gian (>= 3)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster độ dốc đầu ra (độ dốc Sen với mann_kendall). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "times": {
                "label": "Thời điểm",
                "description": "Các mốc thời gian dạng số phân tách bằng dấu phẩy (ví dụ năm) tương ứng với 'inputs'. Mặc định 0,1,2,..."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'linear' (OLS; mặc định) hoặc 'mann_kendall' (phi tham số + độ dốc Sen)."
              },
              "intercept_output": {
                "label": "Đầu ra hệ số chặn",
                "description": "chỉ với linear: raster đầu ra tùy chọn chứa hệ số chặn của OLS."
              },
              "significance_output": {
                "label": "Đầu ra mức ý nghĩa",
                "description": "Raster đầu ra tùy chọn: R² (linear) hoặc giá trị p hai phía của Mann-Kendall (mann_kendall)."
              },
              "min_valid": {
                "label": "Số hợp lệ tối thiểu",
                "description": "Số quan trắc không phải NoData tối thiểu trên mỗi điểm ảnh (mặc định 3)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ mỗi dữ liệu đầu vào, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "geodetic_densify": {
            "name": "Tăng mật độ trắc địa",
            "description": "Chèn đỉnh dọc theo đường trắc địa thực hoặc đường rhumb (phương vị không đổi) giữa các đỉnh hiện có của lớp đường hoặc đa giác địa lý (kinh/vĩ độ), giống Geodetic Densify của ArcGIS — để các đoạn dài bám theo độ cong trái đất thay vì dây cung phẳng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường hoặc đa giác đầu vào, giả định ở hệ địa lý (kinh độ/vĩ độ, kiểu EPSG:4326)."
              },
              "geodetic_type": {
                "label": "Kiểu trắc địa",
                "description": "Kiểu đường nối giữa các đỉnh: 'geodesic' (mặc định; đường ngắn nhất trên ellipsoid WGS84) hoặc 'rhumb'/'loxodrome' (giữ nguyên phương vị thực)."
              },
              "max_segment_length": {
                "label": "Chiều dài đoạn tối đa",
                "description": "Khoảng cách tối đa mong muốn, tính bằng mét, giữa các đỉnh liên tiếp sau khi làm dày. Phải cung cấp đúng một trong hai tham số max_segment_length / vertices_per_segment."
              },
              "vertices_per_segment": {
                "label": "Số đỉnh mỗi đoạn",
                "description": "Thay thế cho max_segment_length: chèn đúng số đỉnh cách đều này vào mọi phân đoạn gốc, bất kể chiều dài của nó. Phải cung cấp đúng một trong hai tham số max_segment_length / vertices_per_segment."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn; nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "geotagged_photos_to_points": {
            "name": "Ảnh gắn thẻ địa lý thành điểm",
            "description": "Đọc thư mục ảnh gắn thẻ địa lý và dựng lớp điểm WGS-84 với đường dẫn, thời điểm chụp, độ cao, phương vị máy ảnh (hướng ảnh GPS) và hãng/mẫu máy của từng ảnh — chỉ phân tích từ siêu dữ liệu EXIF (không giải mã điểm ảnh), giống ArcGIS GeoTagged Photos To Points.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn thư mục chứa ảnh chụp (JPEG/TIFF) để đọc siêu dữ liệu GPS trong EXIF."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector điểm đầu ra (driver được xác định từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "recursive": {
                "label": "Đệ quy",
                "description": "Quét cả các thư mục con khi tìm ảnh chụp. Mặc định false."
              },
              "only_geotagged": {
                "label": "Chỉ ảnh có gắn thẻ địa lý",
                "description": "Bỏ qua các ảnh không có vị trí GPS (mặc định true). Khi đặt false, các ảnh không gắn thẻ địa lý sẽ được xuất ra với hình học null."
              }
            }
          },
          "getis_ord_general_g": {
            "name": "Phân cụm cao/thấp (Getis-Ord General G)",
            "description": "Tính thống kê General G toàn cục của Getis-Ord — một điểm z và giá trị p duy nhất cho biết các giá trị CAO hay THẤP có phân cụm toàn cục hay không, giống ArcGIS High/Low Clustering (Getis-Ord General G).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào. Điểm dùng tọa độ của chúng; các hình học khác dùng điểm đại diện trung bình đỉnh (trọng số tiếp giáp cần đa giác)."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số, không âm để kiểm định phân cụm cao/thấp."
              },
              "weights": {
                "label": "Trọng số",
                "description": "Sơ đồ trọng số không gian: 'distance_band' (mặc định), 'k_nearest', 'queen' hoặc 'rook'."
              },
              "distance_band": {
                "label": "Dải khoảng cách",
                "description": "Khoảng cách ngưỡng (đơn vị hệ tọa độ) cho sơ đồ 'distance_band'. Mặc định: khoảng cách lân cận gần nhất lớn nhất (mọi đối tượng đều có >=1 lân cận)."
              },
              "k": {
                "label": "K",
                "description": "Số lượng lân cận cho sơ đồ 'k_nearest' (mặc định 8)."
              },
              "row_standardize": {
                "label": "Chuẩn hóa theo hàng",
                "description": "Chuẩn hóa theo hàng ma trận trọng số để mỗi hàng có tổng bằng 1 (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV tùy chọn cho báo cáo một hàng. Luôn được trả về trong kết quả."
              }
            }
          },
          "goldstein_phase_filter": {
            "name": "Bộ lọc pha Goldstein",
            "description": "Lọc phổ thích nghi (Goldstein) cho pha SAR giao thoa, bước giúp việc mở pha trở nên khả thi (ArcGIS Apply Complex Data Filter). unwrap_phase của vòng 17 thất bại trên ảnh giao thoa thô vì các điểm dư nhiễu buộc phải cắt nhánh; toàn bộ họ bộ lọc lee/frost/kuan/wiener/gaussian đi kèm làm việc trên cường độ giá trị thực và không dùng được ở đây, vì lấy trung bình pha bị bao qua điểm gián đoạn +/-pi sẽ phá hủy nó. Lọc tín hiệu phức theo từng mảnh trong miền tần số và báo cáo số điểm dư trước và sau.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Ảnh giao thoa: raster I/Q hai kênh, hoặc raster pha cuộn một kênh tính bằng radian (giả định biên độ đơn vị)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster phức đã lọc hai kênh (I, Q) đầu ra. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "output_phase": {
                "label": "Đầu ra pha",
                "description": "Pha cuộn đã lọc một kênh đầu ra tính bằng radian, trong khoảng (-pi, pi]. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Cường độ lọc trong [0, 1] (mặc định 0.5). Giá trị 0 giữ nguyên pha; 1 là mạnh nhất."
              },
              "outer_window_size": {
                "label": "Kích thước cửa sổ ngoài",
                "description": "Kích thước mảng FFT tính bằng ô (mặc định 32). Được làm tròn lên thành lũy thừa của hai."
              },
              "inner_window_size": {
                "label": "Kích thước cửa sổ trong",
                "description": "Bước giữa các mảng tính bằng ô (mặc định = outer/4). Nhỏ hơn nghĩa là chồng lấn nhiều hơn và hòa trộn mượt hơn; không được vượt quá cửa sổ ngoài."
              },
              "spectrum_smoothing": {
                "label": "Làm trơn phổ",
                "description": "Chiều rộng tính bằng bin của trung bình trượt áp dụng cho phổ của mảng trước khi lũy thừa (mặc định 3, phải là số lẻ)."
              }
            }
          },
          "gpx_to_features": {
            "name": "GPX sang đối tượng",
            "description": "Phân tích tệp GPX thành các điểm waypoint và/hoặc polyline track/route, mang theo ele/time/name.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn đến tệp .gpx (GPS Exchange Format XML)."
              },
              "points_output": {
                "label": "Đầu ra điểm",
                "description": "Đường dẫn vector điểm đầu ra tùy chọn cho các điểm mốc (driver lấy từ phần mở rộng). Nếu không cung cấp đầu ra nào, các điểm mốc sẽ được lưu trong bộ nhớ."
              },
              "lines_output": {
                "label": "Đầu ra đường",
                "description": "Đường dẫn vector đường đầu ra tùy chọn cho các vệt và tuyến (driver lấy từ phần mở rộng)."
              }
            }
          },
          "graphic_buffer": {
            "name": "Vùng đệm đồ họa",
            "description": "Tạo vùng đệm cho đối tượng với lựa chọn kiểu đầu mút (tròn/vuông/bằng) và kiểu nối góc (tròn/nhọn/vát), kèm giới hạn góc nhọn — hình học vùng đệm vuông/nhọn mà vùng đệm chỉ có dạng tròn không tạo được.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào, định dạng được tự động nhận diện (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Khoảng cách vùng đệm theo đơn vị hệ tọa độ của lớp. Phải là số dương."
              },
              "cap": {
                "label": "Đầu mút",
                "description": "Kiểu đầu mút cho đầu đường/điểm: 'round' (mặc định), 'square' hoặc 'butt' (bí danh 'flat')."
              },
              "join": {
                "label": "Kết nối",
                "description": "Kiểu nối góc: 'round' (mặc định), 'miter' hoặc 'bevel'."
              },
              "miter_limit": {
                "label": "Giới hạn góc nhọn",
                "description": "Tỉ số giữa chiều dài mũi nhọn và khoảng cách vùng đệm, vượt quá tỉ số này thì góc nhọn sẽ được vát (mặc định ArcGIS/JTS là 10). Phải >= 1. Chỉ dùng khi join='miter'."
              },
              "dissolve": {
                "label": "Hòa tan",
                "description": "Khi true, hợp tất cả vùng đệm thành một đối tượng (multi)polygon đã hòa tan. Mặc định false (một vùng đệm cho mỗi đối tượng đầu vào, giữ nguyên thuộc tính)."
              }
            }
          },
          "greater_than_or_equal_to": {
            "name": "Lớn hơn hoặc bằng",
            "description": "Kiểm tra raster thứ nhất có lớn hơn hoặc bằng raster thứ hai hay không theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "grid_index_features": {
            "name": "Đối tượng chỉ mục lưới",
            "description": "Xây dựng lưới chỉ mục loạt bản đồ gồm các hình chữ nhật cỡ trang với tên trang (A1, B3, ... hoặc tuần tự), kích thước dẫn xuất từ tỉ lệ và tùy chọn lọc giao với dữ liệu — giống ArcGIS Grid Index Features, cộng thêm chế độ dải bám theo tuyến với các trang xoay giống ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào. Cung cấp phạm vi khi không chỉ định phạm vi tường minh, tuyến cho chế độ dải, và các đối tượng được kiểm tra bởi intersect_only."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đa giác đầu ra của các trang chỉ mục (driver lấy từ phần mở rộng). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "mode": {
                "label": "Chế độ",
                "description": "grid (mặc định): chia ô một phạm vi hình chữ nhật. strip: đi theo một đường tuyến với các trang xoay chồng lấn."
              },
              "x_min": {
                "label": "X nhỏ nhất",
                "description": "Giá trị X nhỏ nhất của phạm vi tường minh (đơn vị hệ tọa độ). Cung cấp cả bốn giá trị x_min/y_min/x_max/y_max để ghi đè phạm vi đầu vào."
              },
              "y_min": {
                "label": "Y nhỏ nhất",
                "description": "Giá trị Y nhỏ nhất của phạm vi tường minh (đơn vị hệ tọa độ)."
              },
              "x_max": {
                "label": "X lớn nhất",
                "description": "Giá trị X lớn nhất của phạm vi tường minh (đơn vị hệ tọa độ)."
              },
              "y_max": {
                "label": "Y lớn nhất",
                "description": "Giá trị Y lớn nhất của phạm vi tường minh (đơn vị hệ tọa độ)."
              },
              "tile_width": {
                "label": "Chiều rộng ô",
                "description": "Chiều rộng trang theo đơn vị hệ tọa độ. Cung cấp cả tile_width và tile_height, hoặc dùng page_size + map_scale."
              },
              "tile_height": {
                "label": "Chiều cao ô",
                "description": "Chiều cao trang theo đơn vị hệ tọa độ (chiều dài trang dọc theo tuyến trong chế độ dải)."
              },
              "page_size": {
                "label": "Kích thước trang",
                "description": "Khổ giấy định sẵn (a0..a4, letter, legal, tabloid) có kích thước mét được nhân với map_scale để định kích thước mỗi trang. Yêu cầu map_scale."
              },
              "map_scale": {
                "label": "Tỉ lệ bản đồ",
                "description": "Mẫu số tỉ lệ bản đồ (ví dụ 24000 cho 1:24,000). Cùng với page_size, kích thước ô = số mét giấy × map_scale (giả định hệ tọa độ mét)."
              },
              "origin_x": {
                "label": "Gốc X",
                "description": "Giá trị X của gốc lưới mà ranh giới ô căn theo. Mặc định: giá trị X nhỏ nhất của phạm vi."
              },
              "origin_y": {
                "label": "Gốc Y",
                "description": "Giá trị Y của gốc lưới mà ranh giới ô căn theo. Mặc định: giá trị Y nhỏ nhất của phạm vi."
              },
              "naming": {
                "label": "Đặt tên",
                "description": "Sơ đồ đặt tên trang: alphanumeric (mặc định; chữ cái cột + số hàng, ví dụ A1) hoặc sequential (số theo thứ tự đọc)."
              },
              "intersect_only": {
                "label": "Chỉ giao nhau",
                "description": "Khi true, loại bỏ các trang không giao với bất kỳ đối tượng đầu vào nào. Yêu cầu input. Mặc định false."
              },
              "route": {
                "label": "Tuyến",
                "description": "Chế độ dải: lớp vector đường để đi theo. Mặc định là đối tượng đường đầu tiên trong input."
              },
              "overlap": {
                "label": "Chồng lấn",
                "description": "Chế độ dải: tỉ lệ [0,1) mà các trang liên tiếp chồng lấn dọc theo tuyến. Mặc định 0.05."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG đầu ra khi phạm vi được chỉ định tường minh và không có lớp đầu vào để kế thừa hệ tọa độ."
              }
            }
          },
          "group_by_proximity": {
            "name": "Nhóm theo khoảng cách gần",
            "description": "Gắn GROUP_ID cho các đối tượng theo thành phần liên thông không gian liên kết đơn — các đối tượng trong một khoảng cách ('near') hoặc chạm nhau ('intersects'), tùy chọn cùng chia sẻ giá trị thuộc tính — giống ArcGIS Group By Proximity.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (kiểu hình học bất kỳ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "relationship": {
                "label": "Quan hệ",
                "description": "'near' (trong phạm vi 'spatial_near_distance', mặc định) hoặc 'intersects' (tiếp xúc, khoảng cách 0)."
              },
              "spatial_near_distance": {
                "label": "Khoảng cách lân cận không gian",
                "description": "Khoảng cách tìm kiếm theo đơn vị bản đồ cho 'near' (mặc định 0)."
              },
              "attribute_field": {
                "label": "Trường thuộc tính",
                "description": "Trường tùy chọn; các đối tượng chỉ được nhóm khi chúng có cùng giá trị thuộc tính này."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Tên của trường mã nhóm đầu ra (mặc định 'GROUP_ID')."
              }
            }
          },
          "gtfs_to_features": {
            "name": "GTFS sang đối tượng",
            "description": "Phân tích nguồn cấp GTFS thành điểm dừng và đường tuyến, tùy chọn kèm số lượt phục vụ theo từng điểm dừng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn đến thư mục nguồn cấp GTFS đã giải nén (thư mục chứa các tệp *.txt: stops.txt, shapes.txt, trips.txt, ...)."
              },
              "stops_output": {
                "label": "Đầu ra điểm dừng",
                "description": "Đường dẫn vector điểm đầu ra tùy chọn cho các trạm dừng (driver lấy từ phần mở rộng). Nếu không cung cấp đầu ra nào, các trạm dừng sẽ được lưu trong bộ nhớ."
              },
              "shapes_output": {
                "label": "Đầu ra hình dạng",
                "description": "Đường dẫn vector đường đầu ra tùy chọn cho hình dạng các tuyến (driver lấy từ phần mở rộng)."
              },
              "frequency": {
                "label": "Tần số",
                "description": "Khi true, đếm số chuyến khởi hành theo lịch của mỗi trạm dừng từ stop_times.txt vào trường n_departures. Mặc định false."
              },
              "start_time": {
                "label": "Thời gian bắt đầu",
                "description": "Cận dưới HH:MM:SS tùy chọn cho cửa sổ tần suất (thời gian GTFS có thể vượt quá 24:00:00)."
              },
              "end_time": {
                "label": "Giờ kết thúc",
                "description": "Cận trên HH:MM:SS tùy chọn cho cửa sổ tần suất."
              }
            }
          },
          "h3_polyfill": {
            "name": "Lấp đầy H3",
            "description": "Phủ các đa giác đầu vào bằng ô lưới toàn cầu rời rạc H3 ở độ phân giải đã chọn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào (phải ở tọa độ địa lý kinh/vĩ độ, EPSG:4326) hoặc handle trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra; driver được lấy từ phần mở rộng (.geojson, .fgb, .parquet, ...). Nếu bỏ qua, lớp sẽ được lưu trong bộ nhớ."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 (thô nhất) đến 15 (mịn nhất); mặc định 8 (ô ~0.7 km²)."
              }
            }
          },
          "h3_to_vector": {
            "name": "Ô H3 sang đa giác",
            "description": "Biến một cột ID ô H3 thành các đa giác ranh giới ô, sao chép các thuộc tính khác đi kèm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào (hoặc handle trong bộ nhớ) có một trường chứa mã ô H3."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra; driver được lấy từ phần mở rộng (.geojson, .fgb, .parquet, ...). Nếu bỏ qua, lớp sẽ được lưu trong bộ nhớ."
              },
              "field": {
                "label": "Trường",
                "description": "Tên của trường văn bản chứa mã ô H3; mặc định 'h3'."
              }
            }
          },
          "hdbscan": {
            "name": "Phân cụm HDBSCAN",
            "description": "Phân cụm phân cấp dựa trên mật độ (HDBSCAN*): cây khung nhỏ nhất theo khả năng tiếp cận tương hỗ, cây cụm cô đọng và lựa chọn theo excess-of-mass, với xác suất thành viên và điểm ngoại lai cho từng điểm — xử lý mật độ biến thiên mà không cần epsilon, giống tùy chọn HDBSCAN của ArcGIS Density-based Clustering.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (hệ tọa độ quy chiếu; khoảng cách tính theo đơn vị của nó)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (bản sao của đầu vào kèm các trường phân cụm). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "min_cluster_size": {
                "label": "Kích thước cụm tối thiểu",
                "description": "Nhóm nhỏ nhất được coi là một cụm (>= 2). Mặc định 5."
              },
              "min_samples": {
                "label": "Số mẫu tối thiểu",
                "description": "Kích thước lân cận cho ước lượng mật độ khoảng cách lõi (càng cao thì càng nhiều điểm bị coi là nhiễu). Mặc định: min_cluster_size."
              }
            }
          },
          "hot_spot_analysis_comparison": {
            "name": "So sánh phân tích điểm nóng",
            "description": "So sánh hai lớp kết quả điểm nóng Getis-Ord: khớp vị trí, phân loại từng chuyển đổi (hot_to_hot, hot_to_cold, none_to_hot, ...) và chạy kiểm định hoán vị có hạt giống về mức đồng thuận tổng thể — giống ArcGIS Hot Spot Analysis Comparison.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Lớp kết quả điểm nóng thứ nhất (điểm hoặc đa giác)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Lớp kết quả điểm nóng thứ hai."
              },
              "bin_field": {
                "label": "Trường ô",
                "description": "Trường mức ý nghĩa có mặt trên cả hai đầu vào (dương = nóng, âm = lạnh)."
              },
              "significance": {
                "label": "Mức ý nghĩa",
                "description": "Ngưỡng giá trị tuyệt đối mà dưới đó vị trí được coi là 'none' (mặc định 0)."
              },
              "match_field": {
                "label": "Trường khớp",
                "description": "Trường mã tùy chọn có mặt trên cả hai đầu vào dùng để nối các vị trí; nếu không thì dùng trọng tâm gần nhất."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Khoảng cách trọng tâm lớn nhất cho việc so khớp vị trí gần nhất (đơn vị bản đồ). Không giới hạn nếu bỏ qua."
              },
              "permutations": {
                "label": "Số hoán vị",
                "description": "Số lần hoán vị cho kiểm định mức độ đồng thuận toàn cục (mặc định 499)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên hoán vị tất định (mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "identify_narrow_polygons": {
            "name": "Nhận diện đa giác hẹp",
            "description": "Đánh dấu các đa giác ở đâu đó hẹp hơn dung sai chiều rộng (mảnh vụn và cổ hẹp), chú thích từng đa giác bằng cờ is_narrow và chiều rộng tối thiểu ước tính.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào, tự động nhận dạng định dạng (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "width_tolerance": {
                "label": "Dung sai chiều rộng",
                "description": "Ngưỡng chiều rộng theo đơn vị hệ tọa độ. Một đa giác được coi là hẹp ở nơi nó mỏng hơn giá trị này. Bắt buộc."
              },
              "min_narrow_area": {
                "label": "Diện tích hẹp tối thiểu",
                "description": "Diện tích phần hẹp nhỏ nhất (đơn vị hệ tọa độ bình phương) cần có để đánh dấu một đa giác; các vùng hẹp nhỏ hơn sẽ bị bỏ qua như nhiễu. Mặc định là width_tolerance bình phương, giá trị này cũng hấp thụ phần bo góc nhỏ do phép mở."
              },
              "narrow_only": {
                "label": "Chỉ phần hẹp",
                "description": "Khi true, loại bỏ các đối tượng không hẹp và chỉ xuất ra các đa giác hẹp đã được đánh dấu. Mặc định false (chú giải và giữ lại tất cả các đối tượng)."
              }
            }
          },
          "idw_3d": {
            "name": "IDW 3D",
            "description": "Nội suy nghịch đảo khoảng cách thể tích các quan sát điểm 3D thành chồng các mức độ cao (một kênh raster cho mỗi mức), với hệ số phóng đại độ cao xử lý dị hướng đứng-ngang và tùy chọn điểm kiểm định chéo bỏ-một-ra. Giống ArcGIS IDW3D.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đối tượng điểm 3D đầu vào."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số chứa giá trị cần nội suy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đa kênh đầu ra (một kênh cho mỗi mức độ cao). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "z_field": {
                "label": "Trường Z",
                "description": "Trường cung cấp độ cao; mặc định là giá trị Z của hình học."
              },
              "power": {
                "label": "Lũy thừa",
                "description": "Số mũ nghịch đảo khoảng cách (mặc định 2)."
              },
              "elev_inflation_factor": {
                "label": "Hệ số phóng đại độ cao",
                "description": "Hệ số nhân áp dụng cho khoảng cách thẳng đứng trước khi tính khoảng cách 3D (mặc định 1). Giá trị > 1 làm khoảng cách thẳng đứng có trọng số lớn hơn, phù hợp với tỉ lệ tương quan thẳng đứng ngắn hơn của hầu hết dữ liệu thể tích."
              },
              "x_spacing": {
                "label": "Khoảng cách X",
                "description": "Kích thước ô đầu ra theo X (mặc định: phạm vi / 100)."
              },
              "y_spacing": {
                "label": "Khoảng cách Y",
                "description": "Kích thước ô đầu ra theo Y (mặc định: giống x_spacing)."
              },
              "z_spacing": {
                "label": "Khoảng cách Z",
                "description": "Khoảng cách thẳng đứng giữa các mức đầu ra (mặc định: khoảng giá trị z / 10)."
              },
              "z_min": {
                "label": "Z nhỏ nhất",
                "description": "Mức đầu ra thấp nhất (mặc định: giá trị nhỏ nhất của dữ liệu)."
              },
              "z_max": {
                "label": "Z lớn nhất",
                "description": "Mức đầu ra cao nhất (mặc định: giá trị lớn nhất của dữ liệu)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số mẫu tối đa cho mỗi lần dự đoán (mặc định 12)."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Khoảng cách tìm kiếm 3D (đã nhân hệ số) lớn nhất tùy chọn; các mẫu nằm ngoài sẽ bị bỏ qua."
              },
              "output_cv_features": {
                "label": "Đầu ra đối tượng kiểm định chéo",
                "description": "Đường dẫn tùy chọn cho các điểm kiểm định chéo bỏ-một-ra mang giá trị quan trắc, dự đoán và phần dư."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG được gán cho raster đầu ra (mặc định: hệ tọa độ của lớp đầu vào)."
              }
            }
          },
          "incremental_spatial_autocorrelation": {
            "name": "Tự tương quan không gian gia tăng",
            "description": "Tính Moran's I toàn cục qua một loạt dải khoảng cách tăng dần và báo cáo đường cong điểm z với đỉnh đầu tiên và đỉnh lớn nhất — cách có cơ sở để chọn khoảng cách phân cụm, giống ArcGIS Incremental Spatial Autocorrelation.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (các hình học khác dùng điểm đại diện trung bình đỉnh). Hãy dùng hệ tọa độ quy chiếu."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số để kiểm định tự tương quan không gian."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV tùy chọn cho bảng theo từng vành đai. Luôn được trả về trong kết quả."
              },
              "begin_distance": {
                "label": "Khoảng cách bắt đầu",
                "description": "Khoảng cách vành đai đầu tiên, theo đơn vị hệ tọa độ. Mặc định: khoảng cách lân cận gần nhất lớn nhất (mọi đối tượng đều có >=1 lân cận)."
              },
              "increment": {
                "label": "Tăng",
                "description": "Khoảng cách được cộng thêm ở mỗi vành đai, theo đơn vị hệ tọa độ. Mặc định: khoảng cách bắt đầu."
              },
              "num_bands": {
                "label": "Số kênh",
                "description": "Số vành đai khoảng cách cần đánh giá (mặc định 10)."
              }
            }
          },
          "inside_3d": {
            "name": "Bên trong 3D",
            "description": "Xác định các đối tượng 3D (điểm, polyline hoặc khối) nào nằm bên trong vật chứa thể tích kín, tùy chọn báo cáo chiều dài hoặc tỉ lệ đỉnh được chứa (ArcGIS Inside 3D). Mọi vị từ chứa trong cả hai sổ đăng ký đều chiếu lên mặt phẳng XY, nên cảm biến phía trên đường bao hoặc ống dẫn bên dưới thửa đất hiện vẫn được xét là nằm bên trong. Vật chứa tuân theo quy ước lưới tam giác của buffer_3d và minimum_bounding_volume đã phát hành.",
            "params": {
              "target": {
                "label": "Mục tiêu",
                "description": "Đối tượng 3D cần kiểm tra: điểm, polyline hoặc khối lưới tam giác."
              },
              "container": {
                "label": "Vật chứa",
                "description": "Đối tượng 3D kín (khối lưới tam giác) đóng vai trò vật chứa."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra tùy chọn của các cặp mục tiêu/vật chứa. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'simple' (mặc định) cho biết mục tiêu có nằm bên trong hay không; 'complex' bổ sung thêm chiều dài nằm trong và tỉ lệ bên trong."
              },
              "output_features": {
                "label": "Đối tượng đầu ra",
                "description": "Đường dẫn tùy chọn cho các phần bên trong đã cắt của các mục tiêu dạng đường (chế độ complex). Nếu bỏ qua, sẽ lưu trong bộ nhớ (vẫn được trả về)."
              }
            }
          },
          "integrate": {
            "name": "Tích hợp",
            "description": "Bắt dính mọi đỉnh của mọi đối tượng trong dung sai cụm về một vị trí chung để các ranh giới chung gần trùng trở nên trùng khớp chính xác, tùy chọn chèn đỉnh nút chữ T lên các cạnh gần đó — giống ArcGIS Integrate.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (kiểu hình học bất kỳ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Khoảng cách gom cụm theo đơn vị hệ tọa độ: các đỉnh nằm trong khoảng cách này sẽ bắt dính vào một vị trí chung. Bắt buộc."
              },
              "snap_to_edges": {
                "label": "Bắt dính vào cạnh",
                "description": "Đồng thời chèn một đỉnh ở nơi đỉnh của một đối tượng nằm trong dung sai so với phân đoạn của đối tượng khác (giao chữ T). Mặc định true."
              }
            }
          },
          "interpolate_from_spatiotemporal_points": {
            "name": "Nội suy từ điểm không-thời gian",
            "description": "Gom các quan sát điểm có dấu thời gian vào các lát thời gian đều đặn và nội suy từng lát lên một lưới dùng chung, tạo raster đa chiều đã đồng đăng ký, giống ArcGIS Interpolate From Spatiotemporal Points.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đối tượng điểm có gắn dấu thời gian."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số cần nội suy."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường dấu thời gian: số giây kể từ epoch, hoặc văn bản ISO-8601."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra cho lát cắt đầu tiên. Các lát cắt sau được ghi cùng chỗ với hậu tố _t<index>. Nếu bỏ qua, tất cả các lát cắt sẽ được lưu trong bộ nhớ."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "daily | weekly | monthly (mặc định) | quarterly | yearly."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị bản đồ. Mặc định là 1/50 chiều lớn hơn của phạm vi."
              },
              "method": {
                "label": "Phương pháp",
                "description": "idw (mặc định) | nearest | mean | median."
              },
              "power": {
                "label": "Lũy thừa",
                "description": "Số mũ khoảng cách IDW (mặc định 2)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số quan trắc gần nhất được dùng cho mỗi ô (mặc định 8)."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Số quan trắc tối thiểu cần có để nội suy một lát cắt; các lát cắt thưa hơn sẽ xuất toàn nodata thay vì một bề mặt gây hiểu lầm (mặc định 3)."
              }
            }
          },
          "interpolate_shape": {
            "name": "Nội suy hình dạng",
            "description": "Phủ điểm/đường/đa giác lên raster bề mặt: thêm đỉnh, lấy mẫu Z cho từng đỉnh (song tuyến hoặc gần nhất), ghi hình học 3D và thêm các chỉ số bề mặt (z_min/z_max/z_mean, chiều dài bề mặt 3D, độ dốc trung bình), giống ArcGIS Interpolate Shape / Add Surface Information.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm, đường hoặc đa giác) có cùng hệ tọa độ với bề mặt."
              },
              "surface": {
                "label": "Bề mặt",
                "description": "Raster độ cao/bề mặt cần lấy mẫu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng làm dày theo đơn vị hệ tọa độ; các phân đoạn dài sẽ được chia nhỏ để bám theo bề mặt. Mặc định: kích thước ô của raster."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Lấy mẫu bề mặt: 'bilinear' (mặc định) hoặc 'nearest'."
              },
              "attributes": {
                "label": "Thuộc tính",
                "description": "Danh sách phân tách bằng dấu phẩy các cột chỉ số cần thêm: z_min,z_max,z_mean,surf_len,avg_slope. Mặc định: tất cả."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh bề mặt cần lấy mẫu, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "interpolate_with_barriers": {
            "name": "Nội suy có rào cản",
            "description": "Nội suy các số đo điểm thành raster trong khi tôn trọng rào cản tuyệt đối (đường bờ, sống núi, đứt gãy, tường): ảnh hưởng lan vòng quanh rào cản theo khoảng cách chi phí/trắc địa chứ không xuyên qua — IDW hoặc kernel đa thức cục bộ bậc một, giống ArcGIS Kernel Interpolation With Barriers / Spline With Barriers. Các công cụ idw/kriging/lân cận tự nhiên/spline đi kèm đều không nhận biết rào cản.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa các phép đo."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số trên các điểm chứa giá trị cần nội suy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster nội suy đầu ra (GeoTIFF). Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp vector rào cản tùy chọn (polyline hoặc đa giác). Được raster hóa thành các ô không thể đi qua nên ảnh hưởng phải vòng quanh chúng. Bỏ qua để có một đối chứng không rào cản."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'idw' (mặc định) hoặc 'local_polynomial' (khớp mặt phẳng bậc nhất có trọng số với kernel Gauss theo khoảng cách trắc địa)."
              },
              "power": {
                "label": "Lũy thừa",
                "description": "Số mũ suy giảm theo khoảng cách của IDW (mặc định 2)."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông kernel Gauss cho local_polynomial (đơn vị khoảng cách). Mặc định: bán kính tìm kiếm, hoặc phạm vi của lưới nếu không có."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính tìm kiếm dưới dạng khoảng cách trắc địa (chi phí): các mẫu nằm ngoài không ảnh hưởng đến một ô, và các ô không thể tới được trong phạm vi đó sẽ trở thành no-data. Tính bằng mét với hệ tọa độ địa lý, theo đơn vị hệ tọa độ nếu không. Mặc định: không giới hạn."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ (độ với hệ tọa độ địa lý). Mặc định: được định kích thước sao cho trục dài hơn trải khoảng ~256 ô."
              }
            }
          },
          "intersect_3d": {
            "name": "Giao 3D",
            "description": "Tính thể tích chung của các khối 3D kín chồng lấn nhau, theo từng cặp, tùy chọn kèm khối bao cho mỗi phần giao (ArcGIS Intersect 3D). union_3d là phép chồng lớp 3D duy nhất trong cả hai sổ đăng ký và chỉ trả lời câu hỏi thể tích hợp; inside_3d là vị từ chứa cho điểm và đường, còn polygon_volume / surface_volume đo so với mặt phẳng tham chiếu. Thể tích từng khối là chính xác; phần giao được ước tính bằng chiếm chỗ voxel ở độ phân giải được báo cáo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đối tượng khối 3D kín (MultiPolygon lưới tam giác có Z, như buffer_3d và minimum_bounding_volume tạo ra)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Lớp khối thứ hai tùy chọn. Khi bỏ qua, mọi cặp trong 'input' sẽ được giao nhau (chế độ một đầu vào của ArcGIS)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Bảng đầu ra của các cặp giao nhau, mỗi hàng cho một giao khác rỗng. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'table' (mặc định): chỉ thuộc tính. 'solid': đồng thời xuất khối bao của mỗi giao dưới dạng hình học. Thể tích đo được luôn là một thuộc tính — không khẳng định tạo ra lưới hợp nhất chính xác."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Số ô voxel dọc theo trục dài nhất của hộp bao chung của mỗi cặp (mặc định 64). Cao hơn thì chính xác hơn và chậm hơn."
              }
            }
          },
          "intersect_3d_line_with_surface": {
            "name": "Giao đường 3D với bề mặt",
            "description": "Tách các đường 3D tại mọi điểm chúng cắt qua bề mặt độ cao hoặc multipatch, gắn nhãn từng mảnh là trên hoặc dưới và xuất các điểm cắt (ArcGIS Intersect 3D Line With Surface / Intersect 3D Line With Multi Patch). intersect_3d của vòng 17 nhận khối kín thay vì đường, inside_3d là vị từ chứa không cắt hình học cũng không định vị điểm cắt, còn interpolate_shape phủ đường lên bề mặt và bỏ đi giá trị z của đường mà phép so sánh phụ thuộc vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường 3D, với các đỉnh mang giá trị z."
              },
              "surface": {
                "label": "Bề mặt",
                "description": "Raster độ cao để cắt theo. Bắt buộc trừ khi có cung cấp 'multipatch'."
              },
              "multipatch": {
                "label": "Multipatch",
                "description": "Lớp multipatch (đa giác tam giác) để cắt theo, thay cho một bề mặt raster."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đường đầu ra được tách tại mỗi điểm giao. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "output_points": {
                "label": "Đầu ra điểm",
                "description": "Lớp điểm đầu ra của chính các điểm giao. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "spacing": {
                "label": "Khoảng cách đều",
                "description": "Bước làm dày theo mặt bằng tính bằng đơn vị bản đồ (mặc định: một ô bề mặt). Nhỏ hơn thì phân giải các điểm giao tinh hơn nhưng tốn kém hơn."
              },
              "keep_above": {
                "label": "Giữ phần trên",
                "description": "Giữ lại các đoạn nằm trên bề mặt (mặc định true)."
              },
              "keep_below": {
                "label": "Giữ phần dưới",
                "description": "Giữ lại các đoạn nằm dưới bề mặt (mặc định true)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của raster bề mặt, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "intersecting_layers_masks": {
            "name": "Mặt nạ lớp giao nhau",
            "description": "Tạo đa giác mặt nạ bản đồ với lề quanh các đối tượng của lớp bị mặt nạ, nhưng chỉ tại nơi chúng giao với lớp mặt nạ thứ hai (đường viền chính xác, bao lồi hoặc hộp bao).",
            "params": {
              "masked_layer": {
                "label": "Lớp bị mặt nạ",
                "description": "Lớp vector được che (hình học bất kỳ): mỗi đối tượng giao với lớp che sẽ nhận một mặt nạ. Định dạng được tự động nhận diện (hoặc một handle trong bộ nhớ)."
              },
              "masking_layer": {
                "label": "Lớp mặt nạ",
                "description": "Lớp vector che (hình học bất kỳ): một đối tượng được che chỉ bị che ở nơi nó giao với một đối tượng của lớp này."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "margin": {
                "label": "Lề",
                "description": "Khoảng cách lề của mặt nạ. Tính bằng mét với hệ tọa độ địa lý (EPSG:4326 hoặc không xác định, được quy đổi sang độ), ngược lại tính theo đơn vị hệ tọa độ của lớp. Phải là số dương."
              },
              "mask_kind": {
                "label": "Loại mặt nạ",
                "description": "Hình dạng mặt nạ: 'exact' (mặc định, đường bao đối tượng đã tạo vùng đệm), 'convex_hull' (bao lồi được nới rộng), hoặc 'box' (khung bao + lề)."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường tùy chọn trên lớp được che có giá trị được sao chép sang mỗi mặt nạ dưới tên 'source_id'. Mặc định là chỉ số của đối tượng nguồn."
              }
            }
          },
          "intervisibility": {
            "name": "Tầm nhìn liên thông",
            "description": "Kiểm tra từng đường ngắm với các vật cản vector 3D và đánh dấu nó là nhìn thấy hoặc bị chắn, báo cáo vật cản nào chắn và ở đâu (ArcGIS Intervisibility). line_of_sight, visibility_index, viewshed và skyline_analysis đều làm việc với raster bề mặt; không công cụ nào kiểm tra được với vật cản multipatch 3D như nhà cửa, mà phần nhô ra và hành lang vòm của chúng bị mất khi khắc vào DEM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường ngắm: polyline 3D có đỉnh đầu tiên là người quan sát và đỉnh cuối cùng là mục tiêu."
              },
              "obstructions": {
                "label": "Vật cản",
                "description": "Một hoặc nhiều lớp vật cản 3D phân tách bằng dấu phẩy (MultiPolygon lưới tam giác có Z)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các đường ngắm đầu ra kèm theo các trường tầm nhìn. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "visible_field": {
                "label": "Trường nhìn thấy",
                "description": "Tên của trường tầm nhìn kiểu boolean (mặc định 'VISIBLE'), khớp với tham số của ArcGIS."
              },
              "observer_offset": {
                "label": "Độ lệch quan sát viên",
                "description": "Chiều cao cộng thêm vào điểm đầu của người quan sát trước khi kiểm tra, theo đơn vị hệ tọa độ (mặc định 0). Mô phỏng chiều cao mắt hoặc chiều cao máy."
              },
              "target_offset": {
                "label": "Độ lệch mục tiêu",
                "description": "Chiều cao cộng thêm vào điểm đầu của mục tiêu trước khi kiểm tra, theo đơn vị hệ tọa độ (mặc định 0)."
              },
              "visible_only": {
                "label": "Chỉ phần nhìn thấy",
                "description": "Chỉ xuất ra các đường ngắm không bị che khuất (mặc định false)."
              }
            }
          },
          "is_closed_3d": {
            "name": "Đóng kín 3D",
            "description": "Đánh dấu các đối tượng multipatch 3D nào là khối kín không rò rỉ và đối tượng nào là bề mặt hở, với số đếm chẩn đoán về cạnh biên không ghép cặp, cạnh phi đa tạp và tính nhất quán chiều quay (ArcGIS Is Closed 3D). Mọi công cụ thể tích trong danh mục — union_3d, inside_3d, minimum_bounding_volume, buffer_3d — đều giả định đầu vào kín và trả về con số vô nghĩa với lưới hở, mà không gì cho phép kiểm tra điều kiện tiên quyết đó trước.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đối tượng 3D (MultiPolygon lưới tam giác có Z, như buffer_3d, minimum_bounding_volume và voxel_isosurface tạo ra)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra: các đối tượng đầu vào kèm theo các trường chẩn đoán. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "closed_only": {
                "label": "Chỉ phần đóng kín",
                "description": "Chỉ xuất ra các đối tượng là khối kín (mặc định false: mọi đối tượng đều được xuất kèm kết luận của nó)."
              }
            }
          },
          "kernel_density_ratio": {
            "name": "Tỉ số mật độ kernel",
            "description": "Tỉ số rủi ro tương đối của hai bề mặt mật độ kernel: đánh giá lớp điểm tử số (ca bệnh) và lớp điểm mẫu số (dân số có nguy cơ) bằng cùng kernel bậc bốn và băng thông chung, rồi chia theo từng ô — giống ArcGIS Calculate Kernel Density Ratio. Sàn mẫu số ghi NoData tại nơi dân số quá thưa (không rò rỉ inf/NaN), và tùy chọn biến đổi log tự nhiên làm cho sự thừa/thiếu đại diện trở nên đối xứng. Tỉ số mật độ mà heat_map một lớp không biểu diễn được.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm tử số (ví dụ ca bệnh / sự cố)."
              },
              "denominator": {
                "label": "Mẫu số",
                "description": "Lớp điểm mẫu số (ví dụ dân số / mức phơi nhiễm có nguy cơ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster tỉ số đầu ra. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số dùng làm trọng số cho các điểm tử số (mặc định: mỗi điểm tính là 1)."
              },
              "denominator_weight_field": {
                "label": "Trường trọng số mẫu số",
                "description": "Trường số dùng làm trọng số cho các điểm mẫu số (mặc định: mỗi điểm tính là 1)."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông kernel / bán kính tìm kiếm dùng chung (mét với hệ tọa độ địa lý, theo đơn vị hệ tọa độ nếu không). Mặc định: quy tắc Silverman từ độ phân tán điểm gộp chung."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ (mặc định: cạnh lớn hơn của phạm vi / 200)."
              },
              "log_ratio": {
                "label": "Tỉ số log",
                "description": "Nếu true, xuất ra logarit tự nhiên của tỉ số (đối xứng quanh 0). Mặc định false."
              },
              "denominator_floor": {
                "label": "Sàn mẫu số",
                "description": "Các ô có mật độ mẫu số thấp hơn giá trị này (hoặc bằng không) sẽ trở thành no-data, tránh phép chia bùng nổ. Mặc định 0 (chỉ che khi mẫu số đúng bằng không)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG để gán cho đầu ra (mặc định: lấy từ lớp tử số)."
              }
            }
          },
          "kernel_interpolation_with_barriers": {
            "name": "Nội suy kernel có rào cản",
            "description": "Nội suy các quan sát điểm bằng khớp đa thức có trọng số kernel theo cửa sổ trượt, trong đó khoảng cách được đo theo đường đi ngắn nhất VÒNG QUANH các rào cản tuyệt đối thay vì xuyên thẳng qua chúng (ArcGIS Kernel Interpolation With Barriers). Bổ sung cho diffusion_interpolation_with_barriers đã phát hành, vốn giải phương trình nhiệt thay vì áp dụng kernel tường minh. Mọi bộ nội suy khác trong cả hai sổ đăng ký đều dùng khoảng cách Euclid, nên tất cả đều nội suy thẳng qua mũi đất và đứt gãy.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào mang các quan trắc."
              },
              "z_field": {
                "label": "Trường Z",
                "description": "Trường số cần nội suy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn cho các giá trị dự đoán. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "output_error": {
                "label": "Đầu ra sai số",
                "description": "Đường dẫn tùy chọn cho raster RMS phần dư có trọng số cục bộ — độ phân tán có trọng số của phần dư lân cận quanh phép khớp cục bộ. Đây là thước đo mức độ khớp, KHÔNG phải sai số chuẩn dự đoán kiểu ArcGIS (nó không tính đến bậc tự do hiệu dụng lẫn đòn bẩy). Nếu bỏ qua, sẽ lưu trong bộ nhớ (vẫn được trả về)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp polyline tùy chọn của các rào cản tuyệt đối. Nếu không cung cấp, công cụ suy biến thành nội suy kernel thông thường."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ. Mặc định là khoảng 1/100 cạnh lớn hơn của phạm vi."
              },
              "kernel": {
                "label": "Kernel",
                "description": "exponential, gaussian, quartic, epanechnikov, polynomial5 (mặc định) hoặc constant."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông kernel theo đơn vị hệ tọa độ. Mặc định là một giá trị suy ra từ dữ liệu dựa trên khoảng cách lân cận gần nhất trung bình."
              },
              "power": {
                "label": "Lũy thừa",
                "description": "Bậc đa thức cục bộ: 0 (trung bình có trọng số) hoặc 1 (mặc định, khớp mặt phẳng)."
              },
              "ridge": {
                "label": "Sống núi",
                "description": "Tham số ridge giúp ổn định phép khớp bình phương nhỏ nhất cục bộ ở nơi lân cận bị suy biến (mặc định 1e-6)."
              },
              "max_neighbors": {
                "label": "Số lân cận tối đa",
                "description": "Giới hạn số quan trắc đóng góp vào mỗi phép khớp cục bộ (mặc định 32)."
              }
            }
          },
          "kml_to_features": {
            "name": "KML sang đối tượng",
            "description": "Đọc các Placemark .kml/.kmz thành các lớp điểm, đường và đa giác với thuộc tính tên/mô tả.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn đến tệp .kml hoặc kho lưu trữ .kmz (KML đã nén)."
              },
              "points_output": {
                "label": "Đầu ra điểm",
                "description": "Đường dẫn vector điểm đầu ra tùy chọn (driver lấy từ phần mở rộng). Chỉ được ghi nếu KML có các placemark dạng điểm."
              },
              "lines_output": {
                "label": "Đầu ra đường",
                "description": "Đường dẫn vector đường đầu ra tùy chọn (driver lấy từ phần mở rộng). Chỉ được ghi nếu KML có các placemark dạng đường."
              },
              "polygons_output": {
                "label": "Đầu ra đa giác",
                "description": "Đường dẫn vector đa giác đầu ra tùy chọn (driver lấy từ phần mở rộng). Chỉ được ghi nếu KML có các placemark dạng đa giác."
              }
            }
          },
          "landtrendr": {
            "name": "LandTrendr",
            "description": "Phân đoạn thời gian LandTrendr của chuỗi ảnh hàng năm (giống ArcGIS Analyze Changes Using LandTrendr): khử đột biến, khớp tuyến tính từng khúc tham lam dựa trên đỉnh, và trích xuất xáo trộn lớn nhất (năm, độ lớn, thời lượng) cho mỗi điểm ảnh. Phép phân đoạn lịch sử biến động theo điểm ảnh mà change_vector_analysis hai thời điểm và generate_trend_raster một xu thế không làm được.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách đường dẫn raster theo năm phân tách bằng dấu phẩy, theo thứ tự thời gian (ví dụ các đầu ra NBR của spectral_index; >= 4)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra: năm có mức xáo trộn lớn nhất cho mỗi điểm ảnh. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "years": {
                "label": "Năm",
                "description": "Danh sách các năm phân tách bằng dấu phẩy tương ứng với 'inputs' (mặc định 0,1,2,...)."
              },
              "magnitude_output": {
                "label": "Đầu ra độ lớn",
                "description": "Raster tùy chọn của độ lớn xáo trộn (mức thay đổi chỉ số)."
              },
              "duration_output": {
                "label": "Đầu ra thời lượng",
                "description": "Raster tùy chọn của thời gian kéo dài xáo trộn (số năm)."
              },
              "direction": {
                "label": "Hướng",
                "description": "Chiều xáo trộn trong chỉ số: 'loss' (giảm; mặc định) hoặc 'gain' (tăng)."
              },
              "max_segments": {
                "label": "Số đoạn tối đa",
                "description": "Số phân đoạn tối đa (mặc định 6)."
              },
              "spike_threshold": {
                "label": "Ngưỡng đột biến",
                "description": "Cường độ khử đột biến 0..1 (tỉ lệ so với khoảng giá trị của chuỗi; mặc định 0.75; giá trị 1 sẽ tắt)."
              },
              "min_valid": {
                "label": "Số hợp lệ tối thiểu",
                "description": "Số quan trắc hợp lệ tối thiểu cho mỗi điểm ảnh (mặc định 4)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ mỗi dữ liệu đầu vào, đánh số từ 1 (mặc định 1)."
              }
            }
          },
          "las_height_metrics": {
            "name": "Chỉ số chiều cao LAS",
            "description": "Raster hóa các chỉ số chiều cao tán rừng theo ô từ chiều cao LiDAR (giống ArcGIS LAS Height Metrics): trung bình, độ lệch chuẩn, độ lệch, độ nhọn, MAD và các phân vị chiều cao dưới dạng lưới đa kênh — bộ mô men/phân vị lâm nghiệp mà height_above_ground và lidar_point_stats đi kèm không xuất được trong một lượt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đám mây điểm LAS/LAZ đầu vào chứa độ cao trên mặt đất (hãy chuẩn hóa trước bằng height_above_ground)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đa kênh đầu ra. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "metrics": {
                "label": "Chỉ số",
                "description": "Tập con phân tách bằng dấu phẩy của mean,std,skewness,kurtosis,mad (mặc định 'mean,std,skewness,kurtosis,mad')."
              },
              "height_percentiles": {
                "label": "Phân vị chiều cao",
                "description": "Các phân vị phân tách bằng dấu phẩy trong [0,100], ví dụ '50,95,99' (mặc định '50,95,99'; để trống nếu không dùng)."
              },
              "min_height": {
                "label": "Chiều cao tối thiểu",
                "description": "Loại trừ các điểm có độ cao thấp hơn giá trị này (ngưỡng cắt mặt đất/nhiễu). Mặc định 0."
              },
              "min_points": {
                "label": "Số điểm tối thiểu",
                "description": "Các ô có ít điểm hợp lệ hơn sẽ trở thành no-data. Mặc định 4."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ. Mặc định 10."
              }
            }
          },
          "less_than_or_equal_to": {
            "name": "Nhỏ hơn hoặc bằng",
            "description": "Kiểm tra raster thứ nhất có nhỏ hơn hoặc bằng raster thứ hai hay không theo từng ô.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Raster đầu vào thứ nhất (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Raster đầu vào thứ hai (chuỗi đường dẫn hoặc đối tượng raster có kiểu)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp raster đầu ra tùy chọn. Nếu bỏ trống, đầu ra được giữ trong bộ nhớ và trả về dưới dạng handle raster memory://."
              }
            }
          },
          "line_density": {
            "name": "Mật độ đường",
            "description": "Mật độ các đối tượng dạng đường (chiều dài trên đơn vị diện tích) trong lân cận tròn quanh mỗi ô raster — mật độ đường giao thông, suối hoặc đứt gãy — bằng cách cắt từng đoạn đường theo đường tròn bán kính tìm kiếm (dạng đóng) và chia tổng chiều dài có trọng số cho pi*r^2. Giống ArcGIS Line Density; phiên bản cho đường vector mà heat_map chỉ dành cho điểm và edge_density phân loại đi kèm còn thiếu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector polyline đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster mật độ đầu ra (driver lấy từ phần mở rộng). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số dùng làm trọng số cho mỗi đường (ví dụ số làn, lưu lượng, dân số). Mặc định: mọi đường có trọng số 1."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận (mét với hệ tọa độ địa lý, theo đơn vị hệ tọa độ nếu không). Mặc định: cạnh ngắn hơn của phạm vi / 25."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra (cùng đơn vị với search_radius). Mặc định: search_radius / 10."
              },
              "area_units": {
                "label": "Đơn vị diện tích",
                "description": "Đơn vị diện tích của các giá trị mật độ: 'square_map_units' (mặc định), 'square_meters', 'square_kilometers', 'square_miles' hoặc 'square_feet'."
              }
            }
          },
          "line_of_sight": {
            "name": "Đường ngắm",
            "description": "Tầm nhìn điểm tới điểm trên DEM: với mỗi cặp quan sát viên-mục tiêu xuất đường ngắm được tách thành các đoạn nhìn thấy và bị chắn cùng cờ mục tiêu nhìn thấy, giống ArcGIS Line Of Sight.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster độ cao đầu vào (hệ tọa độ quy chiếu; khoảng cách/độ cao tính theo đơn vị của nó)."
              },
              "observers": {
                "label": "Điểm quan sát",
                "description": "Lớp vector điểm quan sát."
              },
              "targets": {
                "label": "Mục tiêu",
                "description": "Lớp vector điểm mục tiêu."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "observer_offset": {
                "label": "Độ lệch quan sát viên",
                "description": "Chiều cao người quan sát trên mặt đất, theo đơn vị DEM (mặc định 1.75)."
              },
              "target_offset": {
                "label": "Độ lệch mục tiêu",
                "description": "Chiều cao mục tiêu trên mặt đất, theo đơn vị DEM (mặc định 0)."
              },
              "pair_field": {
                "label": "Trường cặp",
                "description": "Trường tùy chọn có mặt trên cả hai lớp; các điểm quan sát và mục tiêu được ghép cặp ở nơi trường này khớp nhau (thay vì ghép tất cả với tất cả)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh DEM để lấy mẫu (mặc định 1)."
              }
            }
          },
          "line_statistics": {
            "name": "Thống kê đường",
            "description": "Raster hóa thống kê lân cận của một thuộc tính đường (trung bình, đa số, trung vị, min/max, khoảng biến thiên, số loại hoặc tổng chiều dài) bằng cách cắt từng đoạn theo đường tròn bán kính tìm kiếm và tính trọng số giá trị theo chiều dài — giống ArcGIS Line Statistics; phần bổ sung bề mặt thuộc tính cho line_density mà bộ công cụ đi kèm còn thiếu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector polyline đầu vào."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số cần tổng hợp. Bắt buộc với mọi thống kê ngoại trừ 'length'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra (driver lấy từ phần mở rộng). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "'mean' (mặc định), 'majority', 'maximum', 'median', 'minimum', 'minority', 'range', 'variety' hoặc 'length'."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Bán kính lân cận theo đơn vị hệ tọa độ. Mặc định: cạnh ngắn hơn của phạm vi / 25."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ. Mặc định: search_radius / 10."
              }
            }
          },
          "local_bivariate_relationships": {
            "name": "Quan hệ hai biến cục bộ",
            "description": "Với mỗi đối tượng, phân loại cách hai biến liên hệ trong lân cận cục bộ của nó (không có ý nghĩa, tuyến tính dương/âm, lõm, lồi, không xác định) từ các khớp tuyến tính và bậc hai cục bộ, thống kê phụ thuộc giảm entropy và giá trị p kiểm định hoán vị có hạt giống — giống ArcGIS Local Bivariate Relationships.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa hai trường biến."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (bản sao của đầu vào kèm các trường quan hệ). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "field1": {
                "label": "Trường 1",
                "description": "Tên trường của biến thứ nhất (biến giải thích)."
              },
              "field2": {
                "label": "Trường 2",
                "description": "Tên trường của biến thứ hai (biến phụ thuộc)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số lân cận gần nhất k xác định mỗi mẫu cục bộ (mặc định 12; phải >= 5)."
              },
              "permutations": {
                "label": "Số hoán vị",
                "description": "Số hoán vị cho kiểm định ý nghĩa (mặc định 199; 0 để tắt)."
              },
              "significance": {
                "label": "Mức ý nghĩa",
                "description": "Ngưỡng giá trị p giả để coi một quan hệ là có ý nghĩa (mặc định 0.05)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên của phép hoán vị (mặc định 1), để kết quả có thể tái lập."
              }
            }
          },
          "local_outlier_analysis": {
            "name": "Phân tích ngoại lai cục bộ",
            "description": "Phân tích ngoại lai cục bộ không-thời gian (Moran's I cục bộ Anselin trên khối không-thời gian H3): phân loại từng ô x khoảng thời gian thành cụm Cao-Cao/Thấp-Thấp hoặc ngoại lai Cao-Thấp/Thấp-Cao với giá trị p hoán vị có hạt giống, rồi tóm tắt theo từng ô qua thời gian — giống ArcGIS Local Outlier Analysis. Mở rộng không-thời gian của local_morans_i_lisa đi kèm chỉ có không gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào chứa các sự kiện có dấu thời gian (kinh độ/vĩ độ)."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: một số hoặc một dấu thời gian ISO-8601."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp tóm tắt đa giác H3 đầu ra. Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số cần tổng hợp trong mỗi nhóm (mặc định: số lượng điểm)."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Độ rộng của một bước thời gian theo đơn vị của time_field (mặc định 1)."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 đến 15 (mặc định 7)."
              },
              "kring": {
                "label": "Kring",
                "description": "Bán kính k-ring của lân cận không gian (mặc định 1)."
              },
              "time_window": {
                "label": "Cửa sổ thời gian",
                "description": "Nửa độ rộng của lân cận thời gian tính bằng bước (mặc định 1)."
              },
              "permutations": {
                "label": "Số hoán vị",
                "description": "Số lần hoán vị cho kiểm định ý nghĩa (mặc định 99; 0 sẽ tắt)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên hoán vị (mặc định 1)."
              }
            }
          },
          "local_polynomial_interpolation": {
            "name": "Nội suy đa thức cục bộ",
            "description": "Khớp đa thức bậc 1/2/3 trong lân cận trượt có trọng số kernel tại mọi ô, tạo bề mặt dự đoán, bề mặt sai số chuẩn dự đoán hoặc bề mặt số điều kiện. Không như trend_surface toàn cục đi kèm, đa thức được khớp lại cục bộ. Giống ArcGIS Local Polynomial Interpolation.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đối tượng điểm đầu vào mang giá trị cần nội suy."
              },
              "z_field": {
                "label": "Trường Z",
                "description": "Trường số chứa giá trị cần nội suy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị bản đồ (mặc định: phạm vi đầu vào / 200)."
              },
              "order": {
                "label": "Bậc",
                "description": "Bậc đa thức: 1 (mặc định), 2 hoặc 3."
              },
              "kernel": {
                "label": "Kernel",
                "description": "'exponential' (mặc định), 'gaussian', 'quartic', 'epanechnikov', 'fifth_order' hoặc 'constant'."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "Băng thông kernel cố định theo đơn vị bản đồ. Nếu bỏ qua, băng thông thích ứng sẽ được dùng: khoảng cách đến mẫu gần nhất thứ 'neighbors'."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số mẫu cho mỗi phép khớp cục bộ với băng thông thích ứng (mặc định: 3 lần số hạng của đa thức)."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường trọng số đo đạc tùy chọn cho từng quan trắc."
              },
              "condition_number": {
                "label": "Số điều kiện",
                "description": "Từ chối dự đoán ở nơi số điều kiện của ma trận thiết kế cục bộ vượt quá ngưỡng này (mặc định: không giới hạn)."
              },
              "output_type": {
                "label": "Kiểu đầu ra",
                "description": "'prediction' (mặc định), 'standard_error' hoặc 'condition_number'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG được gán cho raster đầu ra (mặc định: hệ tọa độ của lớp đầu vào)."
              }
            }
          },
          "locate_lines_along_routes": {
            "name": "Định vị đường dọc tuyến",
            "description": "Chồng các đối tượng đường hoặc đa giác lên các tuyến có số đo để tạo sự kiện đường số đo đầu/cuối (RID, FMEAS, TMEAS), giống ArcGIS Locate Features Along Routes (sự kiện đường/đa giác).",
            "params": {
              "input_features": {
                "label": "Đối tượng đầu vào",
                "description": "Lớp vector đường hoặc đa giác đầu vào cần định vị dọc theo các tuyến."
              },
              "routes": {
                "label": "Tuyến",
                "description": "Lớp vector tuyến (đường) cung cấp các giá trị đo tham chiếu tuyến tính."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường trên lớp tuyến chứa mã định danh của mỗi tuyến (RID). Nếu bỏ qua, chỉ số đối tượng của tuyến (đánh số từ 0) sẽ được dùng."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Bán kính tìm kiếm theo đơn vị hệ tọa độ. Một đỉnh của đối tượng nằm trong khoảng cách này so với một tuyến sẽ được coi là trùng khớp. Bắt buộc (> 0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector sự kiện dạng đường đầu ra (driver lấy từ phần mở rộng). Nếu bỏ qua, kết quả sẽ được lưu trong bộ nhớ."
              }
            }
          },
          "locate_regions": {
            "name": "Định vị vùng",
            "description": "Tìm (các) vùng liền khối tốt nhất có diện tích mục tiêu từ raster thích hợp (giống ArcGIS Locate Regions): mở rộng vùng theo kiểu tốt nhất trước từ các đỉnh thích hợp với kiểm soát hình dạng/độ chặt và khoảng cách giữa các vùng — bước định vị biến bề mặt fuzzy_overlay/weighted_overlay thành các vùng thực sự, điều mà clump và phân ngưỡng không làm được.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster mức độ phù hợp (càng cao càng phù hợp)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra của mã vùng đánh số từ 1 (no-data ở những nơi khác). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "total_area": {
                "label": "Tổng diện tích",
                "description": "Tổng diện tích mục tiêu trên tất cả các vùng, theo đơn vị diện tích của hệ tọa độ (mặc định: 5% diện tích hợp lệ)."
              },
              "num_regions": {
                "label": "Số vùng",
                "description": "Số vùng cần định vị (mặc định 1). Mỗi vùng nhắm tới total_area / num_regions."
              },
              "shape": {
                "label": "Hình dạng",
                "description": "Trọng số độ chặt 0..1: 0 = thuần mức độ phù hợp, 1 = ưu tiên mạnh các vùng tròn (mặc định 0.3)."
              },
              "min_distance": {
                "label": "Khoảng cách tối thiểu",
                "description": "Khoảng cách nhỏ nhất giữa các vùng, theo đơn vị hệ tọa độ (mặc định 0)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "matched_filter_target_detection": {
            "name": "Phát hiện mục tiêu bằng bộ lọc đối sánh (CEM/ACE)",
            "description": "Chấm điểm mọi điểm ảnh của ảnh đa kênh so với phổ mục tiêu đã biết, dùng thống kê của cảnh để triệt nền — Constrained Energy Minimization (CEM) hoặc Adaptive Coherence Estimator (ACE) — với tùy chọn mặt nạ ngưỡng phân vị, giống ArcGIS Detect Target Using Spectra.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đa kênh đầu vào (từ 2 kênh trở lên)."
              },
              "target_spectrum": {
                "label": "Phổ mục tiêu",
                "description": "Phổ mục tiêu: một giá trị cho mỗi kênh, dưới dạng mảng JSON hoặc danh sách phân tách bằng dấu phẩy/khoảng trắng (độ dài phải bằng số kênh)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster điểm số phát hiện đầu ra (F32). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'cem' (Constrained Energy Minimization, mặc định) hoặc 'ace' (Adaptive Coherence Estimator, điểm số trong 0..1)."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Phân vị tùy chọn (0-100) của phân bố điểm số, trên ngưỡng đó một mặt nạ phát hiện nhị phân sẽ được ghi ra."
              },
              "mask_output": {
                "label": "Đầu ra mặt nạ",
                "description": "Đường dẫn đầu ra cho mặt nạ phát hiện nhị phân (yêu cầu 'threshold'). Nếu bỏ qua trong khi có ngưỡng, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "maximum_likelihood_classification": {
            "name": "Phân loại hợp lý cực đại",
            "description": "Bộ phân loại có giám sát hợp lý cực đại Gauss: mô hình hóa từng lớp huấn luyện như phân phối chuẩn đa biến (trung bình + hiệp phương sai theo lớp), phân loại mọi điểm ảnh của ảnh đa kênh theo log-hợp lý Gauss lớn nhất với tùy chọn trọng số tiên nghiệm bằng nhau/theo mẫu, và có thể xuất raster xác suất/độ tin cậy theo điểm ảnh cũng như bác bỏ các ô kém tin cậy nhất, giống ArcGIS Maximum Likelihood Classification.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đa kênh đầu vào cần phân loại (từ 1 kênh trở lên; mỗi kênh là một đặc trưng)."
              },
              "training": {
                "label": "Huấn luyện",
                "description": "Raster huấn luyện gán nhãn nguyên trên cùng lưới với 'input': mỗi số nguyên dương riêng biệt là một lớp; các ô no-data / không dương / không hữu hạn là chưa gán nhãn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đã phân loại đầu ra mang mã lớp huấn luyện. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "prob_output": {
                "label": "Đầu ra xác suất",
                "description": "Raster F32 đầu ra tùy chọn chứa xác suất hậu nghiệm (độ tin cậy) của lớp thắng trong khoảng [0,1]."
              },
              "a_priori": {
                "label": "Tiên nghiệm",
                "description": "Trọng số tiên nghiệm của các lớp: 'equal' (mặc định, 1/K) hoặc 'sample' (tỉ lệ với số điểm ảnh huấn luyện của mỗi lớp)."
              },
              "reject_fraction": {
                "label": "Phần bác bỏ",
                "description": "Tỉ lệ trong [0,1) các ô đã phân loại có độ tin cậy thấp nhất sẽ được để chưa phân loại (no-data). Mặc định 0."
              }
            }
          },
          "median_center": {
            "name": "Tâm trung vị",
            "description": "Trung vị hình học (điểm Weiszfeld tối thiểu hóa tổng khoảng cách Euclid, tùy chọn có trọng số, tới mọi điểm đầu vào) — một điểm tâm bền vững cho mỗi nhóm trường hợp, với tùy chọn thuộc tính trung vị theo từng trường (ArcGIS Median Center).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số tùy chọn dùng làm trọng số cho lực kéo của mỗi điểm lên trung vị."
              },
              "case_field": {
                "label": "Trường trường hợp",
                "description": "Trường tùy chọn để nhóm các điểm; mỗi giá trị riêng biệt cho một trung vị."
              },
              "attribute_fields": {
                "label": "Trường thuộc tính",
                "description": "Các trường số tùy chọn phân tách bằng dấu phẩy; trung vị theo từng nhóm của mỗi trường được bổ sung dưới tên '<field>_med'."
              }
            }
          },
          "merge_divided_roads": {
            "name": "Gộp đường giao thông phân làn",
            "description": "Thay các cặp làn đường phân cách đã khớp bằng đường tim đơn trong khi giữ tính liên thông tại giao lộ, chỉ ghép các làn chia sẻ trường gộp và chạy ngược song song trong khoảng cách tách, và xuất đa giác dịch chuyển cho propagate_displacement. Giống ArcGIS Merge Divided Roads.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng đường tim đường giao thông."
              },
              "merge_field": {
                "label": "Trường gộp",
                "description": "Trường mà các giá trị trùng khớp của nó khiến hai đường trở thành cặp phần đường xe chạy ứng viên (ví dụ tên hoặc lớp của đường giao thông)."
              },
              "merge_distance": {
                "label": "Khoảng cách gộp",
                "description": "Khoảng cách tối đa giữa hai phần đường xe chạy được ghép cặp, theo đơn vị bản đồ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đường tim đã gộp đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_displacement_features": {
                "label": "Đầu ra đối tượng dịch chuyển",
                "description": "Các đa giác tùy chọn cho biết nơi hình học đã dịch chuyển, dùng cho propagate_displacement."
              },
              "character_field": {
                "label": "Trường ký tự",
                "description": "Trường tùy chọn; các đối tượng có giá trị khác không / không rỗng sẽ bị loại khỏi việc gộp."
              },
              "output_table": {
                "label": "Bảng đầu ra",
                "description": "Bảng nguồn gốc tùy chọn ánh xạ các đối tượng đầu ra trở lại các đối tượng nguồn của chúng."
              }
            }
          },
          "merge_lines_by_pseudo_node": {
            "name": "Gộp đường theo nút giả",
            "description": "Hòa tan các chuỗi đoạn đường gặp nhau tại nút giả bậc 2 thành các polyline đơn, giữ nguyên giao điểm thực và (tùy chọn) các điểm ngắt thuộc tính.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đường đầu vào, định dạng được tự động nhận diện (hoặc đối tượng trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "dissolve_fields": {
                "label": "Trường hòa tan",
                "description": "Tên các trường thuộc tính phân tách bằng dấu phẩy; hai đoạn chỉ được gộp khi chúng khớp nhau ở mọi trường đó. Nếu bỏ qua, các đoạn sẽ được gộp qua mọi nút bậc 2 bất kể thuộc tính."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Các điểm đầu cuối nằm trong khoảng cách này (đơn vị hệ tọa độ) được coi là cùng một nút. Mặc định 1e-6."
              }
            }
          },
          "merge_multidimensional_rasters": {
            "name": "Gộp raster đa chiều",
            "description": "Nối nhiều khối raster đã đồng đăng ký thành một, sắp theo tọa độ chiều, giải quyết tọa độ trùng theo từng ô (ArcGIS Merge Multidimensional Rasters). aggregate_multidimensional_raster rút gọn khối và composite_bands xếp các raster đơn kênh thành kênh, nhưng chưa có gì nối các khối theo chiều chung của chúng.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các đường dẫn khối phân tách bằng dấu phẩy hoặc dấu chấm phẩy (các raster đa kênh). Tối thiểu hai."
              },
              "dimension_values": {
                "label": "Giá trị chiều",
                "description": "Tọa độ theo từng lát cắt tùy chọn bao trùm mọi lát cắt của mọi đầu vào, theo thứ tự đầu vào. Không cần được sắp xếp hay duy nhất — đó chính là việc mà công cụ này giải quyết. Nếu không có chúng, các đầu vào sẽ được nối tiếp theo thứ tự đã cho."
              },
              "dimension": {
                "label": "Chiều",
                "description": "Tên của chiều, chỉ dùng khi báo cáo (mặc định 'slice')."
              },
              "resolve_overlap": {
                "label": "Giải quyết chồng lấn",
                "description": "Quy tắc xử lý tọa độ trùng lặp: 'first' (mặc định), 'last', 'mean', 'min', 'max', hoặc 'error'."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai tương đối để coi hai tọa độ là bằng nhau (mặc định 1e-9)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster khối đầu ra, mỗi lát cắt đã gộp một kênh, theo thứ tự của chiều. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "mgwr": {
            "name": "Hồi quy trọng số địa lý đa tỉ lệ",
            "description": "GWR trong đó mỗi số hạng giải thích có băng thông riêng qua khớp lùi AICc (MGWR): hệ số theo từng đối tượng, R2 cục bộ, phần dư, số điều kiện, cộng thêm băng thông tối ưu của từng số hạng với diễn giải cục bộ/vùng/toàn cục và chẩn đoán AICc / R2 toàn cục.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào (các điểm, hoặc các hình học khác thông qua điểm đại diện của chúng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "dependent_field": {
                "label": "Trường phụ thuộc",
                "description": "Trường số phụ thuộc (đáp ứng)."
              },
              "explanatory_fields": {
                "label": "Trường giải thích",
                "description": "(Các) trường số giải thích phân tách bằng dấu phẩy, mỗi trường được khớp với băng thông riêng."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel suy giảm theo khoảng cách: 'gaussian' (mặc định) hoặc 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Loại băng thông",
                "description": "'adaptive' (mặc định; băng thông = k lân cận gần nhất) hoặc 'fixed' (băng thông = một khoảng cách). Áp dụng cho việc tìm băng thông riêng của từng số hạng."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai hội tụ của phép khớp ngược: dừng khi mức thay đổi tương đối của RSS giữa các lượt quét giảm xuống dưới giá trị này (mặc định 0.001)."
              },
              "max_iterations": {
                "label": "Số lần lặp tối đa",
                "description": "Số lượt quét khớp ngược tối đa qua tất cả các số hạng (mặc định 30)."
              }
            }
          },
          "minimum_bounding_volume": {
            "name": "Khối bao nhỏ nhất",
            "description": "Tính khối bao nhỏ nhất (bao lồi, hình cầu hoặc hình hộp) quanh các đối tượng 3D, theo từng đối tượng, từng nhóm hoặc trên toàn bộ đầu vào, xuất khối dưới dạng các mặt tam giác có giá trị Z kèm thuộc tính thể tích và diện tích bề mặt. Giống ArcGIS Minimum Bounding Volume.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng điểm, đa điểm hoặc đường 3D đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho các mặt của khối. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "z_value": {
                "label": "Giá trị Z",
                "description": "'geometry' (mặc định) để lấy Z từ hình học, hoặc tên của một trường số cung cấp giá trị Z."
              },
              "geometry_type": {
                "label": "Kiểu hình học",
                "description": "'convex_hull' (mặc định), 'sphere' hoặc 'envelope'. ('concave_hull' chưa được hiện thực trong phiên bản này.)"
              },
              "group_option": {
                "label": "Tùy chọn nhóm",
                "description": "'none' (mỗi đối tượng một khối, mặc định), 'all' (một khối duy nhất bao toàn bộ đầu vào) hoặc 'list' (mỗi giá trị của 'group_field' một khối)."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Trường xác định các nhóm khi 'group_option' là 'list'."
              },
              "mbv_fields": {
                "label": "Trường MBV",
                "description": "Bổ sung các trường MBV_VOLUME và MBV_AREA (mặc định false)."
              }
            }
          },
          "multicriteria_overlay": {
            "name": "Chồng lớp đa tiêu chí",
            "description": "Kết hợp chồng raster tiêu chí thành một bề mặt thích hợp bằng MCDA theo xếp hạng: weighted_sum, weighted_geometric_mean, OWA (trung bình có trọng số theo thứ tự) hoặc TOPSIS (độ gần điểm lý tưởng), với trọng số từng raster và co giãn from_scale/to_scale, giống ArcGIS Multicriteria Overlay.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Danh sách phân tách bằng dấu phẩy gồm ≥2 raster tiêu chí đã đồng đăng ký (giá trị cao hơn = phù hợp hơn; mỗi raster được co giãn min-max về 0..1 trước khi kết hợp)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp kết hợp: 'weighted_sum' (mặc định), 'weighted_geometric_mean', 'owa', 'topsis'."
              },
              "weights": {
                "label": "Trọng số",
                "description": "Trọng số tầm quan trọng theo từng raster, phân tách bằng dấu phẩy, mỗi đầu vào một giá trị (mặc định bằng nhau). Được chuẩn hóa để tổng bằng 1."
              },
              "order_weights": {
                "label": "Trọng số thứ tự",
                "description": "chỉ với OWA: các trọng số thứ tự phân tách bằng dấu phẩy, mỗi đầu vào một giá trị, áp dụng cho các tiêu chí đã sắp xếp từ cao xuống thấp tại mỗi ô (mặc định bằng nhau, khi đó OWA == trung bình có trọng số). Được chuẩn hóa để tổng bằng 1."
              },
              "from_scale": {
                "label": "Từ tỉ lệ",
                "description": "Cận dưới của thang đánh giá đầu ra (mặc định 0)."
              },
              "to_scale": {
                "label": "Đến tỉ lệ",
                "description": "Cận trên của thang đánh giá đầu ra (mặc định 1)."
              }
            }
          },
          "multidimensional_anomaly": {
            "name": "Tạo bất thường đa chiều",
            "description": "Khối bất thường thời gian theo từng lát từ chồng raster thời gian (giống ArcGIS Generate Multidimensional Anomaly): với mỗi điểm ảnh tính đường cơ sở thời gian (trung bình/độ lệch chuẩn hoặc trung vị theo chiều lát) và ghi lại mọi lát thời gian thành độ lệch so với đường cơ sở đó — hiệu so với trung bình, phần trăm của trung bình, điểm z hoặc hiệu so với trung vị — xuất chồng bất thường với một lát cho mỗi lát đầu vào.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lát thời gian) hoặc một danh sách phân tách bằng dấu phẩy các raster đã đồng đăng ký, theo thứ tự thời gian."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster dị thường đa kênh đầu ra (mỗi lát cắt đầu vào một kênh). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Cách tính dị thường: 'difference_from_mean' (mặc định), 'percent_of_mean', 'z_score', hoặc 'difference_from_median'."
              },
              "reference_range": {
                "label": "Khoảng tham chiếu",
                "description": "Khoảng lát cắt tùy chọn dạng 'start-end' (đánh số từ 1, bao gồm hai đầu) dùng để tính giá trị nền theo từng điểm ảnh (mặc định: mọi lát cắt)."
              },
              "min_valid": {
                "label": "Số hợp lệ tối thiểu",
                "description": "Số quan sát không phải no-data tối thiểu tại mỗi điểm ảnh trong khoảng tham chiếu (mặc định 1); dưới mức này điểm ảnh sẽ thành no-data."
              }
            }
          },
          "multidimensional_principal_components": {
            "name": "Thành phần chính đa chiều",
            "description": "Phân tách khối raster thành vài mode thực nằm dưới chuỗi thời gian dài, xuất raster thành phần, hệ số tải và trị riêng, ở dạng giảm chiều hoặc giảm không gian (ArcGIS Multidimensional Principal Components). principal_component_analysis đi kèm phân tách không gian kênh trong một cảnh, nên thành phần của nó trộn các kênh phổ chứ không phải thời gian; dimension_reduction làm việc trên bảng thuộc tính vector. Cả hai phép giảm đều xuất phát từ một hiệp phương sai không gian lát, vì phiên bản không gian điểm ảnh tương đương sẽ là ma trận vuông hàng triệu hàng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Một raster đa kênh (mỗi kênh là một lát cắt) hoặc danh sách các raster đã đồng đăng ký, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đa kênh đầu ra: điểm số thành phần với 'dimension_reduction', trọng số thành phần với 'spatial_reduction'. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_loadings": {
                "label": "Đầu ra hệ số tải",
                "description": "Bảng đầu ra chứa trọng số theo từng lát cắt (hoặc chuỗi thành phần theo từng lát cắt ở chế độ 'spatial_reduction'). Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "output_eigenvalues": {
                "label": "Đầu ra trị riêng",
                "description": "Bảng đầu ra chứa các giá trị riêng và phần phương sai mà mỗi giá trị giải thích. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'dimension_reduction' (mặc định; các thành phần là mẫu hình không gian) hoặc 'spatial_reduction' (các thành phần là chuỗi theo chiều)."
              },
              "dimension": {
                "label": "Chiều",
                "description": "Tên của chiều, chỉ dùng trong báo cáo (mặc định 'slice')."
              },
              "dimension_values": {
                "label": "Giá trị chiều",
                "description": "Tọa độ của từng lát cắt, phân tách bằng dấu phẩy, tăng nghiêm ngặt. Mặc định là chỉ số lát cắt đánh số từ 1."
              },
              "number_of_pc": {
                "label": "Số thành phần chính",
                "description": "Số thành phần cần giữ lại (mặc định: tất cả các lát cắt)."
              },
              "correlation": {
                "label": "Tương quan",
                "description": "Phân tách ma trận tương quan thay vì ma trận hiệp phương sai (mặc định false). Dùng khi các lát cắt có thang đo khác nhau."
              }
            }
          },
          "multidimensional_raster_correlation": {
            "name": "Tương quan raster đa chiều",
            "description": "Tính tương quan hai khối raster theo từng ô dọc theo chiều chung của chúng, tạo bản đồ hệ số Pearson, Spearman hoặc Kendall và — trong chế độ tương quan chéo — độ trễ tại đó mối liên hệ của mỗi ô đạt đỉnh (ArcGIS Multidimensional Raster Correlation). Không gì trong cả hai sổ đăng ký lập bản đồ được điều này: image_correlation thu gọn cặp ảnh thành một đại lượng vô hướng, time_series_cross_correlation của vòng 17 chỉ dành cho vector, attribute_correlation là phép toán trên bảng, còn bivariate_spatial_association so sánh hai raster đơn kênh không có trục thời gian.",
            "params": {
              "input1": {
                "label": "Đầu vào 1",
                "description": "Khối thứ nhất: một raster đa kênh (mỗi kênh là một lát cắt) hoặc một danh sách phân tách bằng dấu phẩy các raster đã đồng đăng ký."
              },
              "input2": {
                "label": "Đầu vào 2",
                "description": "Khối thứ hai, đã đồng đăng ký với khối thứ nhất và có cùng số lát cắt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster tương quan đầu ra trong khoảng [-1, 1]. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_lag": {
                "label": "Đầu ra trễ",
                "description": "Raster đầu ra chứa độ trễ tốt nhất tại mỗi ô (ở chế độ tương quan chéo); là độ trễ cố định ở mọi nơi trong các trường hợp khác. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "output_count": {
                "label": "Đầu ra số lượng",
                "description": "Raster đầu ra chứa số cặp mẫu đứng sau mỗi hệ số. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'pearson' (mặc định), 'spearman', hoặc 'kendall'."
              },
              "lag": {
                "label": "Trễ",
                "description": "Số lát cắt cố định để dịch khối thứ hai về phía trước trước khi ghép cặp (mặc định 0). Bị bỏ qua ở chế độ tương quan chéo."
              },
              "cross_correlation": {
                "label": "Tương quan chéo",
                "description": "Tìm mọi độ trễ trong khoảng -max_lag..=max_lag và giữ lại hệ số mạnh nhất (mặc định false)."
              },
              "max_lag": {
                "label": "Trễ tối đa",
                "description": "Nửa độ rộng của khoảng tìm kiếm độ trễ tính bằng lát cắt (mặc định 3). Chỉ ở chế độ tương quan chéo."
              },
              "use_absolute": {
                "label": "Dùng trị tuyệt đối",
                "description": "Ở chế độ tương quan chéo, xếp hạng các độ trễ theo trị tuyệt đối của tương quan để một liên hệ âm mạnh cũng có thể thắng (mặc định true)."
              },
              "min_valid": {
                "label": "Số hợp lệ tối thiểu",
                "description": "Số cặp mẫu tối thiểu trước khi một hệ số được ghi ra (mặc định 3)."
              }
            }
          },
          "multilook": {
            "name": "Đa nhìn",
            "description": "Giảm nhiễu đốm SAR bằng cách lấy trung bình không kết hợp các nhìn liền kề theo cự ly và phương vị, tạo ảnh cường độ điểm ảnh vuông (ArcGIS Multilook). Cả hai sổ đăng ký đều không có công cụ SAR nào; họ lee_filter đi kèm làm việc trên cường độ đã tách sóng, nên công cụ này cung cấp bước thượng nguồn biến dữ liệu phức một nhìn thành ảnh tách sóng mà các bộ lọc đó mong đợi. Đầu vào phức được đọc dưới dạng cặp I/Q hai kênh; tách sóng diễn ra trước khi lấy trung bình, và số nhìn tương đương được báo cáo để lọc nhiễu đốm ở bước sau.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster SAR đầu vào: một cặp hai kênh I/Q cho dữ liệu phức (SLC), hoặc một kênh duy nhất của dữ liệu đã tách sóng (xem 'input_domain')."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "input_domain": {
                "label": "Miền đầu vào",
                "description": "Với đầu vào không phải dạng phức, kênh 1 đang chứa: 'intensity' (mặc định) hoặc 'amplitude'. Biên độ được bình phương thành cường độ trước khi lấy trung bình, vì việc lấy trung bình không kết hợp chỉ đúng trong miền cường độ."
              },
              "complex": {
                "label": "Phức",
                "description": "Coi đầu vào là một cặp phức I/Q (mặc định: true khi raster có từ 2 kênh trở lên, false trong các trường hợp khác)."
              },
              "range_looks": {
                "label": "Số nhìn theo cự ly",
                "description": "Số lần quan sát theo phương cự ly (x). Mặc định 1, hoặc được suy ra khi bật auto_looks."
              },
              "azimuth_looks": {
                "label": "Số nhìn theo phương vị",
                "description": "Số lần quan sát theo phương phương vị (y). Mặc định 1, hoặc được suy ra khi bật auto_looks."
              },
              "auto_looks": {
                "label": "Tự động số nhìn",
                "description": "Nếu true (mặc định) và số lần quan sát không được chỉ định tường minh, suy ra chúng từ tỉ số khoảng cách điểm ảnh để các điểm ảnh mặt đất đầu ra gần như vuông."
              },
              "output_units": {
                "label": "Đơn vị đầu ra",
                "description": "amplitude, intensity (mặc định), hoặc db."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "mean (mặc định) hoặc median; median bền vững hơn ở nơi các vật tán xạ mạnh chiếm ưu thế trong cửa sổ quan sát."
              }
            }
          },
          "multipatch_footprint": {
            "name": "Đường bao multipatch",
            "description": "Chiếu các đối tượng multipatch 3D lên mặt phẳng XY và hòa tan chúng thành đa giác đường bao 2D, một cho mỗi đối tượng hoặc mỗi trường nhóm (ArcGIS Multipatch Footprint). layer_footprint_vector trả về một hình chữ nhật phạm vi duy nhất cho cả lớp, không phải đường viền từng đối tượng, nên hiện chưa có cách đưa buffer_3d / voxel_isosurface / khối nhà nhập vào quy trình regularize_building_footprints.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng multipatch 3D (các MultiPolygon dạng lưới tam giác có Z)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các đường bao đa giác 2D đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Trường tùy chọn mà các giá trị của nó dùng để hòa tan các đường bao với nhau (mỗi giá trị riêng biệt một đa giác đầu ra). Mặc định: mỗi đối tượng đầu vào một đầu ra."
              },
              "simplify_tolerance": {
                "label": "Dung sai đơn giản hóa",
                "description": "Dung sai Douglas-Peucker tùy chọn (đơn vị hệ tọa độ) áp dụng cho đường bao đã hòa tan. Mặc định bỏ qua để giữ nguyên đường viền thô cho regularize_building_footprints."
              }
            }
          },
          "multipatch_to_mesh": {
            "name": "Multipatch sang lưới tam giác",
            "description": "Xuất hình học multipatch và khối 3D sang OBJ hoặc glTF 2.0 / GLB cho bất kỳ trình xem 3D hoặc web nào (ArcGIS Multipatch To Collada). Bộ union_3d / difference_3d / enclose_multipatch / voxel_isosurface hoàn toàn không có đường xuất — không có định dạng lưới nào tồn tại trong sổ đăng ký — nên kết quả 3D chỉ có thể được đọc lại bởi chính danh mục này.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp multipatch / đa giác 3D."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp đầu ra .glb, .gltf hoặc .obj. Phần mở rộng quyết định định dạng trừ khi có chỉ định 'format'."
              },
              "format": {
                "label": "Định dạng",
                "description": "'glb' (mặc định cho .glb), 'gltf' (JSON có bộ đệm base64 nhúng), hoặc 'obj'. Mặc định lấy theo phần mở rộng của tệp đầu ra."
              },
              "origin": {
                "label": "Gốc",
                "description": "Phép tịnh tiến về gốc cục bộ: 'centroid' (mặc định), 'min_corner', hoặc 'none'. Cần thiết cho độ chính xác — vị trí trong glTF là số thực 32-bit."
              },
              "y_up": {
                "label": "Y hướng lên",
                "description": "Chuyển sang quy ước trục Y hướng lên của glTF từ quy ước trục Z hướng lên của dữ liệu địa lý (mặc định true cho glTF/GLB, false cho OBJ)."
              },
              "name_field": {
                "label": "Trường tên",
                "description": "Thuộc tính đặt tên cho lưới của mỗi đối tượng trong đầu ra."
              }
            }
          },
          "multiple_ring_buffer": {
            "name": "Vùng đệm đa vòng",
            "description": "Tạo vùng đệm cho đối tượng theo danh sách khoảng cách thành các dải đồng tâm — đĩa lồng nhau hoặc vành không chồng lấn — tùy chọn hòa tan theo từng khoảng cách, với khoảng cách dải được lưu làm thuộc tính.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm, đường hoặc đa giác), định dạng được tự phát hiện (hoặc một handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "distances": {
                "label": "Khoảng cách",
                "description": "Danh sách các khoảng cách vùng đệm phân tách bằng dấu phẩy theo đơn vị hệ tọa độ, ví dụ \"100,250,500\". Được sắp xếp tăng dần; các giá trị trùng lặp và không dương sẽ bị loại bỏ."
              },
              "ring_type": {
                "label": "Kiểu vòng",
                "description": "'rings' (mặc định) cho các dải hình vành khuyên không chồng lấp, hoặc 'disks' cho các vùng đệm tích lũy lồng nhau."
              },
              "dissolve": {
                "label": "Hòa tan",
                "description": "'none' (mặc định) giữ mỗi đối tượng nguồn một dải; 'per_ring' hợp các dải của mọi đối tượng ở từng khoảng cách thành một đa giác."
              },
              "distance_field": {
                "label": "Trường khoảng cách",
                "description": "Tên của thuộc tính đầu ra chứa khoảng cách của mỗi dải. Mặc định 'distance'."
              }
            }
          },
          "multitemporal_coherence": {
            "name": "Độ kết hợp đa thời gian",
            "description": "Tính độ kết hợp giao thoa trên chồng các cảnh thu SAR đã đồng đăng ký và rút gọn thành trung bình/min/max/độ lệch chuẩn và độ dốc mất tương quan theo thời gian, tùy chọn xuất khối độ kết hợp theo từng cặp (ArcGIS Generate Multitemporal Coherence). sar_coherence chỉ xử lý đúng hai cảnh, nên việc chọn tán xạ bền vững và xác định thời điểm thay đổi độ kết hợp nằm ngoài tầm với.",
            "params": {
              "inputs": {
                "label": "Đầu vào",
                "description": "Các raster SLC phức đã đồng đăng ký, phân tách bằng dấu phẩy hoặc dấu chấm phẩy (mỗi raster hai kênh: I rồi Q). Tối thiểu hai."
              },
              "dates": {
                "label": "Ngày",
                "description": "Thời điểm thu nhận tùy chọn, mỗi đầu vào một giá trị, dưới dạng số theo đơn vị nhất quán (ví dụ ngày). Bắt buộc với thống kê 'decorrelation_slope'."
              },
              "pairs": {
                "label": "Cặp",
                "description": "'consecutive' (mặc định, i với i+1), 'all' (mọi cặp không có thứ tự), hoặc 'reference' (mọi cảnh so với reference_index)."
              },
              "reference_index": {
                "label": "Chỉ số tham chiếu",
                "description": "Chỉ số (đánh số từ 0) của cảnh tham chiếu khi pairs='reference' (mặc định 0)."
              },
              "window_size": {
                "label": "Kích thước cửa sổ",
                "description": "Cửa sổ ước lượng tính bằng ô; một giá trị duy nhất hoặc 'range,azimuth' (mặc định 5). Các giá trị chẵn được làm tròn lên thành số lẻ."
              },
              "bias_correction": {
                "label": "Hiệu chỉnh thiên lệch",
                "description": "Áp dụng hiệu chỉnh độ chệch của độ kết hợp với mẫu nhỏ (mặc định true)."
              },
              "statistics": {
                "label": "Thống kê",
                "description": "Phân tách bằng dấu phẩy: 'mean' (mặc định), 'min', 'max', 'std', 'decorrelation_slope'. Mỗi thống kê một kênh đầu ra, theo thứ tự này."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra, mỗi thống kê được yêu cầu một kênh. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_pairs": {
                "label": "Đầu ra cặp",
                "description": "Raster tùy chọn nhận khối độ kết hợp theo từng cặp, mỗi cặp một kênh."
              }
            }
          },
          "multivariate_clustering": {
            "name": "Phân cụm đa biến",
            "description": "Phân cụm các đối tượng vector theo độ tương đồng của giá trị thuộc tính đã chuẩn hóa (k-means hoặc k-medoids có hạt giống), tự động chọn số cụm bằng pseudo-F Calinski-Harabasz khi không cho trước, giống ArcGIS Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào, định dạng được tự phát hiện (hoặc một handle trong bộ nhớ)."
              },
              "fields": {
                "label": "Trường",
                "description": "Các trường phân tích dạng số phân tách bằng dấu phẩy (không gian thuộc tính dùng để phân cụm)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (một bản sao của đầu vào kèm cluster_id/silhouette). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "num_clusters": {
                "label": "Số cụm",
                "description": "Số cụm k. Bỏ qua hoặc truyền 0 để tự động đánh giá k = 2..15 bằng pseudo-F Calinski-Harabasz."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp phân cụm: 'kmeans' (mặc định) hoặc 'kmedoids' (PAM; phù hợp với số đối tượng nhỏ hơn)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống ngẫu nhiên để khởi tạo k-means++ / medoid một cách tất định (mặc định 1)."
              }
            }
          },
          "near_3d": {
            "name": "Gần 3D",
            "description": "Tìm đối tượng gần nhất theo khoảng cách 3D thực, báo cáo khoảng cách, vị trí gần nhất, các góc và chênh lệch theo từng trục, giống ArcGIS Near 3D.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào (các đỉnh 3D; thiếu Z sẽ được coi là 0)."
              },
              "near_features": {
                "label": "Đối tượng lân cận",
                "description": "Danh sách các lớp cần tìm kiếm, phân tách bằng dấu phẩy. Bỏ qua để tự ghép lớp đầu vào với chính nó."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Chỉ xét các đối tượng lân cận nằm trong khoảng cách 3D này (đơn vị bản đồ). Không giới hạn khi bỏ qua."
              },
              "location": {
                "label": "Vị trí",
                "description": "Bổ sung tọa độ của điểm gần nhất dưới dạng near_x / near_y / near_z (mặc định false)."
              },
              "angle": {
                "label": "Góc",
                "description": "Bổ sung phương vị ngang (near_bearing, độ tính từ hướng bắc) và góc đứng (near_vert_angle, độ tính từ mặt phẳng ngang) tới điểm gần nhất (mặc định false)."
              },
              "delta": {
                "label": "Delta",
                "description": "Bổ sung các độ lệch theo từng trục near_dx / near_dy / near_dz (mặc định false)."
              }
            }
          },
          "neighborhood_summary_statistics": {
            "name": "Thống kê tóm tắt lân cận",
            "description": "Với mỗi đối tượng, tóm tắt các trường số đã chọn trên các lân cận của nó (k gần nhất, trong một khoảng cách, hoặc liền kề chung cạnh), thêm <field>_nbr_mean/median/std/min/max/sum và số lân cận, giống ArcGIS Neighborhood Summary Statistics.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm, đường hoặc đa giác)."
              },
              "fields": {
                "label": "Trường",
                "description": "Các trường số cần tóm tắt trên các lân cận, phân tách bằng dấu phẩy."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (bản sao đầu vào + các cột thống kê lân cận). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "neighborhood": {
                "label": "Lân cận",
                "description": "'knn' (mặc định), 'distance_band', hoặc 'contiguity' (các đa giác chung cạnh)."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "k cho knn (mặc định 8)."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "Khoảng cách dải cho distance_band (đơn vị bản đồ)."
              },
              "weights": {
                "label": "Trọng số",
                "description": "'uniform' (mặc định) hoặc 'inverse_distance' (lấy trọng số cho giá trị trung bình và độ lệch chuẩn)."
              }
            }
          },
          "non_maximum_suppression": {
            "name": "Triệt tiêu phi cực đại",
            "description": "Giữ phát hiện có độ tin cậy cao nhất trong mỗi cụm chồng lấn và loại bỏ các đa giác điểm thấp hơn có tỉ lệ giao-trên-hợp vượt ngưỡng (giống ArcGIS Non Maximum Suppression) — bộ khử trùng lặp theo điểm số cho đầu ra phát hiện đối tượng/OBIA mà count_overlapping_features (đếm, giữ tất cả), resolve_building_conflicts (dịch chuyển) và find_identical (chỉ trùng chính xác) không cung cấp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đa giác phát hiện đầu vào (có thể chồng lấp)."
              },
              "confidence_score_field": {
                "label": "Trường điểm tin cậy",
                "description": "Trường số chứa độ tin cậy/điểm số của mỗi phát hiện; giá trị cao hơn thắng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đa giác đầu ra chứa các phát hiện còn lại. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "max_overlap_ratio": {
                "label": "Tỉ lệ chồng lấn tối đa",
                "description": "Giá trị IoU mà trên đó một phát hiện có điểm số thấp hơn sẽ bị loại bỏ (0-1, mặc định 0.5)."
              },
              "class_value_field": {
                "label": "Trường giá trị lớp",
                "description": "Trường tùy chọn; chỉ các phát hiện cùng lớp mới loại bỏ lẫn nhau."
              }
            }
          },
          "observer_points": {
            "name": "Điểm quan sát",
            "description": "Xác định quan sát viên nào trong tối đa 32 quan sát viên nhìn thấy mỗi ô, dưới dạng mặt nạ bit theo từng quan sát viên, và ghi raster độ cao so với mặt đất cho biết mục tiêu cần được nâng lên bao nhiêu để trở nên nhìn thấy (ArcGIS Observer Points / Viewshed 2 ở chế độ OBSERVERS). viewshed đi kèm chỉ trả về số trạm nhìn thấy, từ đó không khôi phục được câu trả lời nào: số đếm 1 không cho biết tháp nào phủ thửa đất, và số đếm 0 không phân biệt thiếu hai mét với nằm sau núi.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster độ cao đầu vào (DEM hoặc DSM)."
              },
              "observers": {
                "label": "Điểm quan sát",
                "description": "Lớp điểm chứa vị trí các quan sát viên, tối đa 32."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster tầm nhìn đầu ra: một mặt nạ bit theo quan sát viên, hoặc một số đếm với analysis_type 'frequency'. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_agl": {
                "label": "Đầu ra AGL",
                "description": "Raster độ cao trên mặt đất đầu ra: chiều cao mà một mục tiêu phải được nâng lên để trở nên nhìn thấy được. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "output_table": {
                "label": "Bảng đầu ra",
                "description": "Bảng đầu ra với mỗi quan sát viên một hàng cùng số ô và diện tích mà quan sát viên đó nhìn thấy. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "analysis_type": {
                "label": "Kiểu phân tích",
                "description": "'observers' (mặc định; một mặt nạ bit) hoặc 'frequency' (một số đếm, tương ứng với công cụ viewshed đi kèm)."
              },
              "observer_offset": {
                "label": "Độ lệch quan sát viên",
                "description": "Chiều cao của mỗi quan sát viên trên bề mặt, theo đơn vị z (mặc định 2.0)."
              },
              "observer_offset_field": {
                "label": "Trường độ lệch quan sát viên",
                "description": "Thuộc tính chứa chiều cao riêng của từng quan sát viên, ghi đè 'observer_offset'."
              },
              "target_offset": {
                "label": "Độ lệch mục tiêu",
                "description": "Chiều cao của mục tiêu trên bề mặt, theo đơn vị z (mặc định 0.0)."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Bỏ qua các ô xa hơn khoảng cách này so với một quan sát viên, theo đơn vị bản đồ. Mặc định là không giới hạn."
              },
              "curvature": {
                "label": "Độ cong",
                "description": "Áp dụng hiệu chỉnh độ cong Trái Đất và khúc xạ (mặc định false, tức là coi Trái Đất phẳng)."
              },
              "refractivity_coefficient": {
                "label": "Hệ số khúc xạ",
                "description": "Hệ số khúc xạ khí quyển dùng cùng với 'curvature' (mặc định 0.13)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của raster độ cao (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "optics_clustering": {
            "name": "Phân cụm OPTICS",
            "description": "Phân cụm dựa trên mật độ đa tỉ lệ bằng OPTICS (giống tùy chọn OPTICS của ArcGIS Density-based Clustering): xây dựng thứ tự khả năng tiếp cận và trích xuất các cụm có mật độ khác nhau bằng phương pháp ξ-steep — thành viên đa tỉ lệ của bộ ba DBSCAN/HDBSCAN/OPTICS mà dbscan và hdbscan đã viết không bao phủ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (hệ tọa độ quy chiếu; khoảng cách tính theo đơn vị của nó)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (bản sao của đầu vào kèm các trường phân cụm). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "min_features_cluster": {
                "label": "Số đối tượng tối thiểu mỗi cụm",
                "description": "Số điểm tối thiểu cho ước lượng mật độ theo khoảng cách lõi và cho cụm nhỏ nhất (>= 2). Mặc định 5."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tiếp cận tối đa tùy chọn (epsilon lớn nhất). Mặc định: không giới hạn (mọi tỉ lệ)."
              },
              "cluster_sensitivity": {
                "label": "Độ nhạy phân cụm",
                "description": "0-100; giá trị cao hơn phát hiện nhiều cụm hơn/chặt hơn. Ánh xạ sang xi = 1 - sensitivity/100. Mặc định 95 (xi = 0.05)."
              }
            }
          },
          "optimal_corridor_connections": {
            "name": "Kết nối hành lang tối ưu",
            "description": "Tính mạng lưới đa giác hành lang chi phí tối thiểu có chiều rộng cố định kết nối tối ưu mọi vùng đầu vào qua bề mặt chi phí, cộng thêm các đường tim hành lang. Không như cost_connectivity (đường có chiều rộng bằng 0) hay corridor (bề mặt chi phí một cặp), công cụ này xuất đa giác hành lang dùng ngay cho toàn bộ mạng lưới vùng. Giống ArcGIS Optimal Corridor Connections.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng đa giác vùng cần kết nối."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đa giác hành lang đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "cost_raster": {
                "label": "Raster chi phí",
                "description": "Bề mặt chi phí tùy chọn. Nếu không có, chi phí là đồng nhất (Euclid)."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Các đối tượng đa giác tùy chọn được coi là không thể vượt qua."
              },
              "corridor_width": {
                "label": "Chiều rộng hành lang",
                "description": "Chiều rộng hành lang theo đơn vị bản đồ (mặc định: 10 ô)."
              },
              "output_lines": {
                "label": "Đầu ra đường",
                "description": "Đường dẫn tùy chọn cho các đường tim hành lang."
              },
              "neighbor_option": {
                "label": "Tùy chọn lân cận",
                "description": "'spanning_tree' (mặc định) chỉ giữ lại các hành lang cần thiết để kết nối mọi vùng; 'all_pairs' xuất ra một hành lang cho mọi cặp vùng."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô phân tích khi không cung cấp raster chi phí (mặc định: phạm vi các vùng / 200)."
              }
            }
          },
          "optimal_interpolation": {
            "name": "Nội suy tối ưu",
            "description": "Hiệu chỉnh trường raster nền bằng quan sát điểm qua bước phân tích nội suy tối ưu / đồng hóa dữ liệu x_a = x_b + B Hᵀ (H B Hᵀ + R)⁻¹ (y − H x_b), dùng tương quan không gian Gauss với chiều dài tương quan cho trước và phương sai sai số theo từng quan sát/nền (giống Optimal Interpolation của ArcGIS). Không như IDW/kriging/EBK chỉ nội suy từ điểm, công cụ này pha trộn trường lưới tiên nghiệm với quan sát và có thể xuất raster phương sai sai số phân tích.",
            "params": {
              "background": {
                "label": "Nền",
                "description": "Trường raster nền (tiên nghiệm) cần hiệu chỉnh."
              },
              "observations": {
                "label": "Quan sát",
                "description": "Lớp điểm quan trắc."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số trên lớp quan trắc chứa giá trị quan trắc được."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đã hiệu chỉnh (phân tích) đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "correlation_length": {
                "label": "Chiều dài tương quan",
                "description": "Độ dài tương quan không gian L theo đơn vị hệ tọa độ (dạng Gauss). Mặc định: 5% cạnh dài hơn của raster nền."
              },
              "background_error_variance": {
                "label": "Phương sai sai số nền",
                "description": "Phương sai sai số nền σ_b² (mặc định 1.0). Lớn hơn => tin tưởng các quan trắc nhiều hơn."
              },
              "obs_error_variance": {
                "label": "Phương sai sai số quan sát",
                "description": "Phương sai sai số quan trắc σ_o² (mặc định 1.0), dùng khi không có trường sai số theo từng điểm. Lớn hơn => tin tưởng dữ liệu nền nhiều hơn."
              },
              "error_field": {
                "label": "Trường sai số",
                "description": "Trường tùy chọn trên lớp quan trắc cho biết phương sai sai số của mỗi điểm (ghi đè obs_error_variance ở nơi có giá trị và > 0)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh nền cần hiệu chỉnh (đánh số từ 1, mặc định 1)."
              },
              "max_obs": {
                "label": "Số quan sát tối đa",
                "description": "Số quan trắc gần nhất tối đa dùng trong phép giải cục bộ tại mỗi ô (mặc định 50, khoảng 1..=200)."
              },
              "analysis_error": {
                "label": "Sai số phân tích",
                "description": "Raster đầu ra tùy chọn chứa phương sai sai số phân tích σ_a² (≤ σ_b²)."
              }
            }
          },
          "optimal_path_as_line": {
            "name": "Đường đi tối ưu dạng đường",
            "description": "Truy vết raster liên kết ngược chi phí từ mỗi điểm đích trở về nguồn và xuất các tuyến chi phí tối thiểu dưới dạng polyline (ArcGIS Optimal Path As Line / Cost Path As Polyline). cost_pathway chỉ đánh dấu tuyến bằng các ô raster và cost_connectivity chỉ bao phủ trường hợp mạng lưới N địa điểm, nên đường đi nguồn-đích thông thường chưa có dạng vector.",
            "params": {
              "destination": {
                "label": "Đích",
                "description": "Các điểm đích để lần theo: một raster (mọi ô khác không và không phải no-data) hoặc một lớp vector điểm/đa điểm."
              },
              "backlink": {
                "label": "Liên kết ngược",
                "description": "Raster hướng liên kết ngược từ cost_back_link (0 = nguồn, 1-8 = hướng về phía nguồn, 1 = hướng đông, ngược chiều kim đồng hồ)."
              },
              "accumulation": {
                "label": "Tích lũy",
                "description": "Raster chi phí tích lũy tùy chọn (out_distance của cost_back_link). Cung cấp tổng chi phí của mỗi đường đi và là bắt buộc với path_type 'each_zone' và 'best_single'."
              },
              "path_type": {
                "label": "Kiểu đường đi",
                "description": "Một trong các giá trị 'each_cell' (mặc định, mỗi ô đích một đường đi), 'each_zone' (mỗi vùng đích một đường đi, xuất phát từ ô rẻ nhất của vùng đó), 'best_single' (một đường đi rẻ nhất duy nhất)."
              },
              "zone_field": {
                "label": "Trường vùng",
                "description": "Thuộc tính chứa mã vùng cho các điểm đích dạng vector khi path_type là 'each_zone'. Các điểm đích dạng raster dùng giá trị ô làm mã vùng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp polyline đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "optimized_hot_spot_analysis": {
            "name": "Phân tích điểm nóng tối ưu",
            "description": "Tự động gộp sự cố, tự động chọn dải khoảng cách phân tích, chạy Getis-Ord Gi* và báo cáo khoảng điểm nóng/lạnh đã hiệu chỉnh FDR (giống ArcGIS Optimized Hot Spot Analysis) — lớp bọc quy trình mà getis_ord_gi_star thô đi kèm còn thiếu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào (các điểm sự cố, hoặc các đối tượng có một trường phân tích)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp điểm đầu ra kèm kết quả Gi*. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "analysis_field": {
                "label": "Trường phân tích",
                "description": "Trường số cần phân tích (có trọng số, không tổng hợp). Bỏ qua để đếm số sự cố."
              },
              "aggregation": {
                "label": "Gộp",
                "description": "Cách tổng hợp sự cố khi không có analysis_field: 'fishnet' (đếm theo lưới; mặc định) hoặc 'snap' (gộp các điểm trùng nhau)."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô tổng hợp/bắt dính theo đơn vị hệ tọa độ. Mặc định: cạnh dài hơn của phạm vi / 30."
              },
              "distance_band": {
                "label": "Dải khoảng cách",
                "description": "Dải khoảng cách phân tích theo đơn vị hệ tọa độ. Mặc định: được chọn tự động theo cường độ phân cụm cực đại."
              }
            }
          },
          "optimized_outlier_analysis": {
            "name": "Phân tích ngoại lai tối ưu",
            "description": "Tự động gộp sự cố, tự động chọn dải khoảng cách phân tích, chạy Moran's I cục bộ Anselin và báo cáo các kiểu cụm/ngoại lai đã hiệu chỉnh FDR (HH/LL/HL/LH) — giống ArcGIS Optimized Outlier Analysis; lớp bọc Moran cục bộ phi thời gian mà local_morans_i_lisa thô đi kèm và local_outlier_analysis không-thời gian không cung cấp.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào (các điểm sự cố, hoặc các đối tượng có một trường phân tích)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp điểm đầu ra kèm kết quả Moran cục bộ. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "analysis_field": {
                "label": "Trường phân tích",
                "description": "Trường số cần phân tích (có trọng số, không tổng hợp). Bỏ qua để đếm số sự cố."
              },
              "aggregation": {
                "label": "Gộp",
                "description": "Cách tổng hợp sự cố khi không có analysis_field: 'fishnet' (đếm theo lưới; mặc định) hoặc 'snap' (gộp các điểm trùng nhau)."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô tổng hợp/bắt dính theo đơn vị hệ tọa độ. Mặc định: cạnh dài hơn của phạm vi / 30."
              },
              "distance_band": {
                "label": "Dải khoảng cách",
                "description": "Dải khoảng cách phân tích theo đơn vị hệ tọa độ. Mặc định: được chọn tự động theo cường độ phân cụm cực đại."
              },
              "fdr_alpha": {
                "label": "Alpha FDR",
                "description": "Mức Tỉ lệ phát hiện sai cho ý nghĩa của COType (mặc định 0.05)."
              }
            }
          },
          "ordinary_cokriging": {
            "name": "Nội suy CoKriging thông thường",
            "description": "Thực hiện nội suy không gian đa biến dùng các biến phụ trợ để cải thiện dự đoán biến chính. Lý tưởng khi dữ liệu chính thưa nhưng dữ liệu thứ cấp có tương quan lại dồi dào.",
            "params": {
              "primary_points": {
                "label": "Điểm chính",
                "description": "Lớp vector chứa các điểm huấn luyện của biến chính"
              },
              "primary_field": {
                "label": "Trường chính",
                "description": "Trường chứa các giá trị của biến chính"
              },
              "auxiliary_inputs": {
                "label": "Đầu vào phụ trợ",
                "description": "Danh sách các đường dẫn tệp biến phụ trợ phân tách bằng dấu phẩy"
              },
              "auxiliary_fields": {
                "label": "Trường phụ trợ",
                "description": "Tên các trường cho các biến phụ trợ, phân tách bằng dấu phẩy (để trống với raster)"
              },
              "template_raster": {
                "label": "Raster mẫu",
                "description": "Raster mẫu xác định lưới đầu ra và hệ tọa độ"
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster kriging đầu ra"
              },
              "output_variance": {
                "label": "Đầu ra phương sai",
                "description": "Đường dẫn raster phương sai kriging đầu ra tùy chọn"
              },
              "neighborhood_size": {
                "label": "Kích thước lân cận",
                "description": "Số lân cận gần nhất cho cokriging cục bộ (mặc định: tất cả)"
              }
            }
          },
          "pairwise_comparison_weights": {
            "name": "Trọng số so sánh cặp",
            "description": "Dẫn xuất trọng số tiêu chí từ ma trận so sánh cặp AHP (thang Saaty 1-9) dưới dạng vector riêng chính đã chuẩn hóa, với kiểm tra tính nhất quán (lambda_max, chỉ số nhất quán, tỉ số nhất quán) — giống ArcGIS Assign Weights By Pairwise Comparison.",
            "params": {
              "matrix": {
                "label": "Ma trận",
                "description": "Ma trận so sánh nghịch đảo n x n dưới dạng mảng JSON 2 chiều, ví dụ [[1,3,5],[0.333,1,2],[0.2,0.5,1]]. Cung cấp tham số này hoặc `input`."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Tệp CSV chứa ma trận so sánh (các hàng số thuần túy, hoặc có nhãn với một hàng tiêu đề và một cột tên ở đầu). Cung cấp tham số này hoặc `matrix`."
              },
              "criteria": {
                "label": "Tiêu chí",
                "description": "Tên các tiêu chí phân tách bằng dấu phẩy (phải khớp với thứ tự trong ma trận). Ghi đè các nhãn trong CSV; mặc định là C1..Cn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra — một tệp CSV (phần mở rộng .csv) hoặc một bảng vector không có hình học (tiêu chí, trọng số, thứ hạng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "path_distance": {
            "name": "Khoảng cách đường đi",
            "description": "Khoảng cách chi phí tối thiểu tích lũy trong đó mỗi bước trả khoảng cách bề mặt 3D thực (từ DEM) nhân với hệ số đứng phụ thuộc độ dốc (đi bộ Tobler, tuyến tính, nhị phân) nhân với ma sát, giống ArcGIS Path Distance.",
            "params": {
              "source": {
                "label": "Nguồn",
                "description": "Raster nguồn; các ô có giá trị dương, không phải nodata là các điểm gốc (chi phí tích lũy bằng 0)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster chi phí tích lũy đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "cost": {
                "label": "Chi phí",
                "description": "Raster ma sát/chi phí đi qua tùy chọn (mặc định đồng nhất bằng 1)."
              },
              "surface": {
                "label": "Bề mặt",
                "description": "Raster độ cao (DEM) tùy chọn; cho phép tính khoảng cách bề mặt 3 chiều và các hệ số theo phương thẳng đứng dựa trên độ dốc."
              },
              "vertical_factor": {
                "label": "Hệ số đứng",
                "description": "'tobler' (mặc định), 'linear', 'sym_linear', 'inverse_linear', hoặc 'binary'."
              },
              "slope_factor": {
                "label": "Hệ số độ dốc",
                "description": "Hệ số phạt độ dốc cho các hệ số tuyến tính (mặc định 1)."
              },
              "zero_factor": {
                "label": "Hệ số không",
                "description": "Ngưỡng sàn của hệ số theo phương thẳng đứng khi xuống dốc cho linear/inverse_linear (mặc định 0.1)."
              },
              "max_slope": {
                "label": "Độ dốc tối đa",
                "description": "Với 'binary': các độ dốc lớn hơn số độ này là không thể vượt qua (mặc định 30)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh (đánh số từ 1) cho mọi raster (mặc định 1)."
              }
            }
          },
          "percentile_contours": {
            "name": "Đường đồng mức phân vị",
            "description": "Xuất các đa giác lồng nhau bao quanh các ô cực trị nhất của bề mặt, phân ngưỡng theo phân vị giá trị hoặc phân vị khối lượng tích lũy (thể tích).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster bề mặt liên tục đầu vào (mật độ, mức phù hợp, độ cao)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "percentiles": {
                "label": "Phân vị",
                "description": "Các phân vị trong [0,100] phân tách bằng dấu phẩy (ví dụ \"50,90,95\"). Mặc định \"90\"."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'value' (mặc định): các ô có giá trị bằng hoặc lớn hơn giá trị phân vị thứ p. 'volume': các ô cao nhất mang (100-p)% giá trị tích lũy trên cùng."
              },
              "ignore_negative": {
                "label": "Bỏ qua giá trị âm",
                "description": "Loại các giá trị ô âm khỏi việc xếp hạng và khỏi đầu ra. Mặc định false."
              },
              "smooth": {
                "label": "Làm trơn",
                "description": "Đơn giản hóa các đa giác theo cạnh ô bằng Douglas-Peucker (dung sai khoảng 1.5 ô) để làm mềm hình bậc thang. Mặc định false."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "pivot_table": {
            "name": "Bảng tổng hợp",
            "description": "Định hình lại bảng thuộc tính dạng dài thành dạng rộng: một hàng đầu ra cho mỗi tổ hợp duy nhất của các trường định danh, và một cột cho mỗi giá trị phân biệt của trường xoay, được điền từ trường giá trị. Giống ArcGIS Pivot Table.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector hoặc bảng thuộc tính đầu vào ở dạng dài."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "fields": {
                "label": "Trường",
                "description": "(Các) tên trường phân tách bằng dấu phẩy/chấm phẩy xác định một hàng đầu ra; được giữ nguyên không đổi."
              },
              "pivot_field": {
                "label": "Trường xoay",
                "description": "Trường mà các giá trị riêng biệt của nó trở thành các cột mới."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường cung cấp các giá trị ô."
              },
              "aggregate": {
                "label": "Tổng hợp",
                "description": "Được áp dụng khi một ô hàng/cột có nhiều bản ghi nguồn: 'first' (mặc định), 'sum', 'mean', 'min', 'max', 'count'."
              }
            }
          },
          "pmtiles_extract": {
            "name": "Trích xuất PMTiles",
            "description": "Trích xuất tập con theo hộp bao/mức thu phóng của kho lưu trữ PMTiles thành kho lưu trữ mới (ví dụ bản đồ nền ngoại tuyến từ bản dựng toàn cầu Protomaps).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp .pmtiles đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp .pmtiles đầu ra."
              },
              "bbox": {
                "label": "Hộp bao",
                "description": "Hộp bao theo WGS84 dưới dạng 'min_lon,min_lat,max_lon,max_lat'."
              },
              "min_zoom": {
                "label": "Mức thu phóng tối thiểu",
                "description": "Mức thu phóng thấp nhất được đưa vào (mặc định 0, để bản đồ vẫn dùng được khi thu nhỏ)."
              },
              "max_zoom": {
                "label": "Mức thu phóng tối đa",
                "description": "Mức thu phóng cao nhất được đưa vào (mặc định: mức thu phóng lớn nhất của kho nguồn)."
              },
              "max_tiles": {
                "label": "Số ô tối đa",
                "description": "Hủy bỏ nếu vùng chọn bao gồm nhiều ô hơn số này (mặc định 2000000)."
              },
              "url": {
                "label": "URL",
                "description": "URL PMTiles qua HTTP(S). Cung cấp url hoặc input; các nguồn HTTP dùng yêu cầu theo dải byte (máy chủ phải cho phép đọc Range từ nguồn khác)."
              },
              "bbox_crs": {
                "label": "CRS hộp bao",
                "description": "Mã EPSG của các tọa độ trong bbox. Mặc định là 4326 (kinh độ/vĩ độ WGS84); các hệ tọa độ khác sẽ được chiếu về 4326."
              }
            }
          },
          "point_statistics": {
            "name": "Thống kê điểm",
            "description": "Raster hóa thống kê cửa sổ trượt của thuộc tính đối tượng điểm: với mỗi ô đầu ra, một lân cận (tròn hoặc chữ nhật) thu thập giá trị của trường số đã chọn từ các điểm bên trong và rút gọn thành mean/majority/maximum/median/minimum/minority/range/std/sum/variety. Giống ArcGIS Point Statistics; bổ sung cho line_density/heat_map chỉ tính mật độ và neighborhood_summary_statistics chỉ dành cho vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (Point / MultiPoint)."
              },
              "field": {
                "label": "Trường",
                "description": "Trường thuộc tính dạng số cần tóm tắt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra (driver lấy từ phần mở rộng). Nếu bỏ qua, sẽ lưu trong bộ nhớ."
              },
              "statistic": {
                "label": "Thống kê",
                "description": "Thống kê cho mỗi lân cận: mean (mặc định), majority, maximum, median, minimum, minority, range, std, sum, hoặc variety."
              },
              "neighborhood": {
                "label": "Lân cận",
                "description": "Hình dạng lân cận: 'circle' (mặc định, dùng 'radius') hoặc 'rectangle' (một hình vuông cạnh 2*radius)."
              },
              "radius": {
                "label": "Bán kính",
                "description": "Bán kính lân cận / nửa cạnh hình chữ nhật (tính bằng mét với hệ tọa độ địa lý, theo đơn vị hệ tọa độ trong các trường hợp khác). Mặc định: cạnh ngắn hơn của phạm vi / 20."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra (cùng đơn vị với radius). Mặc định: radius / 5."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Ghi đè mã EPSG của hệ tọa độ đầu vào (ví dụ khi lớp không được gán nhãn). Giá trị 4326 sẽ kích hoạt phép chiếu theo mét."
              }
            }
          },
          "points_to_line": {
            "name": "Điểm thành đường",
            "description": "Dựng các đối tượng polyline từ điểm: một đường cho mỗi giá trị line_field phân biệt, các đỉnh sắp theo sort_field, với tùy chọn cờ đóng đường.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector điểm đầu vào (hoặc một handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra tùy chọn (driver xác định theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "line_field": {
                "label": "Trường đường",
                "description": "Thuộc tính mà các giá trị riêng biệt của nó phân chia các điểm thành các đường riêng (mỗi giá trị một polyline). Nếu bỏ qua, mọi điểm sẽ tạo thành một đường duy nhất."
              },
              "sort_field": {
                "label": "Trường sắp xếp",
                "description": "Thuộc tính xác định thứ tự các đỉnh trong mỗi đường. Giá trị số được sắp xếp theo số, giá trị văn bản theo thứ tự từ điển. Nếu bỏ qua, sẽ dùng thứ tự đối tượng trong đầu vào."
              },
              "close_line": {
                "label": "Đóng đường",
                "description": "Bổ sung đỉnh đầu tiên vào cuối mỗi đường, khép nó thành một vòng. Mặc định false."
              }
            }
          },
          "points_to_path": {
            "name": "Điểm thành lộ trình",
            "description": "Nối các điểm thành đối tượng polyline, sắp theo một trường và (tùy chọn) nhóm thành một lộ trình cho mỗi giá trị, với tùy chọn sắp xếp tự nhiên và đóng lộ trình.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector điểm đầu vào (hoặc một handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra tùy chọn (driver xác định theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "order_field": {
                "label": "Trường thứ tự",
                "description": "Thuộc tính xác định thứ tự nối các điểm trong mỗi đường đi. Giá trị số được sắp xếp theo số, giá trị văn bản theo thứ tự từ điển. Nếu bỏ qua, sẽ dùng thứ tự đối tượng trong đầu vào."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Thuộc tính phân chia các điểm thành các đường đi riêng (mỗi giá trị riêng biệt một đường). Nếu bỏ qua, mọi điểm sẽ tạo thành một đường đi duy nhất."
              },
              "natural_sort": {
                "label": "Sắp xếp tự nhiên",
                "description": "Sắp xếp các giá trị thứ tự dạng văn bản theo thứ tự tự nhiên để 'a9' đứng trước 'a10'. Mặc định false."
              },
              "close_path": {
                "label": "Đóng lộ trình",
                "description": "Bổ sung đỉnh đầu tiên vào cuối mỗi đường đi, khép nó thành một vòng. Mặc định false."
              }
            }
          },
          "polygon_neighbors": {
            "name": "Đa giác lân cận",
            "description": "Xây dựng bảng liền kề (tiếp giáp) đa giác: các cặp lân cận kèm chiều dài đường biên chung và số lần chạm điểm, giống ArcGIS Polygon Neighbors.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra — một tệp CSV (phần mở rộng .csv) hoặc một bảng vector không có hình học. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường xác định mỗi đa giác trong bảng. Mặc định: chỉ số của đối tượng."
              },
              "both_sides": {
                "label": "Cả hai bên",
                "description": "Xuất mỗi cặp lân cận hai lần (nguồn→lân cận và lân cận→nguồn). Mặc định false (mỗi cặp một lần)."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Lượng tử hóa các đỉnh về một lưới có kích thước này (đơn vị hệ tọa độ) trước khi đối sánh ranh giới. Mặc định 0 (dùng tọa độ chính xác)."
              }
            }
          },
          "polygon_volume": {
            "name": "Thể tích đa giác",
            "description": "Thể tích và diện tích bề mặt 3D theo từng đa giác của raster bề mặt phía trên/dưới độ cao mặt phẳng tham chiếu của mỗi đối tượng, giống ArcGIS Polygon Volume — phiên bản theo vùng của surface_volume.",
            "params": {
              "surface": {
                "label": "Bề mặt",
                "description": "Raster bề mặt độ cao đầu vào."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác (các vùng)."
              },
              "height_field": {
                "label": "Trường chiều cao",
                "description": "Trường thuộc tính cung cấp độ cao mặt phẳng tham chiếu của từng đa giác."
              },
              "direction": {
                "label": "Hướng",
                "description": "Phía nào của mỗi mặt phẳng được tích phân: 'above' (mặc định), 'below' hoặc 'both'."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ bề mặt (đánh số từ 1, mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "porous_puff": {
            "name": "Khuếch tán xốp",
            "description": "Đối lưu-phân tán giải tích của một khối chất ô nhiễm tức thời qua nước ngầm (giống ArcGIS Porous Puff): di chuyển tâm khối từ điểm phát thải dọc theo trường vận tốc Darcy (độ lớn+hướng, như darcy_flow tạo ra), rồi đánh giá nồng độ khối Gauss 2D dạng đóng trong tọa độ dọc đường đi, được co giãn theo độ rỗng, độ dày, hệ số chậm và phân rã bậc nhất.",
            "params": {
              "magnitude": {
                "label": "Độ lớn",
                "description": "Raster độ lớn vận tốc Darcy, như được tạo ra bởi 'output' của darcy_flow. Kích thước ô/phạm vi được lấy từ raster này."
              },
              "direction": {
                "label": "Hướng",
                "description": "Raster hướng dòng chảy Darcy (góc phương vị tính bằng độ từ hướng bắc, theo chiều kim đồng hồ, xuôi theo gradient), như được tạo ra bởi 'direction' của darcy_flow. Phải được đồng đăng ký với 'magnitude'."
              },
              "x": {
                "label": "X",
                "description": "Tọa độ X của điểm phát thải (đơn vị bản đồ, cùng hệ tọa độ với các raster vận tốc)."
              },
              "y": {
                "label": "Y",
                "description": "Tọa độ Y của điểm phát thải (đơn vị bản đồ)."
              },
              "mass": {
                "label": "Khối lượng",
                "description": "Khối lượng chất ô nhiễm được phát thải (phải là số dương)."
              },
              "porosity": {
                "label": "Độ rỗng",
                "description": "Độ rỗng hiệu dụng: hoặc là một hằng số (0, 1] hoặc đường dẫn raster đồng đăng ký với 'magnitude'."
              },
              "thickness": {
                "label": "Độ dày",
                "description": "Bề dày tầng chứa nước: hoặc là một hằng số dương hoặc đường dẫn raster đồng đăng ký với 'magnitude'."
              },
              "dispersivity_long": {
                "label": "Độ phân tán dọc",
                "description": "Hệ số phân tán dọc (đơn vị chiều dài; phải là số dương)."
              },
              "dispersivity_trans": {
                "label": "Độ phân tán ngang",
                "description": "Hệ số phân tán ngang (đơn vị chiều dài; phải là số dương)."
              },
              "retardation": {
                "label": "Hệ số chậm",
                "description": "Hệ số làm chậm (mặc định 1, phải >= 1)."
              },
              "decay": {
                "label": "Phân rã",
                "description": "Hằng số phân rã bậc nhất (mặc định 0, phải >= 0; cùng đơn vị thời gian với 'time')."
              },
              "time": {
                "label": "Thời gian",
                "description": "Danh sách một hoặc nhiều khoảng thời gian trôi qua dương, phân tách bằng dấu phẩy. Thời điểm cuối cùng được ghi vào 'output'; tất cả các thời điểm (kể cả thời điểm cuối) được báo cáo trong đầu ra 'time_series'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster nồng độ đầu ra cho thời điểm cuối cùng trong 'time'. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ các raster độ lớn/hướng (đánh số từ 1, mặc định 1)."
              },
              "step": {
                "label": "Bước",
                "description": "Độ dài bước tiến của tâm đám ô nhiễm theo đơn vị hệ tọa độ (mặc định: kích thước ô của raster độ lớn)."
              },
              "max_steps": {
                "label": "Số bước tối đa",
                "description": "Số bước tiến tối đa cho mỗi thời điểm được yêu cầu (mặc định 1000)."
              }
            }
          },
          "predict_using_trend_raster": {
            "name": "Dự đoán bằng raster xu thế",
            "description": "Đánh giá các raster độ dốc/hệ số chặn do generate_trend_raster khớp tại một hoặc nhiều thời điểm, tạo các bề mặt dự đoán, giống ArcGIS Predict Using Trend Raster.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster độ dốc (xu thế) do generate_trend_raster tạo ra."
              },
              "intercept": {
                "label": "Hệ số chặn",
                "description": "Raster hệ số chặn do generate_trend_raster tạo ra ('intercept_output' của nó), đồng đăng ký với raster độ dốc."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra cho thời điểm dự báo đầu tiên. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "times": {
                "label": "Thời điểm",
                "description": "Các thời điểm cần dự báo, phân tách bằng dấu phẩy, trên cùng thang đo dùng cho phép khớp (ví dụ '12,18,24'). Ghi đè start/end/interval."
              },
              "start": {
                "label": "Bắt đầu",
                "description": "Thời điểm đầu tiên của dải được tạo (dùng khi không có 'times')."
              },
              "end": {
                "label": "Kết thúc",
                "description": "Thời điểm cuối cùng của dải được tạo (bao gồm cả thời điểm này; dùng khi không có 'times')."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Bước giữa các thời điểm được tạo (mặc định 1; dùng khi không có 'times')."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc từ mỗi raster hệ số (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "presence_only_prediction": {
            "name": "Dự đoán chỉ dựa trên hiện diện",
            "description": "Mô hình hóa độ thích hợp loài/sinh cảnh kiểu MaxEnt: khớp mô hình logistic chính quy hóa L1 đối chiếu các điểm hiện diện với mẫu nền có hạt giống từ các raster giải thích (mở rộng cơ sở tuyến tính/bậc hai/bản lề), rồi dự đoán bề mặt xác suất hiện diện cùng báo cáo tầm quan trọng của biến — giống ArcGIS Presence-only Prediction (MaxEnt).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm hiện diện đầu vào (các lần xuất hiện quan sát được)."
              },
              "explanatory": {
                "label": "Biến giải thích",
                "description": "Danh sách các đường dẫn raster giải thích, phân tách bằng dấu phẩy (chồng biến đồng hành). Được lấy mẫu tại các vị trí hiện diện + nền; raster đầu tiên xác định lưới đầu ra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster xác suất hiện diện đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "report": {
                "label": "Báo cáo",
                "description": "Đường dẫn đầu ra tùy chọn cho bảng CSV hệ số / mức quan trọng của biến."
              },
              "features": {
                "label": "Đặc trưng",
                "description": "Các lớp đặc trưng khai triển cơ sở, phân tách bằng dấu phẩy: bất kỳ giá trị nào trong 'linear', 'quadratic', 'hinge'. Mặc định 'linear,quadratic'."
              },
              "background": {
                "label": "Nền",
                "description": "Số lượng mẫu nền được lấy từ chồng raster. Mặc định 1000 (giới hạn ở số ô hợp lệ)."
              },
              "regularization": {
                "label": "Chính quy hóa",
                "description": "Cường độ chính quy hóa L1 (lasso) trên các đặc trưng đã chuẩn hóa. Lớn hơn = mô hình đơn giản hơn. Mặc định 0.01."
              },
              "hinge_knots": {
                "label": "Nút bản lề",
                "description": "Số nút bên trong trên mỗi biến đồng hành cho các đặc trưng hinge (chỉ dùng khi bật 'hinge'). Mặc định 10."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống ngẫu nhiên cho mẫu nền tất định (mặc định 1)."
              }
            }
          },
          "propagate_displacement": {
            "name": "Lan truyền dịch chuyển",
            "description": "Lan truyền dịch chuyển do resolve_road_conflicts (hoặc bất kỳ lớp liên kết dịch chuyển hai điểm nào) tạo ra lên các đối tượng gần đó bằng cách nội suy các liên kết thưa thành trường IDW trơn: đối tượng cứng (nhà, thửa đất) nhận một phép tịnh tiến trung bình duy nhất, đường mềm nhận phép uốn theo từng đỉnh được làm trơn theo chiều dài cung, giống ArcGIS Propagate Displacement.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector cần hiệu chỉnh (bất kỳ kiểu hình học nào)."
              },
              "links": {
                "label": "Liên kết",
                "description": "Các liên kết dịch chuyển: một lớp đường 2 đỉnh cho mỗi liên kết, đỉnh đầu = vị trí gốc, đỉnh cuối = vị trí đã dịch chuyển (lược đồ mà cả đầu ra 'links' của resolve_road_conflicts và đầu vào 'links' của rubbersheet_features đều sử dụng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "adjustment_style": {
                "label": "Kiểu điều chỉnh",
                "description": "'auto' (mặc định: tịnh tiến cứng cho điểm/đa giác, uốn theo từng đỉnh cho đường), 'preserve_orientation' (tịnh tiến cứng theo trường được lấy trung bình trên đường bao) hoặc 'solid' (tịnh tiến cứng theo trường được lấy mẫu một lần tại điểm đại diện của đối tượng)."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tối đa (đơn vị hệ tọa độ) mà một liên kết có thể ảnh hưởng tới một điểm mẫu; các liên kết xa hơn sẽ bị bỏ qua. Mặc định: không giới hạn (mọi liên kết đều đóng góp ở khắp nơi)."
              }
            }
          },
          "pycnophylactic_interpolation": {
            "name": "Nội suy bảo toàn khối lượng",
            "description": "Nội suy diện tích bảo toàn khối lượng của Tobler: biến số đếm gộp theo vùng thành bề mặt mật độ trơn mà tổng theo từng vùng khớp chính xác với đầu vào (giống ArcGIS Areal Interpolation) — phương án trơn thay cho giả định mật độ đồng đều của apportion_polygon.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác đầu vào có trường đếm (biến quảng tính)."
              },
              "count_field": {
                "label": "Trường đếm",
                "description": "Trường chứa tổng số đếm của từng vùng (dân số, v.v.)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster mật độ đầu ra (giá trị trên mỗi ô; tổng theo vùng bằng đầu vào). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ (mặc định: phạm vi / 200)."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp làm trơn tối đa (mặc định 100)."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dừng lại khi thay đổi lớn nhất trên mỗi ô giảm xuống dưới tỉ lệ này của mật độ trung bình (mặc định 0.001)."
              },
              "non_negative": {
                "label": "Không âm",
                "description": "Kẹp các giá trị âm về 0 và phân phối lại để bảo toàn khối lượng (mặc định true)."
              }
            }
          },
          "radiometric_terrain_flattening": {
            "name": "Làm phẳng địa hình bức xạ",
            "description": "Loại bỏ tín hiệu độ sáng địa hình khỏi tán xạ ngược SAR đã hiệu chuẩn bằng cách thay diện tích tham chiếu trái đất phẳng bằng diện tích được chiếu sáng cục bộ dẫn xuất từ DEM, và đánh dấu hiện tượng chồng lấn (layover) và bóng radar (ArcGIS Apply Radiometric Terrain Flattening). apply_radiometric_calibration của vòng 17 chuẩn hóa bằng góc tới ellipsoid, nên trên địa hình dốc sigma0/gamma0 của nó bám theo địa hình thay vì lớp phủ — thường xuyên hơn 6 dB, vượt quá chênh lệch rừng/đất trống mà nó cần đo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster tán xạ ngược SAR đã hiệu chuẩn (mặc định là beta nought; xem 'input_calibration')."
              },
              "dem": {
                "label": "DEM",
                "description": "Mô hình số độ cao, đồng đăng ký với raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster tán xạ ngược đã làm phẳng địa hình đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_scattering_area": {
                "label": "Đầu ra diện tích tán xạ",
                "description": "Tỉ số đầu ra giữa diện tích được chiếu sáng thực và diện tích trên mặt phẳng. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "output_geometry_mask": {
                "label": "Đầu ra mặt nạ hình học",
                "description": "Mặt nạ đầu ra: 0 bình thường, 1 chồng lấp (layover), 2 bóng radar. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "incidence_angle": {
                "label": "Góc tới",
                "description": "Góc tới trên ellipsoid tính bằng độ: một hằng số, hoặc đường dẫn tới raster theo từng ô. Bắt buộc."
              },
              "look_azimuth": {
                "label": "Phương vị nhìn",
                "description": "Góc phương vị la bàn tính bằng độ từ mục tiêu hướng về cảm biến (mặc định 270, tức là quỹ đạo lên nhìn phải). Quỹ đạo xuống nhìn phải của Sentinel-1 vào khoảng 283."
              },
              "input_calibration": {
                "label": "Hiệu chuẩn đầu vào",
                "description": "Đầu vào hiện đang là gì: 'beta0' (mặc định), 'sigma0_ellipsoid' hoặc 'gamma0_ellipsoid'. Hai giá trị sau được chuyển ngược về beta nought bằng góc trên ellipsoid trước khi làm phẳng."
              },
              "calibration_type": {
                "label": "Kiểu hiệu chuẩn",
                "description": "Quy ước đầu ra: 'gamma0' (mặc định) hoặc 'sigma0'."
              },
              "input_units": {
                "label": "Đơn vị đầu vào",
                "description": "'intensity' (mặc định), 'dn', 'amplitude' hoặc 'db'."
              },
              "output_units": {
                "label": "Đơn vị đầu ra",
                "description": "'linear' (mặc định) hoặc 'db'."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số nhân chuyển đơn vị z của DEM sang đơn vị XY của raster (mặc định 1.0)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của raster đầu vào cần làm phẳng (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "raster_domain": {
            "name": "Miền raster",
            "description": "Truy vết ranh giới vùng dữ liệu hợp lệ của raster thành đa giác (hoặc polyline kín), giữ nguyên các lỗ NoData bên trong (ArcGIS Raster Domain). layer_footprint_raster đi kèm trả về toàn bộ phạm vi chữ nhật, với cảnh xoay, lưu vực đã cắt hay ô ghép ảnh lởm chởm có thể gấp nhiều lần vùng phủ thực; polygonize có thể làm được nhưng chỉ từ mặt nạ hợp lệ 0/1 mà người gọi phải tự dựng trước, vốn là toàn bộ nhiệm vụ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào cần lấy đường bao vùng dữ liệu hợp lệ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác hoặc đường đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "geometry_type": {
                "label": "Kiểu hình học",
                "description": "'polygon' (mặc định) hoặc 'line' để lấy ranh giới dưới dạng các polyline khép kín."
              },
              "ignore_value": {
                "label": "Giá trị bỏ qua",
                "description": "Coi giá trị này cũng là không hợp lệ, bên cạnh giá trị no-data của chính raster (thường là 0 với ảnh có viền đen)."
              },
              "min_value": {
                "label": "Giá trị nhỏ nhất",
                "description": "Coi các giá trị nhỏ hơn giá trị này là không hợp lệ."
              },
              "max_value": {
                "label": "Giá trị lớn nhất",
                "description": "Coi các giá trị lớn hơn giá trị này là không hợp lệ."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Loại bỏ các phần đường bao nhỏ hơn diện tích này tính theo đơn vị bản đồ bình phương, giúp loại bỏ nhiễu đốm quanh rìa lởm chởm."
              },
              "fill_holes": {
                "label": "Lấp lỗ",
                "description": "Bỏ các lỗ bên trong và trả về đường bao đặc (mặc định false)."
              },
              "all_bands": {
                "label": "Tất cả kênh",
                "description": "Yêu cầu một ô phải hợp lệ ở mọi kênh chứ không chỉ kênh được chọn (mặc định false)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần kiểm tra (đánh số từ 1, mặc định 1). Bị bỏ qua khi đặt 'all_bands'."
              }
            }
          },
          "raster_normalize": {
            "name": "Chuẩn hóa raster",
            "description": "Chuẩn hóa min-max một kênh raster về khoảng [0, 1].",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần chuẩn hóa (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "raster_to_h3": {
            "name": "Raster sang ô H3",
            "description": "Gộp giá trị kênh raster vào các ô lưới toàn cầu rời rạc H3 (trung bình, tổng, min, max, số lượng, trung vị).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào (phải ở hệ tọa độ địa lý lon/lat, EPSG:4326)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra; driver được lấy từ phần mở rộng (.geojson, .fgb, .parquet, ...). Nếu bỏ qua, lớp sẽ được lưu trong bộ nhớ."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 (thô nhất) đến 15 (mịn nhất); mặc định 8 (ô ~0.7 km²)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh raster cần tổng hợp (đánh số từ 1, mặc định 1)."
              },
              "aggregate": {
                "label": "Tổng hợp",
                "description": "Cách kết hợp các giá trị điểm ảnh trong mỗi ô: mean, sum, min, max, count hoặc median (mặc định mean)."
              }
            }
          },
          "raster_to_tiles": {
            "name": "Raster sang ô XYZ",
            "description": "Cắt raster thành kim tự tháp ô PNG XYZ Web Mercator (EPSG:3857) cho bản đồ web.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào. Phải mang hệ tọa độ nguồn (EPSG hoặc WKT)."
              },
              "output_dir": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục đầu ra cho cây ô {z}/{x}/{y}.png (ví dụ /work/tiles)."
              },
              "min_zoom": {
                "label": "Mức thu phóng tối thiểu",
                "description": "Mức thu phóng nhỏ nhất (mặc định: một mức thu phóng gốc duy nhất khớp với độ phân giải raster)."
              },
              "max_zoom": {
                "label": "Mức thu phóng tối đa",
                "description": "Mức thu phóng lớn nhất (mặc định: bằng min_zoom)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần kết xuất (đánh số từ 1, mặc định 1)."
              },
              "colormap": {
                "label": "Bảng màu",
                "description": "Bảng màu: viridis (mặc định), magma, turbo, terrain hoặc grayscale."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp lấy mẫu lại cho phép chiếu lại và lấy mẫu: bilinear (mặc định), nearest, cubic."
              },
              "min": {
                "label": "Min",
                "description": "Giá trị ánh xạ tới đầu thấp của bảng màu (mặc định: giá trị nhỏ nhất của kênh)."
              },
              "max": {
                "label": "Max",
                "description": "Giá trị ánh xạ tới đầu cao của bảng màu (mặc định: giá trị lớn nhất của kênh)."
              }
            }
          },
          "raster_to_weighted_points": {
            "name": "Raster thành điểm có trọng số",
            "description": "Phân bố một số điểm cố định trên raster sao cho mật độ của chúng tỉ lệ với giá trị ô, đặt chúng theo mẫu lưới Fibonacci tất định, xoắn ốc, tròn hoặc trọng tâm (ArcGIS Raster To Weighted Points). Không gì trong cả hai sổ đăng ký gán trọng số theo bề mặt: random_sample và random_points_in_polygon là đồng đều, create_spatially_balanced_points cố ý trải đều điểm, còn raster_to_vector_points xuất một điểm mỗi ô không làm thưa hay gán trọng số. Phân bổ dùng phương pháp phần dư lớn nhất và không cần bộ sinh ngẫu nhiên, nên kết quả tái lập được trong WASM.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster bề mặt đầu vào; giá trị ô chính là trọng số."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp điểm đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "max_number_of_points": {
                "label": "Số điểm tối đa",
                "description": "Tổng số điểm cần phân bố (mặc định 1000)."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Cách bố trí trong ô: 'fibonacci_lattice' (mặc định), 'fibonacci_spiral', 'circular' hoặc 'centroid'."
              },
              "min_value": {
                "label": "Giá trị nhỏ nhất",
                "description": "Các ô có trọng số bằng hoặc nhỏ hơn giá trị này sẽ không nhận điểm nào (mặc định 0). Trọng số âm luôn bị loại trừ."
              },
              "max_points_per_cell": {
                "label": "Số điểm tối đa mỗi ô",
                "description": "Giới hạn số điểm mà một ô đơn lẻ có thể nhận, để một ô nổi trội không chiếm hết toàn bộ ngân sách."
              },
              "include_weight": {
                "label": "Bao gồm trọng số",
                "description": "Ghi giá trị ô nguồn lên từng điểm (mặc định true)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cung cấp trọng số (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "read_geoparquet": {
            "name": "Đọc GeoParquet",
            "description": "Đọc tệp GeoParquet và chuyển đổi sang định dạng vector khác (hoặc lưu trong bộ nhớ).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp GeoParquet đầu vào (ví dụ /work/data.parquet)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn; định dạng được lấy từ phần mở rộng của tệp (.geojson, .fgb, .shp, .gpkg, ...). Nếu bỏ qua, lớp được lưu trong bộ nhớ."
              }
            }
          },
          "reclassify_field": {
            "name": "Phân loại lại trường",
            "description": "Phân loại thuộc tính vector số thành các khoảng lớp (giống ArcGIS Reclassify Field): equal_interval, defined_interval, quantile, natural_breaks (Jenks), std_dev hoặc geometric_interval, ghi trường lớp số nguyên cùng tùy chọn trường giá trị ngắt.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector (hoặc bảng) đầu vào có trường số cần phân loại."
              },
              "field": {
                "label": "Trường",
                "description": "Tên của trường số cần phân loại."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra đã thêm trường class. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp phân loại: equal_interval, defined_interval, quantile, natural_breaks, std_dev hoặc geometric_interval (mặc định natural_breaks)."
              },
              "classes": {
                "label": "Lớp",
                "description": "Số lớp cho equal_interval/quantile/natural_breaks/geometric_interval (mặc định 5). Bị bỏ qua với defined_interval và std_dev, vì số lớp của chúng phụ thuộc vào dữ liệu."
              },
              "interval": {
                "label": "Khoảng",
                "description": "Độ rộng lớp cố định cho defined_interval (bắt buộc với phương pháp này)."
              },
              "std_dev_interval": {
                "label": "Khoảng độ lệch chuẩn",
                "description": "Kích thước khoảng cho std_dev, tính theo đơn vị độ lệch chuẩn (mặc định 1.0; ví dụ 0.5 cho các dải nửa sigma)."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Tên của trường số nguyên chứa lớp cần thêm vào (mặc định 'class')."
              },
              "break_field": {
                "label": "Trường ngắt",
                "description": "Nếu được cung cấp, thêm cả một trường số thực chứa giới hạn trên của lớp mà mỗi đối tượng thuộc về."
              }
            }
          },
          "reconstruct_tracks": {
            "name": "Tái dựng quỹ đạo",
            "description": "Biến các điểm có dấu thời gian thành polyline quỹ đạo di chuyển (nhóm theo ID, sắp theo thời gian, tách tại khoảng trống thời gian/khoảng cách) với thống kê theo từng quỹ đạo, và tùy chọn tìm vị trí dừng nơi đối tượng di chuyển tạm dừng — giống ArcGIS Reconstruct Tracks / Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào chứa các quan sát có dấu thời gian."
              },
              "track_field": {
                "label": "Trường quỹ đạo",
                "description": "Trường xác định mỗi vệt di chuyển/đối tượng di chuyển (ví dụ id phương tiện hoặc động vật)."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: số giây dạng số hoặc một dấu thời gian ISO-8601."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Vector đường đầu ra chứa các tuyến (trình điều khiển lấy từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "time_gap": {
                "label": "Khoảng trống thời gian",
                "description": "Bắt đầu một phân đoạn tuyến mới khi khoảng trống thời gian giữa các điểm vượt quá số giây này. Mặc định: không tách theo thời gian."
              },
              "distance_gap": {
                "label": "Khoảng trống khoảng cách",
                "description": "Bắt đầu một phân đoạn tuyến mới khi khoảng cách giữa các điểm vượt quá giá trị này (mét với hệ tọa độ địa lý, đơn vị hệ tọa độ trong các trường hợp khác). Mặc định: không tách theo khoảng cách."
              },
              "dwells": {
                "label": "Điểm dừng",
                "description": "Đường dẫn điểm đầu ra tùy chọn cho các vị trí dừng lưu (nơi đối tượng di chuyển tạm dừng)."
              },
              "dwell_distance": {
                "label": "Khoảng cách dừng",
                "description": "Bán kính tối đa của một lần dừng lưu, theo đơn vị khoảng cách nêu trên. Mặc định 50."
              },
              "dwell_min_duration": {
                "label": "Thời lượng dừng tối thiểu",
                "description": "Thời gian tối thiểu (giây) mà đối tượng di chuyển phải ở trong phạm vi dwell_distance để được tính là một lần dừng lưu. Mặc định 300."
              }
            }
          },
          "reduce_point_density": {
            "name": "Giảm mật độ điểm",
            "description": "Làm thưa lớp điểm vector sao cho không có hai điểm giữ lại nào gần nhau hơn khoảng cách tối thiểu, hoặc giữ một điểm mỗi ô lưới (ArcGIS Reduce Point Density). lidar_thin chỉ dành cho LAS và find_identical chỉ bắt được trùng lặp chính xác, nên các lớp đo sâu, GPS và cảm biến dày đặc không thể được giảm mật độ trước khi nội suy.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm (hoặc đa điểm) đầu vào."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'spacing' (mặc định): tỉa thưa tham lam theo khoảng cách tối thiểu. 'bin': giữ lại một điểm cho mỗi ô lưới."
              },
              "min_distance": {
                "label": "Khoảng cách tối thiểu",
                "description": "Khoảng cách tối thiểu giữa các điểm được giữ lại, theo đơn vị của lớp. Bắt buộc với phương pháp 'spacing'."
              },
              "bin_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô lưới theo đơn vị của lớp. Bắt buộc với phương pháp 'bin'."
              },
              "sort_field": {
                "label": "Trường sắp xếp",
                "description": "Thuộc tính số quyết định điểm nào thắng khi có xung đột. Nếu không có, thứ tự đầu vào sẽ quyết định."
              },
              "sort_order": {
                "label": "Thứ tự sắp xếp",
                "description": "'descending' (mặc định, sort_field lớn nhất thắng) hoặc 'ascending'."
              },
              "keep_field": {
                "label": "Trường giữ lại",
                "description": "Thuộc tính đánh dấu các điểm luôn phải được giữ lại (khác 0 / true / không rỗng). Dùng cho các mối nguy chẳng hạn như số đo độ sâu bãi cạn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đầu ra chứa các điểm được giữ lại. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_removed": {
                "label": "Đầu ra đã loại bỏ",
                "description": "Lớp tùy chọn nhận các điểm bị loại bỏ, để rà soát."
              }
            }
          },
          "regression_kriging": {
            "name": "Kriging hồi quy",
            "description": "Kriging với xu thế ngoài: hồi quy giá trị mẫu theo các raster biến đồng hành phủ kín, khớp variogram cho phần dư, và cộng trường phần dư đã kriging trở lại bề mặt hồi quy (ArcGIS EBK Regression Prediction). Mọi biến thể kriging đã phát hành đều mô hình hóa xu thế theo tọa độ hoặc cần mẫu điểm thứ cấp; không biến thể nào nhận raster biến đồng hành, vốn là điều mà hầu hết địa thống kê ứng dụng thực sự cần.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm mẫu."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Thuộc tính số cần dự báo."
              },
              "covariates": {
                "label": "Biến đồng hành",
                "description": "Các đường dẫn raster biến đồng hành, phân tách bằng dấu phẩy hoặc dấu chấm phẩy, phủ kín lưới dự báo. Raster đầu tiên xác định lưới đầu ra."
              },
              "variogram_model": {
                "label": "Mô hình variogram",
                "description": "Mô hình variogram phần dư: 'spherical' (mặc định), 'exponential' hoặc 'gaussian'."
              },
              "lag_count": {
                "label": "Số trễ",
                "description": "Số khoảng lag dùng để khớp variogram phần dư (mặc định 12)."
              },
              "max_neighbors": {
                "label": "Số lân cận tối đa",
                "description": "Số mẫu gần nhất dùng trong hệ kriging của mỗi ô (mặc định 16)."
              },
              "bilinear": {
                "label": "Song tuyến",
                "description": "Lấy mẫu các biến đồng hành theo phép nội suy song tuyến tại vị trí điểm thay vì theo ô gần nhất (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster dự báo đầu ra. Nếu bỏ qua, lưu trong bộ nhớ."
              },
              "output_error": {
                "label": "Đầu ra sai số",
                "description": "Raster sai số chuẩn dự báo (sai số chuẩn kriging của trường phần dư). Luôn được tạo ra."
              }
            }
          },
          "regularize_adjacent_building_footprint": {
            "name": "Chính quy hóa đường bao nhà liền kề",
            "description": "Chính quy hóa một nhóm đường bao nhà liền kề về một hướng chung để các tường chung giữ song song và thẳng hàng (giống ArcGIS Regularize Adjacent Building Footprint) — phiên bản nhất quán theo nhóm của regularize_building_footprints theo từng nhà, vốn để các đường bao lân cận lệch khỏi hàng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác đường bao công trình đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đa giác đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "group": {
                "label": "Nhóm",
                "description": "Trường tùy chọn dùng để nhóm các đường bao được chuẩn hóa cùng nhau. Nếu không có, các nhóm được hình thành theo tính kề ranh giới."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'right_angles' (mặc định) hoặc 'right_angles_and_diagonals'."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Chiều dài tường nhỏ nhất; các cạnh ngắn hơn bị cắt bỏ như nhiễu (đơn vị hệ tọa độ). Mặc định 1.0."
              },
              "precision": {
                "label": "Độ chính xác",
                "description": "Bước lưới để bắt dính độ lệch tường sao cho các tường song song gần nhau trở nên thẳng hàng (đơn vị hệ tọa độ). Mặc định: tolerance."
              },
              "adjacency_distance": {
                "label": "Khoảng cách liền kề",
                "description": "Khi không cung cấp trường 'group', các đường bao có đỉnh nằm trong khoảng cách này thuộc cùng một nhóm (đơn vị hệ tọa độ). Mặc định: 2 x tolerance."
              }
            }
          },
          "regularize_building_footprints": {
            "name": "Chính quy hóa đường bao nhà",
            "description": "Chuẩn hóa các đa giác đường bao nhà nhiễu thành hình dạng đều đặn (tường vuông góc, chéo, góc bất kỳ hoặc tròn).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào, tự động nhận dạng định dạng (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp chuẩn hóa: 'right_angles' (mặc định), 'right_angles_and_diagonals', 'any_angle' hoặc 'circle'."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Khoảng cách tối đa (theo đơn vị hệ tọa độ) mà đường bao đã chuẩn hóa có thể lệch khỏi ranh giới ban đầu. Mặc định 1.0."
              },
              "diagonal_penalty": {
                "label": "Phạt đường chéo",
                "description": "Với 'right_angles_and_diagonals': mức độ ưu tiên góc vuông so với tường 45 độ (một tường chỉ trở thành đường chéo khi độ lệch góc của nó so với đường chéo, nhân với hệ số này, nhỏ hơn độ lệch so với một trục). Mặc định 1.5; giá trị lớn hơn cho ít đường chéo hơn."
              },
              "min_radius": {
                "label": "Bán kính tối thiểu",
                "description": "Với 'circle': bán kính khớp nhỏ nhất được phép; các kết quả khớp nhỏ hơn sẽ giữ nguyên đường bao ban đầu. Mặc định 0.1."
              },
              "max_radius": {
                "label": "Bán kính tối đa",
                "description": "Với 'circle': bán kính khớp lớn nhất được phép; các kết quả khớp lớn hơn sẽ giữ nguyên đường bao ban đầu. Không giới hạn nếu bỏ qua."
              }
            }
          },
          "remove_overlap_multiple": {
            "name": "Loại bỏ chồng lấn (nhiều lớp)",
            "description": "Phân bổ lại mọi chồng lấn giữa một tập đa giác cho đúng một đối tượng, tạo phân hoạch không khoảng trống, không chồng lấn của phần hợp của chúng (chia theo đường tim hoặc Thiessen), giống ArcGIS Remove Overlap (Multiple).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào (các đối tượng có thể chồng lấn)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'center_line' (gán mỗi điểm chồng lấp cho đối tượng mà nó nằm sâu bên trong nhất, mặc định) hoặc 'thiessen' (tâm đối tượng sinh gần nhất)."
              },
              "grid_resolution": {
                "label": "Độ phân giải lưới",
                "description": "Số ô theo cạnh dài hơn của mỗi vùng chồng lấp khi phân chia (mặc định 40; cao hơn = đường phân chia trơn hơn, chậm hơn)."
              }
            }
          },
          "remove_thermal_noise": {
            "name": "Loại bỏ nhiễu nhiệt",
            "description": "Trừ sàn nhiễu nhiệt cộng tính của máy thu khỏi tán xạ ngược SAR, loại bỏ dải sọc ngang dải quét vốn chiếm ưu thế trên bề mặt tối như mặt nước lặng, đất ngập và bóng radar (ArcGIS Remove Thermal Noise). Không gì trong cả hai sổ đăng ký làm việc này: các bộ lọc lee/frost/kuan/refined-lee đi kèm triệt nhiễu đốm nhân tính, một đại lượng khác. Không có nó, ngưỡng nước Otsu bám vào ranh giới dải quét con thay vì đường bờ, và tỉ số phân cực chéo được tính từ tử số phần lớn là nhiễu.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster tán xạ ngược SAR đã hiệu chuẩn."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đã khử nhiễu đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_snr": {
                "label": "Đầu ra SNR",
                "description": "Tỉ số tín hiệu trên nhiễu đầu ra tính bằng dB. Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "noise_raster": {
                "label": "Raster nhiễu",
                "description": "Raster công suất nhiễu theo từng ô, đồng đăng ký với đầu vào. Được ưu tiên hơn hai dạng còn lại."
              },
              "noise_profile": {
                "label": "Hồ sơ nhiễu",
                "description": "Các công suất nhiễu theo hướng cự ly, phân tách bằng dấu phẩy, được nội suy tuyến tính trên các cột của raster. Ít nhất hai giá trị."
              },
              "noise_constant": {
                "label": "Hằng số nhiễu",
                "description": "Giá trị sigma nought tương đương nhiễu duy nhất được áp dụng cho mọi ô."
              },
              "noise_units": {
                "label": "Đơn vị nhiễu",
                "description": "Đơn vị của các giá trị nhiễu: 'intensity' (mặc định), 'dn', 'amplitude' hoặc 'db'."
              },
              "input_units": {
                "label": "Đơn vị đầu vào",
                "description": "'intensity' (mặc định), 'dn', 'amplitude' hoặc 'db'."
              },
              "output_units": {
                "label": "Đơn vị đầu ra",
                "description": "'linear' (mặc định) hoặc 'db'."
              },
              "floor_fraction": {
                "label": "Phân số sàn",
                "description": "Các ô bị đưa về 0 hoặc nhỏ hơn sẽ được kẹp về tỉ lệ này của công suất nhiễu cục bộ (mặc định 0.01). Giúp phép chuyển đổi sang dB luôn hữu hạn."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần khử nhiễu (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "render_raster_png": {
            "name": "Kết xuất raster sang PNG",
            "description": "Kết xuất một kênh raster thành ảnh PNG qua bảng màu (NoData trở thành trong suốt).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp PNG đầu ra (ví dụ /work/preview.png)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần kết xuất (đánh số từ 1, mặc định 1)."
              },
              "colormap": {
                "label": "Bảng màu",
                "description": "Bảng màu: viridis (mặc định), magma, turbo, terrain hoặc grayscale."
              },
              "min": {
                "label": "Min",
                "description": "Giá trị ánh xạ tới đầu thấp của bảng màu (mặc định: giá trị nhỏ nhất của kênh)."
              },
              "max": {
                "label": "Max",
                "description": "Giá trị ánh xạ tới đầu cao của bảng màu (mặc định: giá trị lớn nhất của kênh)."
              }
            }
          },
          "render_vector_png": {
            "name": "Kết xuất vector sang PNG",
            "description": "Vẽ lớp vector (điểm/đường/đa giác) thành ảnh bản đồ PNG.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào hoặc đối tượng trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp PNG đầu ra (ví dụ /work/map.png)."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng ảnh tính bằng điểm ảnh (mặc định 800)."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao ảnh tính bằng điểm ảnh (mặc định: theo tỉ lệ khung hình của dữ liệu)."
              },
              "fill": {
                "label": "Lấp",
                "description": "Màu tô của đa giác/điểm dạng #rrggbb hoặc #rrggbbaa (mặc định màu xanh lam bán trong suốt)."
              },
              "stroke": {
                "label": "Nét vẽ",
                "description": "Màu viền/đường dạng #rrggbb hoặc #rrggbbaa (mặc định xanh lam đậm)."
              },
              "stroke_width": {
                "label": "Độ rộng nét vẽ",
                "description": "Độ rộng viền/đường tính bằng điểm ảnh (mặc định 1)."
              },
              "background": {
                "label": "Nền",
                "description": "Màu nền dạng #rrggbb[aa] hoặc 'transparent' (mặc định transparent)."
              }
            }
          },
          "repair_geometry": {
            "name": "Sửa hình học",
            "description": "Phát hiện và sửa hình học đa giác không hợp lệ — tự giao (qua tự hợp), chiều quay vòng, đỉnh trùng và phần rỗng/trống — hoặc, với check_only, báo cáo mã lỗi cho từng đối tượng. Giống ArcGIS Repair Geometry / Check Geometry.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào, định dạng được nhận diện tự động (hoặc đối tượng trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "check_only": {
                "label": "Chỉ kiểm tra",
                "description": "Khi true, không sửa đổi hình học: xuất ra đầu vào kèm các cột 'problem_code'/'problem_desc' (giống ArcGIS Check Geometry). Mặc định false."
              }
            }
          },
          "rescale_by_function": {
            "name": "Co giãn theo hàm",
            "description": "Co giãn raster liên tục lên thang thích hợp chung qua hàm truyền (linear, inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear), giống ArcGIS Rescale By Function.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster liên tục đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "function": {
                "label": "Hàm",
                "description": "Hàm chuyển đổi: linear (mặc định), inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear."
              },
              "from_scale": {
                "label": "Từ tỉ lệ",
                "description": "Đầu thấp của thang đầu ra (mặc định 0)."
              },
              "to_scale": {
                "label": "Đến tỉ lệ",
                "description": "Đầu cao của thang đầu ra (mặc định 1)."
              },
              "param1": {
                "label": "Tham số 1",
                "description": "Tham số hình dạng thứ nhất (số mũ cho power; độ dốc cho exponential/logarithmic/logistic/small/large; tâm cho gaussian/near). Giá trị mặc định tùy theo từng hàm."
              },
              "param2": {
                "label": "Tham số 2",
                "description": "Tham số hình dạng thứ hai (độ trải cho gaussian/near). Giá trị mặc định tùy theo từng hàm."
              },
              "low_threshold": {
                "label": "Ngưỡng thấp",
                "description": "Ngưỡng cắt dưới tùy chọn: các giá trị nhỏ hơn sẽ ánh xạ về 'value_below'."
              },
              "high_threshold": {
                "label": "Ngưỡng cao",
                "description": "Ngưỡng cắt trên tùy chọn: các giá trị lớn hơn sẽ ánh xạ về 'value_above'."
              },
              "value_below": {
                "label": "Giá trị dưới",
                "description": "Giá trị đầu ra cho các ô nhỏ hơn 'low_threshold' (mặc định = from_scale)."
              },
              "value_above": {
                "label": "Giá trị trên",
                "description": "Giá trị đầu ra cho các ô lớn hơn 'high_threshold' (mặc định = to_scale)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần tái tỉ lệ (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "resolve_building_conflicts": {
            "name": "Giải quyết xung đột nhà",
            "description": "Dịch chuyển, thu nhỏ hoặc ẩn các đường bao nhà xung đột đồ họa với rào cản đường đã ký hiệu hóa (và với nhau) cho bản đồ tỉ lệ nhỏ, gắn trạng thái cho từng đối tượng, giống ArcGIS Resolve Building Conflicts.",
            "params": {
              "buildings": {
                "label": "Nhà",
                "description": "Lớp đa giác công trình đầu vào."
              },
              "barriers": {
                "label": "Rào cản",
                "description": "Lớp đường rào cản (ví dụ đường giao thông) mà các công trình phải tránh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp công trình đầu ra có trường 'status'. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "barrier_width": {
                "label": "Chiều rộng rào cản",
                "description": "Độ rộng ký hiệu của rào cản tính theo đơn vị bản đồ (đệm một nửa giá trị này về mỗi bên). Mặc định 0."
              },
              "gap": {
                "label": "Khoảng trống",
                "description": "Khoảng cách tối thiểu cần giữ giữa một công trình và một rào cản (đơn vị bản đồ). Mặc định 0."
              },
              "min_size": {
                "label": "Kích thước tối thiểu",
                "description": "Diện tích công trình tối thiểu (đơn vị bản đồ²) trước khi một công trình xung đột bị ẩn thay vì bị thu nhỏ. Mặc định 0 (không bao giờ ẩn)."
              },
              "hide": {
                "label": "Ẩn",
                "description": "Có loại bỏ các công trình bị ẩn khỏi đầu ra hay không (mặc định false: giữ chúng lại với status='hidden')."
              }
            }
          },
          "resolve_road_conflicts": {
            "name": "Giải quyết xung đột đường giao thông",
            "description": "Dịch chuyển các đường giao thông có biểu diễn ký hiệu hóa (theo độ rộng vẽ) chồng lấn hoặc chen chúc ở tỉ lệ mục tiêu: đường cấp thấp hơn bị đẩy ra khỏi đường cấp cao hơn bằng các dịch chuyển đỉnh được làm trơn và cố định điểm đầu cuối, tùy chọn xuất liên kết dịch chuyển, giống ArcGIS Resolve Road Conflicts / Propagate Displacement.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường giao thông đầu vào (LineString / MultiLineString)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đường giao thông đã dịch chuyển đầu ra có các trường 'status' và 'shift'. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "symbol_width": {
                "label": "Chiều rộng ký hiệu",
                "description": "Độ rộng ký hiệu cố định cho mọi tuyến đường, tính theo đơn vị bản đồ (hoặc mm trên trang khi đặt 'scale'). Được dùng khi không có 'symbol_width_field'."
              },
              "symbol_width_field": {
                "label": "Trường chiều rộng ký hiệu",
                "description": "Trường số cung cấp độ rộng ký hiệu của từng tuyến đường (đơn vị bản đồ, hoặc mm trên trang khi đặt 'scale'). Quay về dùng 'symbol_width' khi thiếu giá trị."
              },
              "hierarchy_field": {
                "label": "Trường phân cấp",
                "description": "Trường số xếp hạng mức quan trọng của tuyến đường (giá trị nhỏ hơn = quan trọng hơn, được giữ cố định). Nếu không có: mọi tuyến đường chia sẻ mức dịch chuyển như nhau."
              },
              "scale": {
                "label": "Tỉ lệ",
                "description": "Mẫu số tỉ lệ bản đồ đích. Khi được đặt, độ rộng ký hiệu là milimét trên trang và được chuyển sang đơn vị thực địa (mm * scale / 1000). Mặc định: độ rộng được lấy trực tiếp theo đơn vị bản đồ."
              },
              "gap": {
                "label": "Khoảng trống",
                "description": "Khoảng trống bổ sung cần giữ giữa các dải ký hiệu, tính theo đơn vị bản đồ. Mặc định 0."
              },
              "max_iter": {
                "label": "Số lần lặp tối đa",
                "description": "Số lần lặp dịch chuyển tối đa. Mặc định 50."
              },
              "pin_endpoints": {
                "label": "Cố định điểm đầu cuối",
                "description": "Giữ cố định đỉnh đầu/cuối của mọi tuyến đường để bảo toàn nút giao/tính liên thông (mặc định true)."
              },
              "links": {
                "label": "Liên kết",
                "description": "Đường dẫn đầu ra tùy chọn cho các liên kết dịch chuyển (đường từ→đến) mà rubbersheet_features có thể sử dụng."
              }
            }
          },
          "ripleys_k": {
            "name": "K Ripley",
            "description": "Phân tích mẫu điểm đa khoảng cách (hàm K / L của Ripley) với đường bao ngẫu nhiên không gian hoàn toàn theo Monte-Carlo, để phát hiện phân cụm hoặc phân tán trên một dải khoảng cách.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào (các kiểu hình học khác sẽ dùng điểm đại diện là trung bình các đỉnh)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV tùy chọn cho bảng K/L. Bảng này cũng được trả về trong kết quả của công cụ."
              },
              "distance_bands": {
                "label": "Dải khoảng cách",
                "description": "Số vành đai khoảng cách cần đánh giá (mặc định 10)."
              },
              "max_distance": {
                "label": "Khoảng cách tối đa",
                "description": "Khoảng cách lớn nhất cần đánh giá, theo đơn vị hệ tọa độ. Mặc định: một phần tư cạnh ngắn hơn của hộp bao các điểm."
              },
              "permutations": {
                "label": "Số hoán vị",
                "description": "Số lần mô phỏng CSR cho bao ý nghĩa thống kê (mặc định 99; 0 sẽ tắt bao này)."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số tùy chọn dùng làm trọng số cho từng điểm."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống cho bộ sinh số ngẫu nhiên CSR (mặc định 1), để tạo bao có thể tái lập."
              }
            }
          },
          "rubbersheet_features": {
            "name": "Nắn đối tượng theo điểm khống chế",
            "description": "Nắn lớp vector để căn chỉnh với mục tiêu bằng các liên kết dịch chuyển: biến đổi affine từng khúc theo TIN Delaunay (hoặc IDW) đưa các điểm khống chế đến đúng mục tiêu và làm biến dạng trơn mọi thứ ở giữa — phép biến đổi hợp nhất dữ liệu, giống ArcGIS Rubbersheet Features.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector cần hiệu chỉnh (bất kỳ kiểu hình học nào)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "links": {
                "label": "Liên kết",
                "description": "Lớp đường tùy chọn chứa các liên kết dịch chuyển (mỗi đường: đỉnh đầu = từ, đỉnh cuối = đến)."
              },
              "target": {
                "label": "Mục tiêu",
                "description": "Lớp vector đích tùy chọn; các liên kết được tạo bằng cách khớp điểm đại diện của mỗi đối tượng đầu vào với đối tượng đích gần nhất trong phạm vi search_distance."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tối đa để khớp đầu vào với đích khi tạo liên kết (đơn vị hệ tọa độ). Bắt buộc khi có 'target'."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'linear' (TIN Delaunay affine từng mảnh, mặc định) hoặc 'idw' (trọng số nghịch đảo khoảng cách)."
              },
              "power": {
                "label": "Lũy thừa",
                "description": "Số mũ IDW cho phần suy giảm bên ngoài TIN / cho method=idw. Mặc định 2."
              }
            }
          },
          "sar_coherence": {
            "name": "Độ kết hợp SAR",
            "description": "Tính độ lớn độ kết hợp giao thoa đã chuẩn hóa (và tùy chọn pha giao thoa) giữa hai cảnh thu SAR phức đã đồng đăng ký trên cửa sổ trượt (ArcGIS Compute Coherence / Generate Interferogram). Độ kết hợp đo độ ổn định pha thay vì độ sáng, nên nó phát hiện được biến động mà hiệu cường độ không thấy — sụp đổ, ngập dưới thực vật, thu hoạch, chuyển động băng — trong mọi thời tiết. Không công cụ nào trong cả hai sổ đăng ký dùng pha SAR. Đầu vào là các cặp I/Q hai kênh và phải đã được đồng đăng ký.",
            "params": {
              "reference": {
                "label": "Tham chiếu",
                "description": "Raster SAR phức (hai kênh: I và Q) từ lần thu nhận thứ nhất."
              },
              "secondary": {
                "label": "Thứ cấp",
                "description": "Raster SAR phức đồng đăng ký (hai kênh: I và Q) từ lần thu nhận thứ hai."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster độ kết hợp đầu ra tùy chọn (độ lớn, 0..1). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_phase": {
                "label": "Đầu ra pha",
                "description": "Đường dẫn đầu ra tùy chọn cho raster pha giao thoa tính bằng radian, được gói về khoảng (-pi, pi]."
              },
              "window_size": {
                "label": "Kích thước cửa sổ",
                "description": "Cửa sổ ước lượng dạng 'range,azimuth' tính bằng ô (mặc định '5,5'). Bộ ước lượng lấy tâm nên giá trị chẵn sẽ được làm tròn LÊN kích thước lẻ kế tiếp; cửa sổ hiệu dụng được báo cáo lại qua window_range/window_azimuth."
              },
              "bias_correction": {
                "label": "Hiệu chỉnh thiên lệch",
                "description": "Hiệu chỉnh độ chệch dương của bộ ước lượng độ kết hợp ở các kích thước cửa sổ nhỏ (mặc định true)."
              }
            }
          },
          "semivariogram_sensitivity": {
            "name": "Độ nhạy bán variogram",
            "description": "Làm nhiễu nugget, partial sill và range của variogram đã khớp, kriging lại tại các vị trí đánh giá, và báo cáo dự đoán cùng sai số chuẩn dịch chuyển bao xa — phép kiểm tra tính bền vững chuẩn của mô hình kriging (ArcGIS GA Semivariogram Sensitivity). Bộ kriging đi kèm khá rộng và kriging_cross_validation đo độ khớp, nhưng không gì đo độ nhạy, và hai thứ này độc lập: mô hình kiểm định chéo tốt vẫn có thể rất mong manh với các tham số mà người phân tích chọn.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm chứa các giá trị đo được."
              },
              "field": {
                "label": "Trường",
                "description": "Trường số cần kriging."
              },
              "locations": {
                "label": "Vị trí",
                "description": "Lớp điểm chứa các vị trí dự báo để đánh giá độ nhạy tại đó."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Bảng có một hàng cho mỗi mô hình bị nhiễu loạn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "model": {
                "label": "Mô hình",
                "description": "Mô hình variogram: 'exponential' (mặc định), 'spherical', hoặc 'gaussian'."
              },
              "nugget_span_percent": {
                "label": "Phần trăm khoảng nugget",
                "description": "Nửa biên độ nhiễu loạn của nugget, tính bằng phần trăm (mặc định 10)."
              },
              "partial_sill_span_percent": {
                "label": "Phần trăm khoảng partial sill",
                "description": "Nửa biên độ nhiễu loạn của partial sill, tính bằng phần trăm (mặc định 10)."
              },
              "range_span_percent": {
                "label": "Phần trăm khoảng range",
                "description": "Nửa biên độ nhiễu loạn của range, tính bằng phần trăm (mặc định 10)."
              },
              "nugget_steps": {
                "label": "Số bước nugget",
                "description": "Số mẫu trên dải nugget (mặc định 3; giá trị 1 sẽ cố định tại giá trị đã khớp)."
              },
              "partial_sill_steps": {
                "label": "Số bước partial sill",
                "description": "Số mẫu trên dải partial sill (mặc định 3)."
              },
              "range_steps": {
                "label": "Số bước range",
                "description": "Số mẫu trên dải range (mặc định 3)."
              },
              "lag_count": {
                "label": "Số trễ",
                "description": "Số khoảng lag của variogram thực nghiệm dùng cho phép khớp cơ sở (mặc định 12)."
              }
            }
          },
          "similarity_search": {
            "name": "Tìm kiếm tương đồng",
            "description": "Xếp hạng các đối tượng ứng viên theo độ tương đồng thuộc tính với một hoặc nhiều đối tượng tham chiếu trên các trường số đã chuẩn hóa z (Euclid hoặc cosin), nhiều nhất/ít nhất/cả hai — giống ArcGIS Similarity Search.",
            "params": {
              "reference": {
                "label": "Tham chiếu",
                "description": "Lớp vector tham chiếu (một hoặc nhiều đối tượng xác định hồ sơ cần khớp)."
              },
              "candidates": {
                "label": "Ứng viên",
                "description": "Lớp vector ứng viên cần xếp hạng theo mức tương đồng với lớp tham chiếu."
              },
              "fields": {
                "label": "Trường",
                "description": "(Các) trường số cần so sánh, phân tách bằng dấu phẩy (phải tồn tại trên cả hai lớp)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra (các ứng viên đã xếp hạng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "match_method": {
                "label": "Phương pháp khớp",
                "description": "'euclidean' (khoảng cách chuẩn hóa z; mặc định) hoặc 'cosine' (mức tương đồng góc)."
              },
              "most_or_least": {
                "label": "Nhiều nhất hoặc ít nhất",
                "description": "Giữ lại đầu 'most' tương đồng nhất (mặc định), 'least' ít tương đồng nhất, hoặc 'both' cả hai đầu."
              },
              "num_results": {
                "label": "Số kết quả",
                "description": "Số kết quả cần giữ lại ở mỗi đầu (0 = mọi ứng viên). Mặc định 10."
              }
            }
          },
          "simplify_3d_line": {
            "name": "Đơn giản hóa đường 3D",
            "description": "Giảm số đỉnh của polyline 3D bằng phép tách Douglas-Peucker đo độ lệch trong ba chiều, giữ nguyên trắc dọc, giống ArcGIS Simplify 3D Line.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp polyline đầu vào (đỉnh 3D; đỉnh 2D được xử lý như trường hợp phẳng đặc biệt)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Độ lệch 3D tối đa tính theo đơn vị bản đồ. Các đỉnh cách dây cung gần hơn giá trị này sẽ bị loại bỏ."
              },
              "z_factor": {
                "label": "Hệ số Z",
                "description": "Hệ số nhân áp dụng cho Z trước khi kiểm tra khoảng cách, dành cho dữ liệu có đơn vị Z khác XY (mặc định 1)."
              }
            }
          },
          "simplify_building": {
            "name": "Đơn giản hóa nhà",
            "description": "Giảm đỉnh đường bao nhà trong khi bảo vệ các góc vuông, với ngưỡng loại bỏ diện tích tối thiểu, giống ArcGIS Simplify Building.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đa giác đường bao công trình."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai đơn giản hóa tính theo đơn vị bản đồ: khoảng cách tối đa mà ranh giới có thể dịch chuyển."
              },
              "minimum_area": {
                "label": "Diện tích tối thiểu",
                "description": "Các đường bao có diện tích nhỏ hơn giá trị này sẽ bị loại bỏ (mặc định 0, giữ lại tất cả)."
              },
              "keep_collapsed_points": {
                "label": "Giữ điểm đã thu gọn",
                "description": "Tạo một điểm tại tâm của mỗi đường bao bị loại bỏ bởi minimum_area (mặc định false)."
              },
              "corner_tolerance": {
                "label": "Dung sai góc",
                "description": "Số độ mà trong phạm vi đó một góc trong được coi là góc vuông được bảo vệ (mặc định 20)."
              }
            }
          },
          "simplify_by_circular_arcs": {
            "name": "Đơn giản hóa bằng cung tròn",
            "description": "Đơn giản hóa đường và đa giác bằng cách thay các chuỗi đỉnh bằng đoạn thẳng và cung tròn thực, giữ nguyên các đường cong kỹ thuật thay vì xấp xỉ bằng dây cung (ArcGIS Simplify By Straight Lines And Circular Arcs; chế độ 'tangent' bao phủ Simplify By Tangent Segments). Mọi bộ đơn giản hóa trong cả hai sổ đăng ký đều chỉ loại bỏ đỉnh, buộc phải chọn giữa đường cong nhiều mặt và số đỉnh không chấp nhận được trên vòng cụt, bùng binh và đường bao bể chứa. Đường tròn được khớp bằng bình phương tối thiểu đại số nhưng được chấp nhận theo độ lệch trực giao thực, nên đảm bảo dung sai vẫn giữ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đường hoặc đa giác đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Độ lệch tối đa cho phép của một hình cơ bản đã khớp so với các đỉnh gốc, tính theo đơn vị hệ tọa độ."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'arcs' (mặc định; khớp các đoạn thẳng và cung tròn) hoặc 'tangent' (chỉ các đoạn thẳng, hành vi của Simplify By Tangent Segments)."
              },
              "min_arc_angle": {
                "label": "Góc cung tối thiểu",
                "description": "Các cung chắn góc nhỏ hơn số độ này sẽ được xuất ra dưới dạng đoạn thẳng (mặc định 10)."
              },
              "max_radius": {
                "label": "Bán kính tối đa",
                "description": "Các cung có bán kính lớn hơn giá trị này sẽ được xuất ra dưới dạng đoạn thẳng (mặc định: 1e6)."
              },
              "densify_output": {
                "label": "Đầu ra thêm đỉnh",
                "description": "Làm dày lại các cung đã khớp theo dung sai dây cung khi ghi (mặc định true). Khi false chỉ các điểm đầu cuối của cung được xuất ra, nên riêng phần hình học sẽ mất đường cong — hãy đọc 'output_arcs' để khôi phục."
              },
              "output_arcs": {
                "label": "Đầu ra cung",
                "description": "Đường dẫn tùy chọn cho bảng cung đã khớp (id đối tượng, các điểm đầu cuối, tâm, bán kính, góc quét có dấu tính bằng độ). Nếu bỏ qua, kết quả được lưu trong bộ nhớ (vẫn được trả về)."
              }
            }
          },
          "simplify_by_tangent_segments": {
            "name": "Đơn giản hóa bằng đoạn tiếp tuyến",
            "description": "Thay hình học đường cong đã thêm đỉnh bằng chuỗi đoạn thẳng tối thiểu nằm trong độ lệch vuông góc tối đa, nối các đoạn liên tiếp tại giao điểm của chúng để kết quả vẫn tiếp tuyến với bản gốc (ArcGIS Simplify By Tangent Segments). Bạn đồng hành tuyến tính của simplify_by_circular_arcs: simplify_features (Douglas-Peucker) chỉ giữ được đỉnh hiện có và không đảm bảo tiếp tuyến, để lại gấp khúc trên hình học kỹ thuật, còn smooth_line và smooth_natural_features di chuyển đỉnh thay vì giảm chúng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng đường hoặc đa giác cần đơn giản hóa."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các đối tượng đã đơn giản hóa kèm các trường số lượng đỉnh được bổ sung. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "max_offset": {
                "label": "Độ lệch tối đa",
                "description": "Độ lệch vuông góc tối đa so với hình gốc, tính theo ĐƠN VỊ HỆ TỌA ĐỘ. Trên EPSG:4326 đây là độ, nên công việc ở quy mô mét cần khoảng 2e-5, không phải 2.0. Giới hạn này được áp dụng cho từng đường đã khớp, nên chuỗi được xuất ra có thể vượt quá đôi chút gần chỗ nối nơi các phân đoạn liên tiếp gặp nhau."
              },
              "anchor_points": {
                "label": "Điểm neo",
                "description": "Lớp điểm tùy chọn có các vị trí phải được giữ lại làm đỉnh (anchor_points của ArcGIS). Các đoạn chạy không bao giờ được mở rộng qua một điểm neo."
              },
              "anchor_tolerance": {
                "label": "Dung sai neo",
                "description": "Khoảng cách mà trong đó một đỉnh đầu vào được coi là khớp với một điểm neo (đơn vị hệ tọa độ). Mặc định: max_offset."
              },
              "min_run": {
                "label": "Số chạy tối thiểu",
                "description": "Số đỉnh đầu vào tối thiểu mà một dải phải trải qua trước khi được thu gọn thành một đoạn (mặc định 3). Các dải ngắn hơn được xuất ra không thay đổi."
              },
              "preserve_endpoints": {
                "label": "Giữ điểm đầu cuối",
                "description": "Giữ nguyên chính xác đỉnh đầu và đỉnh cuối của mỗi phần (mặc định true)."
              }
            }
          },
          "simplify_shared_edges": {
            "name": "Đơn giản hóa cạnh chung",
            "description": "Đơn giản hóa lớp phủ đa giác trong khi giữ các ranh giới chung giữa các đa giác liền kề trùng khớp (không khoảng trống hay mảnh vụn), giống ArcGIS Simplify Shared Edges.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào, tự động nhận dạng định dạng (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai đơn giản hóa Douglas-Peucker: khoảng cách lớn nhất (theo đơn vị hệ tọa độ) mà một cung đã đơn giản hóa có thể lệch khỏi cung gốc. Mặc định 1.0."
              },
              "simplify_boundary": {
                "label": "Đơn giản hóa ranh giới",
                "description": "Đồng thời đơn giản hóa các cung trên ranh giới ngoài của lớp phủ (các cạnh chỉ thuộc về một đa giác). Mặc định true; đặt false để giữ nguyên ranh giới ngoài."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Lượng tử hóa các đỉnh về một lưới có kích thước này (đơn vị hệ tọa độ) trước khi xây dựng tô pô, để các đỉnh dùng chung gần trùng nhau được coi là một. Mặc định 0 (dùng tọa độ chính xác)."
              }
            }
          },
          "slice_raster": {
            "name": "Cắt lát raster",
            "description": "Phân loại raster liên tục thành N vùng thứ tự (khoảng đều, diện tích đều, ngắt tự nhiên, khoảng hình học hoặc độ lệch chuẩn).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster liên tục đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster vùng đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần phân loại (đánh số từ 1, mặc định 1)."
              },
              "number_zones": {
                "label": "Số vùng",
                "description": "Số vùng đầu ra (mặc định 10). Bị bỏ qua đối với std_dev."
              },
              "slice_type": {
                "label": "Kiểu lát cắt",
                "description": "Phương pháp phân loại: equal_interval, equal_area, natural_breaks, geometric_interval hoặc std_dev (mặc định equal_interval)."
              },
              "base_output_zone": {
                "label": "Vùng đầu ra cơ sở",
                "description": "Mã vùng gán cho vùng thấp nhất (mặc định 1)."
              },
              "class_interval_size": {
                "label": "Kích thước khoảng lớp",
                "description": "Kích thước khoảng độ lệch chuẩn theo đơn vị σ (mặc định 1.0). Chỉ dùng cho std_dev."
              }
            }
          },
          "smooth_natural_features": {
            "name": "Làm trơn đối tượng tự nhiên",
            "description": "Làm trơn các đa giác răng cưa và đường gấp khúc (đầu ra raster sang vector) thành đường cong trông tự nhiên qua phép cắt góc Chaikin, bảo toàn diện tích đa giác.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào chứa các đối tượng đa giác hoặc đường, định dạng được tự động nhận diện (hoặc tham chiếu trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "segment_length": {
                "label": "Chiều dài đoạn",
                "description": "Tỉ lệ của nhiễu răng cưa cần loại bỏ, theo đơn vị hệ tọa độ — lý tưởng là kích thước ô của raster nguồn. Nếu bỏ qua, giá trị được tự động xác định từ chiều dài cạnh trung vị của lớp."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp làm trơn Chaikin (1-8); càng nhiều lần lặp thì kết quả càng trơn nhưng có nhiều đỉnh hơn. Mặc định 3."
              },
              "preserve_area": {
                "label": "Bảo toàn diện tích",
                "description": "Khôi phục diện tích gốc của mỗi đa giác sau khi làm trơn (việc cắt góc làm co lại các hình lồi). Mặc định true."
              }
            }
          },
          "smooth_shared_edges": {
            "name": "Làm trơn cạnh chung",
            "description": "Làm trơn lớp phủ đa giác trong khi giữ các ranh giới chung giữa các đa giác liền kề trùng khớp (không khoảng trống hay mảnh vụn), giống ArcGIS Smooth Shared Edges.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đa giác đầu vào, tự động nhận dạng định dạng (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "algorithm": {
                "label": "Thuật toán",
                "description": "Thuật toán làm trơn: 'paek' (kernel Gauss, điều khiển bằng dung sai; mặc định) hoặc 'bezier' (cắt góc Chaikin, bỏ qua dung sai)."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Chiều dài làm trơn PAEK theo đơn vị hệ tọa độ: cửa sổ chiều dài cung mà trên đó các đỉnh được lấy trung bình. Giá trị lớn hơn cho đường cong trơn hơn. Mặc định 1.0. Bị bỏ qua bởi thuật toán 'bezier'."
              },
              "smooth_boundary": {
                "label": "Làm trơn ranh giới",
                "description": "Đồng thời làm trơn các cung trên ranh giới ngoài của lớp phủ (các cạnh chỉ thuộc về một đa giác). Mặc định true; đặt false để giữ nguyên ranh giới ngoài."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Lượng tử hóa các đỉnh về một lưới có kích thước này (đơn vị hệ tọa độ) trước khi xây dựng tô pô, để các đỉnh dùng chung gần trùng nhau được coi là một. Mặc định 0 (dùng tọa độ chính xác)."
              }
            }
          },
          "snap_tracks": {
            "name": "Bắt dính quỹ đạo",
            "description": "Khớp bản đồ các quỹ đạo GPS có dấu thời gian lên mạng lưới đường bằng quy hoạch động Viterbi (phát xạ = khoảng cách bắt dính, chuyển tiếp = tính liên tục của tuyến), để quỹ đạo đã khớp đi theo một đường đi hợp lý thay vì zig-zag giữa các phố song song — giống ArcGIS Snap Tracks.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm GPS đầu vào có dấu thời gian."
              },
              "network": {
                "label": "Mạng lưới",
                "description": "Lớp đường của mạng lưới giao thông để khớp vào."
              },
              "track_field": {
                "label": "Trường quỹ đạo",
                "description": "Trường xác định mỗi vệt di chuyển/đối tượng chuyển động."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm (số giây dạng số hoặc ISO-8601)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp điểm đã bắt dính đầu ra (driver lấy theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Bán kính ứng viên: chỉ các cạnh mạng lưới nằm trong khoảng cách này tính từ một điểm định vị mới được xem xét. Bắt buộc."
              },
              "max_candidates": {
                "label": "Số ứng viên tối đa",
                "description": "Số cạnh ứng viên tối đa giữ lại cho mỗi điểm định vị (mặc định 5)."
              }
            }
          },
          "solar_radiation": {
            "name": "Bức xạ mặt trời",
            "description": "Bức xạ mặt trời tới (Wh/m²) trên DEM cho một khoảng ngày: trực tiếp + khuếch tán, có tính đến độ dốc/hướng dốc, che khuất chân trời và vị trí mặt trời theo thời gian — giống ArcGIS Raster Solar Radiation.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster độ cao đầu vào (đã chiếu, tính bằng mét — độ dốc và đường chân trời cần khoảng cách thực)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster tổng bức xạ đầu ra (Wh/m²). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "direct_output": {
                "label": "Đầu ra trực tiếp",
                "description": "Raster đầu ra tùy chọn cho thành phần bức xạ trực tiếp (Wh/m²)."
              },
              "diffuse_output": {
                "label": "Đầu ra khuếch tán",
                "description": "Raster đầu ra tùy chọn cho thành phần bức xạ khuếch tán (Wh/m²)."
              },
              "start_day": {
                "label": "Ngày bắt đầu",
                "description": "Ngày đầu tiên trong năm (1-365) hoặc một ngày dạng ISO (YYYY-MM-DD). Mặc định 1."
              },
              "end_day": {
                "label": "Ngày kết thúc",
                "description": "Ngày cuối cùng trong năm (1-365) hoặc một ngày dạng ISO. Mặc định 365."
              },
              "day_interval": {
                "label": "Khoảng ngày",
                "description": "Lấy mẫu sau mỗi số ngày này trong khoảng (mỗi mẫu đại diện cho số ngày đó). Mặc định: span/12 (khoảng 12 mẫu)."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Số giờ giữa các mẫu vị trí mặt trời trong mỗi ngày. Mặc định 0.5."
              },
              "latitude": {
                "label": "Vĩ độ",
                "description": "Vĩ độ tính bằng độ. Mặc định: suy ra từ tâm của DEM đối với EPSG:4326 / 3857."
              },
              "transmittivity": {
                "label": "Độ truyền qua",
                "description": "Hệ số truyền qua khí quyển (0-1) cho một đơn vị khối khí. Mặc định 0.6."
              },
              "diffuse_proportion": {
                "label": "Tỉ lệ khuếch tán",
                "description": "Tỉ lệ bức xạ ngang ngoài khí quyển được coi là bức xạ khuếch tán từ bầu trời (0-1). Mặc định 0.3."
              },
              "horizon_distance": {
                "label": "Khoảng cách chân trời",
                "description": "Chiều dài tia chân trời lớn nhất tính theo số ô (giới hạn việc tính bóng). Mặc định 100."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh DEM (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "sort_features": {
            "name": "Sắp xếp đối tượng",
            "description": "Sắp xếp lại lớp vector theo các trường thuộc tính hoặc dọc theo đường cong lấp đầy không gian Hilbert (sắp xếp không gian), giống ArcGIS Sort — thứ tự Hilbert gom các bản ghi gần nhau về không gian để cải thiện cắt tỉa GeoParquet và tính cục bộ PMTiles.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra theo thứ tự mới. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'hilbert' (thứ tự theo đường cong không gian; mặc định) hoặc 'attribute' (theo danh sách 'fields')."
              },
              "fields": {
                "label": "Trường",
                "description": "chế độ attribute: các trường phân tách bằng dấu phẩy kèm hướng sắp xếp tùy chọn, ví dụ 'pop:desc,name:asc'."
              },
              "index_field": {
                "label": "Trường chỉ mục",
                "description": "Tên trường tùy chọn để lưu khoảng cách trên đường cong Hilbert của mỗi đối tượng."
              }
            }
          },
          "space_time_kernel_density": {
            "name": "Mật độ kernel không-thời gian",
            "description": "Mật độ kernel không-thời gian của các điểm có dấu thời gian: một kênh mật độ cho mỗi lát thời gian (raster đa kênh) từ kernel tách được không gian (Epanechnikov/bậc bốn) x thời gian (tam giác/Epanechnikov), để mỗi kênh gộp các điểm gần nhau cả về không gian lẫn thời gian, giống ArcGIS Space Time Kernel Density. Bạn đồng hành có nhận biết thời gian của heat_map 2D đi kèm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào. Hệ địa lý (EPSG:4326/kinh-vĩ độ không gắn thẻ) dùng mét theo công thức haversine; hệ đã chiếu dùng đơn vị hệ tọa độ. Các hình học không phải điểm sẽ dùng đỉnh đầu tiên/đại diện của chúng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đa kênh đầu ra (mỗi lát thời gian một kênh; driver lấy theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: một trường số (theo đơn vị riêng của nó) hoặc một chuỗi ngày/ngày-giờ ISO-8601."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Khoảng lát cắt: một số thuần (khi time_field là số) hoặc một khoảng thời gian như '1w', '7d', '12h', '1M'. Mặc định '1w'."
              },
              "temporal_bandwidth": {
                "label": "Băng thông thời gian",
                "description": "Nửa độ rộng của kernel thời gian, dùng cùng đơn vị/cú pháp khoảng thời gian như time_step. Mặc định: bằng time_step."
              },
              "spatial_bandwidth": {
                "label": "Băng thông không gian",
                "description": "Bán kính kernel không gian, tính bằng mét với đầu vào địa lý hoặc theo đơn vị hệ tọa độ với hệ đã chiếu. Mặc định: phạm vi lớn nhất / 20."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ (độ đối với hệ địa lý). Mặc định: phạm vi lớn nhất / 200."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số tùy chọn dùng làm trọng số cho mỗi điểm. Mặc định: mỗi điểm được tính là 1."
              },
              "spatial_kernel": {
                "label": "Kernel không gian",
                "description": "Hình dạng kernel không gian: 'epanechnikov' (mặc định) hoặc 'quartic'."
              },
              "temporal_kernel": {
                "label": "Kernel thời gian",
                "description": "Hình dạng kernel thời gian: 'triangular' (mặc định) hoặc 'epanechnikov'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG để gắn cho raster đầu ra (mặc định: lấy từ lớp đầu vào)."
              }
            }
          },
          "spatial_association_between_zones": {
            "name": "Liên kết không gian giữa các vùng",
            "description": "Đo mức độ tương ứng giữa hai raster vùng phân loại qua V-measure (tính đồng nhất/tính đầy đủ) cùng điểm liên kết theo từng vùng.",
            "params": {
              "zones1": {
                "label": "Vùng 1",
                "description": "Raster vùng phân loại thứ nhất (ví dụ lớp phủ mặt đất). Cùng lưới với zones2."
              },
              "zones2": {
                "label": "Vùng 2",
                "description": "Raster vùng phân loại thứ hai (ví dụ vùng sinh thái) trên cùng lưới với zones1."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Bảng CSV tùy chọn theo từng lớp của zone 1 (class, count, association, lớp zone 2 chiếm ưu thế và tỉ lệ). Các chỉ số tổng thể luôn được trả về trong kết quả."
              },
              "band1": {
                "label": "Kênh 1",
                "description": "Kênh của zones1 cần đọc (đánh số từ 1, mặc định 1)."
              },
              "band2": {
                "label": "Kênh 2",
                "description": "Kênh của zones2 cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "spatial_eigenvector_filtering": {
            "name": "Lọc vector riêng không gian (MESF)",
            "description": "Tạo các vector riêng Moran (bộ lọc không gian) từ ma trận trọng số không gian và nối thêm các thành phần tự tương quan làm trường biến giải thích (MEV1, MEV2, …), giống ArcGIS Decompose Spatial Structure / Create Spatial Component Explanatory Variables. Xây dựng ma trận liên thông đối xứng (liền kề hoặc KNN đối xứng hóa), căn giữa kép (M C M) và phân tích trị riêng bằng bộ giải Jacobi tuần hoàn thuần Rust; giữ các vector riêng có Moran's I ≥ min_autocorrelation, xếp hạng giảm dần và giới hạn ở max_components.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (điểm/đường/đa giác; các phương pháp liền kề yêu cầu đa giác)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra — các đối tượng đầu vào kèm các vector riêng được giữ lại, thêm vào dưới tên MEV1, MEV2, …. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Cách khái niệm hóa quan hệ không gian: 'contiguity_edges' (kiểu rook), 'contiguity_edges_corners' (kiểu queen) hoặc 'knn' (đã đối xứng hóa). Mặc định 'contiguity_edges_corners'."
              },
              "number_of_neighbors": {
                "label": "Số lân cận",
                "description": "Số lân cận gần nhất k cho method = knn. Mặc định 8."
              },
              "min_autocorrelation": {
                "label": "Tự tương quan tối thiểu",
                "description": "Giá trị Moran's I tối thiểu mà một vector riêng phải đạt để được giữ lại (tự tương quan không gian dương). Mặc định 0.25."
              },
              "max_components": {
                "label": "Số thành phần tối đa",
                "description": "Số vector riêng tối đa được xuất ra, lấy theo thứ tự Moran's I giảm dần. Mặc định 15."
              }
            }
          },
          "spatial_outlier_detection": {
            "name": "Phát hiện ngoại lai không gian",
            "description": "Chấm điểm các điểm theo Hệ số ngoại lai cục bộ (LOF) — mức độ cô lập của mỗi điểm so với mật độ cục bộ của k lân cận gần nhất của nó — và đánh dấu các ngoại lai hàng đầu, giống ArcGIS Spatial Outlier Detection. Lấp khoảng trống mà nhãn nhiễu nhị phân của DBSCAN để lại.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các điểm đầu ra kèm điểm số LOF và cờ đánh dấu giá trị ngoại lai. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "neighbors": {
                "label": "Lân cận",
                "description": "Số lân cận gần nhất k (mặc định 20)."
              },
              "percent_outlier": {
                "label": "Phần trăm ngoại lai",
                "description": "Đánh dấu tỉ lệ phần trăm điểm cao nhất theo LOF này là ngoại lai (mặc định 5). Bị bỏ qua nếu 'threshold' được thiết lập."
              },
              "threshold": {
                "label": "Ngưỡng",
                "description": "Ngưỡng cắt LOF tường minh: các điểm có LOF lớn hơn giá trị này là ngoại lai (ghi đè percent_outlier)."
              }
            }
          },
          "spatially_constrained_multivariate_clustering": {
            "name": "Phân cụm đa biến ràng buộc không gian",
            "description": "Phân hoạch các đối tượng thành các vùng liền kề về không gian và đồng nhất về thuộc tính bằng thuật toán SKATER (cây khung tối thiểu trên đồ thị liền kề, được cắt để tối đa hóa phương sai giữa các cụm), với các ràng buộc tùy chọn về kích thước/cân bằng. Mọi cụm đều liên thông theo cấu tạo, khác với multivariate_clustering. Giống ArcGIS Spatially Constrained Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng đa giác (hoặc điểm) đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho các đối tượng đầu vào kèm trường CLUSTER_ID. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "analysis_fields": {
                "label": "Trường phân tích",
                "description": "Tên các trường số dùng để phân cụm, phân tách bằng dấu phẩy hoặc dấu chấm phẩy."
              },
              "number_of_clusters": {
                "label": "Số cụm",
                "description": "Số cụm mục tiêu (mặc định 5)."
              },
              "neighborhood": {
                "label": "Lân cận",
                "description": "'contiguity_edges' (kiểu rook, mặc định), 'contiguity_edges_corners' (kiểu queen) hoặc 'knn'."
              },
              "number_of_neighbors": {
                "label": "Số lân cận",
                "description": "Số lượng lân cận cho vùng lân cận 'knn' (mặc định 8)."
              },
              "constraint": {
                "label": "Ràng buộc",
                "description": "'none' (mặc định), 'feature_count' hoặc 'attribute_value'."
              },
              "constraint_field": {
                "label": "Trường ràng buộc",
                "description": "Trường được tính tổng cho mỗi cụm khi 'constraint' là 'attribute_value'."
              },
              "min_constraint": {
                "label": "Ràng buộc tối thiểu",
                "description": "Số đối tượng hoặc tổng thuộc tính tối thiểu cho mỗi cụm; các lát cắt vi phạm điều kiện này sẽ bị bỏ qua."
              },
              "max_constraint": {
                "label": "Ràng buộc tối đa",
                "description": "Số đối tượng hoặc tổng thuộc tính tối đa cho mỗi cụm; các cụm vượt quá giá trị này sẽ được tách tiếp, kể cả khi vượt quá 'number_of_clusters'."
              },
              "scale_data": {
                "label": "Co giãn dữ liệu",
                "description": "Chuẩn hóa Z các trường phân tích trước khi phân cụm (mặc định true)."
              },
              "output_table": {
                "label": "Bảng đầu ra",
                "description": "Đường dẫn tùy chọn cho bảng tóm tắt theo từng cụm (giá trị trung bình, R bình phương theo từng biến, pseudo-F)."
              }
            }
          },
          "spectral_index": {
            "name": "Chỉ số phổ",
            "description": "Tính một chỉ số phổ (NDVI, NDWI, NDBI, NBR, EVI, SAVI) từ một raster đa kênh.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đa kênh đầu vào."
              },
              "index": {
                "label": "Chỉ số",
                "description": "Chỉ số cần tính: ndvi, ndwi, ndbi, nbr, evi hoặc savi."
              },
              "red": {
                "label": "Đỏ",
                "description": "Số hiệu kênh (đánh số từ 1) của kênh đỏ."
              },
              "nir": {
                "label": "NIR",
                "description": "Số hiệu kênh (đánh số từ 1) của kênh cận hồng ngoại."
              },
              "green": {
                "label": "Lục",
                "description": "Số hiệu kênh (đánh số từ 1) của kênh lục."
              },
              "blue": {
                "label": "Lam",
                "description": "Số hiệu kênh (đánh số từ 1) của kênh lam."
              },
              "swir": {
                "label": "SWIR",
                "description": "Số hiệu kênh (đánh số từ 1) của kênh hồng ngoại sóng ngắn."
              },
              "soil_factor": {
                "label": "Hệ số đất",
                "description": "Hệ số hiệu chỉnh đất L cho SAVI (mặc định 0.5)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "split_by_attributes": {
            "name": "Tách theo thuộc tính",
            "description": "Tách một lớp vector thành một tệp đầu ra cho mỗi giá trị (hoặc tổ hợp giá trị) duy nhất của (các) trường đã cho, giống ArcGIS Split By Attributes.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào."
              },
              "output_dir": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục đầu ra; mỗi nhóm được ghi thành một tệp tại đây (thư mục sẽ được tạo nếu cần)."
              },
              "fields": {
                "label": "Trường",
                "description": "Tên trường dùng để tách, phân tách bằng dấu phẩy (khóa nhiều trường nối các giá trị bằng '__')."
              },
              "format": {
                "label": "Định dạng",
                "description": "Phần mở rộng định dạng đầu ra: geojson (mặc định), fgb, parquet, shp."
              }
            }
          },
          "split_by_features": {
            "name": "Tách theo đối tượng",
            "description": "Cắt một lớp đầu vào theo từng vùng của lớp đa giác phân tách, ghi ra một tệp đầu ra cho mỗi giá trị riêng biệt của trường phân tách. Các vùng có cùng giá trị được hòa tan trước, và các vùng rỗng được bỏ qua. Giống ArcGIS Split (Analysis).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng cần tách (điểm, đường hoặc đa giác)."
              },
              "split_features": {
                "label": "Đối tượng tách",
                "description": "Lớp đa giác có các đối tượng xác định các vùng tách."
              },
              "split_field": {
                "label": "Trường tách",
                "description": "Trường trên 'split_features' cung cấp tên cho mỗi tệp đầu ra."
              },
              "output_dir": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục nhận một tệp đầu ra cho mỗi giá trị tách khác nhau."
              },
              "output_format": {
                "label": "Định dạng đầu ra",
                "description": "Phần mở rộng tệp/driver đầu ra: 'geojson' (mặc định), 'shp', 'gpkg', 'parquet', 'csv'."
              }
            }
          },
          "split_line_at_point": {
            "name": "Tách đường tại điểm",
            "description": "Tách các đối tượng polyline tại vị trí của các đối tượng điểm nằm trong bán kính tìm kiếm, chèn một nút tại mỗi điểm được bắt dính và xuất ra một đối tượng cho mỗi đoạn con thu được (giữ nguyên thuộc tính của đối tượng cha) — giống ArcGIS Split Line At Point.",
            "params": {
              "input_lines": {
                "label": "Đường đầu vào",
                "description": "Lớp vector polyline đầu vào cần tách."
              },
              "point_features": {
                "label": "Đối tượng điểm",
                "description": "Lớp vector điểm (hoặc đa điểm) có các vị trí xác định các nút tách."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Khoảng cách lớn nhất, theo đơn vị hệ tọa độ của các đường, giữa một điểm và một đường để điểm đó tách được đường. Bắt buộc, giá trị dương."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đường đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "split_raster": {
            "name": "Tách raster",
            "description": "Tách một raster thành các ô độc lập theo số lượng ô, kích thước điểm ảnh cố định, hoặc theo các đối tượng đa giác, với tùy chọn chồng lấp điểm ảnh — giống ArcGIS Split Raster. Mỗi ô giữ nguyên hệ tọa độ và tham chiếu địa lý.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào."
              },
              "output_dir": {
                "label": "Thư mục đầu ra",
                "description": "Thư mục đầu ra cho các tệp ô (thư mục sẽ được tạo nếu cần)."
              },
              "base_name": {
                "label": "Tên cơ sở",
                "description": "Tiền tố tên tệp đầu ra (mặc định 'tile')."
              },
              "split_method": {
                "label": "Phương pháp tách",
                "description": "'count' (lưới N×M, mặc định), 'size' (ô có số điểm ảnh cố định) hoặc 'polygons' (mỗi đối tượng một lần cắt)."
              },
              "num_x": {
                "label": "Số ô X",
                "description": "Số cột ô cho chế độ 'count' (mặc định 2)."
              },
              "num_y": {
                "label": "Số ô Y",
                "description": "Số hàng ô cho chế độ 'count' (mặc định 2)."
              },
              "tile_size_x": {
                "label": "Kích thước ô X",
                "description": "Chiều rộng ô tính bằng điểm ảnh cho chế độ 'size' (mặc định 256)."
              },
              "tile_size_y": {
                "label": "Kích thước ô Y",
                "description": "Chiều cao ô tính bằng điểm ảnh cho chế độ 'size' (mặc định 256)."
              },
              "polygons": {
                "label": "Đa giác",
                "description": "Lớp vector đa giác cho chế độ 'polygons' (mỗi đối tượng một ô)."
              },
              "overlap": {
                "label": "Chồng lấn",
                "description": "Độ chồng lấn tính bằng điểm ảnh được đệm thêm vào mọi phía của mỗi ô (mặc định 0)."
              },
              "format": {
                "label": "Định dạng",
                "description": "Phần mở rộng tệp/driver đầu ra: 'tif' (mặc định) hoặc 'png'."
              }
            }
          },
          "stack_profile": {
            "name": "Hồ sơ chồng lớp",
            "description": "Lấy mẫu nhiều raster bề mặt dọc theo cùng một polyline và xuất ra một bảng dạng dài (LINE_ID, FIRST_DIST, FIRST_Z, SRC_ID, SRC_NAME) để có thể so sánh các bề mặt theo mặt cắt ngang trên một trục khoảng cách chung. Giống ArcGIS Stack Profile.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng đường đầu vào cần lập mặt cắt."
              },
              "surfaces": {
                "label": "Bề mặt",
                "description": "Danh sách đường dẫn raster bề mặt, phân tách bằng dấu phẩy hoặc dấu chấm phẩy, được lấy mẫu theo thứ tự đã cho."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng mặt cắt đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "sample_distance": {
                "label": "Khoảng cách lấy mẫu",
                "description": "Khoảng cách giữa các trạm theo đơn vị bản đồ (mặc định: kích thước ô nhỏ nhất trong các đầu vào)."
              },
              "line_id_field": {
                "label": "Trường ID đường",
                "description": "Trường tùy chọn cung cấp LINE_ID; mặc định dùng chỉ số của đối tượng."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Lấy mẫu bề mặt: 'bilinear' (mặc định) hoặc 'nearest'."
              }
            }
          },
          "storage_capacity": {
            "name": "Dung tích trữ nước",
            "description": "Quét các mực nước mặt trên một DEM và báo cáo diện tích bề mặt ngập cùng thể tích trữ nước ở mỗi mực (đường cong mực nước - diện tích - thể tích) theo từng vùng phân tích hoặc trên toàn bộ DEM, giống ArcGIS Storage Capacity.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM đầu vào (độ cao)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra (zone_id, level, elevation, area, volume)."
              },
              "zones": {
                "label": "Vùng",
                "description": "Lớp đa giác tùy chọn; mỗi đa giác một đường cong mực nước - diện tích - thể tích. Nếu bỏ qua, toàn bộ DEM được coi là một vùng."
              },
              "zone_id_field": {
                "label": "Trường ID vùng",
                "description": "Trường đặt tên cho mỗi vùng trong kết quả đầu ra (mặc định: chỉ số của đối tượng)."
              },
              "num_levels": {
                "label": "Số mức",
                "description": "Số bước độ cao giữa giá trị nhỏ nhất và lớn nhất của mỗi vùng (mặc định 20). Bị bỏ qua nếu có cung cấp 'increment'."
              },
              "increment": {
                "label": "Tăng",
                "description": "Bước độ cao cố định giữa các mực (đơn vị bản đồ). Ghi đè 'num_levels'."
              },
              "min_elevation": {
                "label": "Độ cao tối thiểu",
                "description": "Giới hạn độ cao dưới tùy chọn cho quá trình quét (mặc định: địa hình thấp nhất của mỗi vùng)."
              },
              "max_elevation": {
                "label": "Độ cao tối đa",
                "description": "Giới hạn độ cao trên tùy chọn cho quá trình quét (mặc định: địa hình cao nhất của mỗi vùng)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh DEM (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "strip_map_index_features": {
            "name": "Đối tượng chỉ mục bản đồ dải",
            "description": "Đi dọc mỗi đường đầu vào và xuất ra một chuỗi được đánh số các hình chữ nhật trang xoay, chồng lấp, định hướng theo phương vị cục bộ của tuyến, dùng cho atlas bản đồ dải dọc theo đường cao tốc, sông, đường ống hoặc đường mòn — giống ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường đầu vào cần lập chỉ mục."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra chứa các trang chỉ mục (driver lấy theo phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "page_length": {
                "label": "Chiều dài trang",
                "description": "Chiều dài mỗi trang dọc theo tuyến, theo đơn vị hệ tọa độ. Bắt buộc."
              },
              "page_width": {
                "label": "Chiều rộng trang",
                "description": "Chiều rộng mỗi trang theo phương ngang tuyến, theo đơn vị hệ tọa độ. Bắt buộc."
              },
              "overlap": {
                "label": "Chồng lấn",
                "description": "Tỉ lệ [0, 1) của page_length mà các trang liên tiếp chồng lấn dọc theo tuyến. Mặc định 0."
              },
              "orientation": {
                "label": "Hướng",
                "description": "along_line (mặc định): xoay mỗi trang theo phương vị dây cung cục bộ. horizontal/vertical: bắt góc xoay về trục đông-tây/bắc-nam gần nhất."
              },
              "start_page": {
                "label": "Trang bắt đầu",
                "description": "Số trang đầu tiên được gán. Mặc định 1."
              }
            }
          },
          "subdivide_polygon": {
            "name": "Chia nhỏ đa giác",
            "description": "Chia mỗi đa giác thành các phần có diện tích bằng nhau (một số phần định trước, hoặc một diện tích mục tiêu cho mỗi phần) bằng các nhát cắt thẳng song song ở một góc cho trước, giống ArcGIS Subdivide Polygon.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đa giác đầu vào (dùng hệ tọa độ đã chiếu/bảo toàn diện tích để có diện tích bằng nhau chính xác)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đa giác đầu ra (trình điều khiển suy ra từ phần mở rộng). Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'equal_parts' (num_parts dải có diện tích bằng nhau, mặc định) hoặc 'equal_areas' (các dải có diện tích target_area, phần dư nằm ở dải cuối)."
              },
              "num_parts": {
                "label": "Số phần",
                "description": "Số phần có diện tích bằng nhau (cho method=equal_parts). Mặc định 2."
              },
              "target_area": {
                "label": "Diện tích mục tiêu",
                "description": "Diện tích mỗi phần theo đơn vị hệ tọa độ (bắt buộc với method=equal_areas)."
              },
              "angle": {
                "label": "Góc",
                "description": "Hướng cắt tính bằng độ (0 = các lát cắt thẳng đứng / các dải nằm ngang). Mặc định 0."
              }
            }
          },
          "subset_features": {
            "name": "Tập con đối tượng",
            "description": "Tách ngẫu nhiên một lớp đối tượng thành tập con huấn luyện và phần bù của nó (tập con kiểm tra), theo phần trăm hoặc số lượng tuyệt đối, bằng bộ sinh số ngẫu nhiên tất định có hạt giống. Tùy chọn phân tầng theo một trường nhóm. Giống ArcGIS Subset Features.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào (kiểu hình học bất kỳ)."
              },
              "output_training": {
                "label": "Đầu ra huấn luyện",
                "description": "Đường dẫn đầu ra cho tập con huấn luyện. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_test": {
                "label": "Đầu ra kiểm tra",
                "description": "Đường dẫn đầu ra tùy chọn cho tập con bù (tập kiểm tra). Nếu bỏ qua, tập con kiểm tra được lưu trong bộ nhớ."
              },
              "size": {
                "label": "Kích thước",
                "description": "Kích thước tập con huấn luyện: một tỉ lệ phần trăm (0-100) hoặc số đối tượng tuyệt đối, tùy theo 'size_method' (mặc định 50)."
              },
              "size_method": {
                "label": "Phương pháp kích thước",
                "description": "'percentage' (mặc định) hoặc 'absolute'."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống bộ sinh số ngẫu nhiên để việc chia tách có thể tái lập (mặc định là một hằng số cố định)."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Trường tùy chọn để phân tầng: mỗi nhóm đóng góp phần tương ứng theo tỉ lệ của mình vào tập con huấn luyện."
              }
            }
          },
          "subset_multidimensional_raster": {
            "name": "Tập con raster đa chiều",
            "description": "Thu hẹp một khối raster đa chiều xuống một tập con các lát cắt của nó, theo khoảng tọa độ chiều, chỉ số tường minh, hoặc theo bước nhảy (ArcGIS Subset Multidimensional Raster / Select By Dimension). Các công cụ khối của vòng 18 đều tiêu thụ toàn bộ khối, nên không có cách nào phân tích một cửa sổ nghiên cứu mà không tạo lại đầu vào bên ngoài danh mục.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đa chiều, hoặc một danh sách phân tách bằng dấu phẩy các raster đã đồng đăng ký mà các kênh của chúng được nối lại thành một khối."
              },
              "dimension_values": {
                "label": "Giá trị chiều",
                "description": "Tọa độ tùy chọn tăng nghiêm ngặt cho từng lát (ngày, độ sâu, bước sóng), mỗi lát một giá trị. Bắt buộc đối với 'dimension_range'."
              },
              "dimension": {
                "label": "Chiều",
                "description": "Tên của chiều, chỉ dùng khi báo cáo (mặc định 'slice')."
              },
              "dimension_range": {
                "label": "Khoảng chiều",
                "description": "Khoảng tọa độ bao gồm cả hai đầu, dạng 'min,max'. Yêu cầu 'dimension_values'. Loại trừ lẫn nhau với 'indices'."
              },
              "indices": {
                "label": "Chỉ số",
                "description": "Chỉ số lát tường minh (đánh số từ 0), ví dụ '0,2,5'. Loại trừ lẫn nhau với 'dimension_range'."
              },
              "step": {
                "label": "Bước",
                "description": "Giữ lại mỗi lát thứ N sau khi áp dụng các bộ lọc khác (mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster khối đầu ra, mỗi lát được giữ lại là một kênh. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "summarize_categorical_raster": {
            "name": "Tóm tắt raster phân loại",
            "description": "Lập bảng số ô, diện tích và tỉ lệ của mọi lớp trong một raster phân loại, mỗi lát cắt một hàng đối với chồng ảnh đa kênh/đa chiều, tùy chọn giới hạn trong một khu vực quan tâm (ArcGIS Summarize Categorical Raster). Công cụ raster_area đi kèm ghi tổng số của lớp trở lại vào các ô raster thay vì một bảng và chỉ hỗ trợ một kênh, nên không thể tạo ra chuỗi diện tích lớp theo từng thời điểm mà phân tích biến động lớp phủ cần. Diện tích ô được tích phân theo từng hàng đối với raster địa lý.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster phân loại đầu vào (một kênh hoặc đa kênh)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "aoi": {
                "label": "AOI",
                "description": "Lớp đa giác tùy chọn giới hạn phần tóm tắt trong một khu vực quan tâm."
              },
              "aoi_id_field": {
                "label": "Trường ID AOI",
                "description": "Trường trên 'aoi' dùng để nhận diện từng khu vực; khi được cung cấp, phần tóm tắt được tạo cho từng đối tượng AOI."
              },
              "area_units": {
                "label": "Đơn vị diện tích",
                "description": "Đơn vị diện tích: map_units (mặc định), hectares hoặc square_kilometers."
              },
              "include_nodata": {
                "label": "Bao gồm NoData",
                "description": "Nếu true, no-data được báo cáo thành một hàng lớp riêng (mặc định false)."
              },
              "bands": {
                "label": "Kênh",
                "description": "Danh sách kênh cần tóm tắt, đánh số từ 1 và phân tách bằng dấu phẩy (mặc định: tất cả các kênh)."
              }
            }
          },
          "summarize_nearby": {
            "name": "Tóm tắt lân cận",
            "description": "Tạo vùng đệm cho các đối tượng đầu vào ở một hoặc nhiều khoảng cách đường thẳng và tóm tắt một lớp thứ hai bên trong mỗi vùng đệm: số đối tượng, diện tích giao (đa giác), chiều dài đã cắt (đường), và tổng/trung bình có trọng số theo độ đo của các trường số.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đầu vào có các đối tượng được tạo vùng đệm (điểm, đường hoặc đa giác), định dạng được tự động nhận diện (hoặc tham chiếu trong bộ nhớ)."
              },
              "summary_features": {
                "label": "Đối tượng tóm tắt",
                "description": "Lớp vector cần tóm tắt trong mỗi vùng đệm (đa giác được tóm tắt theo diện tích giao nhau, đường theo chiều dài đã cắt, hoặc điểm theo số lượng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "distances": {
                "label": "Khoảng cách",
                "description": "Danh sách khoảng cách vùng đệm theo đơn vị hệ tọa độ, phân tách bằng dấu phẩy, ví dụ \"1000,2000,5000\". Được sắp xếp tăng dần; các giá trị trùng lặp và không dương sẽ bị loại bỏ."
              },
              "sum_fields": {
                "label": "Trường tổng",
                "description": "Các trường số tùy chọn trong lớp tóm tắt cần gộp, phân tách bằng dấu phẩy. Mỗi trường tạo ra một cột sum_<field> và một cột mean_<field> (trọng số theo diện tích với đa giác, theo chiều dài với đường, không trọng số với điểm)."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường tùy chọn trong lớp đầu vào dùng để nhận diện từng đối tượng nguồn trong kết quả đầu ra. Mặc định dùng chỉ số của đối tượng đầu vào."
              }
            }
          },
          "summarize_percent_change": {
            "name": "Tóm tắt phần trăm thay đổi",
            "description": "Đếm các sự cố từ kỳ hiện tại và kỳ trước bên trong mỗi đối tượng vùng và báo cáo chênh lệch số lượng, phần trăm thay đổi và một lớp biến động. Phần trăm thay đổi là rỗng (lớp 'new') khi số lượng kỳ trước bằng không. Giống ArcGIS Summarize Percent Change.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Các đối tượng vùng (khu tuần tra, đơn vị điều tra, ô lưới) để tổng hợp vào."
              },
              "current_features": {
                "label": "Đối tượng hiện tại",
                "description": "Các đối tượng điểm sự vụ của kỳ hiện tại."
              },
              "previous_features": {
                "label": "Đối tượng trước",
                "description": "Các đối tượng điểm sự vụ của kỳ trước."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra cho các vùng kèm các trường thay đổi. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "search_radius": {
                "label": "Bán kính tìm kiếm",
                "description": "Khoảng cách tùy chọn theo đơn vị bản đồ; các sự vụ nằm trong khoảng cách này tính từ một vùng cũng được tính, không chỉ những sự vụ nằm bên trong vùng. Lưu ý rằng bán kính dương làm cho phạm vi thu nhận của các vùng chồng lấn nhau, nên một sự vụ có thể được nhiều vùng cùng tính (tổng số của toàn bộ tập dữ liệu được báo cáo vẫn loại bỏ trùng lặp)."
              }
            }
          },
          "summarize_within": {
            "name": "Tóm tắt bên trong",
            "description": "Tóm tắt các thuộc tính của một lớp bên trong một lớp đa giác có sẵn, lấy trọng số cho các đối tượng chồng lấp một phần theo diện tích hoặc chiều dài giao nhau, giống ArcGIS Summarize Within.",
            "params": {
              "polygons": {
                "label": "Đa giác",
                "description": "Lớp đa giác để tổng hợp vào. Các đối tượng và thuộc tính của lớp này được giữ nguyên."
              },
              "input": {
                "label": "Đầu vào",
                "description": "Lớp được tóm tắt (điểm, đường hoặc đa giác)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đa giác đầu ra tùy chọn. Nếu bỏ trống, kết quả được lưu trong bộ nhớ."
              },
              "fields": {
                "label": "Trường",
                "description": "Các cặp 'field:statistic' phân tách bằng dấu phẩy, ví dụ 'pop:sum,income:mean'. Các thống kê: sum, mean, min, max, stddev, count."
              },
              "keep_all": {
                "label": "Giữ tất cả",
                "description": "Giữ lại các đa giác không giao với đối tượng nào (mặc định true). Khi đặt false, các đa giác rỗng sẽ bị loại bỏ."
              },
              "shape_sum": {
                "label": "Tổng hình dạng",
                "description": "Bổ sung tổng số lượng / chiều dài / diện tích của hình học đầu vào giao nhau (mặc định true)."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Trường tùy chọn trên lớp được tóm tắt; tạo ra một hàng tóm tắt nhóm cho mỗi giá trị khác nhau."
              }
            }
          },
          "summary_statistics": {
            "name": "Thống kê tóm tắt",
            "description": "GROUP BY theo kiểu SQL trên một hoặc nhiều trường phân nhóm: với mỗi tổ hợp trường phân nhóm duy nhất, tính một danh sách các phép tổng hợp (trường, thống kê) (số lượng/tổng/trung bình/nhỏ nhất/lớn nhất/độ lệch chuẩn/đầu tiên/cuối cùng) cùng số bản ghi của nhóm. Đầu ra là một bảng thuộc tính thuần túy. Không có trường phân nhóm sẽ cho một hàng tổng chung duy nhất (giống Summary Statistics của ArcGIS; chỉ đếm sẽ tái tạo Frequency).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector hoặc bảng thuộc tính đầu vào cần gộp."
              },
              "statistics": {
                "label": "Thống kê",
                "description": "Danh sách các cặp 'field statistic' phân tách bằng dấu chấm phẩy hoặc dấu phẩy (cũng chấp nhận 'field:statistic'), ví dụ 'population sum; population mean; elev max'. Các thống kê: count, sum, mean, min, max, std, first, last."
              },
              "case_fields": {
                "label": "Trường trường hợp",
                "description": "Tên trường phân nhóm (GROUP BY) tùy chọn, phân tách bằng dấu phẩy hoặc dấu chấm phẩy. Nếu bỏ qua, một hàng tóm tắt duy nhất được tạo cho toàn bộ bảng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra tùy chọn (driver lấy theo phần mở rộng; GeoParquet hoặc CSV). Nếu bỏ qua, bảng được lưu trong bộ nhớ. Các cột: các trường phân nhóm, một cột 'count' số bản ghi, rồi một cột '<field>_<statistic>' cho mỗi cặp được yêu cầu."
              }
            }
          },
          "sun_shadow_volume": {
            "name": "Khối bóng mặt trời",
            "description": "Đùn các khối 3D dọc theo vector mặt trời xuống mặt đất để tạo ra các khối bóng đổ khép kín cho một ngày và giờ cho trước (ArcGIS Sun Shadow Volume). shadow_image, shadow_animation và time_in_daylight đều làm việc trên DSM dạng raster và xuất ra raster, còn solar_radiation tính bức xạ — không công cụ nào tạo ra hình học bóng đổ, nên các câu hỏi như 'cửa sổ này có bị che bóng không' hay 'bao nhiêu phần không gian trên thửa đất này nằm trong bóng' đều không trả lời được. Đầu ra kết hợp được với inside_3d, intersect_3d và union_3d.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Khối nhà 3D hoặc đường bao được đùn lên (MultiPolygon dạng lưới tam giác có tọa độ Z)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Các khối thể tích bóng đổ khép kín. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "datetime": {
                "label": "Ngày giờ",
                "description": "Ngày giờ địa phương của vị trí mặt trời, dạng 'YYYY-MM-DDTHH:MM' hoặc 'YYYY-MM-DD HH:MM'. Giá trị được lấy từ tham số, không bao giờ lấy từ đồng hồ hệ thống, nhờ đó kết quả có thể tái lập."
              },
              "latitude": {
                "label": "Vĩ độ",
                "description": "Vĩ độ tính bằng độ, dùng cho hình học mặt trời. Bắt buộc: không thể suy ra nếu không có bộ máy phép chiếu."
              },
              "utc_offset": {
                "label": "Chênh lệch UTC",
                "description": "Số giờ chênh lệch so với UTC của thời gian địa phương được cung cấp (mặc định 0)."
              },
              "adjusted_for_dst": {
                "label": "Đã điều chỉnh giờ mùa hè",
                "description": "Coi thời gian được cung cấp là đã điều chỉnh theo giờ mùa hè, trừ đi một giờ trước khi tính toán mặt trời (mặc định false), giống ArcGIS."
              },
              "ground_elevation": {
                "label": "Độ cao mặt đất",
                "description": "Giá trị Z mặt đất không đổi mà bóng được chiếu lên. Mặc định: giá trị Z nhỏ nhất của chính mỗi đối tượng."
              },
              "max_length": {
                "label": "Chiều dài tối đa",
                "description": "Giới hạn khoảng cách quét theo đơn vị hệ tọa độ, để mặt trời ở vị trí thấp không tạo ra lăng trụ dài hàng kilômét. Mặc định: không giới hạn."
              }
            }
          },
          "surface_difference": {
            "name": "Hiệu bề mặt",
            "description": "Phân định nơi một bề mặt nằm trên, nằm dưới hay ngang bằng với một bề mặt khác dưới dạng các đa giác, mỗi đa giác mang lớp, diện tích, thể tích và thống kê chênh lệch của nó (ArcGIS Surface Difference). cut_fill đo cùng các đại lượng đó nhưng chỉ xuất ra một raster nhãn vùng và một tệp CSV, nên các vùng của nó không có hình học để chồng lớp, cắt hay ghép; surface_volume và polygon_volume đo so với một mặt phẳng hoặc bên trong các đa giác bạn đã có thay vì phát hiện ra chúng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster bề mặt cần phân loại."
              },
              "reference": {
                "label": "Tham chiếu",
                "description": "Bề mặt tham chiếu: đường dẫn tới một raster đã đồng đăng ký, hoặc một giá trị độ cao không đổi để so sánh với một mốc phẳng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác đầu ra của các vùng đã phân loại. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "output_raster": {
                "label": "Raster đầu ra",
                "description": "Raster hiệu có dấu đầu ra (đầu vào trừ đi tham chiếu). Luôn được tạo ra; lưu trong bộ nhớ khi không cung cấp đường dẫn."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Các chênh lệch nằm trong khoảng này quanh giá trị 0 được coi là trùng nhau (mặc định 0.0)."
              },
              "min_area": {
                "label": "Diện tích tối thiểu",
                "description": "Loại bỏ các vùng có diện tích nhỏ hơn giá trị này, tính theo đơn vị bản đồ bình phương."
              },
              "include_coincident": {
                "label": "Bao gồm điểm trùng vị trí",
                "description": "Xuất ra cả các đa giác cho lớp không thay đổi (mặc định false). Mặc định tắt vì trên hầu hết các cảnh, đó chỉ là một đa giác nền khổng lồ."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh của bề mặt đầu vào (đánh số từ 1, mặc định 1)."
              },
              "reference_band": {
                "label": "Kênh tham chiếu",
                "description": "Kênh của bề mặt tham chiếu (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "surface_parameters": {
            "name": "Tham số bề mặt",
            "description": "Độ dốc, hướng dốc hoặc độ cong (mean/profile/tangential/plan/gaussian/casorati/contour_geodesic_torsion) từ một DEM thông qua khớp bề mặt bình phương tối thiểu bậc hai/song bậc hai cục bộ trên một khoảng cách lân cận được chọn, giống ArcGIS Surface Parameters — phiên bản thích ứng theo tỉ lệ của các công cụ địa hình 3×3 cố định đi kèm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster độ cao đầu vào (DEM)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "parameter": {
                "label": "Tham số",
                "description": "Tham số cần tính: slope (mặc định), aspect, mean_curvature, profile_curvature, tangential_curvature, plan_curvature, gaussian_curvature, casorati_curvature, contour_geodesic_torsion."
              },
              "fit": {
                "label": "Khớp",
                "description": "Mô hình bề mặt: 'quadratic' (6 số hạng, mặc định) hoặc 'biquadratic' (9 số hạng)."
              },
              "neighborhood_distance": {
                "label": "Khoảng cách lân cận",
                "description": "Bán kính lân cận theo đơn vị bản đồ (mặc định = một kích thước ô, tức là cửa sổ 3×3)."
              },
              "neighborhood_type": {
                "label": "Kiểu lân cận",
                "description": "'fixed' (mặc định) dùng toàn bộ bán kính ở mọi nơi; 'adaptive' thu nhỏ cửa sổ xuống 1 ô khi nằm cạnh vùng thiếu dữ liệu/biên."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "surface_volume": {
            "name": "Thể tích bề mặt",
            "description": "Tích phân một bề mặt raster so với một mặt phẳng tham chiếu nằm ngang, báo cáo diện tích 2D, diện tích bề mặt 3D và thể tích cho phần nằm trên và/hoặc dưới mặt phẳng (giống Surface Volume của ArcGIS). Dùng cho phân tích đào/đắp và dung tích hồ chứa.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster bề mặt độ cao đầu vào."
              },
              "reference_plane": {
                "label": "Mặt phẳng tham chiếu",
                "description": "Độ cao của mặt phẳng tham chiếu dùng để tích phân (mặc định 0)."
              },
              "direction": {
                "label": "Hướng",
                "description": "Phía nào của mặt phẳng được tích phân: 'above', 'below' hoặc 'both' (mặc định 'above')."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần đọc (đánh số từ 1, mặc định 1)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra tùy chọn cho bảng kết quả. Nếu bỏ qua, kết quả chỉ được trả về trong kết quả chạy."
              }
            }
          },
          "table_to_geometry": {
            "name": "Bảng thành hình học",
            "description": "Xây dựng các đối tượng đường hoặc elip từ các trường dạng bảng: cặp tọa độ đầu/cuối (XY To Line), gốc + phương vị + khoảng cách (Bearing Distance To Line), hoặc tâm + trục lớn/trục nhỏ + góc phương vị (Table To Ellipse) — với cách dựng đường phẳng, trắc địa và đường loxodrome.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Bảng thuộc tính hoặc lớp vector điểm đầu vào."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'xy_to_line', 'bearing_distance' hoặc 'ellipse'."
              },
              "line_type": {
                "label": "Kiểu đường",
                "description": "'geodesic' (mặc định, đường ngắn nhất trên ellipsoid WGS84), 'rhumb' (phương vị không đổi) hoặc 'planar' (các đoạn thẳng Descartes theo đơn vị của chính dữ liệu đầu vào)."
              },
              "vertex_spacing": {
                "label": "Khoảng cách đỉnh",
                "description": "Khoảng cách làm dày điểm cho các đường cong (geodesic/rhumb) và khoảng cách lấy mẫu đường bao ellipse, tính bằng mét với geodesic/rhumb hoặc theo đơn vị hệ tọa độ với planar. Mặc định: một số đoạn cố định."
              },
              "polygon_output": {
                "label": "Đầu ra đa giác",
                "description": "chỉ với mode=ellipse: xuất ra một Polygon được tô đầy thay vì một đường bao khép kín. Mặc định false."
              },
              "start_x": {
                "label": "X bắt đầu",
                "description": "mode=xy_to_line: trường chứa X / kinh độ điểm đầu."
              },
              "start_y": {
                "label": "Y bắt đầu",
                "description": "mode=xy_to_line: trường chứa Y / vĩ độ điểm đầu."
              },
              "end_x": {
                "label": "X kết thúc",
                "description": "mode=xy_to_line: trường chứa X / kinh độ điểm cuối."
              },
              "end_y": {
                "label": "Y kết thúc",
                "description": "mode=xy_to_line: trường chứa Y / vĩ độ điểm cuối."
              },
              "x": {
                "label": "X",
                "description": "mode=bearing_distance/ellipse: trường chứa X / kinh độ của điểm gốc/tâm."
              },
              "y": {
                "label": "Y",
                "description": "mode=bearing_distance/ellipse: trường chứa Y / vĩ độ của điểm gốc/tâm."
              },
              "bearing": {
                "label": "Góc phương vị",
                "description": "mode=bearing_distance: trường chứa phương vị tính bằng độ theo chiều kim đồng hồ từ hướng bắc."
              },
              "distance": {
                "label": "Khoảng cách",
                "description": "mode=bearing_distance: trường chứa khoảng cách di chuyển (mét với geodesic/rhumb, đơn vị hệ tọa độ với planar)."
              },
              "major": {
                "label": "Trục lớn",
                "description": "mode=ellipse: trường chứa chiều dài bán trục lớn (mét với geodesic/rhumb, đơn vị hệ tọa độ với planar)."
              },
              "minor": {
                "label": "Trục nhỏ",
                "description": "mode=ellipse: trường chứa chiều dài bán trục nhỏ (cùng đơn vị với trục lớn)."
              },
              "azimuth": {
                "label": "Phương vị",
                "description": "mode=ellipse: trường chứa hướng của trục lớn tính bằng độ theo chiều kim đồng hồ từ hướng bắc."
              }
            }
          },
          "tabulate_intersection": {
            "name": "Lập bảng giao nhau",
            "description": "Tóm tắt theo vùng dạng vector trên vector: phân bổ một lớp phân loại (đa giác theo diện tích, đường theo chiều dài giao nhau, hoặc điểm theo số lượng) trên các đa giác vùng, báo cáo độ đo giao nhau, phần trăm của vùng và các trường tổng có trọng số theo độ đo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đa giác vùng, định dạng được tự động nhận diện (hoặc tham chiếu trong bộ nhớ)."
              },
              "class_features": {
                "label": "Đối tượng lớp",
                "description": "Lớp vector phân loại cần phân bổ cho các vùng (đa giác được tóm tắt theo diện tích, đường theo chiều dài giao nhau, hoặc điểm theo số lượng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "class_field": {
                "label": "Trường lớp",
                "description": "Trường phân loại tùy chọn trong lớp phân loại; kết quả được nhóm theo vùng x giá trị này. Bỏ qua để coi tất cả các đối tượng phân loại là một lớp duy nhất."
              },
              "sum_fields": {
                "label": "Trường tổng",
                "description": "Các trường số tùy chọn trong lớp phân loại cần phân bổ vào từng vùng, phân tách bằng dấu phẩy (trọng số theo diện tích với đa giác, theo chiều dài với đường, tính tổng với điểm)."
              },
              "zone_field": {
                "label": "Trường vùng",
                "description": "Trường tùy chọn dùng để nhận diện từng vùng trong kết quả đầu ra. Mặc định dùng chỉ số của đối tượng vùng."
              }
            }
          },
          "thin_road_network": {
            "name": "Làm thưa mạng lưới đường giao thông",
            "description": "Tổng quát hóa một mạng lưới đường cho hiển thị ở tỉ lệ nhỏ: ẩn các đường ngắn, có phân cấp thấp trong khi vẫn giữ tính liên thông, đánh dấu mỗi đường là hiển thị/bị lược bỏ (không phá hủy dữ liệu) giống ArcGIS Thin Road Network.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector đường giao thông đầu vào, định dạng được tự phát hiện (hoặc một handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "min_length": {
                "label": "Chiều dài tối thiểu",
                "description": "Các tuyến đường ngắn hơn giá trị này (đơn vị hệ tọa độ) là ứng viên để tỉa bớt. Các tuyến dài hơn luôn được giữ lại."
              },
              "hierarchy_field": {
                "label": "Trường phân cấp",
                "description": "Trường số tùy chọn chứa cấp đường; giá trị càng nhỏ = càng quan trọng (được giữ lại lâu hơn). Các ứng viên được tỉa bớt bắt đầu từ số cấp đường lớn nhất."
              },
              "visibility_field": {
                "label": "Trường tầm nhìn",
                "description": "Tên trường cờ hiển thị đầu ra (1 = được giữ lại, 0 = bị tỉa bớt). Mặc định 'visible'."
              },
              "keep_only": {
                "label": "Chỉ giữ",
                "description": "Nếu true, chỉ xuất ra các tuyến đường hiển thị thay vì gắn cờ cho tất cả. Mặc định false (không phá hủy dữ liệu)."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Khoảng cách mà trong đó các điểm đầu cuối của đường được coi là cùng một nút giao. Mặc định 1e-6."
              }
            }
          },
          "tile_grid_polygons": {
            "name": "Đa giác lưới ô",
            "description": "Xuất ranh giới ô của bản đồ web dưới dạng đa giác cho một mức thu phóng (hoặc một khoảng) và một phạm vi, mỗi ô mang z/x/y và quadkey của nó (ArcGIS Map Server Cache Tiling Scheme To Polygons, Create Vector Tile Index, Generate Tile Cache Tiling Scheme). Các công cụ lưới chữ nhật/lục giác đi kèm dựng lưới tùy ý trong hệ tọa độ đầu vào và không thể trùng với cây tứ phân WebMercator mà các công cụ PMTiles và raster_to_tiles sử dụng.",
            "params": {
              "zoom": {
                "label": "Mức thu phóng",
                "description": "Mức thu phóng. Dùng cùng 'max_zoom' để xuất ra một tháp nhiều mức."
              },
              "max_zoom": {
                "label": "Mức thu phóng tối đa",
                "description": "Mức thu phóng cao nhất tùy chọn; khi được cung cấp, mọi mức từ 'zoom' đến 'max_zoom' đều được xuất ra."
              },
              "extent": {
                "label": "Phạm vi",
                "description": "Lớp raster hoặc vector tùy chọn mà ranh giới của nó dùng để cắt lưới. Nếu không có, toàn bộ thế giới ở mức thu phóng đó (tùy thuộc vào 'max_tiles')."
              },
              "bbox": {
                "label": "Hộp bao",
                "description": "Phạm vi tường minh tùy chọn dạng 'min_lon,min_lat,max_lon,max_lat' tính bằng độ. Được ưu tiên hơn 'extent'."
              },
              "scheme": {
                "label": "Sơ đồ",
                "description": "'xyz' (mặc định, Google/OSM, y đếm từ phía bắc xuống) hoặc 'tms' (y đếm từ phía nam lên)."
              },
              "output_crs": {
                "label": "CRS đầu ra",
                "description": "'EPSG:3857' (mặc định, ô vuông) hoặc 'EPSG:4326' (tứ giác theo kinh/vĩ độ)."
              },
              "max_tiles": {
                "label": "Số ô tối đa",
                "description": "Giới hạn cứng về số lượng ô (mặc định 1000000); vượt quá giới hạn này sẽ gây lỗi kèm theo số ô đã tính được."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "time_series_clustering": {
            "name": "Phân cụm chuỗi thời gian",
            "description": "Phân cụm các ô của một khối không-thời gian H3 theo mức tương đồng của chuỗi thời gian của chúng (giá trị, hồ sơ chuẩn hóa z, hoặc tương quan) bằng k-medoids tất định, để những nơi biến đổi giống nhau được gom lại với nhau, giống ArcGIS Time Series Clustering.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào theo EPSG:4326 (kinh/vĩ độ) có trường dấu thời gian."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường dấu thời gian (dạng số hoặc ngày/ngày giờ theo ISO-8601)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác H3 đầu ra kèm cluster_id/is_medoid. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "num_clusters": {
                "label": "Số cụm",
                "description": "Số cụm k (mặc định 4)."
              },
              "characteristic": {
                "label": "Đặc tính",
                "description": "Khoảng cách chuỗi thời gian: 'value' (giá trị thô), 'profile' (chuẩn hóa z, mặc định) hoặc 'correlation' (1 − r)."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Độ rộng của một bước thời gian: một số thuần (khi time_field là số) hoặc một khoảng thời gian như '1w', '7d', '12h'. Mặc định '1w'."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số tùy chọn được cộng tổng vào mỗi khoảng. Mặc định: số lượng điểm trên mỗi khoảng."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 (thô nhất) đến 15 (mịn nhất); mặc định 7 (ô ~5 km²)."
              },
              "seed": {
                "label": "Hạt giống",
                "description": "Hạt giống ngẫu nhiên để việc khởi tạo medoid có thể tái lập (mặc định 1)."
              }
            }
          },
          "time_series_cross_correlation": {
            "name": "Tương quan chéo chuỗi thời gian",
            "description": "Tương quan chéo có độ trễ theo từng ô giữa hai chồng raster không-thời gian đã căn chỉnh (giống Time Series Cross Correlation / Multidimensional Raster Correlation của ArcGIS): với mỗi ô, tùy chọn khử xu thế/khử mùa, sau đó tương quan chuỗi A với chuỗi B trên khoảng min_lag..=max_lag và báo cáo độ trễ tốt nhất cùng hệ số tương quan Pearson của nó, cùng tùy chọn tương quan ở độ trễ 0 và một giá trị p giả dựa trên cỡ mẫu hiệu dụng Pyper-Peterman. Là phần bổ sung hai biến, có nhận biết độ trễ cho các công cụ khối generate_trend_raster / change_point_detection đơn chuỗi — không có công cụ đi kèm nào liên hệ hai biến theo thời gian.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Chồng ảnh A: một raster đa kênh (mỗi bước thời gian một kênh) HOẶC một danh sách phân tách bằng dấu phẩy các đường dẫn raster đơn kênh đã đồng đăng ký, theo thứ tự thời gian."
              },
              "secondary": {
                "label": "Thứ cấp",
                "description": "Chồng B: cùng kích thước và độ dài với 'input' (raster đa kênh hoặc danh sách raster một kênh phân tách bằng dấu phẩy)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster độ trễ tốt nhất đầu ra (độ trễ nguyên làm cực đại |tương quan|). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "corr_output": {
                "label": "Đầu ra tương quan",
                "description": "Raster đầu ra tùy chọn chứa hệ số tương quan Pearson (có dấu) tại độ trễ tốt nhất."
              },
              "corr0_output": {
                "label": "Đầu ra tương quan gốc",
                "description": "Raster đầu ra tùy chọn chứa hệ số tương quan tại độ trễ 0 (đồng thời)."
              },
              "pvalue_output": {
                "label": "Đầu ra giá trị p",
                "description": "Raster đầu ra tùy chọn chứa giá trị p giả hai phía tại độ trễ tốt nhất (cỡ mẫu hiệu dụng Pyper-Peterman + biến đổi z Fisher)."
              },
              "min_lag": {
                "label": "Trễ tối thiểu",
                "description": "Độ trễ nhỏ nhất tính bằng bước thời gian (mặc định -6). A[t] được ghép cặp với B[t+lag]."
              },
              "max_lag": {
                "label": "Trễ tối đa",
                "description": "Độ trễ lớn nhất tính bằng bước thời gian (mặc định 6). Phải >= min_lag."
              },
              "detrend": {
                "label": "Khử xu thế",
                "description": "Nếu true, trừ đi xu thế tuyến tính OLS của từng chuỗi trước khi tính tương quan (mặc định false)."
              },
              "deseasonalize": {
                "label": "Khử mùa vụ",
                "description": "Nếu true, trừ đi chu kỳ mùa cộng tính của từng chuỗi với chu kỳ 'season_length' trước khi tính tương quan (mặc định false)."
              },
              "season_length": {
                "label": "Độ dài mùa",
                "description": "Chu kỳ mùa (bước thời gian) dùng khi 'deseasonalize' là true (mặc định 12)."
              },
              "min_valid": {
                "label": "Số hợp lệ tối thiểu",
                "description": "Số cặp chồng lấp hợp lệ tối thiểu cần có để tính tương quan tại một độ trễ (mặc định 5)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh (đánh số từ 1) cần đọc khi một chồng được cung cấp dưới dạng danh sách raster một kênh phân tách bằng dấu phẩy (mặc định 1). Bị bỏ qua với các chồng đa kênh."
              }
            }
          },
          "time_series_forecast": {
            "name": "Dự báo chuỗi thời gian",
            "description": "Dự báo theo từng vị trí trên một khối không-thời gian H3 (giống ArcGIS Exponential Smoothing / Curve Fit Forecast): dự báo chuỗi của mỗi ô về phía trước bằng làm trơn hàm mũ Holt hoặc khớp đường cong đa thức, chọn cho mỗi ô mô hình có RMSE trên tập kiểm định thấp nhất, kèm dự báo bước kế tiếp/bước cuối và nửa khoảng tin cậy 90%. Là phần dự báo theo thời gian mà công cụ trend_surface không gian đi kèm không làm được.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào chứa các sự kiện có dấu thời gian (kinh độ/vĩ độ)."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường chứa thời gian của mỗi điểm: một số hoặc một dấu thời gian ISO-8601."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đa giác H3 đầu ra kèm các thuộc tính dự báo. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số cần tổng hợp trong mỗi nhóm (mặc định: số lượng điểm)."
              },
              "steps": {
                "label": "Số bước",
                "description": "Số bước thời gian cần dự báo về phía trước (mặc định 3)."
              },
              "model": {
                "label": "Mô hình",
                "description": "'auto' (RMSE trên tập kiểm định thấp nhất; mặc định), 'exp_smoothing', 'linear', hoặc 'parabolic'."
              },
              "holdout": {
                "label": "Tập giữ lại",
                "description": "Số bước thời gian được giữ lại để kiểm định/chọn mô hình (mặc định 3)."
              },
              "time_step": {
                "label": "Bước thời gian",
                "description": "Độ rộng của một bước thời gian theo đơn vị của time_field (mặc định 1)."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 đến 15 (mặc định 7)."
              }
            }
          },
          "time_series_smoothing": {
            "name": "Làm trơn chuỗi thời gian",
            "description": "Làm trơn một chuỗi thời gian trong mẫu theo từng vị trí (giống ArcGIS Time Series Smoothing): nhóm các đối tượng theo id_field, sắp xếp mỗi nhóm theo time_field, và bổ sung một giá trị đã làm trơn qua trung bình trượt lùi/giữa/tiến hoặc một lượt hồi quy tuyến tính cục bộ với băng thông thích nghi (LOESS). Hình học và mọi thuộc tính gốc đều được giữ nguyên. Bổ sung cho time_series_forecast, vốn dự báo về phía trước thay vì làm trơn chuỗi quan sát.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp đối tượng đầu vào chứa các quan sát có dấu thời gian."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Trường số có chuỗi giá trị cần làm trơn."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường dùng để sắp xếp mỗi chuỗi: một số hoặc một dấu thời gian ISO-8601."
              },
              "id_field": {
                "label": "Trường ID",
                "description": "Trường xác định mỗi vị trí/chuỗi. Nếu bỏ qua, mọi đối tượng sẽ tạo thành một chuỗi duy nhất."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'moving_average' (mặc định) hoặc 'local_linear' (LOESS với băng thông thích nghi)."
              },
              "window": {
                "label": "Cửa sổ",
                "description": "moving_average: số điểm trong cửa sổ lấy trung bình (mặc định 3)."
              },
              "bandwidth": {
                "label": "Băng thông",
                "description": "local_linear: số điểm gần nhất theo thời gian dùng cho mỗi lần khớp cục bộ (mặc định 5)."
              },
              "alignment": {
                "label": "Căn chỉnh",
                "description": "Vị trí cửa sổ của moving_average: 'backward', 'centered' (mặc định), hoặc 'forward'."
              },
              "output_field": {
                "label": "Trường đầu ra",
                "description": "Tên của trường đã làm trơn được bổ sung (mặc định 'smoothed')."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn lớp đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "topo_to_raster": {
            "name": "Địa hình sang raster",
            "description": "Nội suy một DEM đúng về mặt thủy văn từ các đường bình độ, các điểm độ cao và các đường suối tùy chọn bằng phép nới lỏng độ cong tối thiểu (tấm mỏng) có cưỡng bức thoát nước — giống ArcGIS Topo To Raster (ANUDEM). Khác với các bộ nội suy IDW/TIN/spline đi kèm, công cụ này không tạo bậc thang theo đường bình độ và loại bỏ các vùng trũng khép kín giả tạo.",
            "params": {
              "contours": {
                "label": "Đường đồng mức",
                "description": "Lớp vector đường bình độ đầu vào (độ cao được đọc từ elevation_field). Cần ít nhất một trong hai: contours hoặc points."
              },
              "points": {
                "label": "Điểm",
                "description": "Lớp vector điểm độ cao đầu vào (độ cao được đọc từ elevation_field)."
              },
              "streams": {
                "label": "Suối",
                "description": "Lớp vector đường suối tùy chọn dùng để cưỡng bức thoát nước (được khắc vào bề mặt trước khi loại bỏ vùng trũng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn raster DEM đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "elevation_field": {
                "label": "Trường độ cao",
                "description": "Tên của trường độ cao dạng số trên các lớp đường bình độ và điểm. Mặc định: tự phát hiện (HEIGHT/ELEV/ELEVATION/Z, nếu không thì trường số đầu tiên)."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ. Mặc định: được chọn sao cho cạnh dài hơn của lưới có khoảng 400 ô."
              },
              "tension": {
                "label": "Độ căng",
                "description": "Độ cứng bề mặt trong [0,1]: 0 = tấm mỏng thuần túy (trơn nhất), 1 = màng căng. Mặc định 0.35."
              },
              "iterations": {
                "label": "Số lần lặp",
                "description": "Số lần lặp SOR tối đa (mặc định 2000). Việc lặp sẽ dừng sớm khi mức thay đổi lớn nhất của ô giảm xuống dưới dung sai."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Dung sai hội tụ: dừng khi mức thay đổi ô lớn nhất trong một lần lặp nhỏ hơn giá trị này (đơn vị độ cao của hệ tọa độ). Mặc định 0.01."
              },
              "enforce_drainage": {
                "label": "Áp đặt thoát nước",
                "description": "Loại bỏ các vùng trũng bên trong giả tạo sau khi nội suy để DEM thoát nước ra các rìa của nó (mặc định true)."
              },
              "stream_burn": {
                "label": "Khắc suối",
                "description": "Độ sâu (đơn vị độ cao) để hạ các ô suối xuống trước khi loại bỏ vùng trũng, nhằm định tuyến dòng chảy dọc theo chúng. Mặc định 0 (tự động = 1% biên độ địa hình khi có cung cấp suối)."
              }
            }
          },
          "trace_proximity_events": {
            "name": "Truy vết sự kiện lân cận",
            "description": "Tìm các khoảng thời gian mà hai vệt di chuyển ở gần nhau trong một khoảng cách nhất định trong ít nhất một thời lượng tối thiểu (sự kiện tiếp cận), và tùy chọn lần theo các tiếp xúc bắc cầu về sau từ các thực thể hạt giống, giống ArcGIS Trace Proximity Events.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm có dấu thời gian (dùng hệ tọa độ phẳng; khoảng cách tính theo đơn vị bản đồ)."
              },
              "track_field": {
                "label": "Trường quỹ đạo",
                "description": "Trường xác định mỗi thực thể chuyển động / vệt di chuyển."
              },
              "time_field": {
                "label": "Trường thời gian",
                "description": "Trường dấu thời gian (số giây dạng số hoặc ISO-8601)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đường sự kiện tiếp cận đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "search_distance": {
                "label": "Khoảng cách tìm kiếm",
                "description": "Khoảng cách tối đa để hai vệt di chuyển được coi là 'ở gần nhau' (đơn vị bản đồ)."
              },
              "min_duration": {
                "label": "Thời lượng tối thiểu",
                "description": "Thời gian ở gần nhau tối thiểu để được tính là một sự kiện: số giây hoặc một thời lượng như '5m', '1h' (mặc định 0)."
              },
              "entities": {
                "label": "Thực thể",
                "description": "Các mã vệt di chuyển hạt giống tùy chọn, phân tách bằng dấu phẩy, dùng để lần theo các tiếp xúc về sau (truy vết tiếp xúc)."
              },
              "depth": {
                "label": "Độ sâu",
                "description": "Số thế hệ truy vết tối đa tính từ các hạt giống (mặc định không giới hạn)."
              }
            }
          },
          "transform_features": {
            "name": "Biến đổi đối tượng",
            "description": "Áp dụng một phép biến đổi affine (tịnh tiến, xoay quanh một điểm neo, co giãn theo từng trục, lấy đối xứng) cho mọi hình học trong một lớp vector.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào, định dạng được tự động nhận diện (hoặc handle trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "dx": {
                "label": "Dx",
                "description": "Độ dịch chuyển áp dụng cho X sau khi co giãn/lấy đối xứng/xoay, theo đơn vị hệ tọa độ. Mặc định 0."
              },
              "dy": {
                "label": "Dy",
                "description": "Độ dịch chuyển áp dụng cho Y sau khi co giãn/lấy đối xứng/xoay, theo đơn vị hệ tọa độ. Mặc định 0."
              },
              "angle": {
                "label": "Góc",
                "description": "Góc xoay ngược chiều kim đồng hồ quanh điểm neo, tính bằng độ. Mặc định 0."
              },
              "scale_x": {
                "label": "Tỉ lệ X",
                "description": "Hệ số co giãn quanh điểm neo theo trục X. Mặc định 1."
              },
              "scale_y": {
                "label": "Tỉ lệ Y",
                "description": "Hệ số co giãn quanh điểm neo theo trục Y. Mặc định 1."
              },
              "mirror_axis": {
                "label": "Trục đối xứng",
                "description": "Lấy đối xứng qua điểm neo: NONE (mặc định), X (lật Y qua trục ngang), hoặc Y (lật X qua trục đứng)."
              },
              "anchor": {
                "label": "Điểm neo",
                "description": "Tâm quay cho phép co giãn/lấy đối xứng/xoay: CENTROID (tâm của hộp bao, mặc định), ORIGIN (0,0), hoặc XY (dùng anchor_x/anchor_y)."
              },
              "anchor_x": {
                "label": "Neo X",
                "description": "Tọa độ X của điểm neo; bắt buộc khi anchor=XY."
              },
              "anchor_y": {
                "label": "Neo Y",
                "description": "Tọa độ Y của điểm neo; bắt buộc khi anchor=XY."
              }
            }
          },
          "transform_fields": {
            "name": "Biến đổi trường",
            "description": "Chuẩn hóa, biến đổi và mã hóa các trường thuộc tính (giống ArcGIS Standardize/Transform/Encode Field): z-score, min-max, robust, log/log1p/sqrt/boxcox/nghịch đảo, chia nhóm theo khoảng đều/phân vị/độ lệch chuẩn, và mã hóa one-hot.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector (hoặc bảng) đầu vào có các trường cần biến đổi."
              },
              "fields": {
                "label": "Trường",
                "description": "Tên các trường cần biến đổi, phân tách bằng dấu phẩy; cùng một phép biến đổi được áp dụng cho từng trường."
              },
              "transform": {
                "label": "Biến đổi",
                "description": "Phép biến đổi cần áp dụng: zscore, minmax, robust, log, log1p, sqrt, boxcox, inverse, bin, onehot."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp vector đầu ra có bổ sung các trường đã biến đổi. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "bins": {
                "label": "Số khoảng",
                "description": "Số lớp cho 'bin' (mặc định 5)."
              },
              "bin_method": {
                "label": "Phương pháp chia khoảng",
                "description": "Phương pháp phân loại cho 'bin': equal_interval (mặc định), quantile, hoặc std_dev."
              },
              "boxcox_lambda": {
                "label": "Lambda Box-Cox",
                "description": "Giá trị lambda cố định cho 'boxcox'; nếu bỏ qua, sẽ được ước lượng bằng hợp lý cực đại (tìm kiếm theo tỉ lệ vàng)."
              },
              "suffix": {
                "label": "Hậu tố",
                "description": "Hậu tố tên trường đầu ra (mặc định phụ thuộc vào phép biến đổi, ví dụ '_z' cho zscore)."
              },
              "drop_input": {
                "label": "Bỏ trường đầu vào",
                "description": "Nếu true, loại bỏ (các) trường gốc khỏi đầu ra sau khi biến đổi (mặc định false)."
              }
            }
          },
          "transform_route_events": {
            "name": "Biến đổi sự kiện tuyến",
            "description": "Tham chiếu lại các sự kiện điểm được đo theo một hệ tuyến nguồn sang một hệ tuyến đích: khôi phục tọa độ XY của mỗi sự kiện từ tuyến nguồn và số đo của nó, rồi định vị lại nó trên tuyến đích gần nhất trong một dung sai cụm, xuất ra mã tuyến đích và số đo — giống ArcGIS Transform Route Events.",
            "params": {
              "source_events": {
                "label": "Sự kiện nguồn",
                "description": "Lớp sự kiện điểm đầu vào. Mỗi đối tượng mang một mã định danh tuyến (route_id_field) và một số đo (measure_field)."
              },
              "source_routes": {
                "label": "Tuyến nguồn",
                "description": "Hệ tuyến nguồn: lớp đường có các đối tượng được khóa theo route_id_field. Số đo là khoảng cách tính từ đỉnh đầu tiên của mỗi tuyến."
              },
              "target_routes": {
                "label": "Tuyến đích",
                "description": "Hệ tuyến đích: lớp đường mà các sự kiện được định vị lại lên đó. Mã định danh tuyến lấy từ target_id_field."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector điểm đầu ra (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "route_id_field": {
                "label": "Trường ID tuyến",
                "description": "Trường đặt tên mã định danh tuyến trong source_events và source_routes (mặc định 'route_id'). Nếu không có trường này -> sẽ dùng chỉ số đối tượng của tuyến nguồn."
              },
              "measure_field": {
                "label": "Trường số đo",
                "description": "Trường số trong source_events chứa số đo theo hệ nguồn (mặc định 'measure')."
              },
              "target_id_field": {
                "label": "Trường ID đích",
                "description": "Trường đặt tên mã định danh tuyến trong target_routes (mặc định: giống route_id_field). Nếu không có trường này -> sẽ dùng chỉ số đối tượng của tuyến đích."
              },
              "cluster_tolerance": {
                "label": "Dung sai cụm",
                "description": "Khoảng cách XY tối đa (đơn vị hệ tọa độ) từ vị trí sự kiện được khôi phục tới một tuyến đích để sự kiện được chuyển sang. Giá trị 0 hoặc bỏ qua nghĩa là không giới hạn (luôn bắt dính vào tuyến đích gần nhất)."
              }
            }
          },
          "transpose_fields": {
            "name": "Chuyển vị trường",
            "description": "Định dạng lại một bảng thuộc tính dạng rộng thành dạng dài: mỗi cột giá trị được liệt kê trở thành một hàng riêng, gắn nhãn cột mà nó xuất phát (ArcGIS Transpose Fields). pivot_table chỉ đi từ dài sang rộng, nên các bảng đến với một cột cho mỗi kỳ không thể đưa vào các công cụ chuỗi thời gian vốn cần mỗi quan sát một hàng.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp vector hoặc bảng đầu vào."
              },
              "transpose_fields": {
                "label": "Chuyển vị trường",
                "description": "Các cột giá trị cần chuyển từ dạng rộng sang dạng dài, phân tách bằng dấu phẩy hoặc dấu chấm phẩy."
              },
              "value_field": {
                "label": "Trường giá trị",
                "description": "Tên của cột đầu ra chứa giá trị ô (mặc định 'VALUE')."
              },
              "transposed_field": {
                "label": "Trường chuyển vị",
                "description": "Tên của cột đầu ra chứa tên cột nguồn (mặc định 'FIELD')."
              },
              "field_labels": {
                "label": "Nhãn trường",
                "description": "Các nhãn tùy chọn được ghi vào 'transposed_field' thay cho tên cột thô, ví dụ '2000,2010,2020'. Phải có cùng số phần tử với 'transpose_fields'."
              },
              "retain_fields": {
                "label": "Giữ trường",
                "description": "Các thuộc tính được sao chép sang mọi hàng đầu ra. Mặc định là mọi trường không được chuyển đổi."
              },
              "drop_nulls": {
                "label": "Bỏ giá trị rỗng",
                "description": "Bỏ qua các hàng đầu ra có giá trị rỗng (mặc định false)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "trim_line": {
            "name": "Cắt tỉa đường",
            "description": "Xóa các đoạn đường treo ngắn (đoạn vượt quá và nhánh cụt) ngắn hơn một dung sai chiều dài, giữ lại các giao cắt thật và các đường dài.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đường đầu vào, định dạng được tự động nhận diện (hoặc đối tượng trong bộ nhớ)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra tùy chọn (trình điều khiển được xác định từ phần mở rộng). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "dangle_length": {
                "label": "Chiều dài treo",
                "description": "Dung sai chiều dài theo đơn vị hệ tọa độ. Một đoạn treo ngắn hơn giá trị này sẽ bị cắt bỏ; các đoạn treo dài hơn được giữ lại. Phải là số dương."
              },
              "keep_short": {
                "label": "Giữ đoạn ngắn",
                "description": "Khi true (mặc định), các đoạn ngắn không nối ở cả hai đầu (bị cô lập) sẽ được giữ lại; khi false chúng cũng bị xóa. Các đoạn treo ở đúng một đầu luôn bị cắt bỏ khi chúng ngắn."
              },
              "snap_tolerance": {
                "label": "Dung sai bắt dính",
                "description": "Các điểm đầu cuối nằm trong khoảng cách này (đơn vị hệ tọa độ) được coi là cùng một nút. Mặc định 1e-6."
              }
            }
          },
          "union_3d": {
            "name": "Hợp 3D",
            "description": "Tính thể tích hợp của các khối 3D khép kín chồng lấp mà không đếm trùng phần giao của chúng, cùng với thể tích chồng lấp theo từng cặp (ArcGIS Union 3D). Không danh mục nào có phép chồng lớp 3D, nên việc cộng các viên nang buffer_3d hay các bao lồi minimum_bounding_volume hiện nay đếm trùng mọi phần chồng lấp; polygon_volume và surface_volume chỉ đo so với một mặt phẳng tham chiếu. Thể tích của từng khối là chính xác (tổng tứ diện có dấu); phần hợp được ước lượng bằng độ chiếm voxel ở một độ phân giải được báo cáo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đối tượng khối 3D kín (MultiPolygon lưới tam giác có Z, như buffer_3d và minimum_bounding_volume tạo ra)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng đầu ra tùy chọn chứa thể tích theo từng nhóm. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "group_field": {
                "label": "Trường nhóm",
                "description": "Trường tùy chọn; các khối được hợp trong phạm vi từng giá trị nhóm thay vì trên toàn bộ lớp."
              },
              "output_overlap_table": {
                "label": "Bảng chồng lấn đầu ra",
                "description": "Đường dẫn tùy chọn cho thể tích chồng lấp theo từng cặp. Nếu bỏ qua, kết quả được lưu trong bộ nhớ (vẫn được trả về)."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Số mẫu voxel trên mỗi trục dùng để ước lượng thể tích hợp, từ 4 đến 512 (mặc định 96). Giá trị cao hơn cho độ chính xác cao hơn nhưng chậm hơn."
              }
            }
          },
          "unwrap_phase": {
            "name": "Mở pha",
            "description": "Chuyển pha giao thoa bị gói trong khoảng (-pi, pi] thành một trường tuyệt đối liên tục bằng bình phương tối thiểu có trọng số, giải bằng gradient liên hợp có tiền điều kiện, với tùy chọn lấy trọng số theo độ kết hợp và tạo mặt nạ (ArcGIS Unwrap Phase). Không có gì trong cả hai danh mục gỡ gói pha — raster_calculator không thể biểu diễn phép giải toàn cục và các bộ lọc nhiễu đốm đi kèm chỉ làm trơn chứ không gỡ gói — nên đầu ra pha của sar_coherence và flatten_interferogram hiện chưa có điểm cuối liên tục.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster pha bị gói tính bằng radian, hoặc một ảnh giao thoa I/Q hai kênh."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster pha liên tục đã gỡ gói. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "method": {
                "label": "Phương pháp",
                "description": "'least_squares_pcg' (mặc định), tương ứng với phương pháp mà ArcGIS hỗ trợ."
              },
              "coherence": {
                "label": "Độ kết hợp",
                "description": "Raster độ kết hợp đã đồng đăng ký tùy chọn dùng làm trọng số theo từng cạnh trong phép giải, để các điểm ảnh có độ kết hợp thấp ít ảnh hưởng tới nghiệm hơn."
              },
              "coherence_threshold": {
                "label": "Ngưỡng độ kết hợp",
                "description": "Che các điểm ảnh có độ kết hợp thấp hơn giá trị này (mặc định 0.3). Bị bỏ qua khi không cung cấp raster độ kết hợp. Việc tạo mặt nạ làm chia các điểm ảnh hợp lệ thành những thành phần không liên thông sẽ khiến mỗi thành phần, trừ thành phần chứa điểm ảnh tham chiếu, có một hằng số cộng tùy ý riêng."
              },
              "max_iterations": {
                "label": "Số lần lặp tối đa",
                "description": "Giới hạn số lần lặp PCG (mặc định 500)."
              },
              "tolerance": {
                "label": "Dung sai",
                "description": "Phần dư tương đối mà tại đó phép giải dừng lại (mặc định 1e-8)."
              },
              "reference_row": {
                "label": "Hàng tham chiếu",
                "description": "Hàng của điểm ảnh được ghim về không, qua đó cố định hằng số cộng của nghiệm. Mặc định: điểm ảnh hợp lệ đầu tiên."
              },
              "reference_col": {
                "label": "Cột tham chiếu",
                "description": "Cột của điểm ảnh được ghim. Mặc định: điểm ảnh hợp lệ đầu tiên."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh chứa pha, đánh số từ 1. Bỏ trống tham số này với raster pha đơn kênh hoặc ảnh giao thoa I/Q hai kênh (khi đó sẽ được nhận diện tự động); cung cấp giá trị này để đọc pha thực từ một kênh cụ thể của chồng ảnh đa kênh. Raster có nhiều hơn hai kênh BẮT BUỘC phải có tham số này, vì từ ba kênh trở lên không phải là cặp I/Q và việc đoán sẽ trả về giá trị pha có vẻ hợp lý nhưng sai."
              }
            }
          },
          "validate_flow_direction": {
            "name": "Kiểm tra hướng dòng chảy",
            "description": "Báo cáo các ô làm cho một raster hướng dòng chảy không dùng được — các mã không phải là hướng D8, các ô bên trong không có lối thoát, dòng chảy vào vùng no-data, dòng chảy ra khỏi rìa, và các ô nằm trên đường dòng chảy khép kín — dưới dạng một lớp điểm chỉ ra các vấn đề (ArcGIS Validate Flow Direction). Bộ công cụ thủy văn đi kèm tiêu thụ raster con trỏ ở khắp nơi (d8_flow_accumulation, watershed, basins, trace_downslope_flowpaths) nhưng không có gì kiểm tra tính hợp lệ của nó, nên một raster bị hỏng do lấy mẫu lại, phân loại lại hoặc cắt sẽ cho một kết quả sai trông có vẻ hợp lý thay vì báo lỗi, và một vòng lặp định tuyến có thể khiến chương trình treo.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster hướng dòng chảy (con trỏ) cần kiểm tra."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Lớp điểm đầu ra, mỗi ô có vấn đề một điểm. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "flow_direction_type": {
                "label": "Kiểu hướng dòng chảy",
                "description": "'d8' (mặc định) cho các mã lũy thừa của hai đơn lẻ, hoặc 'mfd' khi một giá trị có thể là tổng của nhiều hướng."
              },
              "report_edge_outflow": {
                "label": "Báo cáo dòng chảy ra biên",
                "description": "Báo cáo các ô có dòng chảy ra khỏi raster (mặc định false). Điều này bình thường ở một ranh giới thật, nhưng là lỗi thực sự ở phần bên trong đã bị cắt."
              },
              "check_circular": {
                "label": "Kiểm tra vòng lặp",
                "description": "Phát hiện các đường dòng chảy khép kín (mặc định true)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh (đánh số từ 1) chứa các hướng (mặc định 1)."
              }
            }
          },
          "vector_convert": {
            "name": "Chuyển đổi vector",
            "description": "Chuyển đổi một tập dữ liệu vector sang định dạng khác (phần mở rộng của tệp đầu ra quyết định trình điều khiển).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào (định dạng được tự phát hiện) hoặc một handle trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra; trình điều khiển được lấy từ phần mở rộng của nó (.geojson, .fgb, .shp, .gpkg, .parquet, ...). Nếu bỏ qua, lớp sẽ được lưu trong bộ nhớ."
              }
            }
          },
          "vector_to_h3": {
            "name": "Vector sang ô H3",
            "description": "Gom một lớp vector vào các ô lưới toàn cầu rời rạc H3, đếm số đối tượng trong mỗi ô.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào (phải ở tọa độ địa lý kinh độ/vĩ độ, EPSG:4326) hoặc một handle trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn vector đầu ra; driver được lấy từ phần mở rộng (.geojson, .fgb, .parquet, ...). Nếu bỏ qua, lớp sẽ được lưu trong bộ nhớ."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Độ phân giải H3 từ 0 (thô nhất) đến 15 (mịn nhất); mặc định 8 (ô ~0.7 km²)."
              }
            }
          },
          "vector_to_pmtiles": {
            "name": "Vector sang PMTiles",
            "description": "Đóng gói một lớp vector vào một kho lưu trữ PMTiles duy nhất (kim tự tháp Mapbox Vector Tile).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào (GeoJSON, Shapefile, GeoPackage, FlatGeobuf, GeoParquet, ...)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp PMTiles đầu ra (ví dụ /work/roads.pmtiles)."
              },
              "min_zoom": {
                "label": "Mức thu phóng tối thiểu",
                "description": "Mức thu phóng nhỏ nhất (mặc định 0)."
              },
              "max_zoom": {
                "label": "Mức thu phóng tối đa",
                "description": "Mức thu phóng lớn nhất (mặc định 14, tối đa 18)."
              },
              "layer_name": {
                "label": "Tên lớp",
                "description": "Tên của lớp bên trong các ô, dùng khi tạo kiểu hiển thị (mặc định: tên của lớp đầu vào)."
              },
              "simplify": {
                "label": "Đơn giản hóa",
                "description": "Đơn giản hóa hình học theo từng mức thu phóng (mặc định true)."
              },
              "drop_rate": {
                "label": "Tỉ lệ loại bỏ",
                "description": "Tốc độ loại bỏ đối tượng ở các mức thu phóng thấp, như trong tippecanoe (mặc định: không loại bỏ)."
              }
            }
          },
          "voxel_isosurface": {
            "name": "Mặt đẳng trị voxel",
            "description": "Trích xuất một bề mặt đẳng trị được tam giác hóa tại một hoặc nhiều giá trị ngưỡng từ một trường voxel 3D bằng phương pháp marching tetrahedra (ArcGIS Export Voxel Isosurface). Toàn bộ bộ công cụ vẽ đường đồng mức trong cả hai danh mục đều là 2D — các đường từ một mặt phẳng; đây là phiên bản tương đương cho khối, biến đầu ra của idw_3d hoặc một raster đa chiều thành hình học có thể kết xuất. Xuất ra theo quy ước lưới tam giác mà buffer_3d và minimum_bounding_volume sử dụng, nên kết quả đưa thẳng được vào inside_3d.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Trường voxel dưới dạng một raster đa kênh: kênh k là lát cắt Z tại z_min + k * z_spacing."
              },
              "values": {
                "label": "Giá trị",
                "description": "(Các) giá trị ngưỡng: một số, một mảng JSON các số, hoặc một chuỗi phân tách bằng dấu phẩy. Mỗi giá trị một bề mặt."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn đầu ra tùy chọn cho các bề mặt dạng lưới tam giác. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "z_min": {
                "label": "Z nhỏ nhất",
                "description": "Tọa độ Z của lát cắt đầu tiên (mặc định 0)."
              },
              "z_spacing": {
                "label": "Khoảng cách Z",
                "description": "Khoảng cách thẳng đứng giữa các lát cắt (mặc định 1)."
              },
              "close_boundaries": {
                "label": "Đóng ranh giới",
                "description": "Bịt kín các bề mặt ở nơi chúng gặp rìa của khối để kết quả bao một khối đặc khép kín (mặc định true). Được thực hiện bằng cách marching thêm một lớp vỏ dưới giá trị đẳng trị, nên phần bịt được hàn liền vào bề mặt; nó nằm giữa mặt phẳng ranh giới và vị trí cách đó một ô. Cách này chỉ bịt kín các mặt NGOÀI: các ô tiếp giáp với vùng no-data bên trong sẽ bị bỏ qua, nên một túi no-data cắt qua bề mặt được trích xuất vẫn để lại một vành hở (túi nằm hoàn toàn bên trong hoặc bên ngoài đường đẳng trị thì không bao giờ chạm tới lưới)."
              },
              "smooth": {
                "label": "Làm trơn",
                "description": "Số lần lặp làm trơn Laplace áp dụng cho lưới đã trích xuất (mặc định 0)."
              }
            }
          },
          "warp_raster": {
            "name": "Nắn raster",
            "description": "Tham chiếu địa lý một raster từ các điểm khống chế mặt đất (giống ArcGIS Warp): khớp một đa thức bậc 1/2/3 từ các cặp GCP điểm ảnh nguồn → tọa độ thực và lấy mẫu lại vào một lưới đã tham chiếu địa lý mới (lân cận gần nhất/song tuyến tính), báo cáo phần dư của từng GCP và sai số RMS. Là phần raster của câu chuyện nắn chỉnh mà rubbersheet_features phía vector đã bao phủ.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Raster đầu vào (lưới điểm ảnh của nó là không gian tọa độ nguồn)."
              },
              "gcps": {
                "label": "Điểm khống chế mặt đất",
                "description": "Các điểm khống chế mặt đất dưới dạng bộ bốn 'col,row,x,y' phân tách bằng ';' (>= 3 cho bậc 1, 6 cho bậc 2, 10 cho bậc 3)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đã tham chiếu địa lý đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "transform": {
                "label": "Biến đổi",
                "description": "Bậc đa thức: 'poly1' (affine; mặc định), 'poly2', hoặc 'poly3'."
              },
              "resampling": {
                "label": "Lấy mẫu lại",
                "description": "'nearest' (mặc định) hoặc 'bilinear'."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị thực (mặc định: chiều rộng đầu vào ánh xạ sang phạm vi đích)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG để gán cho hệ tọa độ đầu ra (tùy chọn)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần nắn chỉnh (đánh số từ 1, mặc định 1)."
              }
            }
          },
          "weighted_voronoi": {
            "name": "Voronoi có trọng số",
            "description": "Raster phân bổ Voronoi có trọng số (vùng thị trường/vùng chi phối): gán mỗi ô cho vị trí có khoảng cách có trọng số nhỏ nhất — dạng nhân (d/w, Apollonius), dạng cộng (d-w), hoặc dạng lũy thừa (d²-w²) — giống ArcGIS Generate Weighted Voronoi. Là phiên bản có vị trí không đồng đều của voronoi_diagram không trọng số đi kèm.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Lớp điểm đầu vào chứa các vị trí."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster phân bổ đầu ra (chỉ số vị trí, đánh số từ 1, cho mỗi ô). Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "weight_field": {
                "label": "Trường trọng số",
                "description": "Trường số cho biết trọng số/mức hấp dẫn của mỗi vị trí (mặc định: mọi vị trí có trọng số 1)."
              },
              "weight_type": {
                "label": "Kiểu trọng số",
                "description": "'multiplicative' (d/w; mặc định), 'additive' (d-w), hoặc 'power' (d²-w²)."
              },
              "cell_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô đầu ra theo đơn vị hệ tọa độ (mặc định: phạm vi / 400)."
              },
              "margin": {
                "label": "Lề",
                "description": "Tỉ lệ của phạm vi các vị trí dùng để nới rộng raster (mặc định 0.1)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Mã EPSG để gán cho đầu ra (mặc định: lấy từ lớp đầu vào)."
              }
            }
          },
          "write_geoparquet": {
            "name": "Ghi GeoParquet",
            "description": "Chuyển đổi một tập dữ liệu vector (GeoJSON, Shapefile, FlatGeobuf, GeoPackage, ...) sang GeoParquet, mặc định được sắp xếp theo đường Hilbert và nén ZSTD.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp vector đầu vào (định dạng được tự phát hiện) hoặc một handle trong bộ nhớ."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp GeoParquet đầu ra (ví dụ /work/data.parquet)."
              },
              "compression": {
                "label": "Nén",
                "description": "Nén cột: zstd (mặc định), snappy, gzip, hoặc uncompressed."
              },
              "hilbert_sort": {
                "label": "Sắp xếp Hilbert",
                "description": "Sắp xếp các đối tượng theo đường cong Hilbert để có tính cục bộ không gian (mặc định true)."
              }
            }
          },
          "write_pmtiles": {
            "name": "Raster sang PMTiles",
            "description": "Kết xuất một raster vào một kho lưu trữ PMTiles duy nhất (kim tự tháp ô PNG theo Web Mercator).",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Đường dẫn tệp raster đầu vào. Phải mang hệ tọa độ nguồn (EPSG hoặc WKT)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn tệp PMTiles đầu ra (ví dụ /work/dem.pmtiles)."
              },
              "min_zoom": {
                "label": "Mức thu phóng tối thiểu",
                "description": "Mức thu phóng nhỏ nhất (mặc định: một mức thu phóng gốc duy nhất khớp với độ phân giải raster)."
              },
              "max_zoom": {
                "label": "Mức thu phóng tối đa",
                "description": "Mức thu phóng lớn nhất (mặc định: bằng min_zoom)."
              },
              "band": {
                "label": "Kênh",
                "description": "Kênh cần kết xuất (đánh số từ 1, mặc định 1)."
              },
              "colormap": {
                "label": "Bảng màu",
                "description": "Bảng màu: viridis (mặc định), magma, turbo, terrain hoặc grayscale."
              },
              "method": {
                "label": "Phương pháp",
                "description": "Phương pháp lấy mẫu lại: bilinear (mặc định), nearest, cubic."
              },
              "min": {
                "label": "Min",
                "description": "Giá trị ánh xạ tới đầu thấp của bảng màu (mặc định: giá trị nhỏ nhất của kênh)."
              },
              "max": {
                "label": "Max",
                "description": "Giá trị ánh xạ tới đầu cao của bảng màu (mặc định: giá trị lớn nhất của kênh)."
              }
            }
          },
          "zonal_characterization": {
            "name": "Đặc trưng hóa theo vùng",
            "description": "Tính thống kê cho nhiều raster giá trị trên một raster vùng trong một lượt duy nhất, với một thống kê cho mỗi raster và các phân vị tùy ý, giống ArcGIS Zonal Characterization.",
            "params": {
              "zones": {
                "label": "Vùng",
                "description": "Raster vùng; mỗi giá trị riêng biệt xác định một vùng."
              },
              "rasters": {
                "label": "Raster",
                "description": "Các mục 'path:statistic[:name]' phân tách bằng dấu phẩy, ví dụ 'dem.tif:mean,ndvi.tif:median'. Các raster giá trị dùng kênh 1. Các thống kê: mean, sum, min, max, range, stddev, median, majority, minority, variety, count, percentile."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn bảng thống kê đầu ra tùy chọn. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              },
              "percentile": {
                "label": "Phân vị",
                "description": "Phân vị (0-100) áp dụng cho mọi raster có thống kê là 'percentile' (mặc định 50)."
              },
              "zone_band": {
                "label": "Kênh vùng",
                "description": "Kênh cần đọc từ raster vùng (đánh số từ 1, mặc định 1)."
              },
              "ignore_nodata": {
                "label": "Bỏ qua NoData",
                "description": "Bỏ qua các ô no-data trong các raster giá trị (mặc định true). Khi false, chỉ cần một ô no-data trong một vùng là thống kê của vùng đó thành rỗng."
              }
            }
          },
          "zonal_fill": {
            "name": "Lấp theo vùng",
            "description": "Lấp mỗi vùng của một raster phân loại bằng giá trị nhỏ nhất của một raster trọng số tìm thấy dọc theo ranh giới của vùng đó (giống ArcGIS Zonal Fill) — một khối xây dựng bề mặt có ràng buộc còn thiếu trong bộ công cụ đi kèm (fill dựa trên dòng chảy, còn zonal_statistics chỉ tóm tắt).",
            "params": {
              "zones": {
                "label": "Vùng",
                "description": "Raster vùng phân loại (mỗi giá trị nguyên riêng biệt là một vùng)."
              },
              "weight": {
                "label": "Trọng số",
                "description": "Raster trọng số đã đồng đăng ký mà giá trị nhỏ nhất trên ranh giới của nó dùng để lấp mỗi vùng."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra. Nếu bỏ qua, kết quả được lưu trong bộ nhớ."
              }
            }
          },
          "zonal_geometry": {
            "name": "Hình học theo vùng",
            "description": "Các độ đo hình học theo từng vùng từ một raster vùng phân loại (giống ArcGIS Zonal Geometry): diện tích, chu vi, độ dày, trọng tâm, và trục lớn/trục nhỏ + hướng của elip độ lệch chuẩn — phiên bản hình dạng vùng mà zonal_statistics và zonal_histogram dựa trên giá trị đi kèm không cung cấp.",
            "params": {
              "zones": {
                "label": "Vùng",
                "description": "Raster vùng phân loại (mỗi giá trị nguyên riêng biệt là một vùng)."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Raster đầu ra (chế độ raster) hoặc đường dẫn CSV (chế độ as_table). Nếu bỏ qua, kết quả được lưu trong bộ nhớ / chỉ được trả về trong kết quả."
              },
              "measure": {
                "label": "Số đo",
                "description": "Độ đo ở chế độ raster: 'area' (mặc định), 'perimeter', 'thickness', 'centroid_x', 'centroid_y', 'major_axis', 'minor_axis', hoặc 'orientation'."
              },
              "as_table": {
                "label": "Dạng bảng",
                "description": "Khi true, xuất ra mỗi vùng một hàng với đầy đủ các độ đo thay vì một raster theo từng ô (mặc định false)."
              }
            }
          },
          "zonal_histogram": {
            "name": "Lược đồ theo vùng",
            "description": "Lập bảng phân bố các ô của một raster giá trị bên trong mỗi vùng: số lượng theo lớp (phân loại) hoặc tần suất theo nhóm (liên tục), dưới dạng bảng chéo vùng x lớp.",
            "params": {
              "zones": {
                "label": "Vùng",
                "description": "Đường dẫn tệp raster vùng (các mã vùng dạng số nguyên/phân loại)."
              },
              "value": {
                "label": "Giá trị",
                "description": "Đường dẫn tệp raster giá trị; phải dùng chung lưới với 'zones'."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn CSV đầu ra: mỗi vùng một hàng, mỗi lớp/nhóm một cột."
              },
              "mode": {
                "label": "Chế độ",
                "description": "'classes' (mặc định) coi mỗi giá trị đã làm tròn là một lớp riêng, dùng cho các raster giá trị dạng số nguyên/phân loại. 'bins' gom các giá trị liên tục vào các nhóm có độ rộng bằng nhau."
              },
              "bins": {
                "label": "Số khoảng",
                "description": "Số nhóm có độ rộng bằng nhau cho chế độ 'bins'. Mặc định 10."
              },
              "percent": {
                "label": "Phần trăm",
                "description": "Xuất ra phần trăm của mỗi lớp so với các ô hợp lệ của vùng thay vì số ô thô. Mặc định false."
              },
              "zone_band": {
                "label": "Kênh vùng",
                "description": "Kênh cần đọc từ 'zones' (đánh số từ 1). Mặc định 1."
              },
              "value_band": {
                "label": "Kênh giá trị",
                "description": "Kênh cần đọc từ 'value' (đánh số từ 1). Mặc định 1."
              },
              "long_output": {
                "label": "Đầu ra dạng dài",
                "description": "Đường dẫn CSV tùy chọn cho biến thể ở dạng dài (zone,class,count,percent)."
              }
            }
          },
          "extract_cog_subset": {
            "name": "Trích xuất tập con COG",
            "description": "Trích xuất một tập con theo bbox từ một Cloud Optimized GeoTIFF cục bộ hoặc qua HTTP.",
            "params": {
              "input": {
                "label": "Đầu vào",
                "description": "Tệp COG cục bộ. Cung cấp input hoặc url."
              },
              "url": {
                "label": "URL",
                "description": "URL COG qua HTTP(S). Cung cấp url hoặc input; các nguồn HTTP dùng yêu cầu theo dải byte."
              },
              "bbox": {
                "label": "Hộp bao",
                "description": "Hộp bao dưới dạng minX,minY,maxX,maxY theo bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS hộp bao",
                "description": "Mã EPSG của các tọa độ trong bbox."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn COG đầu ra."
              },
              "level": {
                "label": "Mức",
                "description": "Mức tổng quan của COG cần đọc; 0 là độ phân giải đầy đủ."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước điểm ảnh đầu ra mong muốn. Dùng đơn vị của output_crs khi output_crs được đặt; nếu không thì dùng đơn vị của bbox_crs. Sẽ chọn mức tổng quan COG gần nhất khi bỏ qua level."
              },
              "output_crs": {
                "label": "CRS đầu ra",
                "description": "Mã EPSG đầu ra tùy chọn. Khi được đặt, tập con sẽ được chiếu về hệ tọa độ này. Với các hệ tọa độ nguồn không thể ghi thành siêu dữ liệu EPSG, mặc định là bbox_crs."
              },
              "nodata": {
                "label": "NoData",
                "description": "Giá trị nodata đầu ra tùy chọn. Được dùng làm giá trị lấp khi chiếu lại và được ghi thành siêu dữ liệu nodata của đầu ra."
              }
            }
          },
          "extract_wms_subset": {
            "name": "Trích xuất tập con WMS",
            "description": "Yêu cầu một tập con theo bbox từ một điểm cuối WMS GetMap và ghi nó thành một COG nén Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "URL điểm cuối WMS."
              },
              "layers": {
                "label": "Lớp",
                "description": "(Các) tên lớp WMS, phân tách bằng dấu phẩy."
              },
              "styles": {
                "label": "Kiểu dáng",
                "description": "(Các) tên kiểu hiển thị WMS, phân tách bằng dấu phẩy. Mặc định để trống."
              },
              "bbox": {
                "label": "Hộp bao",
                "description": "Hộp bao dưới dạng minX,minY,maxX,maxY theo bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS hộp bao",
                "description": "Mã EPSG của các tọa độ trong bbox."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn COG đầu ra."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước điểm ảnh đầu ra mong muốn theo đơn vị của output_crs khi output_crs được đặt; nếu không thì theo đơn vị của bbox_crs."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng yêu cầu của đầu ra tính bằng điểm ảnh. Được dùng khi bỏ qua resolution."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao yêu cầu của đầu ra tính bằng điểm ảnh. Được dùng khi bỏ qua resolution."
              },
              "output_crs": {
                "label": "CRS đầu ra",
                "description": "Mã EPSG đầu ra/yêu cầu tùy chọn. Mặc định là bbox_crs."
              },
              "format": {
                "label": "Định dạng",
                "description": "Định dạng ảnh WMS. Mặc định là image/geotiff."
              },
              "version": {
                "label": "Phiên bản",
                "description": "Phiên bản WMS. Mặc định là 1.1.1."
              },
              "nodata": {
                "label": "NoData",
                "description": "Giá trị nodata đầu ra tùy chọn."
              }
            }
          },
          "extract_xyz_tile_subset": {
            "name": "Trích xuất tập con ô XYZ",
            "description": "Tải các ô raster XYZ cho một bbox, ghép chúng lại, và ghi ra một COG RGB nén Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "Mẫu URL ô XYZ, ví dụ https://.../{z}/{x}/{y}.png."
              },
              "zoom": {
                "label": "Mức thu phóng",
                "description": "Mức thu phóng XYZ."
              },
              "bbox": {
                "label": "Hộp bao",
                "description": "Hộp bao dưới dạng minX,minY,maxX,maxY theo bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS hộp bao",
                "description": "Mã EPSG của các tọa độ trong bbox."
              },
              "output": {
                "label": "Đầu ra",
                "description": "Đường dẫn COG đầu ra."
              },
              "resolution": {
                "label": "Độ phân giải",
                "description": "Kích thước điểm ảnh đầu ra mong muốn theo đơn vị của output_crs. Mặc định là độ phân giải gốc của ô."
              },
              "width": {
                "label": "Chiều rộng",
                "description": "Chiều rộng đầu ra tính bằng điểm ảnh. Được dùng khi bỏ qua resolution."
              },
              "height": {
                "label": "Chiều cao",
                "description": "Chiều cao đầu ra tính bằng điểm ảnh. Được dùng khi bỏ qua resolution."
              },
              "output_crs": {
                "label": "CRS đầu ra",
                "description": "Mã EPSG đầu ra tùy chọn. Mặc định là bbox_crs."
              },
              "tile_size": {
                "label": "Kích thước ô",
                "description": "Kích thước ô tính bằng điểm ảnh. Mặc định là 256."
              },
              "subdomains": {
                "label": "Tên miền phụ",
                "description": "Các chữ cái tên miền phụ tùy chọn cho {s}, ví dụ abc."
              },
              "nodata": {
                "label": "NoData",
                "description": "Giá trị nodata đầu ra tùy chọn dùng cho các điểm ảnh bị thiếu/trong suốt."
              }
            }
          }
        }
      },
      "whitebox": {
        "categories": {
          "conversion": "Chuyển đổi",
          "conversionGeometryTopology": "Chuyển đổi - Hình học và tô pô",
          "conversionRasterVectorConversion": "Chuyển đổi - Chuyển đổi raster/vector",
          "conversionVectorTableIO": "Chuyển đổi - Nhập/xuất vector và bảng",
          "hydrology": "Thủy văn",
          "hydrologyDepressionsStorage": "Thủy văn - Vùng trũng và trữ nước",
          "hydrologyFlowRouting": "Thủy văn - Định tuyến dòng chảy",
          "hydrologyHydrologicIndices": "Thủy văn - Chỉ số thủy văn",
          "hydrologyStreamsLongitudinalAnalysis": "Thủy văn - Sông suối - Phân tích dọc tuyến",
          "hydrologyStreamsNetworkExtraction": "Thủy văn - Sông suối - Trích xuất mạng lưới",
          "hydrologyStreamsOrderingMetrics": "Thủy văn - Sông suối - Chỉ số phân cấp",
          "hydrologyWatershedsBasins": "Thủy văn - Lưu vực và bồn thu nước",
          "lidarAnalysisMetrics": "LiDAR - Chỉ số phân tích",
          "lidarFilteringClassification": "LiDAR - Lọc và phân loại",
          "lidarIOManagement": "LiDAR - Nhập/xuất và quản lý",
          "lidarInterpolationGridding": "LiDAR - Nội suy và tạo lưới",
          "projectionAndGeoreferencing": "Phép chiếu và tham chiếu địa lý",
          "raster": "Raster",
          "rasterDistanceCost": "Raster - Khoảng cách và chi phí",
          "rasterLocalNeighborhood": "Raster - Lân cận cục bộ",
          "rasterOverlayMath": "Raster - Phép toán chồng lớp",
          "rasterReclassifyMask": "Raster - Phân loại lại và mặt nạ",
          "rasterSpatialStatistics": "Raster - Thống kê không gian",
          "remoteSensingChangeDetection": "Viễn thám - Phát hiện biến động",
          "remoteSensingClassification": "Viễn thám - Phân loại",
          "remoteSensingEdgeFeatureDetection": "Viễn thám - Phát hiện biên và đối tượng",
          "remoteSensingEnhancementContrast": "Viễn thám - Tăng cường và tương phản",
          "remoteSensingFilters": "Viễn thám - Bộ lọc",
          "remoteSensingObia": "Viễn thám - OBIA",
          "remoteSensingRadiometricCorrection": "Viễn thám - Hiệu chỉnh bức xạ",
          "remoteSensingSar": "Viễn thám - SAR",
          "remoteSensingSpectralAnalytics": "Viễn thám - Phân tích phổ",
          "remoteSensingThermalEmissivity": "Viễn thám - Nhiệt và độ phát xạ",
          "terrain": "Địa hình",
          "terrainDerivatives": "Địa hình - Đạo hàm",
          "terrainLandformIndices": "Địa hình - Chỉ số dạng địa hình",
          "terrainMultiscaleSignatures": "Địa hình - Đặc trưng đa tỉ lệ",
          "terrainRoughnessTexture": "Địa hình - Độ nhám và kết cấu",
          "terrainVisibility": "Địa hình - Tầm nhìn",
          "terrainWorkflowProducts": "Địa hình - Sản phẩm quy trình",
          "vector": "Vector",
          "vectorAttributeAnalysis": "Vector - Phân tích thuộc tính",
          "vectorGeometryProcessing": "Vector - Xử lý hình học",
          "vectorLinearReferencing": "Vector - Tham chiếu tuyến tính",
          "vectorNetworkAnalysis": "Vector - Phân tích mạng lưới",
          "vectorOnlineData": "Vector - Dữ liệu trực tuyến",
          "vectorOverlayAnalysis": "Vector - Phân tích chồng lớp",
          "vectorSamplingGridding": "Vector - Lấy mẫu và tạo lưới",
          "vectorShapeMetrics": "Vector - Chỉ số hình dạng",
          "vectorSpatialStatistics": "Vector - Thống kê không gian"
        },
        "menuTool": {
          "calculate_transit_service_frequency": "Tính tần suất phục vụ giao thông công cộng",
          "excel_to_table": "Excel sang bảng",
          "extract_scanned_features": "Trích xuất đối tượng từ bản đồ quét",
          "features_to_gpx": "Đối tượng sang GPX",
          "features_to_gtfs": "Đối tượng sang GTFS",
          "gpx_to_features": "GPX sang đối tượng",
          "gtfs_to_features": "GTFS sang đối tượng",
          "h3_to_vector": "Ô H3 sang đa giác",
          "h3_polyfill": "Lấp đầy H3",
          "kml_to_features": "KML sang đối tượng",
          "pmtiles_extract": "Trích xuất PMTiles",
          "raster_to_h3": "Raster sang ô H3",
          "write_pmtiles": "Raster sang PMTiles",
          "raster_to_tiles": "Raster sang ô XYZ",
          "read_geoparquet": "Đọc GeoParquet",
          "vector_convert": "Chuyển đổi vector",
          "vector_to_h3": "Vector sang ô H3",
          "vector_to_pmtiles": "Vector sang PMTiles",
          "write_geoparquet": "Ghi GeoParquet",
          "fix_dangling_arcs": "Sửa cung treo",
          "lines_to_polygons": "Đường thành đa giác",
          "multipart_to_singlepart": "Đa phần thành đơn phần",
          "polygons_to_lines": "Đa giác thành đường",
          "remove_polygon_holes": "Loại bỏ lỗ đa giác",
          "singlepart_to_multipart": "Đơn phần thành đa phần",
          "topology_rule_autofix": "Tự động sửa quy tắc tô pô",
          "topology_rule_validate": "Kiểm tra quy tắc tô pô",
          "topology_validation_report": "Báo cáo kiểm tra tô pô",
          "convert_nodata_to_zero": "Chuyển NoData thành 0",
          "modify_nodata_value": "Sửa đổi giá trị NoData",
          "new_raster_from_base_raster": "Raster mới từ raster nền",
          "new_raster_from_base_vector": "Raster mới từ vector nền",
          "raster_to_vector_lines": "Raster thành đường vector",
          "raster_to_vector_points": "Raster thành điểm vector",
          "raster_to_vector_polygons": "Raster thành đa giác vector",
          "remove_raster_polygon_holes": "Loại bỏ lỗ đa giác raster",
          "set_nodata_value": "Đặt giá trị NoData",
          "vector_lines_to_raster": "Đường vector thành raster",
          "vector_points_to_raster": "Điểm vector thành raster",
          "vector_polygons_to_raster": "Đa giác vector thành raster",
          "add_point_coordinates_to_table": "Thêm tọa độ điểm vào bảng",
          "clean_vector": "Làm sạch vector",
          "csv_points_to_vector": "Điểm CSV thành vector",
          "export_table_to_csv": "Xuất bảng sang CSV",
          "join_tables": "Kết nối bảng",
          "merge_table_with_csv": "Gộp bảng với CSV",
          "merge_vectors": "Gộp vector",
          "reinitialize_attribute_table": "Khởi tạo lại bảng thuộc tính",
          "vector_summary_statistics": "Thống kê tóm tắt vector",
          "delineate_depressions": "Khoanh vùng trũng",
          "delineate_mounts": "Khoanh vùng gò",
          "enforce_river_monotonicity": "Áp đặt tính đơn điệu của sông",
          "extract_sinks": "Trích xuất hố trũng",
          "fill_spill_merge": "Lấp-Tràn-Gộp",
          "topo_to_raster": "Địa hình sang raster",
          "breach_depressions_least_cost": "Phá vùng trũng chi phí tối thiểu",
          "breach_single_cell_pits": "Phá hố đơn ô",
          "burn_streams": "Khắc dòng suối",
          "burn_streams_at_roads": "Khắc dòng suối tại đường giao thông",
          "depth_in_sink": "Độ sâu trong vùng trũng",
          "fill_burn": "Lấp và khắc",
          "fill_depressions": "Lấp vùng trũng",
          "fill_depressions_planchon_and_darboux": "Lấp vùng trũng Planchon và Darboux",
          "fill_depressions_wang_and_liu": "Lấp vùng trũng Wang và Liu",
          "fill_pits": "Lấp hố",
          "flatten_lakes": "Làm phẳng hồ",
          "impoundment_size_index": "Chỉ số kích thước hồ chứa",
          "insert_dams": "Chèn đập",
          "raise_walls": "Nâng tường",
          "sink": "Vùng trũng",
          "stochastic_depression_analysis": "Phân tích vùng trũng ngẫu nhiên",
          "topological_breach_burn": "Phá và khắc tô pô",
          "upslope_depression_storage": "Trữ nước vùng trũng thượng lưu",
          "average_flowpath_slope": "Độ dốc trung bình đường dòng chảy",
          "average_upslope_flowpath_length": "Chiều dài trung bình đường dòng chảy thượng lưu",
          "d8_flow_accum": "Tích lũy dòng chảy D8",
          "d8_mass_flux": "Thông lượng khối D8",
          "d8_pointer": "Con trỏ D8",
          "dinf_flow_accum": "Tích lũy dòng chảy D-infinity",
          "dinf_mass_flux": "Thông lượng khối D-infinity",
          "dinf_pointer": "Con trỏ D-infinity",
          "downslope_flowpath_length": "Chiều dài đường dòng chảy hạ lưu",
          "fd8_flow_accum": "Tích lũy dòng chảy FD8",
          "fd8_pointer": "Con trỏ FD8",
          "flow_accum_full_workflow": "Quy trình tích lũy dòng chảy đầy đủ",
          "flow_length_diff": "Hiệu chiều dài dòng chảy",
          "max_upslope_flowpath_length": "Chiều dài đường dòng chảy thượng lưu lớn nhất",
          "max_upslope_value": "Giá trị thượng lưu lớn nhất",
          "mdinf_flow_accum": "Tích lũy dòng chảy MD-infinity",
          "minimal_dispersion_flow_algorithm": "Thuật toán dòng chảy phân tán tối thiểu",
          "num_inflowing_neighbours": "Số ô lân cận chảy vào",
          "qin_flow_accumulation": "Tích lũy dòng chảy Qin",
          "quinn_flow_accumulation": "Tích lũy dòng chảy Quinn",
          "rho8_flow_accum": "Tích lũy dòng chảy Rho8",
          "rho8_pointer": "Con trỏ Rho8",
          "trace_downslope_flowpaths": "Truy vết đường dòng chảy hạ lưu",
          "depth_to_water": "Độ sâu đến mực nước",
          "distance_to_outlet": "Khoảng cách đến cửa ra",
          "downslope_distance_to_stream": "Khoảng cách hạ lưu đến suối",
          "downslope_index": "Chỉ số hạ lưu",
          "edge_contamination": "Nhiễm biên",
          "elev_relative_to_watershed_min_max": "Độ cao tương đối so với min/max lưu vực",
          "elevation_above_stream": "Độ cao trên suối",
          "elevation_above_stream_euclidean": "Độ cao trên suối Euclid",
          "find_noflow_cells": "Tìm ô không dòng chảy",
          "find_parallel_flow": "Tìm dòng chảy song song",
          "hydrologic_connectivity": "Liên thông thủy văn",
          "relative_stream_power_index": "Chỉ số năng lượng dòng tương đối",
          "sediment_transport_index": "Chỉ số vận chuyển trầm tích",
          "wetness_index": "Chỉ số độ ẩm",
          "farthest_channel_head": "Đầu kênh xa nhất",
          "find_main_stem": "Tìm dòng chính",
          "length_of_upstream_channels": "Chiều dài kênh thượng nguồn",
          "long_profile": "Trắc dọc",
          "long_profile_from_points": "Trắc dọc từ điểm",
          "extract_streams": "Trích xuất suối",
          "extract_valleys": "Trích xuất thung lũng",
          "prune_vector_streams": "Tỉa suối vector",
          "raster_streams_to_vector": "Suối raster thành vector",
          "rasterize_streams": "Raster hóa suối",
          "remove_short_streams": "Loại bỏ suối ngắn",
          "repair_stream_vector_topology": "Sửa tô pô vector suối",
          "river_centerlines": "Đường tim sông",
          "hack_stream_order": "Cấp suối Hack",
          "horton_ratios": "Tỉ số Horton",
          "horton_stream_order": "Cấp suối Horton",
          "shreve_stream_magnitude": "Độ lớn suối Shreve",
          "strahler_order_basins": "Bồn thu nước theo cấp Strahler",
          "strahler_stream_order": "Cấp suối Strahler",
          "stream_link_class": "Lớp đoạn suối",
          "stream_link_identifier": "Định danh đoạn suối",
          "stream_link_length": "Chiều dài đoạn suối",
          "stream_link_slope": "Độ dốc đoạn suối",
          "stream_slope_continuous": "Độ dốc suối liên tục",
          "topological_stream_order": "Cấp suối tô pô",
          "tributary_identifier": "Định danh chi lưu",
          "vector_stream_network_analysis": "Phân tích mạng lưới suối vector",
          "basins": "Bồn thu nước",
          "flood_order": "Thứ tự ngập lụt",
          "hillslopes": "Sườn đồi",
          "isobasins": "Lưu vực đẳng diện",
          "jenson_snap_pour_points": "Bắt dính điểm đổ Jenson",
          "longest_flowpath": "Đường dòng chảy dài nhất",
          "max_branch_length": "Chiều dài nhánh lớn nhất",
          "snap_pour_points": "Bắt dính điểm đổ",
          "subbasins": "Tiểu lưu vực",
          "unnest_basins": "Gỡ lồng bồn thu nước",
          "watershed": "Lưu vực",
          "watershed_from_raster_pour_points": "Lưu vực từ điểm đổ raster",
          "assign_projection_lidar": "Gán phép chiếu cho LiDAR",
          "colourize_based_on_class": "Tô màu theo lớp",
          "colourize_based_on_point_returns": "Tô màu theo số lần phản hồi điểm",
          "find_flightline_edge_points": "Tìm điểm biên tuyến bay",
          "individual_tree_detection": "Phát hiện cây đơn lẻ",
          "lidar_eigenvalue_features": "Đặc trưng trị riêng LiDAR",
          "lidar_histogram": "Lược đồ LiDAR",
          "lidar_info": "Thông tin LiDAR",
          "lidar_kappa": "Kappa LiDAR",
          "lidar_point_density": "Mật độ điểm LiDAR",
          "lidar_point_return_analysis": "Phân tích phản hồi điểm LiDAR",
          "lidar_point_stats": "Thống kê điểm LiDAR",
          "lidar_ransac_planes": "Mặt phẳng RANSAC LiDAR",
          "lidar_rooftop_analysis": "Phân tích mái nhà LiDAR",
          "normal_vectors": "Vector pháp tuyến",
          "classify_buildings_in_lidar": "Phân loại nhà trong LiDAR",
          "classify_lidar": "Phân loại LiDAR",
          "classify_overlap_points": "Phân loại điểm chồng lấn",
          "clip_lidar_to_polygon": "Cắt LiDAR theo đa giác",
          "erase_polygon_from_lidar": "Xóa đa giác khỏi LiDAR",
          "filter_lidar": "Lọc LiDAR",
          "filter_lidar_by_percentile": "Lọc LiDAR theo phân vị",
          "filter_lidar_by_reference_surface": "Lọc LiDAR theo bề mặt tham chiếu",
          "filter_lidar_classes": "Lọc lớp LiDAR",
          "filter_lidar_noise": "Lọc nhiễu LiDAR",
          "filter_lidar_scan_angles": "Lọc góc quét LiDAR",
          "height_above_ground": "Chiều cao so với mặt đất",
          "improved_ground_point_filter": "Bộ lọc điểm mặt đất cải tiến",
          "individual_tree_segmentation": "Phân đoạn cây đơn lẻ",
          "lidar_classify_subset": "Phân loại tập con LiDAR",
          "lidar_elevation_slice": "Lát cắt độ cao LiDAR",
          "lidar_remove_outliers": "Loại bỏ giá trị ngoại lai LiDAR",
          "lidar_segmentation": "Phân đoạn LiDAR",
          "lidar_segmentation_based_filter": "Bộ lọc dựa trên phân đoạn LiDAR",
          "modify_lidar": "Sửa đổi LiDAR",
          "normalize_lidar": "Chuẩn hóa LiDAR",
          "remove_duplicates": "Loại bỏ điểm trùng",
          "ascii_to_las": "ASCII sang LAS",
          "las_to_ascii": "LAS sang ASCII",
          "las_to_shapefile": "LAS sang Shapefile",
          "lidar_colourize": "Tô màu LiDAR",
          "lidar_join": "Ghép LiDAR",
          "lidar_shift": "Dịch chuyển LiDAR",
          "lidar_tile": "Chia ô LiDAR",
          "lidar_tophat_transform": "Biến đổi Top-hat LiDAR",
          "recover_flightline_info": "Khôi phục thông tin tuyến bay",
          "select_tiles_by_polygon": "Chọn ô theo đa giác",
          "sort_lidar": "Sắp xếp LiDAR",
          "split_lidar": "Tách LiDAR",
          "flightline_overlap": "Chồng lấn tuyến bay",
          "lidar_block_maximum": "Cực đại theo khối LiDAR",
          "lidar_block_minimum": "Cực tiểu theo khối LiDAR",
          "lidar_construct_vector_tin": "Xây dựng TIN vector từ LiDAR",
          "lidar_contour": "Đường đồng mức LiDAR",
          "lidar_digital_surface_model": "Mô hình bề mặt số LiDAR",
          "lidar_hex_bin": "Gom ô lục giác LiDAR",
          "lidar_hillshade": "Bóng đổ địa hình LiDAR",
          "lidar_idw_interpolation": "Nội suy IDW LiDAR",
          "lidar_nearest_neighbour_gridding": "Tạo lưới lân cận gần nhất LiDAR",
          "lidar_radial_basis_function_interpolation": "Nội suy hàm cơ sở xuyên tâm LiDAR",
          "lidar_sibson_interpolation": "Nội suy Sibson LiDAR",
          "lidar_thin": "Làm thưa LiDAR",
          "lidar_thin_high_density": "Làm thưa LiDAR mật độ cao",
          "lidar_tile_footprint": "Đường bao ô LiDAR",
          "lidar_tin_gridding": "Tạo lưới TIN LiDAR",
          "build_network_topology": "Xây dựng tô pô mạng lưới",
          "closest_facility_network": "Cơ sở gần nhất trên mạng lưới",
          "generate_network_nodes": "Tạo nút mạng lưới",
          "k_shortest_paths_network": "K đường đi ngắn nhất trên mạng lưới",
          "location_allocation_network": "Phân bổ vị trí trên mạng lưới",
          "map_matching_v1": "Khớp bản đồ V1",
          "multimodal_od_cost_matrix": "Ma trận chi phí OD đa phương thức",
          "multimodal_routes_from_od": "Tuyến đa phương thức từ OD",
          "multimodal_shortest_path": "Đường đi ngắn nhất đa phương thức",
          "network_accessibility_metrics": "Chỉ số khả năng tiếp cận mạng lưới",
          "network_centrality_metrics": "Chỉ số trung tâm mạng lưới",
          "network_connected_components": "Thành phần liên thông mạng lưới",
          "network_node_degree": "Bậc nút mạng lưới",
          "network_od_cost_matrix": "Ma trận chi phí OD mạng lưới",
          "network_routes_from_od": "Tuyến mạng lưới từ OD",
          "network_service_area": "Vùng phục vụ mạng lưới",
          "network_topology_audit": "Kiểm toán tô pô mạng lưới",
          "od_sensitivity_analysis": "Phân tích độ nhạy OD",
          "shortest_path_network": "Đường đi ngắn nhất trên mạng lưới",
          "snap_points_to_network": "Bắt dính điểm vào mạng lưới",
          "split_lines_at_intersections": "Tách đường tại giao điểm",
          "transfer_attributes": "Chuyển thuộc tính",
          "travelling_salesman_problem": "Bài toán người bán hàng",
          "vehicle_routing_cvrp": "Định tuyến xe CVRP",
          "vehicle_routing_pickup_delivery": "Định tuyến xe nhận-giao hàng",
          "vehicle_routing_vrptw": "Định tuyến xe VRPTW",
          "georeference_raster_from_control_points": "Tham chiếu địa lý raster từ điểm khống chế",
          "orthorectification": "Nắn chỉnh trực giao",
          "reproject_lidar": "Chiếu lại LiDAR",
          "reproject_vector": "Chiếu lại vector",
          "aggregate_multidimensional_raster": "Gộp raster đa chiều",
          "analyze_changes_ccdc": "Phân tích biến động bằng CCDC",
          "apply_radiometric_calibration": "Áp dụng hiệu chuẩn bức xạ",
          "assign_projection_raster": "Gán phép chiếu cho raster",
          "band_collection_statistics": "Thống kê tập hợp kênh",
          "block_statistics": "Thống kê theo khối",
          "boundary_clean": "Làm sạch ranh giới",
          "cell_position_statistics": "Thống kê vị trí ô",
          "cell_statistics": "Thống kê ô",
          "classification_accuracy_assessment": "Đánh giá độ chính xác phân loại",
          "combine": "Kết hợp",
          "composite_bands": "Tổ hợp kênh",
          "compute_sar_indices": "Tính chỉ số SAR",
          "contour_with_barriers": "Đường đồng mức có rào cản",
          "convert_sar_units": "Chuyển đổi đơn vị SAR",
          "coregister_rasters": "Đồng đăng ký raster",
          "corridor": "Hành lang",
          "cost_back_link": "Liên kết ngược chi phí",
          "cut_fill": "Đào đắp",
          "darcy_flow": "Dòng chảy Darcy",
          "dem_filter": "Bộ lọc DEM",
          "detect_image_anomalies": "Phát hiện bất thường trên ảnh",
          "diffusion_interpolation_with_barriers": "Nội suy khuếch tán có rào cản",
          "dimensional_moving_statistics": "Thống kê trượt theo chiều",
          "empirical_bayesian_kriging": "Kriging Bayes thực nghiệm",
          "euclidean_direction": "Hướng Euclid",
          "expand_shrink": "Mở rộng / Thu hẹp",
          "extract_cog_subset": "Trích xuất tập con COG",
          "extract_ocean_winds": "Trích xuất gió trên biển",
          "extract_spectra_from_image": "Trích xuất phổ từ ảnh",
          "extract_wms_subset": "Trích xuất tập con WMS",
          "extract_xyz_tile_subset": "Trích xuất tập con ô XYZ",
          "find_argument_statistics": "Tìm thống kê đối số",
          "flatten_interferogram": "Làm phẳng ảnh giao thoa",
          "focal_flow": "Dòng chảy tiêu cự",
          "focal_statistics": "Thống kê tiêu cự",
          "frequency_comparison": "So sánh tần suất",
          "fuzzy_overlay": "Chồng lớp mờ",
          "gaussian_geostatistical_simulations": "Mô phỏng địa thống kê Gauss",
          "multidimensional_anomaly": "Tạo bất thường đa chiều",
          "generate_trend_raster": "Tạo raster xu thế",
          "goldstein_phase_filter": "Bộ lọc pha Goldstein",
          "idw_3d": "IDW 3D",
          "interpolate_from_spatiotemporal_points": "Nội suy từ điểm không-thời gian",
          "interpolate_with_barriers": "Nội suy có rào cản",
          "kernel_density_ratio": "Tỉ số mật độ kernel",
          "kernel_interpolation_with_barriers": "Nội suy kernel có rào cản",
          "landtrendr": "LandTrendr",
          "las_height_metrics": "Chỉ số chiều cao LAS",
          "line_density": "Mật độ đường",
          "line_statistics": "Thống kê đường",
          "local_polynomial_interpolation": "Nội suy đa thức cục bộ",
          "locate_regions": "Định vị vùng",
          "matched_filter_target_detection": "Phát hiện mục tiêu bằng bộ lọc đối sánh (CEM/ACE)",
          "maximum_likelihood_classification": "Phân loại hợp lý cực đại",
          "merge_multidimensional_rasters": "Gộp raster đa chiều",
          "multicriteria_overlay": "Chồng lớp đa tiêu chí",
          "multidimensional_principal_components": "Thành phần chính đa chiều",
          "multidimensional_raster_correlation": "Tương quan raster đa chiều",
          "multilook": "Đa nhìn",
          "multitemporal_coherence": "Độ kết hợp đa thời gian",
          "observer_points": "Điểm quan sát",
          "optimal_interpolation": "Nội suy tối ưu",
          "path_distance": "Khoảng cách đường đi",
          "percentile_contours": "Đường đồng mức phân vị",
          "point_statistics": "Thống kê điểm",
          "porous_puff": "Khuếch tán xốp",
          "predict_using_trend_raster": "Dự đoán bằng raster xu thế",
          "presence_only_prediction": "Dự đoán chỉ dựa trên hiện diện",
          "pycnophylactic_interpolation": "Nội suy bảo toàn khối lượng",
          "radiometric_terrain_flattening": "Làm phẳng địa hình bức xạ",
          "raster_normalize": "Chuẩn hóa raster",
          "regression_kriging": "Kriging hồi quy",
          "remove_thermal_noise": "Loại bỏ nhiễu nhiệt",
          "render_raster_png": "Kết xuất raster sang PNG",
          "reproject_raster": "Chiếu lại raster",
          "rescale_by_function": "Co giãn theo hàm",
          "sar_coherence": "Độ kết hợp SAR",
          "slice_raster": "Cắt lát raster",
          "solar_radiation": "Bức xạ mặt trời",
          "space_time_kernel_density": "Mật độ kernel không-thời gian",
          "spatial_association_between_zones": "Liên kết không gian giữa các vùng",
          "spectral_index": "Chỉ số phổ",
          "split_raster": "Tách raster",
          "storage_capacity": "Dung tích trữ nước",
          "subset_multidimensional_raster": "Tập con raster đa chiều",
          "summarize_categorical_raster": "Tóm tắt raster phân loại",
          "surface_parameters": "Tham số bề mặt",
          "surface_volume": "Thể tích bề mặt",
          "time_series_cross_correlation": "Tương quan chéo chuỗi thời gian",
          "unwrap_phase": "Mở pha",
          "warp_raster": "Nắn raster",
          "weighted_voronoi": "Voronoi có trọng số",
          "zonal_characterization": "Đặc trưng hóa theo vùng",
          "zonal_fill": "Lấp theo vùng",
          "zonal_geometry": "Hình học theo vùng",
          "zonal_histogram": "Lược đồ theo vùng",
          "abs": "Trị tuyệt đối",
          "aggregate_raster": "Gộp raster",
          "anova": "ANOVA",
          "arccos": "Arccos",
          "arcosh": "Arcosh",
          "arcsin": "Arcsin",
          "arctan": "Arctan",
          "arsinh": "Arsinh",
          "artanh": "Artanh",
          "atan2": "Atan2",
          "block_maximum": "Cực đại theo khối",
          "block_minimum": "Cực tiểu theo khối",
          "boundary_shape_complexity": "Độ phức tạp hình dạng ranh giới",
          "ceil": "Làm tròn lên",
          "centroid_raster": "Trọng tâm raster",
          "clip_raster_to_polygon": "Cắt raster theo đa giác",
          "clump": "Gom cụm",
          "cos": "Cos",
          "cosh": "Cosh",
          "create_plane": "Tạo mặt phẳng",
          "crispness_index": "Chỉ số độ sắc nét",
          "cross_tabulation": "Bảng chéo",
          "cumulative_distribution": "Phân phối tích lũy",
          "dbscan": "DBSCAN",
          "decrement": "Giảm",
          "edge_proportion": "Tỉ lệ biên",
          "equal_to": "Bằng",
          "erase_polygon_from_raster": "Xóa đa giác khỏi raster",
          "exp": "Exp",
          "exp2": "Exp2",
          "fft_random_field": "Trường ngẫu nhiên FFT",
          "filter_raster_features_by_area": "Lọc đối tượng raster theo diện tích",
          "find_patch_edge_cells": "Tìm ô biên mảnh",
          "floor": "Làm tròn xuống",
          "greater_than": "Lớn hơn",
          "greater_than_or_equal_to": "Lớn hơn hoặc bằng",
          "heat_map": "Bản đồ nhiệt",
          "idw_interpolation": "Nội suy IDW",
          "image_autocorrelation": "Tự tương quan ảnh",
          "image_correlation": "Tương quan ảnh",
          "image_regression": "Hồi quy ảnh",
          "increment": "Tăng",
          "inplace_add": "Cộng tại chỗ",
          "inplace_divide": "Chia tại chỗ",
          "inplace_multiply": "Nhân tại chỗ",
          "inplace_subtract": "Trừ tại chỗ",
          "integer_division": "Chia lấy nguyên",
          "inverse_pca": "PCA nghịch đảo",
          "is_nodata": "Là NoData",
          "kappa_index": "Chỉ số Kappa",
          "ks_normality_test": "Kiểm định chuẩn KS",
          "less_than": "Nhỏ hơn",
          "less_than_or_equal_to": "Nhỏ hơn hoặc bằng",
          "list_unique_values_raster": "Liệt kê giá trị duy nhất raster",
          "ln": "Ln",
          "log10": "Log10",
          "log2": "Log2",
          "map_features": "Ánh xạ đối tượng",
          "max": "Max",
          "min": "Min",
          "modified_shepard_interpolation": "Nội suy Shepard cải tiến",
          "narrowness_index": "Chỉ số độ hẹp",
          "negate": "Đổi dấu",
          "nibble": "Gặm",
          "not_equal_to": "Khác",
          "ordinary_cokriging": "Nội suy CoKriging thông thường",
          "paired_sample_t_test": "Kiểm định t mẫu cặp",
          "phi_coefficient": "Hệ số Phi",
          "principal_component_analysis": "Phân tích thành phần chính",
          "print_geotiff_tags": "In thẻ GeoTIFF",
          "quantiles": "Phân vị",
          "radial_basis_function_interpolation": "Nội suy hàm cơ sở xuyên tâm",
          "radius_of_gyration": "Bán kính hồi chuyển",
          "random_field": "Trường ngẫu nhiên",
          "random_forest_classification_fit": "Huấn luyện phân loại rừng ngẫu nhiên",
          "random_forest_classification_predict": "Dự đoán phân loại rừng ngẫu nhiên",
          "random_forest_regression_fit": "Huấn luyện hồi quy rừng ngẫu nhiên",
          "random_forest_regression_predict": "Dự đoán hồi quy rừng ngẫu nhiên",
          "random_sample": "Mẫu ngẫu nhiên",
          "raster_area": "Diện tích raster",
          "raster_calculator": "Máy tính raster",
          "raster_cell_assignment": "Gán giá trị ô raster",
          "raster_histogram": "Lược đồ raster",
          "raster_perimeter": "Chu vi raster",
          "raster_summary_stats": "Thống kê tóm tắt raster",
          "reciprocal": "Nghịch đảo",
          "rescale_value_range": "Co giãn khoảng giá trị",
          "root_mean_square_error": "Sai số toàn phương trung bình",
          "round": "Làm tròn",
          "shape_complexity_index_raster": "Chỉ số độ phức tạp hình dạng raster",
          "sieve": "Sàng lọc",
          "sin": "Sin",
          "sinh": "Sinh",
          "sqrt": "Căn bậc hai",
          "square": "Bình phương",
          "tan": "Tan",
          "tanh": "Tanh",
          "tin_interpolation": "Nội suy TIN",
          "to_degrees": "Sang độ",
          "to_radians": "Sang radian",
          "trend_surface": "Mặt xu thế",
          "trend_surface_vector_points": "Mặt xu thế từ điểm vector",
          "truncate": "Cắt cụt",
          "turning_bands_simulation": "Mô phỏng dải xoay",
          "two_sample_ks_test": "Kiểm định KS hai mẫu",
          "wilcoxon_signed_rank_test": "Kiểm định hạng có dấu Wilcoxon",
          "z_scores": "Điểm Z",
          "zonal_statistics": "Thống kê theo vùng",
          "buffer_raster": "Vùng đệm raster",
          "cost_allocation": "Phân bổ chi phí",
          "cost_distance": "Khoảng cách chi phí",
          "cost_pathway": "Đường đi chi phí",
          "euclidean_allocation": "Phân bổ Euclid",
          "euclidean_distance": "Khoảng cách Euclid",
          "image_correlation_neighbourhood_analysis": "Phân tích lân cận tương quan ảnh",
          "natural_neighbour_interpolation": "Nội suy lân cận tự nhiên",
          "nearest_neighbour_interpolation": "Nội suy lân cận gần nhất",
          "add": "Cộng",
          "average_overlay": "Chồng lớp trung bình",
          "bool_and": "AND logic",
          "bool_not": "NOT logic",
          "bool_or": "OR logic",
          "bool_xor": "XOR logic",
          "count_if": "Đếm nếu",
          "divide": "Chia",
          "highest_position": "Vị trí cao nhất",
          "lowest_position": "Vị trí thấp nhất",
          "max_absolute_overlay": "Chồng lớp trị tuyệt đối lớn nhất",
          "max_overlay": "Chồng lớp lớn nhất",
          "min_absolute_overlay": "Chồng lớp trị tuyệt đối nhỏ nhất",
          "min_overlay": "Chồng lớp nhỏ nhất",
          "modulo": "Chia lấy dư",
          "multiply": "Nhân",
          "multiply_overlay": "Chồng lớp nhân",
          "percent_equal_to": "Phần trăm bằng",
          "percent_greater_than": "Phần trăm lớn hơn",
          "percent_less_than": "Phần trăm nhỏ hơn",
          "pick_from_list": "Chọn từ danh sách",
          "power": "Lũy thừa",
          "standard_deviation_overlay": "Chồng lớp độ lệch chuẩn",
          "subtract": "Trừ",
          "sum_overlay": "Chồng lớp tổng",
          "update_nodata_cells": "Cập nhật ô NoData",
          "weighted_overlay": "Chồng lớp có trọng số",
          "weighted_sum": "Tổng có trọng số",
          "conditional_evaluation": "Đánh giá điều kiện",
          "reclass": "Phân loại lại",
          "reclass_equal_interval": "Phân loại lại khoảng đều",
          "geographically_weighted_regression_raster": "Hồi quy trọng số địa lý raster",
          "getis_ord_gi_star_raster": "Getis-Ord Gi* raster",
          "inhomogeneous_intensity_raster": "Cường độ không đồng nhất raster",
          "local_kriging": "Kriging cục bộ",
          "local_morans_i_lisa_raster": "Moran's I cục bộ (LISA) raster",
          "ordinary_kriging": "Kriging thông thường",
          "simple_kriging": "Kriging đơn giản",
          "spacetime_kriging": "Kriging không-thời gian",
          "spatial_error_regression_raster": "Hồi quy sai số không gian raster",
          "spatial_lag_regression_raster": "Hồi quy trễ không gian raster",
          "universal_kriging": "Kriging phổ quát",
          "change_vector_analysis": "Phân tích vector biến động",
          "image_difference_change_detection": "Phát hiện biến động bằng hiệu ảnh",
          "pca_based_change_detection": "Phát hiện biến động dựa trên PCA",
          "post_classification_change": "Biến động sau phân loại",
          "write_function_memory_insertion": "Chèn bộ nhớ hàm ghi",
          "evaluate_training_sites": "Đánh giá vùng mẫu huấn luyện",
          "fuzzy_knn_classification": "Phân loại KNN mờ",
          "generalize_classified_raster": "Tổng quát hóa raster đã phân loại",
          "generalize_with_similarity": "Tổng quát hóa theo độ tương đồng",
          "k_means_clustering": "Phân cụm K-means",
          "knn_classification": "Phân loại KNN",
          "knn_regression": "Hồi quy KNN",
          "logistic_regression": "Hồi quy logistic",
          "min_dist_classification": "Phân loại khoảng cách tối thiểu",
          "modified_k_means_clustering": "Phân cụm K-means cải tiến",
          "nnd_classification": "Phân loại NND",
          "otsu_thresholding": "Phân ngưỡng Otsu",
          "parallelepiped_classification": "Phân loại hình hộp",
          "random_forest_classification": "Phân loại rừng ngẫu nhiên",
          "random_forest_regression": "Hồi quy rừng ngẫu nhiên",
          "svm_classification": "Phân loại SVM",
          "svm_regression": "Hồi quy SVM",
          "canny_edge_detection": "Phát hiện biên Canny",
          "corner_detection": "Phát hiện góc",
          "laplacian_filter": "Bộ lọc Laplace",
          "laplacian_of_gaussians_filter": "Bộ lọc Laplace của Gauss",
          "prewitt_filter": "Bộ lọc Prewitt",
          "roberts_cross_filter": "Bộ lọc Roberts Cross",
          "sobel_filter": "Bộ lọc Sobel",
          "balance_contrast_enhancement": "Tăng cường tương phản cân bằng",
          "create_colour_composite": "Tạo ảnh tổ hợp màu",
          "direct_decorrelation_stretch": "Kéo giãn giải tương quan trực tiếp",
          "false_colour_composite": "Ảnh tổ hợp màu giả",
          "gamma_correction": "Hiệu chỉnh gamma",
          "gaussian_contrast_stretch": "Kéo giãn tương phản Gauss",
          "histogram_equalization": "Cân bằng lược đồ",
          "histogram_matching": "Đối sánh lược đồ",
          "histogram_matching_two_images": "Đối sánh lược đồ hai ảnh",
          "ihs_to_rgb": "IHS sang RGB",
          "min_max_contrast_stretch": "Kéo giãn tương phản min-max",
          "mosaic": "Ghép ảnh",
          "mosaic_with_feathering": "Ghép ảnh có làm mờ biên",
          "normalized_difference_index": "Chỉ số hiệu chuẩn hóa",
          "panchromatic_sharpening": "Tăng độ nét bằng kênh toàn sắc",
          "percentage_contrast_stretch": "Kéo giãn tương phản theo phần trăm",
          "piecewise_contrast_stretch": "Kéo giãn tương phản từng đoạn",
          "resample": "Lấy mẫu lại",
          "rgb_to_ihs": "RGB sang IHS",
          "sigmoidal_contrast_stretch": "Kéo giãn tương phản sigmoid",
          "split_colour_composite": "Tách ảnh tổ hợp màu",
          "standard_deviation_contrast_stretch": "Kéo giãn tương phản theo độ lệch chuẩn",
          "true_colour_composite": "Ảnh tổ hợp màu thật",
          "adaptive_filter": "Bộ lọc thích nghi",
          "anisotropic_diffusion_filter": "Bộ lọc khuếch tán dị hướng",
          "bilateral_filter": "Bộ lọc song phương",
          "closing": "Phép đóng",
          "conservative_smoothing_filter": "Bộ lọc làm trơn bảo thủ",
          "diff_of_gaussians_filter": "Bộ lọc hiệu Gauss",
          "diversity_filter": "Bộ lọc đa dạng",
          "edge_preserving_mean_filter": "Bộ lọc trung bình bảo toàn biên",
          "emboss_filter": "Bộ lọc chạm nổi",
          "fast_almost_gaussian_filter": "Bộ lọc xấp xỉ Gauss nhanh",
          "flip_image": "Lật ảnh",
          "frangi_filter": "Bộ lọc Frangi",
          "gabor_filter_bank": "Bộ lọc Gabor",
          "gaussian_filter": "Bộ lọc Gauss",
          "glcm_texture": "Kết cấu GLCM",
          "guided_filter": "Bộ lọc dẫn hướng",
          "high_pass_bilateral_filter": "Bộ lọc song phương thông cao",
          "high_pass_filter": "Bộ lọc thông cao",
          "high_pass_median_filter": "Bộ lọc trung vị thông cao",
          "integral_image_transform": "Biến đổi ảnh tích phân",
          "k_nearest_mean_filter": "Bộ lọc trung bình K lân cận gần nhất",
          "kuwahara_filter": "Bộ lọc Kuwahara",
          "lee_filter": "Bộ lọc Lee",
          "lidar_ground_point_filter": "Bộ lọc điểm mặt đất LiDAR",
          "line_detection_filter": "Bộ lọc phát hiện đường",
          "line_thinning": "Làm mảnh đường",
          "majority_filter": "Bộ lọc đa số",
          "maximum_filter": "Bộ lọc cực đại",
          "mean_filter": "Bộ lọc trung bình",
          "median_filter": "Bộ lọc trung vị",
          "minimum_filter": "Bộ lọc cực tiểu",
          "non_local_means_filter": "Bộ lọc trung bình phi cục bộ",
          "olympic_filter": "Bộ lọc Olympic",
          "opening": "Phép mở",
          "percentile_filter": "Bộ lọc phân vị",
          "range_filter": "Bộ lọc khoảng biến thiên",
          "remove_spurs": "Loại bỏ nhánh thừa",
          "savitzky_golay_2d_filter": "Bộ lọc Savitzky-Golay 2D",
          "scharr_filter": "Bộ lọc Scharr",
          "standard_deviation_filter": "Bộ lọc độ lệch chuẩn",
          "thicken_raster_line": "Làm dày đường raster",
          "tophat_transform": "Biến đổi Top-hat",
          "total_filter": "Bộ lọc tổng",
          "unsharp_masking": "Mặt nạ làm nét",
          "user_defined_weights_filter": "Bộ lọc trọng số tùy chỉnh",
          "wiener_filter": "Bộ lọc Wiener",
          "build_object_hierarchy_multiscale": "Xây dựng phân cấp đối tượng đa tỉ lệ",
          "classify_objects_ensemble_pro": "Phân loại đối tượng tổ hợp (Pro)",
          "classify_objects_random_forest": "Phân loại đối tượng bằng rừng ngẫu nhiên",
          "classify_objects_rules_basic": "Phân loại đối tượng theo quy tắc cơ bản",
          "classify_objects_rules_hierarchical": "Phân loại đối tượng theo quy tắc phân cấp",
          "classify_objects_svm": "Phân loại đối tượng bằng SVM",
          "evaluate_object_classification_accuracy": "Đánh giá độ chính xác phân loại đối tượng",
          "evaluate_segmentation_quality_pro": "Đánh giá chất lượng phân đoạn (Pro)",
          "image_segmentation": "Phân đoạn ảnh",
          "image_slider": "Thanh trượt ảnh",
          "image_stack_profile": "Hồ sơ chồng ảnh",
          "obia_audit_report_pro": "Báo cáo kiểm toán OBIA (Pro)",
          "obia_batch_orchestrator_pro": "Điều phối xử lý hàng loạt OBIA (Pro)",
          "obia_pipeline_basic": "Quy trình OBIA cơ bản",
          "object_class_probability_maps": "Bản đồ xác suất lớp đối tượng",
          "object_features_context_neighbors": "Đặc trưng đối tượng: ngữ cảnh lân cận",
          "object_features_shape_basic": "Đặc trưng đối tượng: hình dạng cơ bản",
          "object_features_spectral_basic": "Đặc trưng đối tượng: phổ cơ bản",
          "object_features_texture_glcm_basic": "Đặc trưng đối tượng: kết cấu GLCM cơ bản",
          "object_features_topology_relations": "Đặc trưng đối tượng: quan hệ tô pô",
          "object_uncertainty_diagnostics_pro": "Chẩn đoán độ bất định đối tượng (Pro)",
          "objects_boundary_refinement_pro": "Tinh chỉnh ranh giới đối tượng (Pro)",
          "objects_enforce_min_mapping_unit": "Áp đặt đơn vị bản đồ tối thiểu cho đối tượng",
          "polygons_to_segments": "Đa giác thành phân đoạn",
          "propagate_labels_across_hierarchy": "Lan truyền nhãn qua phân cấp",
          "segment_graph_felzenszwalb": "Phân đoạn đồ thị Felzenszwalb",
          "segment_multiresolution_hierarchical": "Phân đoạn đa độ phân giải phân cấp",
          "segment_scale_parameter_optimizer": "Tối ưu hóa tham số tỉ lệ phân đoạn",
          "segment_slic_superpixels": "Phân đoạn siêu điểm ảnh SLIC",
          "segment_watershed_markers": "Phân đoạn watershed theo điểm đánh dấu",
          "segments_merge_small_regions": "Gộp vùng nhỏ của phân đoạn",
          "segments_split_low_cohesion": "Tách phân đoạn có độ liên kết thấp",
          "segments_to_polygons": "Phân đoạn thành đa giác",
          "brdf_normalization": "Chuẩn hóa BRDF",
          "correct_vignetting": "Hiệu chỉnh tối góc ảnh",
          "dark_object_subtraction": "Trừ đối tượng tối",
          "dn_to_toa_reflectance": "DN sang phản xạ TOA",
          "terrain_corrected_optical_analytics": "Phân tích quang học hiệu chỉnh địa hình",
          "cloude_pottier_decomposition": "Phân tách Cloude-Pottier",
          "enhanced_lee_filter": "Bộ lọc Lee tăng cường",
          "freeman_durden_decomposition": "Phân tách Freeman-Durden",
          "frost_filter": "Bộ lọc Frost",
          "gamma_map_filter": "Bộ lọc Gamma MAP",
          "h_alpha_wisart_classification": "Phân loại H-Alpha Wishart",
          "kuan_filter": "Bộ lọc Kuan",
          "refined_lee_filter": "Bộ lọc Lee tinh chỉnh",
          "wisart_iterative_clustering": "Phân cụm lặp Wishart",
          "yamaguchi_4component_decomposition": "Phân tách 4 thành phần Yamaguchi",
          "continuum_removal": "Loại bỏ đường liên tục",
          "linear_spectral_unmixing": "Phân tách phổ tuyến tính",
          "minimum_noise_fraction": "Phân số nhiễu tối thiểu",
          "spectral_angle_mapper": "Ánh xạ góc phổ",
          "spectral_library_matching": "Đối sánh thư viện phổ",
          "land_surface_temperature_single_channel": "Nhiệt độ bề mặt đất kênh đơn",
          "land_surface_temperature_split_window": "Nhiệt độ bề mặt đất cửa sổ tách",
          "ndvi_based_emissivity": "Độ phát xạ dựa trên NDVI",
          "assess_route": "Đánh giá tuyến",
          "breakline_mapping": "Lập bản đồ đường gãy",
          "convergence_index": "Chỉ số hội tụ",
          "dem_void_filling": "Lấp lỗ trống DEM",
          "deviation_from_mean_elevation": "Độ lệch khỏi độ cao trung bình",
          "difference_from_mean_elevation": "Hiệu so với độ cao trung bình",
          "directional_relief": "Độ nổi theo hướng",
          "elev_above_pit": "Độ cao trên hố",
          "elev_above_pit_dist": "Khoảng cách độ cao trên hố",
          "elevation_percentile": "Phân vị độ cao",
          "embankment_mapping": "Lập bản đồ bờ đắp",
          "exposure_towards_wind_flux": "Độ phơi hướng gió",
          "feature_preserving_smoothing": "Làm trơn bảo toàn đặc trưng",
          "feature_preserving_smoothing_multiscale": "Làm trơn bảo toàn đặc trưng đa tỉ lệ",
          "fetch_analysis": "Phân tích đà gió",
          "fill_missing_data": "Lấp dữ liệu thiếu",
          "find_ridges": "Tìm sống núi",
          "hillshade": "Bóng đổ địa hình",
          "hypsometrically_tinted_hillshade": "Bóng đổ địa hình tô màu theo độ cao",
          "local_hypsometric_analysis": "Phân tích đường cong độ cao cục bộ",
          "low_points_on_headwater_divides": "Điểm thấp trên đường phân thủy đầu nguồn",
          "map_off_terrain_objects": "Lập bản đồ đối tượng phi địa hình",
          "max_downslope_elev_change": "Biến thiên độ cao hạ lưu lớn nhất",
          "max_upslope_elev_change": "Biến thiên độ cao thượng lưu lớn nhất",
          "min_downslope_elev_change": "Biến thiên độ cao hạ lưu nhỏ nhất",
          "multidirectional_hillshade": "Bóng đổ địa hình đa hướng",
          "num_downslope_neighbours": "Số ô lân cận hạ lưu",
          "num_upslope_neighbours": "Số ô lân cận thượng lưu",
          "profile": "Hồ sơ",
          "remove_off_terrain_objects": "Loại bỏ đối tượng phi địa hình",
          "ridge_and_valley_vectors": "Vector sống núi và thung lũng",
          "slope_vs_aspect_plot": "Biểu đồ độ dốc so với hướng dốc",
          "slope_vs_elev_plot": "Biểu đồ độ dốc so với độ cao",
          "smooth_vegetation_residual": "Làm trơn dư thực vật",
          "surface_area_ratio": "Tỉ số diện tích bề mặt",
          "topographic_hachures": "Nét gạch địa hình",
          "accumulation_curvature": "Độ cong tích lũy",
          "aspect": "Hướng dốc",
          "casorati_curvature": "Độ cong Casorati",
          "curvedness": "Độ cong tổng hợp",
          "difference_curvature": "Độ cong hiệu",
          "gaussian_curvature": "Độ cong Gauss",
          "generating_function": "Hàm sinh",
          "horizontal_excess_curvature": "Độ cong dư ngang",
          "maximal_curvature": "Độ cong cực đại",
          "mean_curvature": "Độ cong trung bình",
          "minimal_curvature": "Độ cong cực tiểu",
          "plan_curvature": "Độ cong mặt bằng",
          "principal_curvature_direction": "Hướng độ cong chính",
          "profile_curvature": "Độ cong trắc dọc",
          "relative_aspect": "Hướng dốc tương đối",
          "ring_curvature": "Độ cong vòng",
          "rotor": "Rotor",
          "shape_index": "Chỉ số hình dạng",
          "slope": "Độ dốc",
          "tangential_curvature": "Độ cong tiếp tuyến",
          "total_curvature": "Độ cong tổng",
          "unsphericity": "Độ phi cầu",
          "vertical_excess_curvature": "Độ cong dư đứng",
          "elev_relative_to_min_max": "Độ cao tương đối so với min/max",
          "geomorphons": "Geomorphon",
          "hypsometric_analysis": "Phân tích đường cong độ cao",
          "multiscale_topographic_position_class": "Lớp vị trí địa hình đa tỉ lệ",
          "pennock_landform_classification": "Phân loại dạng địa hình Pennock",
          "percent_elev_range": "Phần trăm khoảng độ cao",
          "relative_topographic_position": "Vị trí địa hình tương đối",
          "max_anisotropy_dev": "Độ lệch dị hướng lớn nhất",
          "max_anisotropy_dev_signature": "Đặc trưng độ lệch dị hướng lớn nhất",
          "max_difference_from_mean": "Hiệu so với trung bình lớn nhất",
          "max_elev_dev_signature": "Đặc trưng độ lệch độ cao lớn nhất",
          "max_elevation_deviation": "Độ lệch độ cao lớn nhất",
          "multiscale_curvatures": "Độ cong đa tỉ lệ",
          "multiscale_elevated_index": "Chỉ số nâng cao đa tỉ lệ",
          "multiscale_elevation_percentile": "Phân vị độ cao đa tỉ lệ",
          "multiscale_low_lying_index": "Chỉ số vùng thấp đa tỉ lệ",
          "multiscale_roughness": "Độ nhám đa tỉ lệ",
          "multiscale_roughness_signature": "Đặc trưng độ nhám đa tỉ lệ",
          "multiscale_std_dev_normals": "Độ lệch chuẩn pháp tuyến đa tỉ lệ",
          "multiscale_std_dev_normals_signature": "Đặc trưng độ lệch chuẩn pháp tuyến đa tỉ lệ",
          "multiscale_topographic_position_image": "Ảnh vị trí địa hình đa tỉ lệ",
          "topographic_position_animation": "Hoạt ảnh vị trí địa hình",
          "average_normal_vector_angular_deviation": "Độ lệch góc trung bình của vector pháp tuyến",
          "circular_variance_of_aspect": "Phương sai tròn của hướng dốc",
          "edge_density": "Mật độ biên",
          "ruggedness_index": "Chỉ số gồ ghề",
          "spherical_std_dev_of_normals": "Độ lệch chuẩn cầu của pháp tuyến",
          "standard_deviation_of_slope": "Độ lệch chuẩn của độ dốc",
          "average_horizon_distance": "Khoảng cách chân trời trung bình",
          "horizon_angle": "Góc chân trời",
          "horizon_area": "Diện tích chân trời",
          "openness": "Độ mở",
          "shadow_animation": "Hoạt ảnh bóng đổ",
          "shadow_image": "Ảnh bóng đổ",
          "sky_view_factor": "Hệ số tầm nhìn bầu trời",
          "skyline_analysis": "Phân tích đường chân trời",
          "time_in_daylight": "Thời gian có ánh sáng ban ngày",
          "viewshed": "Vùng nhìn thấy",
          "visibility_index": "Chỉ số tầm nhìn",
          "topo_render": "Kết xuất địa hình",
          "add_surface_information": "Thêm thông tin bề mặt",
          "add_z_information": "Thêm thông tin Z",
          "adjust_3d_z": "Điều chỉnh Z 3D",
          "adjust_stream_to_raster": "Điều chỉnh suối theo raster",
          "aggregate_points": "Gộp điểm",
          "aggregate_polygons": "Gộp đa giác",
          "align_features": "Căn chỉnh đối tượng",
          "apportion_polygon": "Phân bổ đa giác",
          "areal_interpolation": "Nội suy diện tích",
          "assign_projection_vector": "Gán phép chiếu cho vector",
          "attribute_uncertainty": "Độ bất định thuộc tính",
          "bivariate_spatial_association": "Liên kết không gian hai biến",
          "buffer_3d": "Vùng đệm 3D",
          "build_balanced_zones": "Xây dựng vùng cân bằng",
          "build_seamlines": "Xây dựng đường nối ảnh",
          "calculate_adjacent_fields": "Tính trường liền kề",
          "calculate_central_meridian_and_parallels": "Tính kinh tuyến trung tâm và vĩ tuyến chuẩn",
          "calculate_composite_index": "Tính chỉ số tổng hợp",
          "calculate_distance_band": "Tính dải khoảng cách",
          "calculate_end_time": "Tính thời gian kết thúc",
          "calculate_grid_convergence_angle": "Tính góc hội tụ lưới",
          "calculate_missing_z_values": "Tính giá trị Z thiếu",
          "calculate_motion_statistics": "Tính thống kê chuyển động",
          "calculate_polygon_main_angle": "Tính góc chính đa giác",
          "calculate_rates": "Tính tỉ lệ",
          "calculate_transformation_errors": "Tính sai số biến đổi",
          "calculate_utm_zone": "Tính múi UTM",
          "cartogram": "Bản đồ biến dạng",
          "causal_inference_analysis": "Phân tích suy luận nhân quả",
          "cell_records_to_sectors": "Bản ghi ô thành cung",
          "central_feature": "Đối tượng trung tâm / Hướng trung bình tuyến tính",
          "change_point_detection": "Phát hiện điểm thay đổi",
          "collapse_dual_lines_to_centerline": "Gộp đường đôi thành đường tim",
          "collapse_hydro_polygon": "Thu gọn đa giác thủy văn",
          "collapse_road_detail": "Thu gọn chi tiết đường giao thông",
          "collect_events": "Gom sự kiện",
          "colocation_analysis": "Phân tích đồng vị trí",
          "color_polygons": "Tô màu đa giác",
          "compare_spatial_weights": "So sánh trọng số không gian",
          "compute_accuracy_for_object_detection": "Tính độ chính xác phát hiện đối tượng",
          "construct_sight_lines": "Xây dựng đường ngắm",
          "contiguous_cartogram": "Bản đồ biến dạng liền kề",
          "contour_list": "Danh sách đường đồng mức",
          "convert_coordinate_notation": "Chuyển đổi ký hiệu tọa độ",
          "cost_connectivity": "Liên thông chi phí",
          "count_overlapping_features": "Đếm đối tượng chồng lấn",
          "create_accuracy_assessment_points": "Tạo điểm đánh giá độ chính xác",
          "create_cartographic_partitions": "Tạo phân vùng bản đồ",
          "create_overpass": "Tạo cầu vượt",
          "create_routes": "Tạo tuyến",
          "create_spatial_sampling_locations": "Tạo vị trí lấy mẫu không gian",
          "create_spatially_balanced_points": "Tạo điểm cân bằng không gian",
          "create_underpass": "Tạo hầm chui",
          "cul_de_sac_masks": "Mặt nạ đường cụt",
          "delineate_built_up_areas": "Khoanh vùng xây dựng",
          "dendrogram": "Biểu đồ cây",
          "densify_sampling_network": "Tăng mật độ mạng lưới lấy mẫu",
          "detect_bright_ocean_objects": "Phát hiện đối tượng sáng trên biển",
          "detect_dark_ocean_areas": "Phát hiện vùng tối trên biển",
          "detect_feature_changes": "Phát hiện biến động đối tượng",
          "detect_graphic_conflict": "Phát hiện xung đột đồ họa",
          "detect_incidents": "Phát hiện sự cố",
          "dice": "Xúc xắc",
          "difference_3d": "Hiệu 3D",
          "dimension_reduction": "Giảm chiều",
          "directional_distribution": "Phân bố theo hướng",
          "directional_trend": "Xu thế theo hướng",
          "disperse_markers": "Phân tán điểm đánh dấu",
          "dissolve_route_events": "Hòa tan sự kiện tuyến",
          "edgematch_features": "Khớp biên đối tượng",
          "eighty_twenty_analysis": "Phân tích 80/20",
          "eliminate_polygon_part": "Loại bỏ phần đa giác",
          "eliminate_polygons": "Loại bỏ đa giác",
          "emerging_hot_spot_analysis": "Phân tích điểm nóng mới nổi",
          "enclose_multipatch": "Bao kín multipatch",
          "estimate_time_to_event": "Ước tính thời gian đến sự kiện",
          "evaluate_bin_sizes": "Đánh giá kích thước ô",
          "evaluate_variable_influence": "Đánh giá ảnh hưởng của biến",
          "exploratory_interpolation": "Nội suy khám phá",
          "exploratory_regression": "Hồi quy khám phá",
          "extract_locations_from_text": "Trích xuất vị trí từ văn bản",
          "extract_water_sar": "Trích xuất mặt nước (SAR)",
          "extrude_between": "Ép khối giữa hai bề mặt",
          "feature_outline_masks": "Mặt nạ đường viền đối tượng",
          "feature_to_line": "Đối tượng thành đường",
          "feature_vertices_to_points": "Đỉnh đối tượng thành điểm",
          "features_to_kml": "Đối tượng sang KML",
          "fence_diagram": "Sơ đồ hàng rào",
          "fill_missing_values": "Lấp giá trị thiếu",
          "find_dwell_locations": "Tìm vị trí dừng",
          "find_identical": "Tìm trùng lặp",
          "find_meeting_locations": "Tìm vị trí gặp nhau",
          "find_space_time_matches": "Tìm khớp không-thời gian",
          "flip_line": "Lật đường",
          "forest_based_forecast": "Dự báo dựa trên rừng ngẫu nhiên",
          "generalized_linear_regression": "Hồi quy tuyến tính tổng quát",
          "generate_breach_lines": "Tạo đường phá",
          "generate_near_table": "Tạo bảng lân cận",
          "generate_network_swm": "Tạo SWM mạng lưới",
          "generate_od_links": "Tạo liên kết điểm đi-điểm đến",
          "generate_points_along_3d_lines": "Tạo điểm dọc đường 3D",
          "generate_spatial_weights_matrix": "Tạo ma trận trọng số không gian",
          "generate_subset_polygons": "Tạo đa giác tập con",
          "generate_transects_along_lines": "Tạo mặt cắt ngang dọc đường",
          "geodetic_densify": "Tăng mật độ trắc địa",
          "geographically_weighted_regression": "Hồi quy trọng số địa lý",
          "geotagged_photos_to_points": "Ảnh gắn thẻ địa lý thành điểm",
          "graphic_buffer": "Vùng đệm đồ họa",
          "grid_index_features": "Đối tượng chỉ mục lưới",
          "group_by_proximity": "Nhóm theo khoảng cách gần",
          "hdbscan": "Phân cụm HDBSCAN",
          "getis_ord_general_g": "Phân cụm cao/thấp (Getis-Ord General G)",
          "hot_spot_analysis_comparison": "So sánh phân tích điểm nóng",
          "identify_narrow_polygons": "Nhận diện đa giác hẹp",
          "incremental_spatial_autocorrelation": "Tự tương quan không gian gia tăng",
          "inside_3d": "Bên trong 3D",
          "integrate": "Tích hợp",
          "interpolate_shape": "Nội suy hình dạng",
          "intersect_3d": "Giao 3D",
          "intersect_3d_line_with_surface": "Giao đường 3D với bề mặt",
          "intersecting_layers_masks": "Mặt nạ lớp giao nhau",
          "intervisibility": "Tầm nhìn liên thông",
          "is_closed_3d": "Đóng kín 3D",
          "line_of_sight": "Đường ngắm",
          "local_bivariate_relationships": "Quan hệ hai biến cục bộ",
          "local_outlier_analysis": "Phân tích ngoại lai cục bộ",
          "locate_lines_along_routes": "Định vị đường dọc tuyến",
          "median_center": "Tâm trung vị",
          "merge_divided_roads": "Gộp đường giao thông phân làn",
          "merge_lines_by_pseudo_node": "Gộp đường theo nút giả",
          "minimum_bounding_volume": "Khối bao nhỏ nhất",
          "multipatch_footprint": "Đường bao multipatch",
          "multipatch_to_mesh": "Multipatch sang lưới tam giác",
          "multiple_ring_buffer": "Vùng đệm đa vòng",
          "mgwr": "Hồi quy trọng số địa lý đa tỉ lệ",
          "multivariate_clustering": "Phân cụm đa biến",
          "near_3d": "Gần 3D",
          "neighborhood_summary_statistics": "Thống kê tóm tắt lân cận",
          "non_maximum_suppression": "Triệt tiêu phi cực đại",
          "optics_clustering": "Phân cụm OPTICS",
          "optimal_corridor_connections": "Kết nối hành lang tối ưu",
          "optimal_path_as_line": "Đường đi tối ưu dạng đường",
          "optimized_hot_spot_analysis": "Phân tích điểm nóng tối ưu",
          "optimized_outlier_analysis": "Phân tích ngoại lai tối ưu",
          "pairwise_comparison_weights": "Trọng số so sánh cặp",
          "pivot_table": "Bảng tổng hợp",
          "points_to_line": "Điểm thành đường",
          "points_to_path": "Điểm thành lộ trình",
          "polygon_neighbors": "Đa giác lân cận",
          "polygon_volume": "Thể tích đa giác",
          "propagate_displacement": "Lan truyền dịch chuyển",
          "raster_domain": "Miền raster",
          "raster_to_weighted_points": "Raster thành điểm có trọng số",
          "reclassify_field": "Phân loại lại trường",
          "reconstruct_tracks": "Tái dựng quỹ đạo",
          "reduce_point_density": "Giảm mật độ điểm",
          "regularize_adjacent_building_footprint": "Chính quy hóa đường bao nhà liền kề",
          "regularize_building_footprints": "Chính quy hóa đường bao nhà",
          "remove_overlap_multiple": "Loại bỏ chồng lấn (nhiều lớp)",
          "render_vector_png": "Kết xuất vector sang PNG",
          "repair_geometry": "Sửa hình học",
          "resolve_building_conflicts": "Giải quyết xung đột nhà",
          "resolve_road_conflicts": "Giải quyết xung đột đường giao thông",
          "ripleys_k": "K Ripley",
          "rubbersheet_features": "Nắn đối tượng theo điểm khống chế",
          "semivariogram_sensitivity": "Độ nhạy bán variogram",
          "similarity_search": "Tìm kiếm tương đồng",
          "simplify_3d_line": "Đơn giản hóa đường 3D",
          "simplify_building": "Đơn giản hóa nhà",
          "simplify_by_circular_arcs": "Đơn giản hóa bằng cung tròn",
          "simplify_by_tangent_segments": "Đơn giản hóa bằng đoạn tiếp tuyến",
          "simplify_shared_edges": "Đơn giản hóa cạnh chung",
          "smooth_natural_features": "Làm trơn đối tượng tự nhiên",
          "smooth_shared_edges": "Làm trơn cạnh chung",
          "snap_tracks": "Bắt dính quỹ đạo",
          "sort_features": "Sắp xếp đối tượng",
          "spatial_eigenvector_filtering": "Lọc vector riêng không gian (MESF)",
          "spatial_outlier_detection": "Phát hiện ngoại lai không gian",
          "spatially_constrained_multivariate_clustering": "Phân cụm đa biến ràng buộc không gian",
          "split_by_attributes": "Tách theo thuộc tính",
          "split_by_features": "Tách theo đối tượng",
          "split_line_at_point": "Tách đường tại điểm",
          "stack_profile": "Hồ sơ chồng lớp",
          "strip_map_index_features": "Đối tượng chỉ mục bản đồ dải",
          "subdivide_polygon": "Chia nhỏ đa giác",
          "subset_features": "Tập con đối tượng",
          "summarize_nearby": "Tóm tắt lân cận",
          "summarize_percent_change": "Tóm tắt phần trăm thay đổi",
          "summarize_within": "Tóm tắt bên trong",
          "summary_statistics": "Thống kê tóm tắt",
          "sun_shadow_volume": "Khối bóng mặt trời",
          "surface_difference": "Hiệu bề mặt",
          "table_to_geometry": "Bảng thành hình học",
          "tabulate_intersection": "Lập bảng giao nhau",
          "thin_road_network": "Làm thưa mạng lưới đường giao thông",
          "tile_grid_polygons": "Đa giác lưới ô",
          "time_series_clustering": "Phân cụm chuỗi thời gian",
          "time_series_forecast": "Dự báo chuỗi thời gian",
          "time_series_smoothing": "Làm trơn chuỗi thời gian",
          "trace_proximity_events": "Truy vết sự kiện lân cận",
          "transform_features": "Biến đổi đối tượng",
          "transform_fields": "Biến đổi trường",
          "transform_route_events": "Biến đổi sự kiện tuyến",
          "transpose_fields": "Chuyển vị trường",
          "trim_line": "Cắt tỉa đường",
          "union_3d": "Hợp 3D",
          "validate_flow_direction": "Kiểm tra hướng dòng chảy",
          "voxel_isosurface": "Mặt đẳng trị voxel",
          "buffer_vector": "Vùng đệm vector",
          "directional_variogram": "Phân tích variogram theo hướng",
          "estimate_variogram": "Ước tính variogram",
          "fit_variogram": "Khớp mô hình variogram",
          "add_field": "Thêm trường",
          "add_geometry_attributes": "Thêm thuộc tính hình học",
          "attribute_correlation": "Tương quan thuộc tính",
          "attribute_histogram": "Lược đồ thuộc tính",
          "attribute_scattergram": "Biểu đồ phân tán thuộc tính",
          "delete_field": "Xóa trường",
          "extract_by_attribute": "Trích xuất theo thuộc tính",
          "field_calculator": "Máy tính trường",
          "filter_vector_features_by_area": "Lọc đối tượng vector theo diện tích",
          "list_unique_values": "Liệt kê giá trị duy nhất",
          "rename_field": "Đổi tên trường",
          "centroid_vector": "Trọng tâm vector",
          "concave_hull": "Bao lõm",
          "densify_features": "Thêm đỉnh cho đối tượng",
          "eliminate_coincident_points": "Loại bỏ điểm trùng vị trí",
          "extend_vector_lines": "Kéo dài đường vector",
          "merge_line_segments": "Gộp đoạn đường",
          "minimum_bounding_box": "Hộp bao nhỏ nhất",
          "minimum_bounding_circle": "Đường tròn bao nhỏ nhất",
          "minimum_bounding_envelope": "Hình chữ nhật bao nhỏ nhất",
          "minimum_convex_hull": "Bao lồi nhỏ nhất",
          "polygonize": "Đa giác hóa",
          "representative_point_vector": "Điểm đại diện vector",
          "simplify_features": "Đơn giản hóa đối tượng",
          "smooth_vectors": "Làm trơn vector",
          "snap_endnodes": "Bắt dính nút cuối",
          "split_vector_lines": "Tách đường vector",
          "split_with_lines": "Tách bằng đường",
          "locate_points_along_routes": "Định vị điểm dọc tuyến",
          "points_along_lines": "Điểm dọc đường",
          "route_calibrate": "Hiệu chuẩn tuyến",
          "route_event_lines_from_layer": "Đường sự kiện tuyến từ lớp",
          "route_event_lines_from_table": "Đường sự kiện tuyến từ bảng",
          "route_event_merge": "Gộp sự kiện tuyến",
          "route_event_overlay": "Chồng lớp sự kiện tuyến",
          "route_event_points_from_layer": "Điểm sự kiện tuyến từ lớp",
          "route_event_points_from_table": "Điểm sự kiện tuyến từ bảng",
          "route_event_split": "Tách sự kiện tuyến",
          "route_measure_qa": "Kiểm tra chất lượng số đo tuyến",
          "route_recalibrate": "Hiệu chuẩn lại tuyến",
          "snap_events_to_routes": "Bắt dính sự kiện vào tuyến",
          "download_osm_vector": "Tải dữ liệu vector OSM",
          "clip": "Cắt",
          "difference": "Hiệu",
          "dissolve": "Hòa tan",
          "erase": "Xóa",
          "identity": "Đồng nhất",
          "intersect": "Giao",
          "line_intersections": "Giao điểm đường",
          "line_polygon_clip": "Cắt đường theo đa giác",
          "near": "Gần",
          "select_by_location": "Chọn theo vị trí",
          "spatial_join": "Kết nối không gian",
          "symmetrical_difference": "Hiệu đối xứng",
          "union": "Hợp",
          "update": "Cập nhật",
          "construct_vector_tin": "Xây dựng TIN vector",
          "contours_from_points": "Đường đồng mức từ điểm",
          "contours_from_raster": "Đường đồng mức từ raster",
          "extract_nodes": "Trích xuất nút",
          "extract_raster_values_at_points": "Trích xuất giá trị raster tại điểm",
          "find_lowest_or_highest_points": "Tìm điểm thấp nhất hoặc cao nhất",
          "hexagonal_grid_from_raster_base": "Lưới lục giác từ raster nền",
          "hexagonal_grid_from_vector_base": "Lưới lục giác từ vector nền",
          "layer_footprint_raster": "Đường bao lớp raster",
          "layer_footprint_vector": "Đường bao lớp vector",
          "medoid": "Medoid",
          "random_points_in_polygon": "Điểm ngẫu nhiên trong đa giác",
          "rectangular_grid_from_raster_base": "Lưới chữ nhật từ raster nền",
          "rectangular_grid_from_vector_base": "Lưới chữ nhật từ vector nền",
          "vector_hex_binning": "Gom ô lục giác vector",
          "voronoi_diagram": "Sơ đồ Voronoi",
          "compactness_ratio": "Tỉ số độ chặt",
          "deviation_from_regional_direction": "Độ lệch khỏi hướng vùng",
          "elongation_ratio": "Tỉ số độ kéo dài",
          "hole_proportion": "Tỉ lệ lỗ",
          "linearity_index": "Chỉ số tuyến tính",
          "narrowness_index_vector": "Chỉ số độ hẹp vector",
          "patch_orientation": "Hướng mảnh",
          "perimeter_area_ratio": "Tỉ số chu vi/diện tích",
          "polygon_area": "Diện tích đa giác",
          "polygon_long_axis": "Trục dài đa giác",
          "polygon_perimeter": "Chu vi đa giác",
          "polygon_short_axis": "Trục ngắn đa giác",
          "related_circumscribing_circle": "Đường tròn ngoại tiếp liên quan",
          "shape_complexity_index_vector": "Chỉ số độ phức tạp hình dạng vector",
          "envelope_test": "Kiểm định đường bao",
          "getis_ord_gi_star": "Getis-Ord Gi*",
          "global_morans_i": "Moran's I toàn cục",
          "hotspot_vs_process": "Điểm nóng so với quá trình",
          "inhomogeneous_baseline": "Đường cơ sở không đồng nhất",
          "local_morans_i_lisa": "Moran's I cục bộ (LISA)",
          "nearest_neighbour_index": "Chỉ số lân cận gần nhất",
          "point_pattern_envelope": "Đường bao mẫu điểm",
          "point_process_residuals": "Phần dư quá trình điểm",
          "point_process_residuals_comparison": "So sánh phần dư quá trình điểm",
          "quadrat_count_test": "Kiểm định đếm ô vuông",
          "ripleys_k_function": "Hàm K Ripley",
          "ripleys_k_test": "Kiểm định K Ripley",
          "spatial_error_regression": "Hồi quy sai số không gian",
          "spatial_lag_regression": "Hồi quy trễ không gian"
        },
        "menuSubcategory": {
          "geolibre_wasm": "GeoLibre (WASM)",
          "geometry_topology": "Hình học và tô pô",
          "raster_vector_conversion": "Chuyển đổi raster/vector",
          "vector_table_i_o": "Nhập/xuất vector và bảng",
          "depressions_storage": "Vùng trũng và trữ nước",
          "flow_routing": "Định tuyến dòng chảy",
          "hydrologic_indices": "Chỉ số thủy văn",
          "streams_longitudinal_analysis": "Sông suối - Phân tích dọc tuyến",
          "streams_network_extraction": "Sông suối - Trích xuất mạng lưới",
          "streams_ordering_metrics": "Sông suối - Chỉ số phân cấp",
          "watersheds_basins": "Lưu vực và bồn thu nước",
          "analysis_metrics": "Chỉ số phân tích",
          "filtering_classification": "Lọc và phân loại",
          "i_o_management": "Nhập/xuất và quản lý",
          "interpolation_gridding": "Nội suy và tạo lưới",
          "network_analysis": "Phân tích mạng lưới",
          "general": "Chung",
          "distance_cost": "Khoảng cách và chi phí",
          "local_neighborhood": "Lân cận cục bộ",
          "overlay_math": "Phép toán chồng lớp",
          "reclassify_mask": "Phân loại lại và mặt nạ",
          "spatial_statistics": "Thống kê không gian",
          "change_detection": "Phát hiện biến động",
          "classification": "Phân loại",
          "edge_feature_detection": "Phát hiện biên và đối tượng",
          "enhancement_contrast": "Tăng cường và tương phản",
          "filters": "Bộ lọc",
          "obia": "OBIA",
          "radiometric_correction": "Hiệu chỉnh bức xạ",
          "sar": "SAR",
          "spectral_analytics": "Phân tích phổ",
          "thermal_emissivity": "Nhiệt và độ phát xạ",
          "derivatives": "Đạo hàm",
          "landform_indices": "Chỉ số dạng địa hình",
          "multiscale_signatures": "Đặc trưng đa tỉ lệ",
          "roughness_texture": "Độ nhám và kết cấu",
          "visibility": "Tầm nhìn",
          "workflow_products": "Sản phẩm quy trình",
          "attribute_analysis": "Phân tích thuộc tính",
          "geometry_processing": "Xử lý hình học",
          "linear_referencing": "Tham chiếu tuyến tính",
          "online_data": "Dữ liệu trực tuyến",
          "overlay_analysis": "Phân tích chồng lớp",
          "sampling_gridding": "Lấy mẫu và tạo lưới",
          "shape_metrics": "Chỉ số hình dạng"
        }
      }
    }
  }
}
