{
  "format": "geolibre-language-pack",
  "formatVersion": 1,
  "scope": "whitebox",
  "locale": "id",
  "name": "Paket bahasa Indonesia untuk Whitebox",
  "updatedAt": "2026-09-25T16:57:56.168Z",
  "translations": {
    "processing": {
      "toolMeta": {
        "whitebox": {
          "build_object_hierarchy_multiscale": {
            "name": "Bangun hierarki objek multiskala",
            "description": "Jaringan objek hierarkis yang dibangun melalui agregasi iteratif pada berbagai skala segmentasi, yang secara progresif menggabungkan segmen yang lebih halus berdasarkan kemiripan spektral dan ketetanggaan spasial. Membangun struktur pohon dengan simpul daun mewakili segmen berskala halus dan akar mewakili seluruh citra. Hubungan keterkandungan mengodekan hierarki objek induk-anak (bagian-keseluruhan) sehingga memungkinkan analisis multiresolusi dan kueri objek adaptif-skala di seluruh tingkat hierarki. Fitur Utama: hierarki segmentasi multiskala; melacak hubungan bagian-keseluruhan; mendukung kueri objek bersarang; memungkinkan analisis adaptif-skala; representasi hierarkis yang hemat memori; memfasilitasi klasifikasi bertingkat. Kasus Penggunaan: pemetaan tutupan lahan hierarkis; ekstraksi kompleks bangunan dari komponen-komponennya; deteksi lahan pertanian; analisis strata vegetasi; delineasi distrik perkotaan; pemetaan lahan basah dengan klasifikasi subkomponen. Interpretasi Keluaran: keluaran berupa basis data objek hierarkis yang mengodekan struktur yang bergantung pada skala. Kueri objek pada skala tertentu; skala menengah mengungkap skala objek transisional yang menyeimbangkan detail/generalisasi. Hubungan induk-anak mengungkap struktur komposisional. Distribusi statistik per tingkat skala mencirikan sifat ukuran/bentuk objek pada setiap tingkat hierarki, sehingga memungkinkan pemilihan strategi klasifikasi dengan skala optimal.",
            "params": {
              "coarse_segments": {
                "label": "Segmen kasar",
                "description": "Raster segmen kasar."
              },
              "fine_segments": {
                "label": "Segmen halus",
                "description": "Raster segmen halus."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV hierarki keluaran."
              }
            }
          },
          "classify_objects_ensemble_pro": {
            "name": "Klasifikasi objek ensemble Pro",
            "description": "Menjalankan konfigurasi klasifikasi objek bergaya ensemble yang disetel untuk stabilitas lebih tinggi pada adegan yang heterogen.",
            "params": {
              "features": {
                "label": "Fitur",
                "description": "CSV fitur objek masukan (harus menyertakan segment_id dan kolom fitur numerik)."
              },
              "training": {
                "label": "Pelatihan",
                "description": "CSV pelatihan dengan kolom segment_id dan label kelas."
              },
              "segment_id_field": {
                "label": "Field ID segmen",
                "description": "Nama field ID segmen (default segment_id)."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field label kelas dalam CSV pelatihan (default class)."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon (default 200)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV prediksi keluaran."
              }
            }
          },
          "classify_objects_random_forest": {
            "name": "Klasifikasi objek random forest",
            "description": "Melatih pengklasifikasi ensemble Random Forest pada sampel latih segmen berlabel menggunakan fitur spektral, morfologis, dan tekstur sebagai prediktor. Membangun banyak pohon keputusan melalui bootstrap sampling dan pengacakan fitur, lalu mengagregasi prediksi melalui pemungutan suara mayoritas. Klasifikasi beroperasi pada vektor fitur per segmen, menetapkan label kelas objek secara probabilistik berdasarkan konsensus ensemble, sehingga memungkinkan kategorisasi objek multikelas yang andal dari fitur OBIA. Fitur utama meliputi pembelajaran ensemble yang menggabungkan banyak pohon keputusan untuk klasifikasi yang andal, penanganan ruang fitur berdimensi tinggi yang khas pada OBIA multispektral, estimasi keyakinan dan probabilitas klasifikasi, pemeringkatan kepentingan fitur yang mengidentifikasi sifat diskriminatif, penanganan alami interaksi fitur non-linier, serta ketahanan terhadap derau dan redundansi fitur. Kasus penggunaan mencakup klasifikasi tutupan lahan multikelas dari segmen OBIA (perkotaan, pertanian, hutan, air), klasifikasi terbimbing tingkat objek yang disempurnakan melalui pemilihan sampel latih, klasifikasi deteksi perubahan pada urutan segmentasi temporal, klasifikasi hierarkis (jenis habitat kasar yang disempurnakan menjadi kategori halus), dan integrasi dengan sampel latih manual dari interpretasi visual. Label kelas prediksi keluaran mengidentifikasi jenis objek utama; probabilitas keyakinan menunjukkan kepastian klasifikasi; keyakinan rendah menandakan objek antara yang ambigu; kepentingan fitur mengidentifikasi sifat spektral/morfologis mana yang mendorong keputusan klasifikasi; peta klasifikasi secara langsung merepresentasikan distribusi jenis objek; kerancuan antara kelas-kelas yang mirip menjadi masukan untuk penyempurnaan data latih; keluaran probabilistik memungkinkan kuantifikasi ketidakpastian.",
            "params": {
              "features": {
                "label": "Fitur",
                "description": "CSV fitur objek masukan (harus menyertakan segment_id dan kolom fitur numerik)."
              },
              "training": {
                "label": "Pelatihan",
                "description": "CSV pelatihan dengan kolom segment_id dan label kelas."
              },
              "segment_id_field": {
                "label": "Field ID segmen",
                "description": "Nama field ID segmen (default segment_id)."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field label kelas dalam CSV pelatihan (default class)."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon (default 200)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV prediksi keluaran."
              }
            }
          },
          "classify_objects_rules_basic": {
            "name": "Klasifikasi objek aturan dasar",
            "description": "Menerapkan klasifikasi objek berbasis aturan yang transparan dari CSV aturan fitur-operator-ambang batas. Logika keputusan yang sepenuhnya dapat diinterpretasikan untuk alur kerja pakar domain dan kepatuhan regulasi.",
            "params": {
              "features": {
                "label": "Fitur",
                "description": "CSV fitur objek masukan."
              },
              "rules": {
                "label": "Aturan",
                "description": "CSV aturan dengan kolom: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Kelas default",
                "description": "Kelas cadangan ketika tidak ada aturan yang cocok."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV prediksi keluaran."
              }
            }
          },
          "classify_objects_rules_hierarchical": {
            "name": "Klasifikasi objek aturan hierarkis",
            "description": "Menerapkan klasifikasi objek berbasis aturan hierarkis; saat ini menggunakan aturan berurutan dengan fallback deterministik.",
            "params": {
              "features": {
                "label": "Fitur",
                "description": "CSV fitur objek masukan."
              },
              "rules": {
                "label": "Aturan",
                "description": "CSV aturan dengan kolom: feature, op, value, class, [priority]."
              },
              "default_class": {
                "label": "Kelas default",
                "description": "Kelas cadangan ketika tidak ada aturan yang cocok."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV prediksi keluaran."
              }
            }
          },
          "classify_objects_svm": {
            "name": "Klasifikasi objek SVM",
            "description": "Mengklasifikasikan objek menggunakan alur kerja bergaya SVM (diimplementasikan melalui default backend klasifikasi objek yang andal).",
            "params": {
              "features": {
                "label": "Fitur",
                "description": "CSV fitur objek masukan (harus menyertakan segment_id dan kolom fitur numerik)."
              },
              "training": {
                "label": "Pelatihan",
                "description": "CSV pelatihan dengan kolom segment_id dan label kelas."
              },
              "segment_id_field": {
                "label": "Field ID segmen",
                "description": "Nama field ID segmen (default segment_id)."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field label kelas dalam CSV pelatihan (default class)."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon (default 200)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV prediksi keluaran."
              }
            }
          },
          "evaluate_object_classification_accuracy": {
            "name": "Evaluasi akurasi klasifikasi objek",
            "description": "Menghitung metrik akurasi klasifikasi dengan membandingkan label objek prediksi terhadap label referensi ground truth atau validasi. Menghasilkan matriks konfusi yang mendokumentasikan pola kesesuaian/ketidaksesuaian klasifikasi per kelas, menghitung akurasi keseluruhan (total prediksi benar), akurasi produser per kelas (tingkat deteksi), akurasi pengguna (keandalan), skor F1 (rata-rata harmonik), statistik kappa (kesepakatan terkoreksi peluang), serta analisis galat per kelas yang mengidentifikasi pola salah klasifikasi sistematis. Fitur utama meliputi penilaian akurasi komprehensif di seluruh kelas, metrik kinerja per kelas yang memungkinkan diagnostik spesifik kelas, matriks konfusi yang mengungkap pola salah klasifikasi sistematis, uji signifikansi statistik melalui koefisien kappa, penanganan alami distribusi kelas yang tidak seimbang, serta identifikasi masalah kecukupan data latih. Kasus penggunaan meliputi validasi model klasifikasi dan kuantifikasi kinerja, perbandingan pendekatan dan parameter klasifikasi yang bersaing, identifikasi kelas objek bermasalah yang memerlukan data latih tambahan, penilaian kelayakan klasifikasi untuk aplikasi operasional, pemilihan model dan penyetelan hiperparameter berbasis akurasi, penjaminan mutu dalam alur kerja pemetaan otomatis, serta pelaporan metrik akurasi terstandar untuk tinjauan sejawat. Akurasi keseluruhan keluaran merepresentasikan keandalan klasifikasi di seluruh objek; akurasi produser menunjukkan kelengkapan deteksi per kelas; akurasi pengguna menunjukkan keandalan prediksi; kappa tinggi (>0.8) menunjukkan kesepakatan kuat di atas peluang; matriks konfusi mengungkap kelas mana yang saling tertukar; dominasi diagonal menunjukkan pemisahan kelas yang kuat; entri di luar diagonal menunjukkan sumber salah klasifikasi; metrik per kelas memandu perbaikan data latih yang terarah.",
            "params": {
              "predictions": {
                "label": "Prediksi",
                "description": "CSV prediksi yang memuat segment_id dan predicted_class."
              },
              "reference": {
                "label": "Referensi",
                "description": "CSV referensi yang memuat segment_id dan class."
              },
              "segment_id_field": {
                "label": "Field ID segmen",
                "description": "Nama field ID segmen (default segment_id)."
              },
              "predicted_field": {
                "label": "Field prediksi",
                "description": "Field kelas prediksi (default predicted_class)."
              },
              "reference_field": {
                "label": "Field referensi",
                "description": "Field kelas referensi (default class)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan JSON keluaran."
              }
            }
          },
          "evaluate_segmentation_quality_pro": {
            "name": "Evaluasi kualitas segmentasi Pro",
            "description": "Menghitung diagnostik kualitas segmentasi termasuk jumlah objek dan statistik tumpang tindih label dominan.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "reference": {
                "label": "Referensi",
                "description": "Raster label referensi opsional untuk diagnostik berbasis tumpang tindih."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan JSON keluaran."
              }
            }
          },
          "image_segmentation": {
            "name": "Segmentasi citra",
            "description": "Menyegmentasi tumpukan raster multiband menjadi wilayah homogen yang bersebelahan menggunakan seeded region growing.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal (satu per band)."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ambang jarak untuk penumbuhan wilayah dalam ruang fitur terstandarisasi (default 0.5)."
              },
              "steps": {
                "label": "Langkah",
                "description": "Jumlah band prioritas seed (default 10)."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Luas wilayah minimum opsional untuk pembersihan pasca-penggabungan (default 4)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "image_slider": {
            "name": "Penggeser citra",
            "description": "Image Slider adalah alat visualisasi interaktif yang memungkinkan perbandingan langsung tingkat piksel antara dataset raster yang teregistrasi bersama melalui pembatas overlay horizontal atau vertikal yang dapat diseret. Algoritma: mempertahankan dua dataset raster yang selaras di memori, merender tampilan gabungan dengan posisi pembatas yang dapat disesuaikan untuk mengontrol visibilitas layer, dan interaksi pengguna secara dinamis menyesuaikan pembatas sehingga menciptakan efek layar terbagi. Mendukung orientasi pembagian horizontal maupun vertikal. Fitur utama: perbandingan interaktif secara real-time, mempertahankan visualisasi resolusi penuh, antarmuka pengguna intuitif yang tidak memerlukan keterampilan analitis, bekerja dengan raster multispektral dan terindeks, serta mendukung dataset besar melalui perenderan yang efisien. Kemampuan: visualisasi deteksi perubahan, perbandingan sebelum/sesudah, analisis multitemporal, penilaian normalisasi radiometrik, inspeksi visual akurasi klasifikasi. Kasus penggunaan: mendeteksi perubahan citra antar tanggal, membandingkan hasil klasifikasi terhadap data referensi, mengevaluasi efektivitas prapemrosesan, deteksi perubahan visual dalam analisis deret waktu. Aplikasi: penilaian kerusakan dalam tanggap bencana, pemantauan pemekaran kota, deteksi gangguan hutan, pemantauan perubahan pertanian, kontrol kualitas keluaran pengolahan citra. Interpretasi keluaran: perbedaan visual mengungkap besaran dan lokasi perubahan; tepi yang tajam menunjukkan perubahan signifikan; transisi bertahap menandakan ketidakakuratan registrasi atau gradasi temporal; perbedaan sistematis di seluruh citra mengungkap artefak pemrosesan yang sistematis.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster citra kiri atau objek raster bertipe."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster citra kanan atau objek raster bertipe."
              },
              "label1": {
                "label": "Label 1",
                "description": "Label opsional yang ditampilkan untuk citra kiri."
              },
              "left_palette": {
                "label": "Palet kiri",
                "description": "Palet untuk citra kiri non-RGB (default grey)."
              },
              "left_reverse_palette": {
                "label": "Balik palet kiri",
                "description": "Balik palet kiri."
              },
              "label2": {
                "label": "Label 2",
                "description": "Label opsional yang ditampilkan untuk citra kanan."
              },
              "right_palette": {
                "label": "Palet kanan",
                "description": "Palet untuk citra kanan non-RGB (default grey)."
              },
              "right_reverse_palette": {
                "label": "Balik palet kanan",
                "description": "Balik palet kanan."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi tampilan dalam piksel (default 600)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path HTML keluaran."
              }
            }
          },
          "image_stack_profile": {
            "name": "Profil tumpukan citra",
            "description": "Mengekstrak profil per titik di sepanjang tumpukan raster berurutan dan secara opsional menulis laporan HTML.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar raster masukan sebagai array path atau string yang dipisahkan koma/titik koma."
              },
              "points": {
                "label": "Titik",
                "description": "Path vektor titik (atau objek vektor bertipe) yang memuat lokasi sampel."
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              }
            }
          },
          "obia_audit_report_pro": {
            "name": "Laporan audit OBIA Pro",
            "description": "Membangun laporan audit untuk artefak alur kerja OBIA termasuk metadata keberadaan file, ukuran, dan stempel waktu.",
            "params": {
              "artifacts": {
                "label": "Artefak",
                "description": "Array path artefak untuk diaudit."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path JSON laporan audit keluaran."
              }
            }
          },
          "obia_batch_orchestrator_pro": {
            "name": "Orkestrator batch OBIA Pro",
            "description": "Menjalankan beberapa pekerjaan pipeline OBIA dalam satu permintaan dan mengembalikan laporan pekerjaan terkonsolidasi.",
            "params": {
              "jobs": {
                "label": "Pekerjaan",
                "description": "Array objek pekerjaan dengan inputs, training, output_prefix, dan segment_method opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan JSON keluaran opsional."
              }
            }
          },
          "obia_pipeline_basic": {
            "name": "Pipeline OBIA dasar",
            "description": "Menjalankan alur kerja OBIA end-to-end yang lengkap: segmentasi (SLIC/Graph), penggabungan wilayah kecil, ekstraksi fitur spektral/bentuk, dan klasifikasi random forest dalam satu operasi.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal untuk segmentasi/fitur."
              },
              "training": {
                "label": "Pelatihan",
                "description": "CSV pelatihan dengan kolom segment_id dan class."
              },
              "output_prefix": {
                "label": "Awalan keluaran",
                "description": "Awalan path keluaran untuk artefak yang dihasilkan."
              },
              "segment_method": {
                "label": "Metode segmentasi",
                "description": "Metode segmentasi: slic atau graph (default slic)."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Ukuran segmen minimum untuk pembersihan penggabungan (default 10)."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Nama field kelas pelatihan (default class)."
              }
            }
          },
          "object_class_probability_maps": {
            "name": "Peta probabilitas kelas objek",
            "description": "Mengonversi prediksi menjadi peta probabilitas per kelas yang memungkinkan visualisasi ketidakpastian berbasis raster dan penyaringan berbasis keyakinan. Mendukung pengambangan keyakinan hilir dan skenario multilabel.",
            "params": {
              "predictions": {
                "label": "Prediksi",
                "description": "CSV prediksi dengan segment_id dan predicted_class."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV probabilitas keluaran."
              }
            }
          },
          "object_features_context_neighbors": {
            "name": "Fitur objek konteks tetangga",
            "description": "Menghitung fitur konteks spasial: jumlah objek yang bersebelahan, panjang batas bersama, dan metrik isolasi. Memungkinkan klasifikasi yang memperhatikan tetangga dengan menangkap hubungan antarobjek dalam lanskap.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "object_features_shape_basic": {
            "name": "Fitur objek bentuk dasar",
            "description": "Menghitung deskriptor bentuk geometris dan morfologis untuk setiap segmen termasuk luas (jumlah piksel), keliling (panjang batas), kekompakan (sirkularitas ternormalisasi keliling), elongasi (rasio panjang terhadap lebar), faktor bentuk (keteraturan bentuk ternormalisasi), dan soliditas (efisiensi convex hull). Deskriptor bentuk menangkap karakteristik struktural yang independen dari konten spektral, sehingga memungkinkan klasifikasi geometri objek dan pengenalan pola morfologis. Fitur utama meliputi rangkaian metrik bentuk komprehensif yang mencakup luas, keliling, keteraturan, dan elongasi, algoritma penelusuran batas yang efisien secara komputasi, metrik yang invarian terhadap rotasi dan translasi, penerapan di berbagai rentang skala, serta kemampuan klasifikasi objek morfologis (misalnya jalan yang memanjang versus bangunan yang kompak). Kasus penggunaan mencakup klasifikasi tapak bangunan dan analisis struktur perkotaan, ekstraksi fitur linier (jalan, sungai, batas), karakterisasi petak vegetasi dan analisis fragmentasi, kontrol kualitas melalui penyaringan berbasis bentuk, pengenalan objek hierarkis yang menggabungkan sifat bentuk dan spektral, serta kuantifikasi struktur lanskap dalam pemantauan ekologis. Luas keluaran mengukur ukuran segmen dalam piksel; keliling menentukan kompleksitas batas; kekompakan mendekati 1.0 menunjukkan bentuk melingkar/teratur, nilai lebih rendah menunjukkan fitur yang tidak teratur/memanjang; elongasi >1 menunjukkan fitur linier, mendekati 1 menunjukkan objek kompak; faktor bentuk menggabungkan beberapa sifat bentuk untuk klasifikasi bentuk terpadu; metrik bentuk memungkinkan penyaringan morfologis untuk mengisolasi jenis objek target.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "object_features_spectral_basic": {
            "name": "Fitur objek spektral dasar",
            "description": "Menghitung ringkasan statistik univariat yang komprehensif dari nilai reflektansi spektral di dalam setiap segmen pada semua band citra. Perhitungan per segmen meliputi reflektansi rata-rata, simpangan baku (homogenitas), batas reflektansi minimum dan maksimum, nilai kuantil untuk estimasi yang andal, serta statistik per band yang memungkinkan kuantifikasi tekstur multispektral dan karakterisasi profil spektral yang mendasar bagi alur kerja klasifikasi OBIA. Fitur utama meliputi pembuatan statistik spektral per band untuk citra multispektral dan hiperspektral, ukuran statistik andal yang menangkap tendensi sentral dan dispersi, identifikasi anomali spektral dan pencilan di dalam segmen, peringkasan raster-ke-vektor yang efisien, serta keluaran yang langsung mengumpan pipeline klasifikasi machine learning. Kasus penggunaan mencakup ekstraksi fitur untuk klasifikasi berbasis objek menggunakan metrik spektral, identifikasi jenis tutupan lahan melalui analisis tanda spektral, deteksi perubahan melalui perbandingan statistik spektral pada urutan temporal, penilaian kualitas data dan deteksi pencilan, pemantauan lingkungan melalui analisis deret waktu spektral, serta aplikasi pertanian presisi yang memerlukan karakterisasi respons spektral ternormalisasi. Nilai rata-rata keluaran merepresentasikan respons spektral tipikal material segmen; simpangan baku mengukur heterogenitas internal (rendah = permukaan homogen, tinggi = material campuran atau bayangan); batas min/maks mengidentifikasi ekstrem spektral di dalam segmen; profil spektral memungkinkan perbandingan terhadap tanda referensi; statistik menjadi dasar vektor fitur klasifikasi; analisis per band mengungkap indeks spektral dan kemampuan diskriminasi material.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal yang digunakan untuk fitur spektral."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "object_features_texture_glcm_basic": {
            "name": "Fitur objek tekstur GLCM dasar",
            "description": "Mengekstrak karakteristik tekstur menggunakan analisis Gray-Level Co-occurrence Matrix (GLCM) yang dihitung dari distribusi intensitas per band di dalam setiap segmen. GLCM mengukur kemunculan bersama spasial tingkat nada, menghasilkan deskriptor termasuk kontras (variasi lokal), homogenitas (keteraturan spasial), energi (keteraturan), entropi (ketidakteraturan), dan metrik disimilaritas yang menangkap pola tekstur secara independen dari kecerahan spektral keseluruhan. Fitur utama meliputi metrik tekstur berbasis GLCM yang menangkap pola spasial lokal di dalam segmen, analisis multiarah (horizontal, vertikal, diagonal) untuk karakterisasi tekstur yang independen terhadap orientasi, penerapan pada semua band citra yang memungkinkan sidik jari tekstur, diskriminasi permukaan bertekstur versus halus, serta analisis yang dapat ditangani secara komputasi pada tingkat segmen. Kasus penggunaan meliputi klasifikasi material berbasis kekasaran permukaan dan tekstur (aspal versus beton, pembedaan jenis tanaman), karakterisasi struktur dan kerapatan hutan melalui tekstur kanopi, interpretasi citra SAR dan analisis tekstur struktur perkotaan, diskriminasi permukaan berkualitas versus permukaan terdegradasi, penilaian kesehatan tanaman melalui metrik tekstur kanopi, serta deteksi awan dan bayangan melalui anomali tekstur. Kontras keluaran yang tinggi menunjukkan tekstur kasar/bervariasi, rendah menunjukkan permukaan halus; homogenitas tinggi menunjukkan pola spasial teratur, rendah menunjukkan tekstur kacau; energi tinggi menunjukkan tekstur terorganisasi, rendah menunjukkan derau acak; entropi mengukur ketidakteraturan tekstur; disimilaritas menangkap ketidakteraturan pola spasial; profil tekstur memungkinkan klasifikasi spesifik material; kombinasi dengan fitur spektral meningkatkan diskriminasi jenis objek.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "input": {
                "label": "Masukan",
                "description": "Raster intensitas band tunggal untuk analisis tekstur."
              },
              "levels": {
                "label": "Tingkat",
                "description": "Tingkat kuantisasi untuk GLCM (default 16)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "object_features_topology_relations": {
            "name": "Fitur objek relasi topologi",
            "description": "Menghitung fitur topologi graf: derajat objek (jumlah tetangga), kekuatan tetangga dominan, dan penanda artikulasi. Menangkap posisi struktural dalam jaringan objek untuk klasifikasi hierarkis.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "object_uncertainty_diagnostics_pro": {
            "name": "Diagnostik ketidakpastian objek Pro",
            "description": "Menghitung diagnostik ketidakpastian agregat dari keluaran probabilitas objek.",
            "params": {
              "probabilities": {
                "label": "Probabilitas",
                "description": "CSV probabilitas masukan dengan kolom probability dan uncertainty."
              },
              "low_conf_threshold": {
                "label": "Ambang keyakinan rendah",
                "description": "Ambang keyakinan rendah pada probabilitas (default 0.7)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path JSON diagnostik keluaran."
              }
            }
          },
          "objects_boundary_refinement_pro": {
            "name": "Penghalusan batas objek Pro",
            "description": "Menyempurnakan batas objek menggunakan pembersihan wilayah kecil secara iteratif dengan penggabungan yang memperhatikan tetangga.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Iterasi penghalusan (default 2)."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Ambang ukuran objek minimum (default 6)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster hasil penghalusan keluaran."
              }
            }
          },
          "objects_enforce_min_mapping_unit": {
            "name": "Terapkan unit pemetaan minimum pada objek",
            "description": "Menerapkan unit pemetaan minimum dengan menggabungkan segmen objek yang berukuran terlalu kecil.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Ukuran segmen minimum dalam sel (default 5)."
              },
              "method": {
                "label": "Metode",
                "description": "Metode penggabungan: longest, largest, nearest (default longest)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "polygons_to_segments": {
            "name": "Poligon ke segmen",
            "description": "Merasterisasi poligon yang telah diedit kembali menjadi raster label segmen dengan mempertahankan ID objek atau nilai atribut. Memungkinkan alur kerja OBIA iteratif yang menggabungkan segmentasi otomatis dengan penyempurnaan manual.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor poligon masukan."
              },
              "base": {
                "label": "Basis",
                "description": "Raster dasar yang mendefinisikan grid keluaran."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik opsional untuk dibakar (default FID)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster segmen keluaran."
              }
            }
          },
          "propagate_labels_across_hierarchy": {
            "name": "Propagasi label lintas hierarki",
            "description": "Menyebarkan label kelas tingkat kasar ke objek anak tingkat halus melalui pemetaan hierarki. Memungkinkan pelabelan hierarki bersarang secara efisien dan alur kerja penyempurnaan berbasis pewarisan.",
            "params": {
              "hierarchy": {
                "label": "Hierarki",
                "description": "CSV hierarki dengan fine_segment_id dan coarse_segment_id."
              },
              "parent_labels": {
                "label": "Label induk",
                "description": "CSV label induk dengan coarse_segment_id dan class."
              },
              "child_labels": {
                "label": "Label anak",
                "description": "CSV label anak opsional dengan fine_segment_id dan class."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV label terpropagasi keluaran."
              }
            }
          },
          "segment_graph_felzenszwalb": {
            "name": "Segmentasi graf Felzenszwalb",
            "description": "Segmentasi berbasis graf Felzenszwalb memperlakukan citra sebagai graf tak berarah berbobot dengan piksel sebagai simpul dan sisi yang menghubungkan piksel bertetangga dengan bobot yang merepresentasikan disimilaritas spektral. Segmen bergabung secara iteratif dengan membandingkan bobot sisi di dalam komponen terhadap ambang batas dinamis; sisi dengan bobot di bawah ambang batas digabungkan, menghasilkan segmen dengan karakteristik spektral yang homogen secara lokal. Pendekatan hierarkis ini menghasilkan segmentasi yang bermakna secara perseptual dan peka terhadap variasi kontras lokal serta diskontinuitas warna/tekstur alami. Fitur Utama: segmentasi hierarkis berbasis graf; kompleksitas komputasi O(n log n) yang efisien; peka terhadap variasi kontras lokal; menghasilkan segmen yang bermakna secara perseptual; mendukung data multispektral/hiperspektral; menghasilkan wilayah berukuran bervariasi yang mempertahankan batas alami. Kasus Penggunaan: segmentasi citra multispektral; pemetaan habitat alami; ekstraksi fitur perkotaan; delineasi kanopi hutan; prapemrosesan deteksi perubahan; segmentasi data hiperspektral. Interpretasi Keluaran: keluaran berupa raster berlabel; setiap piksel diberi ID segmen. Ukuran segmen berbanding terbalik dengan kontras spektral lokal; batas berkontras tinggi menghasilkan segmen yang lebih kecil dan banyak; wilayah seragam bergabung menjadi segmen yang lebih besar. Kepekaan terhadap parameter k (skala ambang batas) memungkinkan dihasilkannya segmentasi yang lebih kasar atau lebih halus. Batas segmen bersesuaian dengan diskontinuitas spektral alami.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "k": {
                "label": "K",
                "description": "Parameter skala segmentasi (default 500.0)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Petunjuk penghalusan opsional (default 0.8)."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Luas minimum untuk pembersihan pasca-penggabungan (default 20)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster segmen keluaran opsional."
              }
            }
          },
          "segment_multiresolution_hierarchical": {
            "name": "Segmentasi multiresolusi hierarkis",
            "description": "Menghasilkan segmentasi hierarkis multiskala (kasar dan halus) dengan pemetaan induk-anak yang eksplisit. Memungkinkan ekstraksi fitur yang bergantung pada skala dan alur kerja klasifikasi multitingkat.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "coarse_k": {
                "label": "K kasar",
                "description": "Parameter skala kasar (default 800)."
              },
              "fine_k": {
                "label": "K halus",
                "description": "Parameter skala halus (default 250)."
              },
              "output_prefix": {
                "label": "Awalan keluaran",
                "description": "Awalan keluaran untuk produk yang dihasilkan."
              }
            }
          },
          "segment_scale_parameter_optimizer": {
            "name": "Pengoptimal parameter skala segmen",
            "description": "Mencari parameter skala segmentasi kandidat untuk mengidentifikasi skala optimal yang sesuai dengan jumlah objek target. Pemilihan skala otomatis menghilangkan penyetelan manual demi kualitas segmentasi yang konsisten.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "candidate_scales": {
                "label": "Skala kandidat",
                "description": "Daftar nilai skala (k) kandidat."
              },
              "target_objects": {
                "label": "Objek target",
                "description": "Jumlah objek yang diinginkan. Default sqrt(total_cells)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path JSON laporan pengoptimal opsional."
              }
            }
          },
          "segment_slic_superpixels": {
            "name": "Segmentasi superpiksel SLIC",
            "description": "SLIC (Simple Linear Iterative Clustering) melakukan pengklasteran piksel secara iteratif dalam ruang fitur 5D yang menggabungkan koordinat spasial dan nilai warna/spektral, sehingga superpiksel konvergen menuju homogenitas lokal. Algoritma ini menginisialisasi grid pusat klaster yang teratur dan menetapkan piksel ke pusat terdekat, lalu secara iteratif memperbarui pusat dan mengurangi wilayah pencarian. Hal ini menghasilkan superpiksel yang kompak dan berbentuk teratur dengan pelanggaran batas minimal dibandingkan alternatif watershed atau mean-shift, sehingga menawarkan kepatuhan batas yang lebih baik terhadap tepi alami. Fitur Utama: menghasilkan superpiksel yang seragam dan kompak; efisien secara komputasi dengan kompleksitas waktu linier; parameter kekompakan yang dapat dikonfigurasi pengguna menyeimbangkan keteraturan spasial dengan koherensi spektral; pelampauan batas minimal; mendukung citra multispektral. Kasus Penggunaan: prapemrosesan klasifikasi berbasis objek; analisis wilayah hierarkis; segmentasi citra SAR dan optik; pemetaan perkotaan; delineasi vegetasi; identifikasi batas penggunaan lahan. Interpretasi Keluaran: keluaran berupa raster berlabel dengan nilai piksel yang merepresentasikan ID superpiksel yang ditetapkan. Batas superpiksel selaras dengan tepi dominan dan transisi warna. Superpiksel yang lebih kecil (granularitas lebih tinggi) menangkap detail lebih halus tetapi meningkatkan beban komputasi; superpiksel yang lebih besar (granularitas lebih rendah) menggabungkan wilayah yang mirip sehingga meningkatkan efisiensi. Akurasi batas bergantung pada penyetelan parameter kekompakan dan pemisahan band multispektral.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "region_size": {
                "label": "Ukuran wilayah",
                "description": "Ukuran superpiksel target dalam piksel (default 20)."
              },
              "compactness": {
                "label": "Kekompakan",
                "description": "Kontrol kekompakan (default 10.0)."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Luas minimum untuk penggabungan pembersihan (default diturunkan dari region_size)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster segmen keluaran opsional."
              }
            }
          },
          "segment_watershed_markers": {
            "name": "Segmentasi watershed dengan penanda",
            "description": "Segmentasi mirip watershed berbasis marker yang memisahkan objek di sekitar wilayah benih marker yang teridentifikasi. Menekankan pelestarian batas sambil mengontrol ukuran segmen untuk alur kerja OBIA hierarkis.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "gradient_weight": {
                "label": "Bobot gradien",
                "description": "Kontrol penekanan batas (default 1.0)."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Ukuran segmen minimum (default 12)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster segmen keluaran opsional."
              }
            }
          },
          "segments_merge_small_regions": {
            "name": "Gabungkan segmen wilayah kecil",
            "description": "Penggabungan segmen menerapkan konsolidasi hierarkis melalui analisis ketetanggaan spasial dan kriteria penggabungan tentuan pengguna. Mengevaluasi setiap segmen berukuran terlalu kecil terhadap wilayah tetangganya menggunakan ambang batas ukuran, ukuran kemiripan spektral, atau kriteria morfologis kustom; secara progresif menggabungkan segmen kandidat ke tetangga penyerap mengikuti antrean prioritas berdasarkan biaya penggabungan, dengan mempertahankan konektivitas segmen dan menghindari pelanggaran topologi. Fitur utama meliputi regularisasi pascapemrosesan citra yang tersegmentasi berlebihan, kriteria penggabungan yang dapat dikonfigurasi pengguna (ukuran minimum, ambang batas kemiripan spektral, sifat morfologis), pelestarian integritas batas segmen selama penggabungan, pembuatan peta segmen yang kompak dan disederhanakan, serta penyempurnaan hierarkis tanpa segmentasi ulang penuh. Kasus penggunaan meliputi pembersihan hasil OBIA yang tersegmentasi berlebihan untuk mengurangi fragmentasi dan derau, penyederhanaan segmen untuk meningkatkan stabilitas klasifikasi, penghapusan segmen kecil palsu dari segmentasi awal, standardisasi sifat segmen untuk ekstraksi fitur hilir yang seragam, serta penyempurnaan penjaminan mutu hierarki segmentasi multiskala. Keluaran menunjukkan jumlah segmen yang berkurang sebagai cerminan konsolidasi; segmen yang digabungkan mewarisi statistik spektral dari komponen yang diserap; batas menjadi lebih halus dengan kompleksitas berkurang; wilayah yang digabungkan mempertahankan integritas spasial tetapi menunjukkan heterogenitas spektral internal yang sedikit meningkat; keluaran dioptimalkan untuk klasifikasi hilir dan stabilitas fitur.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster label segmen masukan."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Ukuran segmen minimum dalam sel (default 5)."
              },
              "method": {
                "label": "Metode",
                "description": "Metode penggabungan: longest, largest, nearest (default longest)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "segments_split_low_cohesion": {
            "name": "Pisahkan segmen berkohesi rendah",
            "description": "Menyegmentasi ulang objek berkohesi rendah yang ada menggunakan pengaturan skala yang lebih halus untuk meningkatkan homogenitas spektral. Penyempurnaan adaptif untuk zona bermasalah tanpa memengaruhi objek yang sudah terbentuk dengan baik.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster segmen yang sudah ada."
              },
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan yang digunakan untuk segmentasi ulang."
              },
              "split_scale": {
                "label": "Skala pemisahan",
                "description": "Parameter skala pemisahan lebih halus (default 120)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "segments_to_polygons": {
            "name": "Segmen ke poligon",
            "description": "Mengonversi label segmen raster menjadi poligon vektor untuk pengeditan interaktif, kontrol kualitas, dan integrasi GIS. Memungkinkan transisi mulus antara representasi OBIA raster dan vektor.",
            "params": {
              "segments": {
                "label": "Segmen",
                "description": "Raster segmen masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "evaluate_training_sites": {
            "name": "Evaluasi lokasi pelatihan",
            "description": "Mengevaluasi keterpisahan kelas pada poligon latih multiband dan menulis laporan HTML dengan statistik distribusi per band.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal (satu per band spektral), sebagai path atau string berpembatas."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path ke data pelatihan poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Nama field kelas dalam atribut training_data."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file HTML keluaran."
              }
            }
          },
          "fuzzy_knn_classification": {
            "name": "Klasifikasi fuzzy KNN",
            "description": "Melakukan klasifikasi fuzzy k-nearest-neighbor dan menghasilkan keyakinan keanggotaan kelas.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik/poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kelas dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Jumlah tetangga (default 5)."
              },
              "m": {
                "label": "M",
                "description": "Parameter eksponen fuzzy (> 1; default 2.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster terklasifikasi keluaran opsional."
              },
              "probability_output": {
                "label": "Keluaran probabilitas",
                "description": "Path raster probabilitas keanggotaan opsional."
              }
            }
          },
          "generalize_classified_raster": {
            "name": "Generalisasi raster terklasifikasi",
            "description": "Generalize Classified Raster menyederhanakan peta klasifikasi dengan menghapus petak kecil yang terisolasi melalui penyaringan modus iteratif, menggabungkan komponen satu piksel atau multipiksel yang terfragmentasi ke kelas tetangga yang dominan secara spasial. Algoritma: menerapkan filter modus morfologis yang mempertahankan kelas dominan di dalam jendela bergerak, menghapus atau mengonsolidasikan piksel yang terisolasi dari konteks spasial, menyempurnakan klasifikasi secara iteratif melalui analisis komponen terhubung, dan menyerap kelas minor ke kelas dominan tetangga. Ukuran jendela dan ukuran petak minimum yang dapat dikonfigurasi mengontrol intensitas generalisasi. Fitur utama: mengurangi fragmentasi klasifikasi, meningkatkan koherensi spasial, menghilangkan petak terisolasi akibat derau, mempertahankan batas kelas melalui penyaringan selektif, pemrosesan komponen terhubung yang efisien secara komputasi. Kemampuan: intensitas generalisasi yang bervariasi, pelestarian petak besar yang bersambung, penerapan pada data terindeks atau kategori. Kasus penggunaan: penyempurnaan pascaklasifikasi untuk menghilangkan efek salt-and-pepper, mengonsolidasikan hasil klasifikasi yang terfragmentasi, penyiapan produk klasifikasi akhir, generalisasi ke unit pemetaan minimum tertentu. Aplikasi: finalisasi peta tutupan lahan, menghilangkan klasifikasi satu piksel yang palsu, meningkatkan kontinuitas spasial klasifikasi. Interpretasi keluaran: berkurangnya fragmentasi kelas menunjukkan penghilangan bintik yang efektif; batas yang dipertahankan mengungkap parameter generalisasi yang tepat; generalisasi berlebihan menunjukkan parameter jendela yang terlalu besar; peningkatan koherensi spasial menandakan bahwa derau klasifikasi terutama berupa artefak satu piksel.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster terklasifikasi masukan atau objek raster bertipe."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Ukuran fitur minimum dalam sel; patch yang lebih kecil ditetapkan ulang (default 5)."
              },
              "method": {
                "label": "Metode",
                "description": "Metode generalisasi: 'longest' (default), 'largest', atau 'nearest'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "generalize_with_similarity": {
            "name": "Generalisasi dengan kemiripan",
            "description": "Menggeneralisasi petak kecil dalam raster terklasifikasi dengan menggabungkannya ke petak tetangga yang paling mirip secara spektral.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster terklasifikasi masukan."
              },
              "similarity": {
                "label": "Kemiripan",
                "description": "Array raster kemiripan yang digunakan untuk menghitung kemiripan pusat fitur."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Ukuran fitur minimum dalam piksel; fitur yang lebih kecil digabungkan (default 5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "k_means_clustering": {
            "name": "Klasterisasi K-means",
            "description": "Pengklasteran K-means melakukan klasifikasi spektral tak terbimbing dengan mempartisi piksel secara iteratif ke dalam K klaster spektral, meminimalkan varians di dalam klaster dan menemukan pengelompokan spektral alami dalam citra multispektral tanpa sampel latih atau definisi kelas a priori. Algoritma ini menginisialisasi K pusat klaster acak, secara iteratif menetapkan piksel ke pusat terdekat dan menghitung ulang pusat sebagai rata-rata klaster hingga konvergen, lalu mengeluarkan penetapan klaster dan pusat akhir. K-means efisien secara komputasi, dapat diskalakan untuk tumpukan multispektral yang besar, dan menemukan pola spektral berbasis data yang berguna untuk analisis eksploratif dan identifikasi kelas alami. Fitur utama meliputi jumlah klaster K yang ditentukan pengguna sehingga memungkinkan kompromi fleksibel antara detail spektral dan kemudahan interpretasi keluaran, kriteria konvergensi dengan batas iterasi dan ambang batas perpindahan pusat yang dapat dikonfigurasi, kontrol random seed opsional yang menjamin pengklasteran yang dapat direproduksi untuk pengujian dan validasi, serta paralelisasi efisien untuk menangani citra besar. Aplikasi mencakup klasifikasi tutupan lahan tak terbimbing yang menemukan kelas spektral alami, deteksi anomali yang mengidentifikasi piksel yang tidak biasa secara spektral, segmentasi citra untuk klasifikasi terbimbing selanjutnya, serta analisis spektral eksploratif yang mengungkap pola spektral dominan. Keluaran K-means mengidentifikasi pengelompokan spektral alami. Keluaran menghasilkan raster keanggotaan klaster dengan bilangan bulat 0 hingga K-1, file pusat klaster dengan spektrum rata-rata per klaster, serta varians di dalam klaster opsional yang mengukur kekompakan; visualisasi menampalkan kelas klaster pada komposit warna asli untuk mengungkap pola spasial dan kontinuitas klaster.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar raster masukan sebagai array path atau string yang dipisahkan koma/titik koma."
              },
              "classes": {
                "label": "Kelas",
                "description": "Jumlah kelas target (k)."
              },
              "max_iterations": {
                "label": "Iterasi maksimum",
                "description": "Jumlah iterasi maksimum (default 10)."
              },
              "class_change": {
                "label": "Perubahan kelas",
                "description": "Berhenti ketika persentase sel valid yang berubah turun di bawah ambang ini (default 2.0)."
              },
              "initialize": {
                "label": "Inisialisasi",
                "description": "Strategi inisialisasi centroid: 'diagonal' (default) atau 'random'."
              },
              "min_class_size": {
                "label": "Ukuran kelas minimum",
                "description": "Ukuran kelas minimum yang digunakan saat memperbarui centroid (default 10)."
              },
              "out_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran raster kelas opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "knn_classification": {
            "name": "Klasifikasi KNN",
            "description": "Klasifikasi K-nearest neighbors menetapkan piksel ke kelas berdasarkan pemungutan suara mayoritas di antara K sampel latih terdekat dalam ruang spektral, sehingga memungkinkan klasifikasi non-linier yang fleksibel tanpa pelatihan model eksplisit. KNN menghitung jarak (Euclidean, sudut spektral, atau Mahalanobis) dari setiap piksel citra ke semua sampel latih, mengidentifikasi K sampel latih terdekat, menerapkan pemungutan suara mayoritas berbobot atau tak berbobot untuk menentukan kelas, lalu mengembalikan label kelas dan secara opsional skor keyakinan. KNN unggul dengan data latih terbatas, batas kelas yang sangat non-linier, dan distribusi spektral kelas yang heterogen di mana model parametrik kesulitan. Fitur utama meliputi metrik jarak yang dapat dipilih (Euclidean, sudut spektral, Mahalanobis) untuk mengakomodasi karakteristik spektral dan struktur korelasi yang berbeda, nilai K yang ditentukan pengguna sehingga memungkinkan kompromi akurasi-kompleksitas, opsi pemungutan suara berbobot yang menekankan sampel terdekat, serta ambang batas keyakinan opsional yang memungkinkan penolakan klasifikasi yang ambigu. Aplikasi meliputi klasifikasi penginderaan jauh berakurasi tinggi dengan sampel latih yang dikumpulkan di lapangan, klasifikasi sampel kecil ketika ground truth terbatas, klasifikasi medan sulit dengan tanda spektral yang sangat bervariasi, serta klasifikasi yang memperhatikan keyakinan dengan menolak keputusan di batas. Klasifikasi KNN memungkinkan hasil berakurasi tinggi dengan data latih yang fleksibel. Keluaran terdiri atas raster label kelas dengan ID kelas bilangan bulat yang sesuai dengan label sampel latih, raster keyakinan opsional yang mencatat persentase suara atau skor keyakinan berbobot jarak, serta akurasi klasifikasi yang berpotensi melampaui metode lain dengan pemilihan K yang optimal dan sampel latih yang memadai.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik/poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kelas dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Jumlah tetangga (default 5)."
              },
              "clip": {
                "label": "Potong",
                "description": "Jika true, hapus sampel pelatihan yang salah klasifikasi melalui pra-lintasan leave-one-out."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "knn_regression": {
            "name": "Regresi KNN",
            "description": "Melakukan regresi k-nearest-neighbor terbimbing pada raster masukan multiband.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik."
              },
              "field": {
                "label": "Field",
                "description": "Field target numerik dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "k": {
                "label": "K",
                "description": "Jumlah tetangga (default 5)."
              },
              "distance_weighted": {
                "label": "Terboboti jarak",
                "description": "Jika true, gunakan perata-rataan terboboti jarak terbalik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "logistic_regression": {
            "name": "Regresi logistik",
            "description": "Melakukan klasifikasi regresi logistik terbimbing pada raster masukan multiband.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik/poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kelas dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Bobot regularisasi L2 (default 0.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "min_dist_classification": {
            "name": "Klasifikasi jarak minimum",
            "description": "Melakukan klasifikasi jarak minimum terbimbing pada raster multispektral menggunakan data latih poligon.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal (satu per band spektral), sebagai path atau string berpembatas."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path ke file vektor poligon yang memuat area pelatihan."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Nama field atribut dalam data pelatihan yang memuat pengenal kelas."
              },
              "dist_threshold": {
                "label": "Ambang jarak",
                "description": "Ambang skor z opsional; piksel yang lebih jauh dari ini terhadap rata-rata kelas terdekat dibiarkan tidak terklasifikasi. Default: tanpa ambang (klasifikasikan semua)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "modified_k_means_clustering": {
            "name": "Klasterisasi K-means termodifikasi",
            "description": "Modified K-means clustering menyempurnakan K-means standar dengan prapemrosesan spektral, pemilihan K adaptif otomatis, dan kriteria konvergensi yang ditingkatkan untuk klasifikasi multispektral tak terbimbing yang lebih andal dan akurat. Algoritma ini menerapkan prapemrosesan opsional termasuk standardisasi spektral untuk menghilangkan efek skala, transformasi komponen utama yang menekankan arah varians dominan, dan penyaringan derau untuk menghilangkan variasi spektral palsu. Pemilihan K adaptif menggunakan metode elbow atau analisis silhouette untuk menemukan jumlah klaster optimal secara otomatis alih-alih memerlukan penentuan manual. Fitur utama meliputi prapemrosesan spektral yang mengurangi kepekaan skala dan menekankan arah variasi spektral dominan, pemilihan K otomatis yang menemukan jumlah klaster optimal secara objektif, kriteria konvergensi yang ditingkatkan termasuk ambang batas perpindahan pusat relatif dan metrik kemiripan sudut spektral, serta pascapemrosesan opsional yang menggabungkan klaster yang mirip atau memecah klaster yang menyebar. Aplikasi meliputi klasifikasi tutupan lahan eksploratif yang ditingkatkan dengan penanganan skala spektral secara otomatis, deteksi anomali yang andal yang memisahkan sinyal dari derau melalui prapemrosesan, segmentasi citra adaptif yang menemukan tingkat detail yang sesuai secara otomatis, serta integrasi multisensor yang menormalisasi skala spektral sensor yang berbeda. Keluaran Modified K-means mengungkap kelas spektral alami yang andal. Keluaran menghasilkan raster keanggotaan klaster teroptimasi dengan jumlah kelas yang ditentukan secara otomatis, pusat klaster dengan transformasi prapemrosesan yang terdokumentasi, serta statistik diagnostik yang mengukur kualitas, pemisahan, dan konvergensi klaster; rekomendasi pemilihan K adaptif memandu kompromi antara kemudahan interpretasi dan detail.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar raster masukan sebagai array path atau string yang dipisahkan koma/titik koma."
              },
              "start_clusters": {
                "label": "Klaster awal",
                "description": "Jumlah klaster awal sebelum penggabungan (default 1000)."
              },
              "merge_dist": {
                "label": "Jarak penggabungan",
                "description": "Ambang jarak penggabungan klaster (Euclidean)."
              },
              "max_iterations": {
                "label": "Iterasi maksimum",
                "description": "Jumlah iterasi maksimum (default 10)."
              },
              "class_change": {
                "label": "Perubahan kelas",
                "description": "Berhenti ketika persentase sel valid yang berubah turun di bawah ambang ini (default 2.0)."
              },
              "out_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran raster kelas opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "nnd_classification": {
            "name": "Klasifikasi NND",
            "description": "Melakukan klasifikasi jarak ternormalisasi terdekat dengan penolakan pencilan opsional.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik/poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kelas dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "z_threshold": {
                "label": "Ambang Z",
                "description": "Skor z jarak ternormalisasi maksimum yang diterima sebelum penandaan pencilan (default 1.96)."
              },
              "outlier_is_zero": {
                "label": "Pencilan sama dengan nol",
                "description": "Jika true, pencilan ditetapkan nilai kelas 0; jika tidak, nodata."
              },
              "k": {
                "label": "K",
                "description": "Ukuran ketetanggaan untuk estimasi jarak kelas (default 25)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "otsu_thresholding": {
            "name": "Ambang batas Otsu",
            "description": "Otsu Thresholding adalah metode segmentasi citra otomatis yang menentukan nilai ambang batas global optimal dengan memaksimalkan varians antarkelas dalam histogram intensitas piksel. Algoritma: memeriksa histogram citra skala abu-abu atau satu band, menguji secara iteratif semua nilai ambang batas yang mungkin, menghitung varians antarkelas untuk setiap ambang batas, lalu memilih nilai yang memaksimalkan pemisahan varians antara kelas latar depan dan latar belakang. Non-parametrik, tidak memerlukan penentuan ambang batas secara manual. Fitur utama: penentuan ambang batas sepenuhnya otomatis, tahan terhadap variasi iluminasi, pendekatan berbasis histogram memungkinkan komputasi cepat, tanpa parameter eksternal, menyediakan satu ambang batas global. Kemampuan: segmentasi biner, optimasi histogram unimodal dan bimodal, menangani citra dengan rentang dinamis sempit atau berkontras tinggi. Kasus penggunaan: segmentasi citra otomatis tanpa intervensi pengguna, binerisasi dokumen, ekstraksi badan air, deteksi awan pada citra satelit, pemetaan es/salju. Aplikasi: prapemrosesan deteksi perubahan, klasifikasi tutupan lahan sederhana, pembuatan mask air, segmentasi awal sebelum klasifikasi lanjutan. Interpretasi keluaran: piksel di bawah ambang batas diklasifikasikan sebagai satu kelas, di atasnya sebagai kelas lain; bimodalitas histogram menunjukkan kualitas pemisahan; histogram yang terpisah buruk menunjukkan ketidaksesuaian untuk klasifikasi biner; ukuran statistik seperti varians antarkelas dan keseragaman menunjukkan kualitas segmentasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "parallelepiped_classification": {
            "name": "Klasifikasi parallelepiped",
            "description": "Melakukan klasifikasi paralelepiped terbimbing pada raster multispektral menggunakan data latih poligon.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal (satu per band spektral), sebagai path atau string berpembatas."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path ke file vektor poligon yang memuat area pelatihan."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Nama field atribut dalam data pelatihan yang memuat pengenal kelas."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "random_forest_classification": {
            "name": "Klasifikasi random forest",
            "description": "Klasifikasi Random Forest menetapkan label melalui ensemble pohon keputusan yang dilatih pada sampel bootstrap dengan subset fitur yang diacak. Setiap pohon tumbuh secara independen tanpa pemangkasan, menangkap hubungan non-linier yang kompleks dan interaksi antarfitur. Klasifikasi mengagregasi suara dari biasanya 100-1000 pohon; kelas akhir adalah suara mayoritas. Pelatihan bootstrap dan pemilihan fitur acak mengurangi overfitting sambil menangkap pola berdimensi tinggi. Kepentingan fitur dapat dihitung dari perubahan galat out-of-bag, sehingga mengidentifikasi band spektral diagnostik atau fitur turunan yang paling relevan untuk klasifikasi. Fitur utama meliputi pemeringkatan kepentingan variabel yang mengidentifikasi fitur klasifikasi kunci, keyakinan klasifikasi per piksel dari konsensus suara di seluruh pohon ensemble, penanganan otomatis data hiperspektral berdimensi tinggi, ketahanan terhadap pencilan dan derau spektral, serta pelatihan dan prediksi yang dapat diparalelkan. Alat ini memproses masalah multikelas dengan set latih yang tidak seimbang secara efisien. Aplikasi meliputi klasifikasi tutupan lahan dari data multispektral dan hiperspektral, deteksi perubahan yang mengidentifikasi transisi spektral antarpeta, klasifikasi jenis tanaman dari citra satelit multitemporal, klasifikasi material perkotaan yang membedakan jenis bangunan dan permukaan, serta deteksi anomali yang mengidentifikasi pencilan spektral. Random forest secara konsisten mencapai akurasi tinggi dalam aplikasi penginderaan jauh dengan data latih yang relatif sedikit. Interpretasi keluaran: jumlah suara memberikan keyakinan klasifikasi; suara bulat atau mayoritas kuat (>80%) menunjukkan klasifikasi yang meyakinkan, sedangkan selisih tipis menandakan ambiguitas piksel campuran. Peringkat kepentingan fitur mengidentifikasi band spektral atau indeks turunan yang paling diagnostik untuk klasifikasi. Galat out-of-bag mengestimasi kinerja generalisasi tanpa validasi hold-out. Interaksi fitur bersifat implisit; akurasi tinggi dari kombinasi band tertentu menandakan hubungan spektral non-linier.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik/poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kelas dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon dalam forest (default 200)."
              },
              "min_samples_leaf": {
                "label": "Sampel minimum per daun",
                "description": "Jumlah sampel minimum yang diperlukan pada node daun (default 1)."
              },
              "min_samples_split": {
                "label": "Sampel minimum pemisahan",
                "description": "Jumlah sampel minimum yang diperlukan untuk memisahkan node internal (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "random_forest_regression": {
            "name": "Regresi random forest",
            "description": "Melakukan regresi random forest terbimbing pada raster masukan multiband.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik."
              },
              "field": {
                "label": "Field",
                "description": "Field target numerik dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon dalam forest (default 200)."
              },
              "min_samples_leaf": {
                "label": "Sampel minimum per daun",
                "description": "Jumlah sampel minimum yang diperlukan pada node daun (default 1)."
              },
              "min_samples_split": {
                "label": "Sampel minimum pemisahan",
                "description": "Jumlah sampel minimum yang diperlukan untuk memisahkan node internal (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "svm_classification": {
            "name": "Klasifikasi SVM",
            "description": "Klasifikasi Support Vector Machine (SVM) menerapkan algoritma machine learning Support Vector Machine pada data penginderaan jauh multispektral, memisahkan kelas latih melalui penempatan hyperplane optimal dalam ruang fitur spektral berdimensi tinggi. Algoritma: mentransformasikan vektor fitur spektral ke ruang berdimensi tinggi melalui fungsi kernel (linier, RBF, polinomial), mengidentifikasi hyperplane bermargin maksimum yang memisahkan kelas latih, lalu mengklasifikasikan piksel baru menurut posisinya terhadap hyperplane; parameter toleransi dan pemilihan kernel mengontrol generalisasi. Menangani pemisahan kelas non-linier secara efektif. Fitur utama: tahan terhadap data spektral berdimensi tinggi, generalisasi sangat baik dengan sampel latih terbatas, fleksibilitas kernel mengakomodasi beragam distribusi spektral, menyediakan estimasi probabilitas/keyakinan. Kemampuan: klasifikasi multikelas, toleransi soft-margin, penyeimbangan bobot kelas otomatis. Kasus penggunaan: klasifikasi lahan terperinci dengan data latih yang jarang, integrasi fitur spektral-spasial, deteksi perubahan, pertanian presisi, pemetaan perkotaan. Aplikasi: klasifikasi citra hiperspektral, pemetaan ekosistem kompleks, delineasi jenis tanaman, klasifikasi infrastruktur. Interpretasi keluaran: keanggotaan kelas menunjukkan kategori prediksi dengan koherensi spasial yang mengungkap kualitas klasifikasi; estimasi probabilitas mengukur keyakinan tingkat piksel; pola salah klasifikasi menunjukkan kekurangan data latih atau masalah tumpang tindih spektral.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik/poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kelas dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Jenis kernel: linear (default) atau rbf."
              },
              "c": {
                "label": "C",
                "description": "Parameter regularisasi SVM (default 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma kernel RBF; default 1 / jumlah fitur."
              },
              "epoch": {
                "label": "Epoch",
                "description": "Jumlah epoch pelatihan (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "svm_regression": {
            "name": "Regresi SVM",
            "description": "Melakukan regresi support vector machine terbimbing pada raster masukan multiband.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik."
              },
              "field": {
                "label": "Field",
                "description": "Field target numerik dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Jenis kernel: linear (default) atau rbf."
              },
              "c": {
                "label": "C",
                "description": "Parameter regularisasi SVM (default 1.0)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Gamma kernel RBF; default 1 / jumlah fitur."
              },
              "eps": {
                "label": "Eps",
                "description": "Lebar loss epsilon-insensitive (default 0.1)."
              },
              "tol": {
                "label": "Toleransi",
                "description": "Toleransi pengoptimal (default 1e-3)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "change_vector_analysis": {
            "name": "Analisis vektor perubahan",
            "description": "Melakukan analisis vektor perubahan pada dataset multispektral dua tanggal dan mengembalikan raster besaran dan arah.",
            "params": {
              "date1": {
                "label": "Tanggal 1",
                "description": "Daftar raster tanggal lebih awal sebagai array path atau string yang dipisahkan koma/titik koma."
              },
              "date2": {
                "label": "Tanggal 2",
                "description": "Daftar raster tanggal lebih akhir sebagai array path atau string yang dipisahkan koma/titik koma."
              },
              "magnitude_output": {
                "label": "Keluaran magnitudo",
                "description": "Path keluaran opsional untuk raster magnitudo vektor."
              },
              "direction_output": {
                "label": "Keluaran arah",
                "description": "Path keluaran opsional untuk raster kode arah."
              }
            }
          },
          "image_difference_change_detection": {
            "name": "Deteksi perubahan selisih citra",
            "description": "Deteksi perubahan selisih citra mengidentifikasi perubahan tutupan lahan dengan menghitung selisih multispektral per piksel antara akuisisi satelit multitemporal yang teregistrasi bersama, menyoroti area tempat tanda spektral berubah cukup besar hingga melampaui variasi latar statistik. Algoritma ini meregistrasi citra ke grid piksel yang sama, menghitung selisih pada band atau indeks vegetasi yang dipilih (misalnya selisih NDVI), menerapkan pengambangan statistik menggunakan rata-rata selisih absolut dan interval kepercayaan untuk membedakan perubahan dari derau, lalu mengeluarkan mask perubahan biner atau raster besaran selisih kontinu. Pengurangan citra sederhana secara komputasi, mudah diinterpretasikan, dan efektif untuk mendeteksi perubahan besar pada vegetasi, pembangunan perkotaan, atau badan air. Fitur utama meliputi pemilihan band yang fleksibel untuk deteksi perubahan terarah pada domain spektral tertentu, pengambangan statistik dengan tingkat kepercayaan otomatis atau manual, prapemrosesan opsional (normalisasi, perhitungan indeks) yang meningkatkan rasio sinyal-derau perubahan, serta pemrosesan cepat yang memungkinkan deteksi perubahan skala besar. Aplikasi meliputi pemetaan deforestasi dan pemantauan kehilangan hutan, pelacakan ekspansi perkotaan dari deret waktu satelit multispektral, pemetaan banjir sebelum/sesudah kejadian dari data SAR atau optik, serta deteksi perubahan pertanian yang melacak transisi tanaman. Keluaran selisih citra menyoroti area perubahan. Keluaran terdiri atas raster mask perubahan (biner berubah/tidak berubah) dengan ambang batas yang dapat dikonfigurasi, raster besaran selisih kontinu yang mengukur intensitas perubahan, serta raster kelas perubahan opsional yang membedakan jenis perubahan (peningkatan, penurunan); agregasi temporal memungkinkan pelacakan perubahan selama periode multitahun.",
            "params": {
              "t1_inputs": {
                "label": "Masukan T1",
                "description": "Array path raster tanggal 1."
              },
              "t2_inputs": {
                "label": "Masukan T2",
                "description": "Array path raster tanggal 2; harus cocok dengan panjang dan urutan t1_inputs."
              },
              "mode": {
                "label": "Mode",
                "description": "Mode selisih: magnitude (default) atau signed."
              },
              "threshold_sigma": {
                "label": "Sigma ambang",
                "description": "Ambang sigma opsional untuk pembuatan masker perubahan biner."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan t1_inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional untuk citra selisih."
              },
              "output_absolute": {
                "label": "Keluaran absolut",
                "description": "Path raster keluaran opsional untuk selisih bertanda absolut (|mean(t2-t1)|)."
              },
              "output_signed": {
                "label": "Keluaran bertanda",
                "description": "Path raster keluaran opsional untuk selisih bertanda mean(t2-t1)."
              },
              "output_mask": {
                "label": "Keluaran masker",
                "description": "Path raster keluaran opsional untuk masker perubahan biner terambang."
              }
            }
          },
          "pca_based_change_detection": {
            "name": "Deteksi perubahan berbasis PCA",
            "description": "Deteksi perubahan analisis komponen utama mengidentifikasi perubahan tutupan lahan dengan menghitung komponen utama dari data spektral multitemporal yang ditumpuk, dengan komponen awal menangkap pola umum sepanjang waktu dan komponen akhir mengisolasi perubahan temporal. Algoritma ini menumpuk data multispektral multitemporal (teregistrasi ke grid yang sama), menghitung PCA yang mentransformasikannya menjadi komponen spektral-temporal ortogonal yang tidak berkorelasi, menafsirkan PC akhir sebagai peka terhadap perubahan, serta menerapkan pengambangan statistik pada loading/skor PC untuk deteksi perubahan. Deteksi berbasis PCA unggul ketika sinyal perubahan halus secara spektral karena PCA memaksimalkan varians dan memisahkan pola spektral yang konsisten secara temporal (PC awal) dari variasi temporal (PC akhir). Fitur utama meliputi fusi data multitanggal yang menangani jumlah citra yang bervariasi dan persyaratan registrasi bersama, maksimisasi varians otomatis yang menekankan pola spektral-temporal penting, statistik multivariat yang meningkatkan diskriminasi perubahan dibandingkan pengurangan univariat, serta penyaringan spasial opsional yang mengurangi derau piksel. Aplikasi meliputi deteksi stres vegetasi yang halus sebelum dapat dikenali secara visual, deteksi perubahan perkotaan multispektral yang melacak pembangunan selama puluhan tahun, penilaian dampak bencana alam melalui pemetaan kerusakan cepat, serta pemantauan lingkungan yang mendeteksi transisi keadaan ekosistem. Keluaran deteksi berbasis PCA membedakan pola temporal. Keluaran terdiri atas citra komponen utama dengan loading spektral-temporal yang dapat diinterpretasikan, raster probabilitas perubahan yang diturunkan dari skor komponen akhir, serta klasifikasi perubahan opsional yang membedakan jenis perubahan; pola spasial PC memungkinkan pengenalan pola visual yang melengkapi deteksi statistik.",
            "params": {
              "t1_inputs": {
                "label": "Masukan T1",
                "description": "Array path raster tanggal 1."
              },
              "t2_inputs": {
                "label": "Masukan T2",
                "description": "Array path raster tanggal 2; harus cocok dengan panjang dan urutan t1_inputs."
              },
              "component": {
                "label": "Komponen",
                "description": "Indeks komponen utama berbasis 1 untuk dikeluarkan (default 1)."
              },
              "standardized": {
                "label": "Terstandarisasi",
                "description": "Jika true, gunakan PCA matriks korelasi pada vektor perubahan (default false)."
              },
              "threshold_sigma": {
                "label": "Sigma ambang",
                "description": "Ambang sigma opsional pada skor PC absolut untuk keluaran masker biner."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan t1_inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional untuk skor PC terpilih absolut."
              },
              "output_mask": {
                "label": "Keluaran masker",
                "description": "Path raster keluaran opsional untuk masker biner terambang (0/1)."
              },
              "output_report": {
                "label": "Keluaran laporan",
                "description": "Path laporan JSON keluaran opsional untuk nilai eigen, varians terjelaskan, dan loading komponen."
              }
            }
          },
          "post_classification_change": {
            "name": "Perubahan pasca-klasifikasi",
            "description": "Deteksi perubahan pascaklasifikasi mengukur transisi tutupan lahan/penggunaan lahan (LULC) dengan membandingkan secara langsung peta yang diklasifikasikan secara independen dari periode waktu yang berbeda. Perbandingan kelas piksel demi piksel mengidentifikasi transisi yang menunjukkan kelas \"dari\" dan \"ke\". Matriks tabulasi silang (matriks konfusi) mengukur frekuensi transisi sehingga mengungkap jalur perubahan yang dominan. Metode ini memerlukan skema klasifikasi yang konsisten antartanggal; akurasi bergantung pada kualitas klasifikasi di setiap langkah waktu. Fitur Utama: pemetaan transisi kelas-ke-kelas secara langsung; independensi masing-masing klasifikasi; memungkinkan kombinasi sensor yang heterogen; mengukur frekuensi transisi; mengidentifikasi hotspot perubahan. Kasus Penggunaan: pemantauan deforestasi; pemetaan pertumbuhan kota; pelacakan penggunaan lahan pertanian; deteksi kehilangan lahan basah; penilaian fragmentasi habitat. Interpretasi Keluaran: matriks transisi menunjukkan nilai tanpa perubahan pada diagonal dan frekuensi transisi di luar diagonal. Peta perubahan menyoroti piksel yang berubah; keluaran berkode transisi mengodekan kelas sumber dan kelas target sehingga memungkinkan interpretasi. Akurasi tinggi memerlukan klasifikasi berkualitas; galat klasifikasi pada tanggal mana pun merambat menjadi galat deteksi perubahan. Agregasi transisi mengungkap pola dominan (misalnya hutan→pertanian, padang rumput→perkotaan). Transisi subpiksel tidak dapat dideteksi dengan metode pascaklasifikasi; perubahan berskala halus mungkin terlewat.",
            "params": {
              "t1_classified": {
                "label": "Terklasifikasi T1",
                "description": "Path raster terklasifikasi tanggal 1."
              },
              "t2_classified": {
                "label": "Terklasifikasi T2",
                "description": "Path raster terklasifikasi tanggal 2."
              },
              "transition_scale": {
                "label": "Skala transisi",
                "description": "Faktor skala pengkodean transisi (default 1000): kode = kelas1 * skala + kelas2."
              },
              "t1_class_remap": {
                "label": "Pemetaan ulang kelas T1",
                "description": "Tabel pemetaan ulang opsional untuk kelas tanggal 1 sebagai objek {\"old\": new, ...}."
              },
              "t2_class_remap": {
                "label": "Pemetaan ulang kelas T2",
                "description": "Tabel pemetaan ulang opsional untuk kelas tanggal 2 sebagai objek {\"old\": new, ...}."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi t2_classified ke CRS t1_classified bila diperlukan."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster berkode transisi keluaran opsional."
              }
            }
          },
          "write_function_memory_insertion": {
            "name": "Penyisipan memori fungsi tulis",
            "description": "Membuat komposit visualisasi perubahan RGB terpaket dari dua atau tiga tanggal satu band.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster band tunggal tanggal pertama."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster band tunggal tanggal kedua."
              },
              "input3": {
                "label": "Masukan 3",
                "description": "Raster band tunggal tanggal ketiga opsional; jika dihilangkan, input2 digunakan untuk kanal biru."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "brdf_normalization": {
            "name": "Normalisasi BRDF",
            "description": "Normalisasi BRDF adegan tunggal menggunakan pendekatan C-correction atau Minnaert dengan geometri kemiringan/aspek DEM.",
            "params": {
              "input_raster": {
                "label": "Raster masukan",
                "description": "Raster reflektansi masukan untuk dinormalisasi (band tunggal atau tumpukan multi-band)."
              },
              "input_dem": {
                "label": "DEM masukan",
                "description": "Raster DEM yang terkoregistrasi dengan masukan (grid sama atau akan di-resampling agar cocok)."
              },
              "solar_zenith_deg": {
                "label": "Zenit matahari (derajat)",
                "description": "Sudut zenit matahari dalam derajat pada waktu akuisisi."
              },
              "solar_azimuth_deg": {
                "label": "Azimut matahari (derajat)",
                "description": "Sudut azimut matahari dalam derajat (searah jarum jam dari utara) pada waktu akuisisi."
              },
              "method": {
                "label": "Metode",
                "description": "Metode koreksi: c_correction (default) atau minnaert."
              },
              "minnaert_k": {
                "label": "K Minnaert",
                "description": "Koefisien k Minnaert dalam [0,1] (default 0.5). Hanya digunakan ketika method=minnaert."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Eksagerasi vertikal untuk perhitungan kemiringan/aspek DEM (default 1.0)."
              },
              "output_prefix": {
                "label": "Awalan keluaran",
                "description": "Awalan untuk file keluaran (default brdf_normalized)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran untuk raster ternormalisasi (menimpa output_prefix untuk mode keluaran tunggal)."
              }
            }
          },
          "correct_vignetting": {
            "name": "Koreksi vignetting",
            "description": "Koreksi vignetting lensa menghilangkan artefak radiometrik yang disebabkan oleh sifat optik lensa di luar sumbu, di mana tepi citra menerima lebih sedikit cahaya daripada pusat citra, sehingga menciptakan gradien kecerahan buatan yang tidak bergantung pada variasi reflektansi permukaan. Koreksi vignetting menerapkan faktor pengali yang bervariasi secara spasial, dihitung dari model profil vignetting (formulasi Gaussian atau hukum cosinus pangkat empat) yang dikalibrasi terhadap karakteristik sensor, sehingga memulihkan respons radiometrik yang seragam di seluruh bidang pandang citra. Langkah prapemrosesan ini sangat penting untuk penginderaan jauh multispektral dan hiperspektral, di mana vignetting akan merusak analisis spektral dan menimbulkan galat sistematis dalam alur kerja klasifikasi dan deteksi perubahan. Fitur utama meliputi estimasi profil vignetting otomatis dari statistik citra atau parameter kalibrasi yang ditentukan pengguna, faktor koreksi yang bervariasi secara spasial dan diterapkan per piksel tanpa artefak interpolasi, masking opsional piksel tepi yang terkoreksi berlebihan untuk mencegah penguatan tepi yang berderau, serta penanganan koreksi spesifik band untuk vignetting yang bervariasi antar-band spektral. Penerapannya meliputi prapemrosesan untuk algoritme klasifikasi spektral yang peka terhadap konsistensi radiometrik, persiapan mosaik di mana batas vignetting menimbulkan diskontinuitas yang terlihat, perbandingan radiometrik yang akurat di seluruh bingkai citra, serta analisis hiperspektral yang memerlukan respons iluminasi yang seragam. Citra yang terkoreksi vignetting menunjukkan kecerahan yang seragam di seluruh bidang pandang. Keluaran menunjukkan hilangnya penggelapan tepi dengan respons radiometrik yang seragam dari pusat citra hingga ke tepi; piksel tepi dapat menunjukkan derau yang meningkat jika dikoreksi secara berat; citra terkoreksi terintegrasi dengan mulus ke dalam alur kerja analisis multispektral tanpa artefak radiometrik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Citra raster masukan."
              },
              "pp": {
                "label": "Titik utama",
                "description": "Path vektor titik (atau objek vektor bertipe) yang memuat titik utama."
              },
              "focal_length": {
                "label": "Panjang fokus",
                "description": "Panjang fokus kamera dalam mm (default 304.8)."
              },
              "image_width": {
                "label": "Lebar citra",
                "description": "Jarak antara tepi kiri dan kanan citra dalam mm (default 228.6)."
              },
              "n": {
                "label": "N",
                "description": "Eksponen n model kosinus (default 4.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "dark_object_subtraction": {
            "name": "Pengurangan objek gelap",
            "description": "Dark Object Subtraction (DOS) adalah heuristik yang sederhana namun efektif untuk menghilangkan kabut atmosfer tanpa memerlukan data meteorologi tambahan atau model transfer radiatif yang kompleks. Teknik ini memanfaatkan prinsip bahwa reflektansi nol seharusnya menghasilkan sinyal reflektansi nol (dengan mengabaikan hamburan Rayleigh); setiap sinyal yang teramati dari permukaan yang hitam secara optis (air dalam, bayangan hutan lebat, aspal perkotaan) dianggap berasal dari radiansi jalur atmosfer yang disebabkan oleh hamburan aerosol. Tool ini mengidentifikasi nilai digital minimum pada setiap band di seluruh citra, menafsirkannya sebagai kabut atmosfer, dan mengurangkannya dari semua piksel sebagai offset konstan per band; varian yang lebih canggih (DOS2, DOS3, DOS4) memperhitungkan hamburan Rayleigh dan kedalaman optis aerosol yang bervariasi menggunakan indeks vegetasi atau pengklasteran piksel gelap. Kemampuan utama meliputi analisis histogram untuk mengisolasi objek gelap dan membedakan kabut yang bergantung pada adegan dari reflektansi nol yang sebenarnya, masking opsional fitur berreflektansi tinggi yang diketahui (perkotaan, salju, awan) yang dapat membiaskan identifikasi objek gelap, koreksi kabut spesifik band, serta komputasi cepat yang cocok untuk pemrosesan waktu nyata atau berskala besar. Kasus penggunaan meliputi estimasi reflektansi cepat (quick-look), pemantauan vegetasi dan kualitas air di mana kalibrasi absolut kurang penting dibandingkan perubahan relatif, pemetaan tanggap bencana cepat, serta data arsip lama di mana informasi aerosol yang tepat tidak tersedia. Masukan terdiri atas reflektansi top-of-atmosphere atau radiansi terkalibrasi, masker tutupan lahan opsional untuk mengecualikan fitur terang, dan metadata adegan. Keluaran berupa reflektansi terkoreksi kabut, estimasi radiansi jalur atmosfer per band, dan flag kualitas yang menunjukkan tingkat kepercayaan identifikasi objek gelap (misalnya, piksel gelap terbatas, adegan yang didominasi perkotaan). Meskipun kasar dibandingkan model transfer radiatif, DOS tetap praktis untuk analisis multitemporal dan pemetaan cakupan global ketika data atmosfer yang canggih tidak tersedia.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Tumpukan raster masukan (satu atau lebih raster)."
              },
              "percentile": {
                "label": "Persentil",
                "description": "Persentil objek gelap per band (default 1.0)."
              },
              "clamp_non_negative": {
                "label": "Batasi non-negatif",
                "description": "Jika true, batasi nilai terkoreksi di bawah nol menjadi nol (default true)."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi masukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              },
              "output_diagnostic_offsets": {
                "label": "Keluaran offset diagnostik",
                "description": "Path raster keluaran opsional untuk diagnostik offset objek gelap per band."
              }
            }
          },
          "dn_to_toa_reflectance": {
            "name": "DN ke reflektansi TOA",
            "description": "Konversi nilai digital ke reflektansi top-of-atmosphere mengubah nilai digital mentah sensor menjadi nilai reflektansi spektral yang bermakna secara fisik dengan menerapkan koefisien kalibrasi radiometrik per band yang diturunkan dari metadata satelit. Konversi ini menerapkan penskalaan ulang radiometrik, koreksi iradiansi spektral eksoatmosfer matahari, kompensasi sudut zenit matahari, dan normalisasi jarak Bumi-Matahari opsional untuk menghasilkan nilai reflektansi yang dapat dibandingkan secara langsung antar-sensor, waktu akuisisi, dan lokasi geografis. Reflektansi top-of-atmosphere menyatakan proporsi energi matahari datang yang dipantulkan oleh target permukaan bumi pada sensor sebelum efek atmosfer, dan berfungsi sebagai acuan dasar untuk analisis penginderaan jauh kuantitatif. Fitur utama meliputi penerapan koefisien kalibrasi per band dengan parsing metadata lengkap dari produk satelit standar, komputasi geometri matahari otomatis dari stempel waktu dan lokasi akuisisi, koreksi jarak Bumi-Matahari opsional untuk variabilitas musiman, serta penanganan fleksibel berbagai jenis sensor dengan format koefisien yang terstandardisasi. Penerapannya mencakup deteksi perubahan kuantitatif menggunakan satuan fisik yang konsisten, perbandingan radiometrik absolut antar-akuisisi multitemporal dan antar-sensor, perhitungan indeks vegetasi spektral yang memerlukan reflektansi yang tepat, serta validasi lintas sensor dalam pekerjaan konstelasi satelit. Reflektansi TOA memungkinkan alur kerja analisis yang ketat dan hasil yang dapat dipertanggungjawabkan secara ilmiah. Nilai reflektansi keluaran berkisar 0-1 (terkadang dinyatakan sebagai 0-10000 untuk presisi bilangan bulat) yang merepresentasikan proporsi tanpa dimensi; metadata menyematkan koefisien kalibrasi yang digunakan dan parameter geometri sensor; nilai negatif menunjukkan masalah kualitas data yang memerlukan masking sebelum analisis.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Tumpukan raster DN masukan (satu atau lebih raster)."
              },
              "reflectance_mult": {
                "label": "Pengali reflektansi",
                "description": "Koefisien pengali per band, baik skalar maupun array berukuran sesuai inputs."
              },
              "reflectance_add": {
                "label": "Penambah reflektansi",
                "description": "Koefisien penambah per band, baik skalar maupun array berukuran sesuai inputs (default 0)."
              },
              "sensor_bundle_root": {
                "label": "Root bundel sensor",
                "description": "Root bundel Landsat/Sentinel-2 opsional yang digunakan untuk menurunkan koefisien secara otomatis ketika koefisien eksplisit dihilangkan."
              },
              "sun_elevation_deg": {
                "label": "Elevasi matahari (derajat)",
                "description": "Sudut elevasi matahari opsional dalam derajat untuk koreksi kosinus. Diturunkan otomatis dari metadata bundel bila tersedia."
              },
              "apply_solar_correction": {
                "label": "Terapkan koreksi matahari",
                "description": "Jika true (default), bagi dengan sin(sun_elevation)."
              },
              "clamp_unit_interval": {
                "label": "Batasi ke interval satuan",
                "description": "Jika true (default), batasi keluaran ke [0, 1]."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi masukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "terrain_corrected_optical_analytics": {
            "name": "Analitik optik terkoreksi medan",
            "description": "Koreksi topografi C pada band optik multispektral menggunakan DEM yang terkoregistrasi. Menghasilkan tumpukan reflektansi permukaan, faktor koreksi, masker awan/bayangan, dan tingkat kepercayaan kualitas.",
            "params": {
              "input_dem": {
                "label": "DEM masukan",
                "description": "Raster DEM yang terkoregistrasi dengan band optik."
              },
              "bundle_root": {
                "label": "Root bundel",
                "description": "Direktori root bundel sensor optik opsional (saat ini Sentinel-2 SAFE, Landsat, atau DIMAP SPOT/Pleiades) yang digunakan untuk menyelesaikan otomatis band yang diperlukan, QA bila tersedia, dan metadata matahari ketika masukan eksplisit dihilangkan."
              },
              "input_red": {
                "label": "Masukan merah",
                "description": "Raster band merah (opsional ketika bundle_root diberikan)."
              },
              "input_nir": {
                "label": "Masukan NIR",
                "description": "Raster band NIR (opsional ketika bundle_root diberikan)."
              },
              "input_green": {
                "label": "Masukan hijau",
                "description": "Raster band hijau (opsional)."
              },
              "input_blue": {
                "label": "Masukan biru",
                "description": "Raster band biru (opsional). Diselesaikan otomatis dari metadata bundel ketika bundle_root diberikan."
              },
              "solar_mode": {
                "label": "Mode matahari",
                "description": "Mode penyelesaian sudut matahari: auto, manual, metadata, datetime_location."
              },
              "solar_zenith_deg": {
                "label": "Zenit matahari (derajat)",
                "description": "Sudut zenit matahari dalam derajat (wajib dalam mode manual)."
              },
              "solar_azimuth_deg": {
                "label": "Azimut matahari (derajat)",
                "description": "Azimut matahari dalam derajat (searah jarum jam dari utara, wajib dalam mode manual)."
              },
              "acquisition_datetime_utc": {
                "label": "Waktu akuisisi UTC",
                "description": "Stempel waktu akuisisi dalam RFC3339 UTC untuk mode datetime_location."
              },
              "latitude": {
                "label": "Lintang",
                "description": "Lintang opsional untuk mode datetime_location."
              },
              "longitude": {
                "label": "Bujur",
                "description": "Bujur opsional untuk mode datetime_location."
              },
              "profile": {
                "label": "Profil",
                "description": "Profil pemrosesan: conservative, balanced, fast."
              },
              "cloud_threshold": {
                "label": "Ambang awan",
                "description": "Ambang awan opsional dalam satuan band sumber. Disimpulkan otomatis bila dihilangkan."
              },
              "shadow_threshold": {
                "label": "Ambang bayangan",
                "description": "Ambang bayangan awan opsional dalam satuan band sumber. Disimpulkan otomatis bila dihilangkan."
              },
              "qa_mask": {
                "label": "Masker QA",
                "description": "Path raster masker QA opsional."
              },
              "qa_mask_format": {
                "label": "Format masker QA",
                "description": "Pengkodean masker QA: auto, landsat_qa_pixel, sentinel2_scl, sentinel2_qa60, binary."
              },
              "mask_strategy": {
                "label": "Strategi masker",
                "description": "Strategi masker: auto, qa_only, heuristic_only, qa_plus_heuristic."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Eksagerasi vertikal untuk kemiringan/aspek."
              },
              "output_prefix": {
                "label": "Awalan keluaran",
                "description": "Awalan untuk semua artefak keluaran."
              }
            }
          },
          "land_surface_temperature_single_channel": {
            "name": "Suhu permukaan tanah kanal tunggal",
            "description": "Pengambilan suhu permukaan tanah (LST) dari satu kanal inframerah termal mengestimasi suhu kulit radiatif melalui inversi persamaan transfer radiatif. Nilai digital sensor dikonversi menjadi radiansi spektral menggunakan koefisien kalibrasi spesifik sensor; radiansi diinversi menjadi suhu kecerahan melalui fungsi Planck menggunakan konstanta termal spesifik band; suhu kecerahan dikonversi menjadi LST fisik melalui koreksi emisivitas empiris. Emisivitas diturunkan dari indeks vegetasi atau diberikan secara langsung, untuk mengoreksi variasi emisivitas termal yang bergantung pada material. Fitur Utama: Memerlukan satu band termal; pemrosesan radiometrik sederhana; komputasi cepat; tidak memerlukan banyak kanal; estimasi emisivitas berbasis indeks vegetasi; keluaran suhu fisik secara langsung. Kasus Penggunaan: Pemetaan pulau panas perkotaan; pemantauan cekaman kekeringan; deteksi fitur panas bumi; pelacakan jejak termal kebakaran hutan; pengelolaan air pertanian. Interpretasi Keluaran: Keluaran berupa suhu kulit radiatif dalam Kelvin (atau Celsius jika dikonversi). Pengambilan satu kanal tidak dapat sepenuhnya menghilangkan efek uap air atmosfer; bias atmosfer residual biasanya 2-5 K. Galat emisivitas merambat secara langsung: galat emisivitas ±0.05 ≈ galat suhu ±1-2 K. Emisivitas berbasis vegetasi bervariasi menurut NDVI; tanah terbuka menunjukkan emisivitas lebih rendah daripada vegetasi. LST deret waktu mengungkap tren pemanasan/pendinginan; anomali LST > latar belakang ± 5K menunjukkan fitur termal.",
            "params": {
              "thermal_input": {
                "label": "Masukan termal",
                "description": "Path raster termal (DN secara default, atau suhu kecerahan jika input_is_brightness_temp=true)."
              },
              "input_is_brightness_temp": {
                "label": "Masukan adalah suhu kecerahan",
                "description": "Jika true, thermal_input sudah berupa suhu kecerahan dalam Kelvin (default false)."
              },
              "emissivity_input": {
                "label": "Masukan emisivitas",
                "description": "Path raster emisivitas opsional yang selaras dengan thermal_input."
              },
              "emissivity_constant": {
                "label": "Konstanta emisivitas",
                "description": "Emisivitas cadangan ketika emissivity_input tidak diberikan (default 0.98)."
              },
              "sensor_bundle_root": {
                "label": "Root bundel sensor",
                "description": "Root bundel Landsat opsional yang digunakan untuk menurunkan radiansi termal dan konstanta Planck."
              },
              "thermal_band_number": {
                "label": "Nomor band termal",
                "description": "Nomor band termal untuk pencarian metadata (default 10)."
              },
              "radiance_mult": {
                "label": "Pengali radiansi",
                "description": "Faktor pengali radiansi termal untuk konversi DN->radiansi."
              },
              "radiance_add": {
                "label": "Penambah radiansi",
                "description": "Faktor penambah radiansi termal untuk konversi DN->radiansi."
              },
              "k1_constant": {
                "label": "Konstanta K1",
                "description": "Konstanta termal K1 Planck."
              },
              "k2_constant": {
                "label": "Konstanta K2",
                "description": "Konstanta termal K2 Planck."
              },
              "wavelength_um": {
                "label": "Panjang gelombang (um)",
                "description": "Panjang gelombang termal efektif dalam mikrometer (default disimpulkan dari thermal_band_number)."
              },
              "output_units": {
                "label": "Satuan keluaran",
                "description": "Satuan keluaran: celsius (default) atau kelvin."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi emissivity_input ke CRS thermal_input bila diperlukan."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "land_surface_temperature_split_window": {
            "name": "Suhu permukaan tanah split window",
            "description": "Pengambilan LST split-window menggunakan dua band inframerah termal untuk mengestimasi suhu permukaan dan emisivitas secara bersamaan melalui inversi persamaan transfer radiatif. Perbedaan absorpsi atmosfer antara dua band (biasanya di wilayah 10-12 μm) memungkinkan koreksi uap air atmosfer sehingga meningkatkan akurasi dibandingkan metode satu kanal. Suhu kecerahan dari kedua band diinversi dengan parameterisasi emisivitas berbasis fraksi vegetasi atau grid emisivitas yang disediakan pengguna. Fitur Utama: Memerlukan dua band termal; koreksi atmosfer melalui absorpsi diferensial; pengambilan suhu/emisivitas secara bersamaan; algoritme terpublikasi untuk sensor standar; kompensasi atmosfer yang lebih unggul dibandingkan satu kanal. Kasus Penggunaan: Pemetaan pulau panas perkotaan; deteksi kekeringan pertanian; deteksi fitur panas bumi; studi interaksi daratan-atmosfer; deteksi anomali vulkanik/termal. Interpretasi Keluaran: Keluaran berupa suhu radiatif permukaan dengan koreksi atmosfer yang lebih baik. Pengambilan split-window mengurangi bias uap air atmosfer menjadi <1-2 K dibandingkan galat 2-5 K pada metode satu kanal. Kompromi suhu/emisivitas tetap ada: area dengan indeks vegetasi tinggi menunjukkan emisivitas rendah sehingga memerlukan interpretasi yang cermat. Permukaan heterogen (campuran vegetasi/tanah) menunjukkan nilai antara. Konsistensi temporal meningkatkan keandalan deteksi perubahan; tren LST > ±3K menunjukkan perubahan termal yang signifikan.",
            "params": {
              "thermal1_input": {
                "label": "Masukan termal 1",
                "description": "Path raster termal pertama (mis. Landsat B10)."
              },
              "thermal2_input": {
                "label": "Masukan termal 2",
                "description": "Path raster termal kedua (mis. Landsat B11)."
              },
              "input_is_brightness_temp": {
                "label": "Masukan adalah suhu kecerahan",
                "description": "Jika true, masukan termal sudah berupa suhu kecerahan dalam Kelvin (default false)."
              },
              "emissivity_mean_input": {
                "label": "Masukan emisivitas rata-rata",
                "description": "Path raster emisivitas rata-rata opsional."
              },
              "emissivity_delta_input": {
                "label": "Masukan delta emisivitas",
                "description": "Path raster delta emisivitas opsional (epsilon1 - epsilon2)."
              },
              "emissivity_mean_constant": {
                "label": "Konstanta emisivitas rata-rata",
                "description": "Konstanta emisivitas rata-rata cadangan ketika emissivity_mean_input tidak ada (default 0.98)."
              },
              "emissivity_delta_constant": {
                "label": "Konstanta delta emisivitas",
                "description": "Konstanta delta emisivitas cadangan ketika emissivity_delta_input tidak ada (default 0.0)."
              },
              "sensor_bundle_root": {
                "label": "Root bundel sensor",
                "description": "Root bundel Landsat opsional yang digunakan untuk menurunkan radiansi termal dan konstanta Planck."
              },
              "thermal_band1_number": {
                "label": "Nomor band termal 1",
                "description": "Nomor band untuk pencarian metadata thermal1_input (default 10)."
              },
              "thermal_band2_number": {
                "label": "Nomor band termal 2",
                "description": "Nomor band untuk pencarian metadata thermal2_input (default 11)."
              },
              "radiance1_mult": {
                "label": "Pengali radiansi 1",
                "description": "Faktor pengali radiansi band 1."
              },
              "radiance1_add": {
                "label": "Penambah radiansi 1",
                "description": "Faktor penambah radiansi band 1."
              },
              "k1_1": {
                "label": "K1 1",
                "description": "Konstanta K1 Planck band 1."
              },
              "k2_1": {
                "label": "K2 1",
                "description": "Konstanta K2 Planck band 1."
              },
              "radiance2_mult": {
                "label": "Pengali radiansi 2",
                "description": "Faktor pengali radiansi band 2."
              },
              "radiance2_add": {
                "label": "Penambah radiansi 2",
                "description": "Faktor penambah radiansi band 2."
              },
              "k1_2": {
                "label": "K1 2",
                "description": "Konstanta K1 Planck band 2."
              },
              "k2_2": {
                "label": "K2 2",
                "description": "Konstanta K2 Planck band 2."
              },
              "coeff_a0": {
                "label": "Koefisien A0",
                "description": "Koefisien split-window a0 (default 0.0)."
              },
              "coeff_a1": {
                "label": "Koefisien A1",
                "description": "Koefisien split-window a1 untuk suku T1 (default 1.0)."
              },
              "coeff_a2": {
                "label": "Koefisien A2",
                "description": "Koefisien split-window a2 untuk suku (T1-T2) (default 0.0)."
              },
              "coeff_a3": {
                "label": "Koefisien A3",
                "description": "Koefisien split-window a3 untuk suku (T1-T2)^2 (default 0.0)."
              },
              "coeff_a4": {
                "label": "Koefisien A4",
                "description": "Koefisien split-window a4 untuk suku (1-emissivity_mean) (default 0.0)."
              },
              "coeff_a5": {
                "label": "Koefisien A5",
                "description": "Koefisien split-window a5 untuk suku emissivity_delta (default 0.0)."
              },
              "output_units": {
                "label": "Satuan keluaran",
                "description": "Satuan keluaran: celsius (default) atau kelvin."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tambahan agar cocok dengan CRS thermal1_input bila diperlukan."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "ndvi_based_emissivity": {
            "name": "Emisivitas berbasis NDVI",
            "description": "Estimasi emisivitas permukaan tanah berbasis NDVI menurunkan emisivitas termal pita lebar dari fraksi vegetasi yang dihitung dari NDVI, sehingga memungkinkan koreksi transfer radiatif termal untuk pengambilan suhu permukaan tanah dari data satelit inframerah termal. Algoritme ini menghitung NDVI dari reflektansi merah dan inframerah dekat, mengubah NDVI menjadi fraksi vegetasi, lalu menerapkan hubungan empiris antara fraksi vegetasi dan emisivitas yang telah divalidasi melalui pengukuran lapangan dan simulasi transfer radiatif. Vegetasi sangat memengaruhi emisivitas termal; semakin banyak vegetasi, emisivitas meningkat mendekati ~0.99, sedangkan emisivitas tanah terbuka berkisar ~0.90-0.98 bergantung pada komposisi tanah dan kekasaran permukaan. Fitur utama meliputi komputasi fraksi vegetasi otomatis dari NDVI tanpa kalibrasi lapangan, hubungan empiris standar yang berlandaskan teori transfer radiatif fisik, analisis sensitivitas opsional untuk mengeksplorasi variasi emisivitas, serta kompatibilitas langsung dengan data satelit inframerah termal. Penerapannya meliputi pengambilan suhu permukaan tanah dari data satelit termal yang memerlukan koreksi emisivitas yang akurat (Landsat, MODIS, Sentinel-3), analisis pulau panas perkotaan dengan koreksi terhadap vegetasi yang bervariasi, pemodelan termal dalam aplikasi sumber daya air dan pertanian, serta aplikasi iklim yang memerlukan dataset termal global yang konsisten. Emisivitas berbasis NDVI memungkinkan koreksi termal yang akurat. Keluaran berupa raster emisivitas (0-1) yang cocok untuk koreksi transfer radiatif termal, produk antara fraksi vegetasi yang memudahkan interpretasi, serta metadata yang mendokumentasikan hubungan empiris dan sifat tanah/permukaan yang diasumsikan; nilai emisivitas menjadi panduan ketidakpastian koreksi termal dan kesesuaiannya untuk aplikasi tertentu.",
            "params": {
              "red_input": {
                "label": "Masukan merah",
                "description": "Path raster band merah."
              },
              "nir_input": {
                "label": "Masukan NIR",
                "description": "Path raster band NIR."
              },
              "ndvi_soil": {
                "label": "NDVI tanah",
                "description": "Ambang NDVI untuk fraksi tanah gundul (default 0.2)."
              },
              "ndvi_vegetation": {
                "label": "NDVI vegetasi",
                "description": "Ambang NDVI untuk fraksi vegetasi penuh (default 0.5)."
              },
              "emissivity_soil": {
                "label": "Emisivitas tanah",
                "description": "Emisivitas tanah yang diasumsikan (default 0.97)."
              },
              "emissivity_vegetation": {
                "label": "Emisivitas vegetasi",
                "description": "Emisivitas vegetasi yang diasumsikan (default 0.99)."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi nir_input ke CRS red_input bila diperlukan."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "continuum_removal": {
            "name": "Penghapusan kontinum",
            "description": "Continuum removal menormalkan spektrum multispektral dengan mengestimasi convex hull atas (kontinum) yang menyelubungi spektrum dan membagi setiap band dengan nilai kontinum yang bersesuaian. Menghilangkan kemiringan spektral keseluruhan dan variasi kecerahan sehingga memungkinkan visualisasi fitur absorpsi (band, kedalaman) yang lebih baik. Kedalaman dan posisi absorpsi distandardisasi sehingga memungkinkan identifikasi mineral/material melalui pustaka spektral. Garis kontinum dihitung melalui algoritme convex hull yang menghubungkan maksimum lokal di sepanjang rentang spektral. Fitur Utama: Menghilangkan kontinum spektral; menonjolkan fitur absorpsi; menormalkan variasi kecerahan; memungkinkan pencocokan pustaka spektral; menstandardisasi bentuk spektral. Kasus Penggunaan: Identifikasi mineral; klasifikasi material; analisis spektral vegetasi; deteksi anomali spektral; pemetaan fitur absorpsi. Interpretasi Keluaran: Spektrum hasil continuum removal menunjukkan fitur absorpsi (nilai <1.0) yang mengindikasikan band spesifik material. Kedalaman absorpsi menunjukkan kekuatan fitur; fitur dangkal (<0.2) menunjukkan komponen minor; fitur dalam (>0.5) menunjukkan absorpsi dominan. Posisi fitur dalam ruang panjang gelombang memungkinkan identifikasi material melalui pustaka referensi. Spektrum hasil continuum removal yang datar (mendekati 1.0) menunjukkan material yang netral secara spektral.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Tumpukan raster masukan (satu raster per band)."
              },
              "wavelengths": {
                "label": "Panjang gelombang",
                "description": "Array panjang gelombang yang naik secara ketat opsional yang cocok dengan panjang inputs."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster multiband keluaran opsional."
              }
            }
          },
          "linear_spectral_unmixing": {
            "name": "Unmixing spektral linear",
            "description": "Linear spectral unmixing menguraikan vektor multispektral setiap piksel sebagai kombinasi linear non-negatif dari spektrum endmember yang merepresentasikan tanda spektral material murni. Optimasi kuadrat terkecil non-negatif menyelesaikan min ||y - Ax||² dengan kendala x ≥ 0, di mana y adalah spektrum piksel, A berisi tanda spektral endmember, dan x merepresentasikan fraksi kelimpahan. Kendala jumlah-sama-dengan-satu diterapkan untuk memastikan nilai kelimpahan merepresentasikan proporsi fisik. Endmember diturunkan dari data latih, basis data pustaka, atau diekstraksi melalui algoritme ekstraksi endmember. Fitur Utama: Estimasi material subpiksel; fraksi kelimpahan dengan interpretasi fisik; mendukung banyak endmember; keluaran dibatasi pada rentang valid [0,1]; memungkinkan deteksi perubahan material. Kasus Penggunaan: Pemetaan kelimpahan tutupan lahan; estimasi komposisi mineral; inventarisasi material perkotaan; fraksi vegetasi/tanah/permukaan kedap air; klasifikasi berbasis pustaka spektral. Interpretasi Keluaran: Peta kelimpahan keluaran menunjukkan fraksi material per piksel yang berjumlah 1.0. Kelimpahan <0.1 menunjukkan komponen minor; kelimpahan >0.7 menunjukkan material dominan. Galat residual menunjukkan kualitas unmixing; residual rendah menunjukkan kecocokan spektral yang baik; residual tinggi menunjukkan ketidaksesuaian endmember atau kompleksitas piksel.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Tumpukan raster masukan (satu raster per band)."
              },
              "endmembers": {
                "label": "Endmember",
                "description": "Tanda tangan endmember sebagai array objek {name, values} atau array numerik."
              },
              "sum_to_one": {
                "label": "Jumlah sama dengan satu",
                "description": "Jika true (default), normalisasi fraksi non-negatif agar berjumlah satu."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah iterasi gradien terproyeksi (default 80)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Ukuran langkah gradien terproyeksi (default 0.05)."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster fraksi multiband keluaran opsional."
              },
              "output_residual": {
                "label": "Keluaran residu",
                "description": "Path raster RMS residu keluaran opsional."
              }
            }
          },
          "minimum_noise_fraction": {
            "name": "Fraksi derau minimum",
            "description": "Minimum noise fraction mentransformasikan data hiperspektral melalui proses dua langkah: estimasi kovarians derau diikuti oleh pemutihan derau (noise whitening) dan analisis komponen utama. Pemutihan derau menghilangkan korelasi derau antar-band; PCA dalam ruang yang telah diputihkan mengidentifikasi arah yang didominasi sinyal. Komponen keluaran diurutkan berdasarkan rasio sinyal terhadap derau, dengan komponen awal merepresentasikan sinyal dan komponen akhir merepresentasikan derau. Memungkinkan pengurangan derau melalui pemotongan komponen tanpa artefak penghalusan konvensional. Fitur Utama: Memisahkan sinyal dari derau; derau terkonsentrasi pada komponen akhir; pemilihan komponen memungkinkan penyaringan derau; mempertahankan fidelitas spektral; memungkinkan reduksi dimensi. Kasus Penggunaan: Penghilangan derau citra hiperspektral; reduksi dimensi untuk klasifikasi; peningkatan sinyal; karakterisasi derau; penilaian kualitas citra. Interpretasi Keluaran: 1-3 komponen MNF pertama biasanya mengandung 70-90% sinyal; komponen berikutnya semakin berderau. Pemotongan komponen (mempertahankan N komponen pertama) menghilangkan derau sambil mempertahankan informasi spektral yang esensial. Citra komponen MNF memungkinkan penilaian derau secara visual; simpangan baku komponen akhir menunjukkan tingkat derau.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Tumpukan raster masukan (satu raster per band)."
              },
              "num_components": {
                "label": "Jumlah komponen",
                "description": "Jumlah komponen MNF keluaran (default: semua band)."
              },
              "noise_mode": {
                "label": "Mode derau",
                "description": "Mode estimator derau: 'difference_x' (default) atau 'difference_y'."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster komponen MNF multiband keluaran opsional."
              },
              "output_inverse": {
                "label": "Keluaran invers",
                "description": "Path raster multiband terekonstruksi opsional dari komponen MNF yang dipertahankan."
              }
            }
          },
          "spectral_angle_mapper": {
            "name": "Spectral angle mapper",
            "description": "Spectral Angle Mapping mengklasifikasikan piksel dengan menghitung sudut spektral antara spektrum setiap piksel dan spektrum pustaka referensi, lalu menetapkan piksel ke spektrum pustaka dengan sudut minimum, yang merepresentasikan kemiripan spektral maksimum tanpa bergantung pada intensitas iluminasi. SAM memperlakukan setiap piksel dan spektrum referensi sebagai vektor dalam ruang spektral N dimensi, menghitung sudut antarvektor menggunakan operasi hasil kali titik dan transformasi kosinus invers. Klasifikasi berbasis sudut spektral ini invarian terhadap efek iluminasi dan topografi yang menskalakan kecerahan keseluruhan tetapi mempertahankan bentuk spektral, sehingga tangguh untuk medan yang kompleks dan kondisi akuisisi yang bervariasi. Fitur utama meliputi penentuan ambang batas sudut spektral otomatis yang memungkinkan tingkat kepercayaan klasifikasi probabilistik, impor pustaka referensi yang mendukung tanda spektral dari pengguna yang berasal dari sampel lapangan atau pustaka spektral, invariansi iluminasi yang menangani pencahayaan yang bervariasi sambil mempertahankan diskriminasi spektral, serta komputasi cepat yang memungkinkan klasifikasi waktu nyata pada citra besar. Penerapan umum meliputi identifikasi material dan pemetaan geologi menggunakan pustaka spektral USGS, klasifikasi spesies vegetasi yang menggabungkan data satelit multispektral dengan spektrum yang dikumpulkan di lapangan, prospeksi mineral dalam survei hiperspektral udara, serta penilaian akurasi yang membandingkan spektrum citra dengan tanda spektral referensi yang dikumpulkan di lapangan. Keluaran SAM memungkinkan identifikasi material yang meyakinkan dengan memanfaatkan tanda bentuk spektral. Keluaran klasifikasi menghasilkan citra satu band dengan label kelas bilangan bulat yang bersesuaian dengan entri pustaka; raster kepercayaan secara opsional mencatat sudut spektral minimum untuk setiap piksel sehingga memungkinkan penyaringan berbasis ambang batas; keluaran memungkinkan identifikasi material secara langsung dan penyaringan berbasis tingkat kepercayaan.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Tumpukan raster masukan (satu raster per band)."
              },
              "endmembers": {
                "label": "Endmember",
                "description": "Tanda tangan endmember sebagai array objek {name, values} atau array numerik."
              },
              "threshold_angle_deg": {
                "label": "Sudut ambang (derajat)",
                "description": "Sudut spektral maksimum yang diterima opsional dalam derajat; piksel yang tidak cocok menjadi kelas 0."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster kelas keluaran opsional."
              },
              "output_angle": {
                "label": "Keluaran sudut",
                "description": "Path raster keluaran opsional untuk sudut spektral minimum (derajat)."
              }
            }
          },
          "spectral_library_matching": {
            "name": "Pencocokan pustaka spektral",
            "description": "Pencocokan pustaka spektral melakukan klasifikasi dengan membandingkan spektrum piksel citra dengan spektrum pustaka referensi menggunakan beberapa metrik kemiripan, termasuk sudut spektral (sudut antara vektor spektrum), jarak Euclidean (selisih magnitudo), dan divergensi informasi spektral. Algoritme ini menerima pustaka spektral referensi dari pengguna yang berisi spektrum material/kelas yang diketahui, menghitung metrik kemiripan antara setiap piksel citra dan entri pustaka, mengidentifikasi spektrum pustaka dengan kecocokan terbaik (sudut minimum, jarak minimum, atau divergensi minimum), dan menghasilkan label kelas dengan skor kepercayaan/kemiripan opsional. Pencocokan pustaka memungkinkan identifikasi material tanpa sampel latih lapangan dengan memanfaatkan spektrum referensi dari USGS, survei lapangan, atau spektroskopi laboratorium. Fitur utama meliputi beberapa metrik kemiripan yang memungkinkan pemilihan metrik untuk karakteristik spektral dan distribusi kelas tertentu, fleksibilitas impor pustaka yang mendukung berbagai format pustaka spektral, kuantifikasi kepercayaan/ketidakpastian opsional, serta keluaran material yang dapat diidentifikasi secara langsung. Penerapannya meliputi pemetaan geologi menggunakan pustaka spektral USGS untuk mineralogi, klasifikasi vegetasi menggunakan pustaka referensi spektral tumbuhan, identifikasi material bangunan di area perkotaan, serta analisis survei hiperspektral udara. Pencocokan pustaka spektral memungkinkan identifikasi material secara otomatis. Keluaran terdiri atas peta terklasifikasi dengan ID entri pustaka sebagai label kelas, raster kemiripan/kepercayaan yang mengkuantifikasi kualitas kecocokan, serta tumpukan sudut/jarak spektral lengkap opsional untuk setiap entri pustaka yang memungkinkan penyaringan berbasis ambang batas; metadata mendokumentasikan sumber pustaka referensi dan metrik kemiripan yang digunakan.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Tumpukan raster masukan (satu raster per band)."
              },
              "library": {
                "label": "Pustaka",
                "description": "Entri pustaka spektral sebagai array objek {name, values} atau array numerik."
              },
              "library_csv": {
                "label": "CSV pustaka",
                "description": "Path CSV pustaka spektral opsional (baris name,b1,b2,... atau b1,b2,...). Digunakan ketika 'library' tidak diberikan."
              },
              "metric": {
                "label": "Metrik",
                "description": "Metrik pencocokan: 'sam' (default), 'euclidean', atau 'sid'."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster kelas keluaran opsional."
              },
              "output_score": {
                "label": "Keluaran skor",
                "description": "Path raster skor kecocokan terbaik keluaran opsional (sudut atau jarak)."
              }
            }
          },
          "canny_edge_detection": {
            "name": "Deteksi tepi Canny",
            "description": "Menerapkan deteksi tepi multitahap Canny (Gaussian blur → gradien Sobel → non-maximum suppression → ambang batas ganda → histeresis).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan (band tunggal atau RGB terkemas)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Simpangan baku kernel penghalusan Gaussian dalam piksel. Default: 0.5."
              },
              "low_threshold": {
                "label": "Ambang rendah",
                "description": "Ambang histeresis rendah (fraksi 0–1 dari gradien maksimum). Default: 0.05."
              },
              "high_threshold": {
                "label": "Ambang tinggi",
                "description": "Ambang histeresis tinggi (fraksi 0–1 dari gradien maksimum). Default: 0.15."
              },
              "add_back": {
                "label": "Tambahkan kembali",
                "description": "Jika true, piksel tepi dinolkan pada citra asli alih-alih menghasilkan peta tepi biner. Default: false."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "corner_detection": {
            "name": "Deteksi sudut",
            "description": "Mengidentifikasi pola sudut pada raster biner menggunakan templat hit-and-miss.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "laplacian_filter": {
            "name": "Filter Laplacian",
            "description": "Filter Laplacian menghitung turunan spasial kedua dari intensitas citra, sehingga menyediakan deteksi tepi yang andal melalui pengukuran gradien isotropik (ke segala arah). Implementasinya menerapkan kernel tetap yang mengaproksimasi operator Laplacian (jumlah turunan kedua pada arah x dan y), sehingga menangkap perubahan intensitas terlepas dari orientasi tepi. Tidak seperti filter berarah, pendekatan ini memperlakukan semua arah tepi secara setara, sehingga ideal untuk deteksi fitur yang memerlukan independensi orientasi. Landasan matematisnya bertumpu pada aproksimasi diskret: ∇²I ≈ I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4·I(x,y). Fitur utama meliputi kemampuan deteksi zero-crossing (tepi sebenarnya terjadi di mana keluaran melintasi nol), ketidakpekaan terhadap arah tepi, serta kemampuan mendeteksi transisi terang-ke-gelap dan gelap-ke-terang secara identik. Penyaringan Laplacian unggul dalam pemetaan geologi di mana batas struktur tampak sebagai zero-crossing, delineasi batas vegetasi, ekstraksi jaringan jalan dari citra resolusi tinggi, dan deteksi jejak bangunan. Interpretasi keluaran berpusat pada pemahaman transisi tanda: nilai positif kuat menunjukkan minimum gelap lokal, nilai negatif menunjukkan maksimum terang lokal, dan zero-crossing menandai tepi sebenarnya. Keluaran umumnya berkisar dari -1000 hingga +1000 untuk citra sumber 8-bit bergantung pada kontras lokal. Magnitudo keluaran yang tinggi menunjukkan tepi yang tajam dan terdefinisi dengan baik; magnitudo rendah menunjukkan transisi bertahap. Deteksi zero-crossing memerlukan pemilihan ambang batas yang cermat. Perhatikan bahwa Laplacian peka terhadap derau (memperkuat derau berfrekuensi tinggi), sehingga prapenyaringan dengan penghalusan Gaussian umumnya disarankan sebelum penerapan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "variant": {
                "label": "Varian",
                "description": "Varian kernel: 3x3(1), 3x3(2), 3x3(3), 3x3(4), 5x5(1), 5x5(2)."
              },
              "clip_amount": {
                "label": "Jumlah pemotongan",
                "description": "Persen pemotongan ekor simetris opsional (0-40)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "laplacian_of_gaussians_filter": {
            "name": "Filter Laplacian of Gaussians",
            "description": "Melakukan peningkatan tepi Laplacian-of-Gaussians (LoG) yang menggabungkan penghalusan Gaussian dengan deteksi tepi Laplacian. Secara komputasi diaproksimasi melalui difference-of-Gaussians (DoG). Pertama menghaluskan citra (mengurangi derau), lalu menerapkan Laplacian (mendeteksi tepi). Teknik deteksi tepi multiskala klasik. Deteksi zero-crossing pada keluaran LoG mengidentifikasi lokasi tepi yang tepat. LoG merupakan standar untuk deteksi tepi ruang-skala: Gaussian menghilangkan derau, Laplacian memperkuat tepi. Parameter sigma mengontrol skala tepi yang dideteksi: sigma kecil mendeteksi tepi halus, sigma besar mendeteksi tepi lebar. LoG diaproksimasi melalui DoG demi efisiensi. Beberapa nilai sigma memungkinkan deteksi tepi multiskala (mengidentifikasi fitur pada skala yang berbeda). Penerapan: (1) Deteksi tepi yang tangguh (tahan derau), (2) Deteksi tepi multiskala (menggunakan beberapa sigma), (3) Lokalisasi tepi zero-crossing, (4) Prapemrosesan untuk segmentasi, (5) Deteksi blob melalui zero-crossing LoG. Alur kerja: terapkan LoG→identifikasi zero-crossing→telusuri tepi→vektorisasi atau pemrosesan lebih lanjut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma Gaussian yang digunakan oleh kernel LoG (0.5-20.0, default 0.75)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "prewitt_filter": {
            "name": "Filter Prewitt",
            "description": "Operator Prewitt melakukan deteksi tepi berbasis gradien yang mirip dengan Sobel, menggunakan bobot kernel alternatif yang dioptimalkan untuk karakteristik derau yang berbeda. Implementasinya menggunakan dua kernel konvolusi 3×3 yang menghitung turunan berarah x dan y dengan pembobotan seragam pada baris/kolom tengah dan yang berdekatan, berbeda dari pendekatan Sobel yang condong ke pusat. Magnitudo gradien menggabungkan komponen berarah melalui √(Gx² + Gy²), menghasilkan respons arah yang seragam. Landasan matematisnya bertumpu pada aproksimasi diferensiasi diskret yang membobot semua piksel yang berkontribusi secara setara alih-alih menekankan pusat. Fitur utama meliputi respons derau yang sedikit berbeda dibandingkan Sobel (terkadang lebih unggul pada citra yang sangat berderau), dekomposisi magnitudo/arah yang sebenarnya sehingga memungkinkan analisis tepi yang canggih, efisiensi komputasi yang hanya memerlukan operasi konvolusi standar, serta efektivitas yang telah terbukti pada citra radar, optik, dan termal. Penyaringan Prewitt unggul dalam analisis citra SAR di mana pembobotan seragam mengurangi artefak speckle lebih baik daripada Sobel, deteksi anomali termal yang menekankan fitur linear, dan ekstraksi tepi multispektral yang memerlukan pemrosesan yang tidak bergantung arah. Interpretasi keluaran serupa dengan Sobel: magnitudo menunjukkan kekuatan tepi (lebih tinggi = lebih tajam), arah yang dihitung melalui atan2(Gy, Gx) memberikan orientasi tepi dalam radian. Magnitudo umumnya berkisar 0-256 untuk masukan 8-bit; magnitudo yang melebihi 80 umumnya menunjukkan tepi yang signifikan. Nilai arah berkisar -π hingga +π; 0 radian menunjukkan tepi horizontal murni, ±π/2 menunjukkan tepi vertikal murni. Pembobotan kernel yang seragam biasanya menghasilkan respons gradien yang sedikit lebih halus daripada Sobel, yang berpotensi lebih baik untuk fitur citra yang jarang atau halus. Terapkan filter median pelengkap untuk mengurangi positif palsu akibat derau. Gabungkan keluaran berarah dengan pemilihan ambang batas untuk alur kerja penyambungan tepi dan ekstraksi batas yang penting bagi pipeline segmentasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "clip_tails": {
                "label": "Potong ekor",
                "description": "Persen pemotongan ekor simetris opsional (0-40)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "roberts_cross_filter": {
            "name": "Filter Roberts cross",
            "description": "Filter Roberts Cross adalah salah satu operator deteksi tepi paling awal, menggunakan pola kernel silang diagonal 2×2 yang sederhana namun efektif untuk menghitung gradien citra dengan beban komputasi minimal. Operator ini menggunakan dua matriks 2×2 ortogonal yang diputar 45° dari keselarasan horizontal-vertikal, menciptakan masker konvolusi berbentuk silang yang mendeteksi tepi dengan menekankan sudut dan transisi diagonal. Filter ini menerapkan kernel terpisah untuk gradien X dan Y, menghitung magnitudo melalui jumlah nilai absolut atau norma Euclidean. Fitur utama meliputi efisiensi komputasi yang luar biasa berkat ukuran kernel 2×2 yang kecil, kebutuhan memori minimal, dan pemrosesan cepat pada dataset raster besar. Roberts Cross sangat efektif untuk mendeteksi fitur berskala halus dan transisi tajam pada citra resolusi tinggi. Kasus penggunaan utama meliputi deteksi tepi cepat dalam aplikasi yang kritis terhadap waktu, pemrosesan aliran video waktu nyata, deteksi batas awal sebelum algoritme lanjutan, dan lingkungan dengan sumber daya terbatas. Penerapannya mencakup prapemrosesan survei udara, penilaian kualitas citra satelit, ekstraksi fitur untuk pipeline machine learning, dan implementasi GIS bergerak. Interpretasi keluaran menunjukkan lokasi tepi sebagai piksel bermagnitudo tinggi di mana terjadi perubahan spektral dalam ketetanggaan 2×2. Wilayah latar belakang biasanya menampilkan nilai mendekati nol; tepi tampak sebagai fitur linear terang yang menunjukkan batas antara kelas tutupan lahan yang berbeda. Keluaran secara inheren jarang, hanya berisi tepi di mana gradien melampaui ambang batas presisi komputasi. Untuk citra multispektral, terapkan secara independen pada setiap band atau hitung terlebih dahulu indeks beda ternormalisasi. Pascapemrosesan penipisan tepi sering dilakukan setelah penerapan Roberts untuk memperhalus keluaran bagi alur kerja konversi vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "clip_amount": {
                "label": "Jumlah pemotongan",
                "description": "Persen pemotongan ekor simetris opsional (0-50)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "sobel_filter": {
            "name": "Filter Sobel",
            "description": "Operator Sobel mendeteksi tepi melalui estimasi gradien berarah pada arah x (horizontal) dan y (vertikal), menggabungkan kernel turunan ortogonal menjadi representasi magnitudo terpadu. Implementasinya menerapkan dua kernel konvolusi 3×3 secara independen (satu menekankan tepi horizontal, satu menekankan tepi vertikal), lalu menggabungkan hasilnya melalui norma Euclidean: magnitudo = √(Gx² + Gy²). Pendekatan terpisahkan ini mengurangi biaya komputasi sambil mempertahankan akurasi deteksi tepi. Landasan matematisnya berasal dari aproksimasi diskret gradien citra, dengan bobot kernel yang condong ke piksel pusat untuk meningkatkan ketahanan terhadap derau. Fitur utama meliputi pengukuran gradien berarah yang memungkinkan penentuan orientasi tepi, beban komputasi yang relatif rendah, efektivitas yang telah terbukti pada citra satelit dan udara, serta kebutuhan penyetelan parameter yang minimal. Penyaringan Sobel banyak diterapkan dalam perhitungan kemiringan dan aspek medan, ekstraksi batas fitur untuk alur kerja deteksi objek, delineasi jaringan sungai dari data DEM, dan pemetaan infrastruktur (jalan, bangunan, jaringan listrik) dari citra resolusi tinggi. Interpretasi keluaran menunjukkan bahwa magnitudo mengindikasikan kekuatan tepi (nilai lebih tinggi = transisi lebih tajam), sedangkan komponen berarah (Gx, Gy) memungkinkan analisis orientasi. Magnitudo gradien umumnya berkisar 0-256 untuk citra 8-bit; nilai yang melebihi 100 umumnya menunjukkan tepi yang signifikan. Rasio Gx/Gy memberikan informasi orientasi tepi: rasio mendekati 1 menunjukkan tepi 45 derajat, rasio >>1 menunjukkan fitur horizontal, rasio <<1 menunjukkan fitur vertikal. Positif palsu umumnya terjadi di wilayah berderau; filter median atau operasi morfologi efektif mengurangi deteksi palsu. Gabungkan dengan pengambangan untuk menghasilkan masker tepi biner yang cocok untuk pipeline segmentasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "variant": {
                "label": "Varian",
                "description": "Varian ukuran kernel: 3x3 (default) atau 5x5."
              },
              "clip_tails": {
                "label": "Potong ekor",
                "description": "Persen pemotongan ekor simetris opsional (0-40)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "balance_contrast_enhancement": {
            "name": "Peningkatan kontras seimbang",
            "description": "Mengurangi bias warna pada citra RGB terkemas menggunakan peregangan parabolik per kanal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "band_mean": {
                "label": "Rata-rata band",
                "description": "Kecerahan rata-rata keluaran yang diinginkan untuk setiap kanal (default 100.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "create_colour_composite": {
            "name": "Buat komposit warna",
            "description": "Membuat komposit warna RGB terkemas dari raster merah, hijau, biru, dan opasitas opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "red": {
                "label": "Merah",
                "description": "Path raster band merah atau objek raster bertipe."
              },
              "green": {
                "label": "Hijau",
                "description": "Path raster band hijau atau objek raster bertipe."
              },
              "blue": {
                "label": "Biru",
                "description": "Path raster band biru atau objek raster bertipe."
              },
              "opacity": {
                "label": "Opasitas",
                "description": "Path raster opasitas opsional atau objek raster bertipe."
              },
              "enhance": {
                "label": "Tingkatkan",
                "description": "Terapkan peningkatan kontras seimbang setelah penyusunan (default true)."
              },
              "treat_zeros_as_nodata": {
                "label": "Perlakukan nol sebagai nodata",
                "description": "Perlakukan nilai nol pada masukan RGB sebagai nodata/latar (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "direct_decorrelation_stretch": {
            "name": "Peregangan dekorelasi langsung",
            "description": "Meningkatkan saturasi warna RGB terkemas dengan mengurangi komponen akromatik dan meregangkan kanal secara linear.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "achromatic_factor": {
                "label": "Faktor akromatik",
                "description": "Faktor reduksi komponen abu-abu dari 0 hingga 1 (default 0.5)."
              },
              "clip_percent": {
                "label": "Persen pemotongan",
                "description": "Persen pemotongan ekor untuk penskalaan ulang linear pasca-peregangan (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "false_colour_composite": {
            "name": "Komposit warna semu",
            "description": "Bangun raster komposit warna semu (NIR/Merah/Hijau) dari bundel sensor optik yang didukung.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Keluaran",
                "description": "Keluaran"
              }
            }
          },
          "gamma_correction": {
            "name": "Koreksi gamma",
            "description": "Koreksi gamma menerapkan penyesuaian kecerahan non-linear melalui transformasi hukum pangkat untuk mengoptimalkan kontras citra, fidelitas tampilan, dan distribusi luminans perseptual. Transformasi matematisnya adalah I_corrected = I^(1/γ), di mana γ (gamma) adalah eksponen yang ditentukan pengguna yang mengontrol arah dan besarnya penyesuaian kecerahan. Nilai γ > 1 menggelapkan citra (kompensasi tampilan yang terlalu terang), sedangkan γ < 1 mencerahkan citra (kompensasi tampilan yang terlalu gelap). Implementasinya bekerja secara independen pada setiap piksel atau band spektral, mempertahankan hubungan spasial sambil menyesuaikan penskalaan intensitas. Fitur utama meliputi pelestarian struktur citra sambil mendistribusikan ulang nilai tonal, efisiensi komputasi yang hanya memerlukan tabel pencarian, penerapan pada data radiometrik apa pun termasuk citra 16/32-bit, serta sifat dapat dibalik yang memungkinkan koreksi invers. Koreksi gamma memiliki penerapan penting dalam menyiapkan citra satelit untuk interpretasi visual dengan mengompensasi karakteristik sensor, menormalkan kecerahan ortofoto antar-jalur terbang atau jenis sensor, meningkatkan citra termal agar fitur lebih terlihat, serta memproses awal data multispektral untuk pipeline machine learning di mana normalisasi masukan meningkatkan konvergensi. Interpretasi keluaran menunjukkan bahwa nilai terkoreksi mengikuti penskalaan hukum pangkat: nada tengah mengalami penyesuaian relatif terbesar, sedangkan nilai ekstrem lebih sedikit terkompresi. Untuk masukan 8-bit (0-255), gamma tipikal 0.4-0.6 mencerahkan citra secara signifikan; gamma 1.4-1.6 menggelapkan secara substansial. Bentuk histogram bertransformasi secara dapat diprediksi: histogram condong ke kiri (citra gelap) diuntungkan oleh γ < 1, sedangkan histogram condong ke kanan (citra terang) diuntungkan oleh γ > 1. Verifikasi keluaran terkoreksi menggunakan visualisasi histogram dan inspeksi visual. Terapkan secara konsisten pada koleksi citra yang memerlukan prapemrosesan seragam. Alur kerja umum merangkai koreksi gamma sebelum pemilihan ambang batas atau klasifikasi untuk memastikan visibilitas fitur yang seimbang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Eksponen gamma dalam [0, 4], default 0.5."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "gaussian_contrast_stretch": {
            "name": "Peregangan kontras Gaussian",
            "description": "Meregangkan kontras dengan mencocokkan ke distribusi referensi Gaussian.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "num_tones": {
                "label": "Jumlah tone",
                "description": "Jumlah tone keluaran (default 256)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "histogram_equalization": {
            "name": "Ekualisasi histogram",
            "description": "Menerapkan ekualisasi histogram untuk meningkatkan kontras citra.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "num_tones": {
                "label": "Jumlah tone",
                "description": "Jumlah tone keluaran (default 256)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "histogram_matching": {
            "name": "Pencocokan histogram",
            "description": "Mencocokkan histogram citra dengan histogram referensi yang diberikan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "histogram": {
                "label": "Histogram",
                "description": "Histogram referensi sebagai [[value, frequency], ...] atau [{x, y}, ...]."
              },
              "is_cumulative": {
                "label": "Kumulatif",
                "description": "True jika nilai histogram yang diberikan sudah kumulatif."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "histogram_matching_two_images": {
            "name": "Pencocokan histogram dua citra",
            "description": "Mencocokkan histogram citra masukan dengan histogram citra referensi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "reference": {
                "label": "Referensi",
                "description": "Path raster referensi atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "ihs_to_rgb": {
            "name": "IHS ke RGB",
            "description": "Transformasi invers IHS ke RGB mengonversi komponen Intensity-Hue-Saturation kembali ke ruang warna merah-hijau-biru, sehingga memungkinkan pemulihan warna alami dari data penginderaan jauh yang telah didekomposisi. Rumus invers bekerja pada koordinat polar silinder, mengonversi sudut hue dan magnitudo saturasi beserta intensitas kembali ke koordinat RGB Kartesius sambil mempertahankan stabilitas numerik dan meminimalkan artefak kuantisasi. Transformasi ini merupakan pelengkap penting bagi operasi RGB-ke-IHS, terutama dalam alur kerja pan-sharpening di mana intensitas telah diganti dengan data pankromatik resolusi tinggi. Fitur utama meliputi inversi matematis yang tepat dari transformasi maju untuk memastikan konsistensi dalam operasi bolak-balik, penanganan otomatis piksel akromatik yang hue-nya tidak terdefinisi untuk mencegah perambatan artefak numerik, stabilitas numerik pada nilai saturasi ekstrem mendekati nol, serta efisiensi komputasi yang memungkinkan integrasi mulus ke dalam pipeline pemrosesan cepat. Transformasi invers melengkapi alur kerja pan-sharpening dengan memulihkan citra warna alami setelah penggantian intensitas dengan data pankromatik, memungkinkan visualisasi warna data beresolusi tinggi, mendukung rekonstruksi spektral dari komponen yang didekomposisi, dan memvalidasi konsistensi transformasi dalam alur kerja kontrol kualitas. Keluaran IHS-ke-RGB menghasilkan citra warna alami tiga band dengan resolusi spasial yang diwarisi dari band intensitas masukan, cocok untuk visualisasi langsung dan analisis lebih lanjut. Band keluaran merepresentasikan kanal merah, hijau, dan biru dalam urutan standar; warna menunjukkan detail spasial yang lebih baik jika intensitas diganti dengan data pankromatik beresolusi lebih tinggi, dengan tetap mempertahankan karakteristik spektral dari komponen hue dan saturasi asli.",
            "params": {
              "intensity": {
                "label": "Intensitas",
                "description": "Raster band intensitas (0–1)."
              },
              "hue": {
                "label": "Rona (hue)",
                "description": "Raster band hue (0–2π radian)."
              },
              "saturation": {
                "label": "Saturasi",
                "description": "Raster band saturasi (0–1)."
              },
              "red_output": {
                "label": "Keluaran merah",
                "description": "Path keluaran opsional untuk band merah."
              },
              "green_output": {
                "label": "Keluaran hijau",
                "description": "Path keluaran opsional untuk band hijau."
              },
              "blue_output": {
                "label": "Keluaran biru",
                "description": "Path keluaran opsional untuk band biru."
              }
            }
          },
          "min_max_contrast_stretch": {
            "name": "Peregangan kontras min-maks",
            "description": "Meregangkan nilai secara linear di antara minimum dan maksimum yang ditentukan pengguna.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "min_val": {
                "label": "Nilai minimum",
                "description": "Nilai masukan minimum untuk penskalaan."
              },
              "max_val": {
                "label": "Nilai maksimum",
                "description": "Nilai masukan maksimum untuk penskalaan."
              },
              "num_tones": {
                "label": "Jumlah tone",
                "description": "Jumlah tone keluaran (default 256)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "mosaic": {
            "name": "Mosaik",
            "description": "Mosaik menggabungkan beberapa raster yang saling bertampalan menjadi keluaran yang mulus melalui registrasi geometrik, resampling ke proyeksi dan grid piksel yang sama, serta pembauran tepi untuk meminimalkan diskontinuitas. Algoritme ini meregistrasi raster menggunakan koordinat geografis atau titik kontrol tanah, melakukan resampling ke resolusi dan cakupan target, dan menerapkan pembauran berbobot (pembauran Feather atau pembobotan eksponensial) di seluruh wilayah tampalan. Piksel yang bertampalan dibaurkan menggunakan perataan berbobot jarak dari tepi raster, menciptakan transisi yang halus sambil mempertahankan akurasi piksel bagian dalam. Hasilnya adalah mosaik raster kontinental atau global yang mulus tanpa artefak tepi dan diskontinuitas radiometrik. Fitur utama meliputi penyelarasan geometrik multi-raster ke proyeksi yang sama, pilihan metode resampling (bilinear, kubik, tetangga terdekat), pembauran tepi yang menghilangkan sambungan, normalisasi radiometrik yang mengompensasi perbedaan sensor atau iluminasi, serta dukungan untuk ribuan raster masukan. Tool ini secara otomatis mengelola prioritas raster, menghindari celah melalui strategi pengisian yang cerdas. Penerapannya meliputi pembuatan mosaik citra satelit kontinental dari koleksi adegan, pembuatan model elevasi digital yang mulus dari beberapa jalur terbang, pembuatan mosaik optik komposit dari citra multitemporal, pembangunan ortomosaik dari survei pesawat nirawak (UAV), dan pembuatan peta dasar untuk area luas dari adegan satelit yang bertampalan. Mosaik sangat penting untuk alur kerja analisis kontinental dan global. Interpretasi keluaran: Raster keluaran mewarisi proyeksi dan resolusi masukan; wilayah pembauran menunjukkan nilai terinterpolasi yang menyeimbangkan raster masukan. Artefak tepi menunjukkan tampalan yang tidak memadai atau normalisasi radiometrik yang buruk; penilaian memeriksa sambungan dan konsistensi warna di sepanjang batas mosaik. Penanganan nodata di tepi mosaik memerlukan perhatian terhadap nilai pengisi dan definisi cakupan. Penilaian kualitas mencakup verifikasi geometrik melalui titik kontrol tanah dan penilaian radiometrik yang membandingkan nilai mosaik dengan raster masukan.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar raster masukan sebagai array path atau string yang dipisahkan koma/titik koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "method": {
                "label": "Metode",
                "description": "Metode resampling: 'nn' (default), 'bilinear', atau 'cc'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "mosaic_with_feathering": {
            "name": "Mosaik dengan feathering",
            "description": "Membuat mosaik dari dua raster dan membaurkan sel yang bertampalan secara feather menggunakan bobot jarak tepi.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua."
              },
              "method": {
                "label": "Metode",
                "description": "Metode resampling: 'cc' (default), 'nn', atau 'bilinear'."
              },
              "weight": {
                "label": "Bobot",
                "description": "Eksponen bobot jarak yang digunakan untuk feathering tumpang tindih (default 4.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "normalized_difference_index": {
            "name": "Indeks selisih ternormalisasi",
            "description": "Menghitung (band1 - band2) / (band1 + band2) dari raster multiband.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "band1": {
                "label": "Band 1",
                "description": "Indeks berbasis satu dari band pertama (default 1)."
              },
              "band2": {
                "label": "Band 2",
                "description": "Indeks berbasis satu dari band kedua (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "panchromatic_sharpening": {
            "name": "Penajaman pankromatik",
            "description": "Penajaman pankromatik menggabungkan citra pankromatik resolusi tinggi dengan data multispektral beresolusi lebih rendah menggunakan metode Brovey, teknik perkalian spektral yang meningkatkan detail spasial sambil mempertahankan informasi spektral. Metode ini bekerja dengan terlebih dahulu melakukan resampling band multispektral agar sesuai dengan resolusi pankromatik, lalu menghitung rasio intensitas antara citra pankromatik dan intensitas multispektral yang dihitung untuk menskalakan setiap band sebagaimana mestinya. Pendekatan ini mempertahankan fidelitas spektral sambil meningkatkan resolusi spasial secara drastis. Fitur utama meliputi pelestarian karakteristik spektral asli, efisiensi aljabar linear yang memungkinkan pemrosesan cepat pada citra besar, kompatibilitas resampling otomatis dengan masukan yang band-nya teregistrasi, serta normalisasi otomatis untuk konsistensi radiometrik antar-sensor yang heterogen. Teknik ini banyak digunakan dalam peningkatan citra satelit untuk aplikasi pemetaan termasuk perencanaan kota, pemantauan pertanian, dan eksplorasi sumber daya di mana detail spektral dan spasial sama-sama penting. Penajaman pankromatik menghasilkan keluaran multispektral yang ditingkatkan dengan definisi spasial yang unggul, cocok untuk interpretasi visual dan pemetaan terperinci. Band keluaran mempertahankan urutan band multispektral asli tetapi dengan resolusi setingkat pankromatik, sehingga dapat diintegrasikan dengan mulus ke dalam alur kerja analisis citra standar dan sistem GIS. Peningkatan resolusi spasial menyamai resolusi pankromatik masukan, sehingga memungkinkan ekstraksi fitur pada skala yang lebih halus daripada data multispektral asli.",
            "params": {
              "red": {
                "label": "Merah",
                "description": "Raster band merah (wajib kecuali 'composite' diberikan)."
              },
              "green": {
                "label": "Hijau",
                "description": "Raster band hijau (wajib kecuali 'composite' diberikan)."
              },
              "blue": {
                "label": "Biru",
                "description": "Raster band biru (wajib kecuali 'composite' diberikan)."
              },
              "composite": {
                "label": "Komposit",
                "description": "Komposit multispektral RGB terkemas (saling eksklusif dengan red/green/blue)."
              },
              "pan": {
                "label": "Pankromatik",
                "description": "Band raster pankromatik."
              },
              "method": {
                "label": "Metode",
                "description": "Metode fusi: 'brovey' (default) atau 'ihs'."
              },
              "output_mode": {
                "label": "Mode keluaran",
                "description": "Pengkodean keluaran: 'packed' (default) atau 'bands' (raster RGB 3 band)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "percentage_contrast_stretch": {
            "name": "Peregangan kontras persentase",
            "description": "Percentage Contrast Stretch melakukan peningkatan kontras linear dengan menghapus persentase tertentu dari nilai ekstrem (ekor) histogram sebelum meregangkan ke rentang dinamis penuh. Algoritme: menghapus nilai persentil bawah dan atas dari setiap band secara independen, memetakan rentang yang tersisa secara linear ke rentang keluaran (biasanya 0-255 atau kedalaman bit penuh), menghilangkan nilai ekstrem radiometrik yang menyebabkan kontras buruk. Pemilihan persentil (umumnya 2-3%) menyeimbangkan peningkatan kontras dengan pelestarian integritas data. Fitur utama: menghapus pencilan radiometrik secara otomatis, mencegah kompresi kontras akibat nilai anomali, dapat diterapkan per band atau secara global, transformasi linear yang efisien secara komputasi, operasi yang dapat dibalik. Kemampuan: menangani artefak radiometrik, meningkatkan visibilitas fitur yang samar, mengakomodasi rentang masukan yang bervariasi. Kasus penggunaan: prapemrosesan sebelum klasifikasi atau fusi, peningkatan rentang dinamis yang kurang dimanfaatkan, persiapan untuk tampilan multispektral, normalisasi radiometrik antar-adegan. Penerapan: peningkatan citra satelit untuk interpretasi visual, prapemrosesan deteksi longsor berbasis satelit, normalisasi praklasifikasi, perbaikan citra arsip. Interpretasi keluaran: citra yang ditingkatkan menampilkan kontras yang lebih baik; nilai ekstrem terpotong; fitur samar yang sebelumnya tersembunyi menjadi terlihat; nilai pemotongan spesifik band mengungkap kualitas distribusi radiometrik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "clip": {
                "label": "Potong",
                "description": "Persentase pemotongan persentil (default 1.0)."
              },
              "tail": {
                "label": "Ekor",
                "description": "Mode pemotongan ekor: both (default), upper, atau lower."
              },
              "num_tones": {
                "label": "Jumlah tone",
                "description": "Jumlah tone keluaran (default 256)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "piecewise_contrast_stretch": {
            "name": "Peregangan kontras sepotong-sepotong",
            "description": "Melakukan peregangan kontras linear sepotong-sepotong menggunakan titik henti yang ditentukan pengguna.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "function": {
                "label": "Fungsi",
                "description": "String pernyataan titik patah, mis. '(50,0.1);(120,0.6);(180,0.85)'."
              },
              "greytones": {
                "label": "Tingkat keabuan",
                "description": "Jumlah tone keluaran untuk raster non-RGB (default 1024)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "resample": {
            "name": "Resampling",
            "description": "Resampling citra mengubah resolusi piksel menggunakan metode interpolasi yang mencakup teknik nearest neighbor (tercepat, penghalusan paling sedikit), bilinear (interpolasi linear antara piksel yang berdampingan), bikubik (fitting polinomial kubik), dan cubic spline (interpolasi kontinu yang halus). Resampling sangat penting untuk registrasi geometris, pembuatan tumpukan multispektral beresolusi seragam dari sensor dengan resolusi campuran, dan integrasi data tambahan pada skala yang berbeda. Setiap metode melibatkan fitting kernel interpolasi lokal ke nilai piksel asli, mengevaluasi kernel pada lokasi piksel baru, dan mengembalikan nilai hasil interpolasi. Nearest neighbor mempertahankan nilai radiometrik (cocok untuk data kategorikal); metode orde lebih tinggi menghaluskan tepi dan mengurangi aliasing tetapi mengaburkan batas yang tajam. Fitur utama mencakup metode interpolasi yang dapat dipilih untuk mengoptimalkan kompromi kecepatan-akurasi, spesifikasi resolusi keluaran melalui ukuran piksel target atau dimensi, penanganan otomatis nilai latar belakang untuk area di luar cakupan masukan, dan filter antialiasing opsional yang mengurangi artefak resampling. Aplikasinya mencakup registrasi citra yang menyelaraskan data ke grid bersama, harmonisasi resolusi yang menyatukan tumpukan multispektral dengan resolusi asli yang beragam, downsampling untuk mengurangi volume data sambil mempertahankan pola spasial, dan upsampling untuk meningkatkan detail visual demi visualisasi. Keluaran resampling mengintegrasikan citra pada resolusi yang konsisten. Resolusi keluaran sesuai dengan spesifikasi pengguna; metode interpolasi memengaruhi ketegasan tepi (nearest neighbor mempertahankan tepi; metode orde lebih tinggi menghaluskan); area latar belakang (di luar cakupan masukan) menerima nilai isian yang dapat dikonfigurasi; keluaran terintegrasi dengan mulus ke dalam alur kerja analisis multispektral.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar raster masukan sebagai array path atau string yang dipisahkan koma/titik koma."
              },
              "base": {
                "label": "Basis",
                "description": "Raster dasar opsional yang mendefinisikan luasan dan grid keluaran. Lebih diutamakan daripada cell_size."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran opsional ketika base tidak diberikan."
              },
              "method": {
                "label": "Metode",
                "description": "Metode resampling: 'cc' (default), 'nn', atau 'bilinear'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "rgb_to_ihs": {
            "name": "RGB ke IHS",
            "description": "Transformasi RGB ke Intensity-Hue-Saturation menguraikan ruang warna merah-hijau-biru menjadi komponen yang relevan secara perseptual: intensitas (kecerahan), hue (warna), dan saturasi (kemurnian warna). Penguraian ini menggunakan rumus matematis standar yang mengonversi nilai tristimulus RGB menjadi koordinat polar silindris, dengan intensitas merepresentasikan luminans, hue mengodekan sudut warna, dan saturasi mengukur konsentrasi warna. Ruang warna ini sangat berguna untuk penginderaan jauh karena intensitas dapat diganti dengan data beresolusi tinggi sambil mempertahankan karakteristik warna asli melalui transformasi balik. Fitur utama mencakup formulasi yang stabil secara numerik yang menangani kasus tepi (piksel akromatik) secara andal, retensi rentang dinamis penuh tanpa pemotongan atau kehilangan informasi, penskalaan band otomatis untuk hasil yang konsisten pada berbagai rentang masukan, dan efisiensi komputasi yang cocok untuk tumpukan multispektral besar. Teknik ini melayani berbagai aplikasi: alur kerja pan-sharpening yang mengganti intensitas dengan data pankromatik, peningkatan visualisasi warna, prapemrosesan spektral untuk algoritma klasifikasi, dan konversi warna ke skala abu-abu yang mempertahankan informasi perseptual. Transformasi RGB ke IHS sangat penting bagi teknik fusi yang menggabungkan resolusi pankromatik dengan informasi warna multispektral. Keluaran terdiri atas tiga file band tunggal yang merepresentasikan komponen intensitas, hue, dan saturasi yang dapat digunakan secara independen dalam alur kerja analisis. Band intensitas mendekati luminans; hue berkisar 0-360 derajat yang mengodekan informasi warna; saturasi berkisar 0-100 persen yang menunjukkan kemurnian warna.",
            "params": {
              "red": {
                "label": "Merah",
                "description": "Raster band merah (saling eksklusif dengan 'composite')."
              },
              "green": {
                "label": "Hijau",
                "description": "Raster band hijau (saling eksklusif dengan 'composite')."
              },
              "blue": {
                "label": "Biru",
                "description": "Raster band biru (saling eksklusif dengan 'composite')."
              },
              "composite": {
                "label": "Komposit",
                "description": "Raster komposit RGB terkemas (saling eksklusif dengan red/green/blue)."
              },
              "intensity_output": {
                "label": "Keluaran intensitas",
                "description": "Path keluaran opsional untuk band intensitas."
              },
              "hue_output": {
                "label": "Keluaran rona (hue)",
                "description": "Path keluaran opsional untuk band hue."
              },
              "saturation_output": {
                "label": "Keluaran saturasi",
                "description": "Path keluaran opsional untuk band saturasi."
              }
            }
          },
          "sigmoidal_contrast_stretch": {
            "name": "Peregangan kontras sigmoid",
            "description": "Melakukan peregangan kontras sigmoid menggunakan gain dan cutoff.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "cutoff": {
                "label": "Batas potong",
                "description": "Titik tengah sigmoid dalam satuan ternormalisasi (default 0.0)."
              },
              "gain": {
                "label": "Penguatan",
                "description": "Parameter penguatan sigmoid (default 1.0)."
              },
              "num_tones": {
                "label": "Jumlah tone",
                "description": "Jumlah tone keluaran (default 256)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "split_colour_composite": {
            "name": "Pisahkan komposit warna",
            "description": "Memisahkan raster komposit warna RGB terkemas menjadi tiga raster band tunggal terpisah yang merepresentasikan kanal merah, hijau, dan biru. Algoritma: Tool ini mengekstrak band warna individual dari citra komposit tempat nilai R, G, dan B dikemas ke dalam satu raster (sering menggunakan pengodean RGB 24-bit standar atau RGBA 32-bit). Pemisahan dilakukan melalui operasi bitwise untuk mengisolasi setiap komponen kanal 8-bit. Fitur utama: Mempertahankan nilai radiometrik asli (0–255), menangani komposit RGB standar dan format yang diperluas, menghasilkan tiga raster tergeoreferensi yang independen. Kasus penggunaan: Analisis spektral yang mengharuskan band individual diproses secara terpisah; pembuatan dataset masukan untuk perhitungan indeks vegetasi (NDVI, EVI); penyiapan data untuk operasi aljabar band; memungkinkan transformasi warna tingkat lanjut seperti konversi RGB ke IHS; mengekstrak band tertentu untuk alur kerja klasifikasi terbimbing atau tak terbimbing. Aplikasi: Analisis citra penginderaan jauh, prapemrosesan data satelit, penyiapan analisis multispektral, pipeline peningkatan citra. Interpretasi keluaran: Tiga raster band tunggal dihasilkan dengan cakupan spasial, proyeksi, dan georeferensi yang identik dengan komposit masukan. Setiap band keluaran berisi nilai radiometrik 8-bit (0–255) yang merepresentasikan intensitas komponen warna tersebut di seluruh adegan. Statistik band (min, maks, rata-rata) mencerminkan karakteristik spektral kanal warna tersebut; nilai dominan menunjukkan dominansi warna di seluruh citra. Raster keluaran langsung cocok untuk perhitungan band, indeks spektral, atau alur kerja pemrosesan multi-band lebih lanjut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster RGB terkemas masukan."
              },
              "red_output": {
                "label": "Keluaran merah",
                "description": "Path keluaran opsional untuk band merah."
              },
              "green_output": {
                "label": "Keluaran hijau",
                "description": "Path keluaran opsional untuk band hijau."
              },
              "blue_output": {
                "label": "Keluaran biru",
                "description": "Path keluaran opsional untuk band biru."
              }
            }
          },
          "standard_deviation_contrast_stretch": {
            "name": "Peregangan kontras simpangan baku",
            "description": "Melakukan peregangan kontras linear menggunakan rata-rata plus/minus pengali simpangan baku.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "clip": {
                "label": "Potong",
                "description": "Pengali simpangan baku yang digunakan untuk menurunkan batas pemotongan (default 2.0)."
              },
              "num_tones": {
                "label": "Jumlah tone",
                "description": "Jumlah tone keluaran (default 256)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "true_colour_composite": {
            "name": "Komposit warna asli",
            "description": "Bangun raster komposit warna asli (RGB) dari bundel sensor optik yang didukung.",
            "params": {
              "wbe": {
                "label": "WBE",
                "description": "WBE"
              },
              "output": {
                "label": "Keluaran",
                "description": "Keluaran"
              }
            }
          },
          "adaptive_filter": {
            "name": "Filter adaptif",
            "description": "Adaptive Filter menyesuaikan kekuatan penyaringan secara dinamis berdasarkan statistik citra lokal (rata-rata, varians, kurtosis), sehingga memungkinkan penghalusan yang sadar konteks dan merespons karakteristik adegan. Implementasinya membagi citra menjadi jendela bergerak, menghitung statistik lokal (mendeteksi wilayah yang didominasi noise versus wilayah yang didominasi fitur), dan memilih parameter filter sesuai dengan itu. Wilayah datar dihaluskan secara agresif; wilayah kompleks disaring secara lembut. Dasar matematisnya menggunakan uji statistik untuk mengidentifikasi karakter lokal: wilayah dengan varians di bawah ambang batas dihaluskan dengan kuat; wilayah yang melampaui ambang batas mempertahankan detail. Fitur utama mencakup adaptasi parameter otomatis (pengguna menentukan rentang; algoritma memilih secara lokal), penerapan pada kernel filter apa pun (Gaussian, median, morfologis), dan efektivitas pada citra optik maupun radar. Penyaringan adaptif unggul dalam prapemrosesan mosaik satelit yang heterogen (sensor dan kondisi akuisisi berbeda), penghalusan awan titik LiDAR (mempertahankan tepi vegetasi di hutan; menghaluskan permukaan tanah di area terbuka), pengurangan speckle SAR selektif yang menghormati target maupun latar belakang, dan penumpukan citra multi-temporal. Interpretasi keluaran menunjukkan bahwa wilayah homogen mengalami penyaringan intensif (varians lokal rendah → penghalusan kuat); wilayah kompleks disaring secara konservatif (varians tinggi → pemrosesan minimal). Radius penghalusan menyesuaikan secara dinamis per wilayah: area datar menerima penyaringan radius besar; area bertekstur menerima penyaringan radius kecil atau tanpa penyaringan. Rentang keluaran tetap berada dalam rentang masukan; periksa peta kekuatan penyaringan spasial untuk memvalidasi adaptasi. Statistik bergeser ke arah rata-rata lokal di wilayah halus; wilayah kompleks sebagian besar tetap tidak berubah. Artefak umum mencakup potensi penghalusan berlebihan di batas wilayah (biasanya diterapkan transisi halus) dan sensitivitas terhadap hubungan noise-varians. Verifikasi adaptasi dengan menganalisis peta varians lokal. Terapkan dalam pipeline prapemrosesan otomatis yang menangani data multisumber ketika penyaringan seragam tidak memadai.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ambang skor z absolut untuk penggantian rata-rata (default 2.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "anisotropic_diffusion_filter": {
            "name": "Filter difusi anisotropik",
            "description": "Penyaringan difusi anisotropik menerapkan penghalusan iteratif yang mempertahankan tepi melalui proses difusi terarah yang membedakan antara tepi dan wilayah datar. Algoritma ini secara iteratif memperbarui setiap piksel berdasarkan selisih berbobot dengan tetangganya, menggunakan fungsi konduktansi yang mengurangi difusi melintasi batas bergradien tinggi sambil memungkinkan penghalusan di dalam wilayah homogen. Implementasinya menyelesaikan persamaan diferensial parsial ∂I/∂t = div(c(|∇I|)∇I), dengan konduktansi c(·) beradaptasi terhadap besaran gradien lokal. Pendekatan berbasis data ini mempertahankan transisi tajam sambil secara progresif mengurangi noise di area seragam. Fitur utama mencakup pelestarian tepi sejati tanpa mask tepi eksplisit, pemilihan skala otomatis melalui jumlah iterasi, pengurangan noise efektif yang mempertahankan ketajaman fitur, dan penerapan pada data tunggal maupun multispektral. Difusi anisotropik unggul dalam penghalusan awan titik LiDAR yang mempertahankan patahan medan, penghilangan noise citra satelit untuk deteksi fitur geologis yang halus, pengurangan speckle SAR yang mempertahankan tepi target radar, dan citra medis/ilmiah yang menuntut ketepatan tepi. Interpretasi keluaran memerlukan pemahaman bahwa wilayah halus secara progresif menjadi homogen (nilai konvergen ke rata-rata lokal), sementara tepi menjadi lebih curam hingga stabil. Iterasi awal (t<5) menghasilkan pengurangan noise ringan; iterasi menengah (t=5-20) memberikan penghalusan yang substansial; iterasi berlebihan (t>50) berisiko menimbulkan penajaman batas berlebihan atau fitur palsu. Nilai keluaran tetap dalam rentang data sumber; statistik bergeser ke arah rata-rata regional seiring berjalannya pemrosesan. Pantau varians keluaran untuk menilai kelengkapan penghalusan. Metrik umum mencakup peningkatan rasio sinyal terhadap noise dan indeks ketajaman tepi. Terapkan dengan hati-hati dalam alur kerja multiskala yang presisi pelestarian tepinya berdampak langsung pada akurasi klasifikasi atau deteksi perubahan di tahap selanjutnya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah iterasi difusi (default 10)."
              },
              "kappa": {
                "label": "Kappa",
                "description": "Parameter sensitivitas tepi (default 20.0)."
              },
              "lambda": {
                "label": "Lambda",
                "description": "Langkah waktu dalam (0, 0.25], default 0.2."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "bilateral_filter": {
            "name": "Filter bilateral",
            "description": "Penghalusan bilateral yang mempertahankan tepi melalui kernel spasial + intensitas. Lebih unggul daripada Gaussian dalam mempertahankan detail. Sigma_dist=radius, sigma_int=ambang batas pelestarian tepi. Mendukung RGB.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "sigma_dist": {
                "label": "Sigma jarak",
                "description": "Simpangan baku kernel Gaussian spasial dalam piksel (0.5–20.0, default 0.75)."
              },
              "sigma_int": {
                "label": "Sigma intensitas",
                "description": "Simpangan baku kernel Gaussian intensitas dalam satuan nilai raster (default 1.0)."
              },
              "treat_as_rgb": {
                "label": "Perlakukan sebagai RGB",
                "description": "Setel true untuk memaksa pemrosesan HSI RGB terkemas. Ketika false, RGB terkemas masih dapat dideteksi otomatis dari metadata raster."
              },
              "assume_three_band_rgb": {
                "label": "Anggap RGB tiga band",
                "description": "Ketika true (default), raster uint8/uint16 3 band dapat diperlakukan sebagai RGB pada filter yang mendukung pemrosesan intensitas RGB 3 band."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "closing": {
            "name": "Penutupan morfologi",
            "description": "Melakukan operasi closing morfologis menggunakan elemen penstruktur persegi panjang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan ganjil (default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan ganjil (default sama dengan filter_size_x)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "conservative_smoothing_filter": {
            "name": "Filter penghalusan konservatif",
            "description": "Conservative Smoothing menerapkan penyaringan non-linear dengan mengganti setiap piksel dengan rata-rata tetangga yang serupa (dalam rentang intensitas yang ditentukan), sehingga mempertahankan tepi sambil mengurangi noise. Implementasinya memeriksa ketetanggaan, mengidentifikasi piksel yang berada dalam ambang batas intensitas dari piksel pusat, dan merata-ratakan piksel bernilai serupa tersebut. Formulasi matematis: F = (1/N) Σ(I_j : |I_j - I_center| < T), dengan T adalah ambang batas kemiripan dan N adalah jumlah piksel yang serupa. Fitur utama mencakup definisi kemiripan berbasis ambang batas yang sederhana, efektivitas pada citra optik dan radar, parameter yang mudah diinterpretasikan (ambang batas mengendalikan ketajaman tepi), dan beban komputasi yang minimal. Conservative Smoothing unggul dalam prapemrosesan citra satelit multispektral (mengurangi noise sambil mempertahankan batas spektral), peningkatan citra termal (menghaluskan noise radiometrik sambil mempertahankan diskontinuitas suhu), penghalusan klasifikasi LiDAR (mempertahankan batas vegetasi/tanah), dan prapemrosesan data survei yang ber-noise. Interpretasi keluaran menunjukkan bahwa wilayah homogen dirata-ratakan sepenuhnya (semua tetangga serupa); tepi disaring secara minimal (piksel serupa hanya berada di sisi yang sama). Parameter ambang batas mengendalikan pelestarian tepi: ambang batas kecil (kemiripan ketat) menghasilkan penghalusan ringan; ambang batas besar (kemiripan longgar) menghasilkan penghalusan agresif yang berpotensi menghilangkan tepi. Nilai keluaran persis sesuai dengan nilai tetangga masukan (tanpa interpolasi; keluaran adalah rata-rata dari nilai yang ada). Statistik bergeser ke arah klaster lokal; wilayah heterogen menunjukkan perubahan minimal. Verifikasi efektivitas ambang batas melalui inspeksi visual dan analisis histogram lokal. Artefak umum mencakup penghalusan yang tidak memadai jika ambang batas terlalu ketat dan pengaburan tepi jika ambang batas terlalu longgar. Jumlah iterasi memungkinkan penyaringan progresif: satu kali lintasan memberikan penghalusan lembut; beberapa lintasan memperkuat efeknya. Terapkan sebelum klasifikasi ketika kerancuan kategori akibat noise harus dikurangi sementara batas kelas tetap tajam.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 3)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 3)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "diff_of_gaussians_filter": {
            "name": "Filter difference of Gaussians",
            "description": "Penyaringan Difference of Gaussians (DoG) mendeteksi tepi dan fitur halus melalui pengurangan dua versi yang dikaburkan secara Gaussian dengan radius berbeda, sehingga menciptakan filter bandpass yang menonjolkan frekuensi spasial menengah. Implementasinya menghitung dua pengaburan Gaussian (radius kecil σ₁ dan radius besar σ₂), lalu mengurangkannya: DoG = G(σ₁) - G(σ₂). Kombinasi non-linear ini menonjolkan tepi dan punggungan sambil menekan noise halus maupun tren iluminasi yang luas. Fitur utama mencakup respons frekuensi yang dapat disetel (rasio σ₂/σ₁ mengendalikan karakteristik bandpass), keluaran berpusat nol (bipolar: nilai positif dan negatif), penerapan pada deteksi tepi dan ekstraksi fitur, dan efisiensi komputasi melalui penggunaan ulang Gaussian. Difference of Gaussians unggul dalam deteksi struktur geologis (sesar dan kelurusan tampak sebagai respons DoG yang tinggi), ekstraksi bangunan dari ortofoto, peningkatan tekstur halus pada mosaik penginderaan jauh, dan model pemrosesan yang terinspirasi ilmu saraf. Interpretasi keluaran menunjukkan bahwa tepi menghasilkan respons puncak (positif di sisi terang, negatif di sisi gelap) dengan zero-crossing tepat pada transisi. Deteksi zero-crossing mengungkap tepi sejati terlepas dari arah tepi. Besaran DoG menunjukkan kekuatan tepi; rentang tipikal mencakup -1000 hingga +1000 untuk masukan 8-bit, bergantung pada kontras lokal. Rasio σ₂/σ₁ menentukan pusat bandpass: rasio~2 menonjolkan fitur yang sangat halus; rasio~5 menonjolkan fitur menengah; rasio~10 menonjolkan fitur yang lebih kasar. Distribusi keluaran bimodal (puncak pada ekstrem positif dan negatif) menunjukkan pemisahan tepi yang baik. Artefak umum mencakup halo di sekitar tepi yang kuat dan potensi respons yang kurang jika pita frekuensi tidak sesuai dengan skala fitur. Kombinasikan dengan pengambangan besaran untuk ekstraksi tepi. Terapkan sebelum pascapemrosesan morfologis untuk ekstraksi fitur yang andal dari citra satelit yang ber-noise.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Sigma Gaussian lebih kecil (0.25-20.0, default 2.0)."
              },
              "sigma2": {
                "label": "Sigma 2",
                "description": "Sigma Gaussian lebih besar (0.5-20.0, default 4.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "diversity_filter": {
            "name": "Filter keragaman",
            "description": "Menghitung keragaman jendela bergerak sebagai jumlah nilai/kelas unik di dalam ketetanggaan. Mengukur heterogenitas lokal: keragaman tinggi = medan/kelas yang bervariasi, keragaman rendah = homogen. Mengungkap tekstur, fragmentasi, dan keragaman pola. Sering diterapkan pada citra terklasifikasi atau kategorikal untuk mengidentifikasi zona transisi/tepi.\n\nFilter keragaman menghasilkan metrik variasi lokal yang tidak bergantung pada nilai tertentu. Berguna untuk ekologi lanskap (keragaman habitat, metrik fragmentasi), penilaian kualitas klasifikasi (keragaman tinggi = area campuran/tidak pasti), dan analisis tekstur. Jika diterapkan pada data elevasi, keragaman menunjukkan kekasaran pada skala ketetanggaan. Jika diterapkan pada klasifikasi, filter ini mengidentifikasi zona campuran/ekoton/batas.\n\nAplikasi: (1) Pemetaan fragmentasi lanskap (keragaman tinggi = mosaik beragam, keragaman rendah = patch seragam), (2) Penilaian kepercayaan/ketidakpastian klasifikasi (keragaman tinggi = area tidak pasti), (3) Analisis tekstur (pemetaan heterogenitas), (4) Deteksi tepi/batas melalui puncak keragaman, (5) Keragaman habitat untuk analisis ekologis (kesesuaian bergantung pada keragaman lokal).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "edge_preserving_mean_filter": {
            "name": "Filter rata-rata pelestari tepi",
            "description": "Filter Edge-Preserving Mean melakukan perataan piksel secara selektif dengan menghitung rata-rata lokal sambil mengecualikan piksel pencilan yang kemungkinan merepresentasikan tepi atau noise. Implementasinya mengurutkan ketetanggaan piksel, menghapus nilai ekstrem (terendah dan tertinggi, atau nilai yang melampaui ambang batas statistik), dan merata-ratakan nilai yang tersisa. Pendekatan yang andal ini menyeimbangkan penghalusan dengan pelestarian ketajaman. Variannya mencakup perataan berbobot yang menonjolkan piksel pusat dan pemilihan ambang batas adaptif berdasarkan statistik lokal. Fitur utama mencakup kontrol parameter yang sederhana (jumlah pengecualian atau ambang batas), efisiensi komputasi melalui pengurutan ketetanggaan kecil, pengurangan noise yang efektif tanpa mengaburkan detail, dan penerapan pada data optik, radar, dan termal. Penyaringan Edge-Preserving Mean unggul dalam prapemrosesan citra satelit optik untuk perhitungan indeks vegetasi (menghapus bayangan dan awan tanpa mengaburkan fitur), penghalusan DEM yang mempertahankan patahan lereng, penghilangan noise citra termal yang mempertahankan ketajaman batas, dan penyiapan ortofoto untuk digitasi manual. Interpretasi keluaran menunjukkan bahwa pencilan yang dihapus terkonsentrasi di tepi dan wilayah noise; nilai yang tersisa dirata-ratakan sehingga menghasilkan penghalusan lokal. Parameter pengecualian mengendalikan ketajaman tepi: mengecualikan satu nilai ekstrem menghapus noise salt-and-pepper; mengecualikan beberapa nilai ekstrem menghasilkan hasil yang lebih halus dengan transisi tepi yang lebih lembut. Rentang keluaran tetap dalam rentang masukan; statistik bergeser ke arah rata-rata inlier. Pantau selisih keluaran terhadap masukan untuk mengidentifikasi wilayah yang tersaring (biasanya area bervarians tinggi). Kualitas pelestarian tepi bergantung pada akurasi identifikasi pencilan; verifikasi secara visual bahwa fitur tetap tajam. Artefak umum mencakup penghalusan yang tidak memadai jika ambang batas terlalu ketat dan penyaringan berlebihan jika jumlah pengecualian terlalu tinggi. Jumlah iterasi memungkinkan penyaringan progresif; satu kali lintasan memberikan penghalusan lembut. Terapkan sebelum klasifikasi berbasis ambang batas untuk mengurangi kesalahan klasifikasi kategori akibat noise sambil mempertahankan batas fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran ketetanggaan persegi dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Selisih tetangga absolut maksimum untuk disertakan dalam rata-rata lokal (default 15.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "emboss_filter": {
            "name": "Filter emboss",
            "description": "Filter emboss menonjolkan fitur tepi melalui pembayangan terarah, menciptakan tampilan relief tiga dimensi yang khas, dengan tepi tampak sebagai permukaan yang terangkat atau tertekan bergantung pada simulasi pencahayaan terarah. Filter ini menerapkan kernel 3×3 yang menggabungkan deteksi tepi dengan iluminasi satu arah, biasanya mensimulasikan cahaya dari kuadran kiri atas, sehingga menciptakan kontras visual yang dramatis pada batas sambil mempertahankan wilayah yang halus. Transformasi emboss mengurangkan nilai tetangga berbobot pada arah tertentu, menghasilkan keluaran yang sorotan dan bayangannya menegaskan diskontinuitas topografi dan fitur. Fitur utama mencakup kontrol arah yang intuitif yang memungkinkan penyesuaian arah cahaya simulasi (varian delapan arah), penggabungan alami persepsi 3D yang meningkatkan interpretasi visual, dan kinerja yang andal pada berbagai kondisi pencahayaan dalam citra sumber. Filter emboss melayani aplikasi jaminan mutu, visualisasi interpretatif, dan penekanan batas fitur. Kasus penggunaan mencakup peningkatan visual untuk interpretasi geologis tempat batas mineral terlihat sebagai pola relief, interpretasi foto udara yang meningkatkan visibilitas batas yang samar, produksi kartografi tempat model elevasi digital yang di-emboss menghasilkan peta relief yang menarik, dan deteksi fitur arkeologis tempat struktur terkubur tampak sebagai variasi topografi yang halus. Interpretasi keluaran memperlakukan nilai tinggi sebagai permukaan yang tersinari dan nilai rendah sebagai bayangan, menciptakan kedalaman perseptual yang secara alami ditafsirkan mata manusia sebagai relief. Keluaran emboss biasanya memerlukan penskalaan ke rentang visualisasi 0-255; keluaran mentah sering berisi nilai negatif yang merepresentasikan area bayangan. Efeknya murni visual—emboss tidak menghitung iluminasi sebenarnya atau menghasilkan turunan elevasi. Untuk citra multispektral, terapkan pada komponen utama atau band terpilih berdasarkan tujuan analisis. Pascapemrosesan sering mencakup peningkatan kontras atau tone mapping untuk mengoptimalkan dampak visual.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "direction": {
                "label": "Arah",
                "description": "Arah emboss: n,s,e,w,ne,nw,se,sw."
              },
              "clip_amount": {
                "label": "Jumlah pemotongan",
                "description": "Persen pemotongan ekor simetris opsional (0-40)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "fast_almost_gaussian_filter": {
            "name": "Filter Gaussian cepat aproksimatif",
            "description": "Filter Fast Almost Gaussian menyediakan penghalusan aproksimasi Gaussian yang cepat melalui penyaringan box (perataan) terpisah secara iteratif, sehingga mencapai respons pengaburan yang mendekati Gaussian dengan kompleksitas komputasi O(N) berapa pun radius pengaburannya. Implementasinya menerapkan konvolusi box berturut-turut (masing-masing menghitung rata-rata piksel lokal) untuk mengaproksimasi distribusi Gaussian kumulatif; N iterasi mengaproksimasi kernel Gaussian yang semakin besar. Dasar matematisnya menggunakan teorema limit pusat: konvolusi berulang fungsi box secara asimtotik mendekati distribusi Gaussian. Fitur utama mencakup kecepatan komputasi yang memungkinkan penghalusan kernel besar pada citra besar, implementasi terpisah yang mengurangi kebutuhan memori, kontrol parameter melalui jumlah iterasi (mengendalikan radius pengaburan), dan efektivitas pada tipe data apa pun. Penyaringan Fast Almost Gaussian unggul dalam pembuatan piramida citra yang cepat untuk analisis multiskala, penjelajahan citra satelit secara real-time, prapemrosesan dataset penginderaan jauh yang sangat besar sebelum klasifikasi, dan penampil citra interaktif yang memerlukan penghalusan responsif. Interpretasi keluaran menunjukkan bahwa jumlah iterasi berhubungan langsung dengan radius pengaburan: N=1 menghasilkan penghalusan minimal; N=3-5 memberikan pengaburan sedang; N>10 menghasilkan penghalusan kuat yang mengaproksimasi Gaussian berkernel besar. Nilai keluaran secara progresif bergeser ke arah rata-rata lokal seiring bertambahnya iterasi; pengurangan varians mengikuti pola yang dapat diprediksi. Nilai yang tersisa tetap dalam rentang data masukan. Perbandingan dengan penyaringan Gaussian sejati menunjukkan aproksimasi yang dapat diterima dengan galat 2-5% untuk sebagian besar aplikasi. Peningkatan kecepatan dibandingkan penyaringan Gaussian sejati meningkat drastis pada radius besar: 5-20× lebih cepat untuk radius >20 piksel. Artefak kecil mencakup gelombang halus di sepanjang tepi (artefak box yang terakumulasi selama iterasi) dan penanganan batas yang sedikit berbeda dari Gaussian. Pantau histogram keluaran untuk distribusi multimodal yang menunjukkan penghalusan yang memadai. Terapkan dalam pipeline prapemrosesan citra ketika kecepatan membenarkan galat aproksimasi kecil.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma Gaussian aproksimatif (>=1.8 direkomendasikan, default 1.8)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "flip_image": {
            "name": "Balik citra",
            "description": "Membalik citra secara vertikal, horizontal, atau keduanya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "direction": {
                "label": "Arah",
                "description": "Arah pembalikan: vertical (default), horizontal, atau both."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "frangi_filter": {
            "name": "Filter Frangi",
            "description": "Melakukan peningkatan vesselness Frangi multiskala untuk mendeteksi struktur menyerupai pembuluh (tubular) pada berbagai skala. Berdasarkan analisis nilai eigen matriks Hessian. Merespons kuat terhadap fitur menyerupai garis (pembuluh, jalan, sungai) dan lemah terhadap struktur menyerupai gumpalan. Analisis multiskala (coba beberapa nilai sigma) secara otomatis mendeteksi pembuluh dengan lebar berbeda. Banyak digunakan dalam pencitraan medis dan penginderaan jauh untuk deteksi fitur linear. Vesselness Frangi menggunakan kelengkungan utama (nilai eigen Hessian) untuk mengklasifikasikan struktur lokal: vesselness tinggi untuk fitur linear, rendah untuk dataran atau gumpalan. Implementasi multiskala diterapkan pada beberapa nilai sigma (lebar) dan menggabungkan responsnya. Sangat baik untuk mendeteksi jalan, sungai, dan jaringan pembuluh. Beban komputasi sedang untuk beberapa skala. Keluaran sangat mudah diinterpretasikan—merespons fitur yang dapat dikenali. Aplikasi: (1) Deteksi jalan pada citra satelit, (2) Ekstraksi jaringan sungai/alur, (3) Deteksi fitur linear secara umum, (4) Deteksi pembuluh (pencitraan medis), (5) Deteksi struktur multiskala.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "scales": {
                "label": "Skala",
                "description": "Daftar skala mirip Gaussian dalam piksel (default [1.0, 2.0, 3.0])."
              },
              "beta": {
                "label": "Beta",
                "description": "Parameter beta Frangi untuk supresi blob (default 0.5)."
              },
              "c": {
                "label": "C",
                "description": "Parameter c Frangi untuk sensitivitas struktur (default 15.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "gabor_filter_bank": {
            "name": "Bank filter Gabor",
            "description": "Melakukan penyaringan respons Gabor multi-orientasi—analisis tekstur terarah. Menerapkan bank filter Gabor pada beberapa orientasi (biasanya 0°, 45°, 90°, 135°) untuk mengekstrak fitur tekstur terarah. Respons Gabor menunjukkan kekuatan dan orientasi tekstur. Berguna untuk deteksi fitur terarah, karakterisasi tekstur, dan analisis pola berorientasi. Setiap orientasi dikeluarkan secara terpisah. Penyaringan Gabor mengekstrak tekstur terarah dengan melakukan konvolusi menggunakan wavelet spesifik orientasi. Setiap orientasi mengungkap fitur yang sejajar dengan arah tersebut. Menghasilkan beberapa band (satu per orientasi) yang mengungkap arah dan kekuatan tekstur lokal. Respons Gabor merupakan dasar bagi ekstraksi fitur tekstur dan deteksi objek dalam visi komputer. Bank filter memungkinkan analisis terarah yang komprehensif. Aplikasi: (1) Analisis tekstur terarah, (2) Deteksi fitur berorientasi (punggungan, lembah, struktur linear), (3) Pemetaan erosi/deposisi terarah, (4) Deteksi jalan/sungai (fitur linear), (5) Klasifikasi berbasis tekstur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma amplop Gaussian dalam piksel (default 2.0)."
              },
              "frequency": {
                "label": "Frekuensi",
                "description": "Frekuensi spasial sinusoid dalam siklus/piksel (default 0.2)."
              },
              "orientations": {
                "label": "Orientasi",
                "description": "Jumlah orientasi dalam bank filter (default 6)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "gaussian_filter": {
            "name": "Filter Gaussian",
            "description": "Penghalusan Gaussian yang optimal secara matematis dengan kernel berbobot jarak. Menjadi dasar bagi analisis multiskala, deteksi tepi, dan penyaringan band-pass. Parameter sigma mengendalikan intensitas penghalusan; mendukung RGB.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Simpangan baku Gaussian dalam piksel (0.5-20.0, default 0.75)."
              },
              "treat_as_rgb": {
                "label": "Perlakukan sebagai RGB",
                "description": "Setel true untuk memaksa perilaku ruang intensitas RGB."
              },
              "assume_three_band_rgb": {
                "label": "Anggap RGB tiga band",
                "description": "Ketika true (default), raster uint8/uint16 3 band dapat diperlakukan sebagai RGB jika metadata eksplisit tidak ada."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "glcm_texture": {
            "name": "Tekstur GLCM",
            "description": "Penganalisis tekstur Gray-Level Co-occurrence Matrix (GLCM) mengekstrak ukuran tekstur statistik orde kedua yang mengkuantifikasi hubungan spasial antara nilai tingkat keabuan piksel pada jarak dan arah perpindahan yang ditentukan, sehingga memungkinkan klasifikasi tekstur canggih yang membedakan pola vegetasi pertanian, struktur lingkungan terbangun, dan formasi geologis. GLCM menghitung matriks probabilitas yang menangkap seberapa sering pasangan tingkat keabuan muncul pada offset tetap, dengan menghitung empat statistik Haralick kanonis: kontras (mengukur variasi lokal), korelasi (mengukur ketergantungan linear), homogenitas (mengukur kedekatan dengan diagonal), dan energi (mengukur keseragaman). Tool ini mendukung delapan offset arah (0°, 45°, 90°, 135°, dan kebalikannya) yang memungkinkan sensitivitas tekstur terarah—mendeteksi pola berorientasi seperti baris ladang, kesejajaran bangunan, atau struktur geologis. Fitur utama mencakup analisis multi-arah yang mengungkap sifat tekstur anisotropik, penyetelan parameter perpindahan untuk mengoptimalkan sensitivitas skala, perhitungan simultan beberapa ukuran tekstur yang mengurangi beban pemrosesan, dan kemampuan bawaan untuk membedakan sifat permukaan yang halus secara visual. Kasus penggunaan mencakup pertanian presisi (klasifikasi jenis tanaman, deteksi batas lahan, penilaian cekaman tanaman), analisis perkotaan (pemetaan kepadatan bangunan, ekstraksi permukaan kedap air), dan penginderaan jauh geologi (diskriminasi jenis batuan, pengenalan pola struktural). Aplikasinya mencakup klasifikasi tutupan lahan yang menggabungkan fitur spektral dan tekstural, analisis citra berbasis objek yang meningkatkan akurasi klasifikasi, kontrol kualitas yang mendeteksi artefak instrumen pada citra satelit, dan deteksi perubahan yang mengisolasi perubahan bermakna dari noise sensor. Interpretasi keluaran memerlukan pemahaman makna setiap statistik: kontras tinggi menunjukkan tekstur kasar/bervariasi; korelasi tinggi menunjukkan pola linear; homogenitas tinggi menunjukkan tekstur seragam; energi tinggi menunjukkan pola berulang yang teratur. Band keluaran dapat digabungkan menjadi indeks tekstur (misalnya, Homogenitas GLCM dibagi Kontras menonjolkan area homogen). Mode agregasi arah (mean/min/max/separate) memengaruhi dimensi dan interpretasi keluaran. Analisis tekstur yang umum menggunakan beberapa ukuran GLCM secara bersamaan untuk klasifikasi yang andal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster band tunggal masukan."
              },
              "window_size": {
                "label": "Ukuran jendela",
                "description": "Ukuran jendela bergerak ganjil dalam piksel (default 7)."
              },
              "distance": {
                "label": "Jarak",
                "description": "Jarak piksel untuk offset pasangan ko-okurensi (default 1)."
              },
              "angles": {
                "label": "Sudut",
                "description": "Sudut yang dipisahkan koma dari 0,45,90,135 (default '0,45,90,135')."
              },
              "features": {
                "label": "Fitur",
                "description": "Fitur yang dipisahkan koma: contrast,dissimilarity,homogeneity,asm,energy,entropy,mean,variance,correlation."
              },
              "direction_aggregation": {
                "label": "Agregasi arah",
                "description": "Mode agregasi arah: mean (default), min, max, range, separate."
              },
              "levels": {
                "label": "Tingkat",
                "description": "Jumlah tingkat kuantisasi (default 32; rentang 8-128)."
              },
              "symmetric": {
                "label": "Simetris",
                "description": "Jika true (default), bangun GLCM simetris."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional (GeoTIFF multiband)."
              }
            }
          },
          "guided_filter": {
            "name": "Filter terpandu",
            "description": "Filter terpandu (guided filter) menerapkan penghalusan yang mempertahankan tepi dengan membatasi keluaran filter pada hubungan linear lokal dengan citra pemandu, biasanya citra asli atau layer referensi terkait. Implementasinya membagi citra menjadi wilayah persegi panjang yang saling tumpang tindih, menghitung parameter regresi linear di dalam setiap wilayah untuk memaksakan kehalusan keluaran sambil menghormati struktur citra pemandu. Formulasi matematisnya meminimalkan ||Fᵢ - a·Gᵢ - b||² + ε||a||², dengan Fᵢ adalah keluaran tersaring, Gᵢ adalah citra pemandu, dan (a, b) adalah parameter linear lokal. Fitur utama mencakup fleksibilitas (citra pemandu dapat independen dari citra yang disaring), efisiensi komputasi melalui implementasi terpisah O(N), kontrol parameter yang memungkinkan penyesuaian kekuatan pelestarian tepi, dan efektivitas dengan panduan band tunggal maupun multispektral. Penyaringan terpandu unggul dalam alur kerja fusi multisensor tempat data optik memandu penghilangan noise SAR, penyempurnaan klasifikasi LiDAR menggunakan ortofoto yang bersamaan, penghapusan bayangan/awan pada mosaik satelit menggunakan citra referensi temporal, dan peningkatan detail dalam tugas regularisasi peta. Interpretasi keluaran menunjukkan bahwa wilayah yang disaring tetap serupa secara lokal dengan struktur citra pemandu sementara perataan intensitas berlangsung di dalam wilayah homogen. Radius penghalusan mengendalikan cakupan spasial (radius lebih besar = penghalusan lebih kuat); parameter regularisasi ε menyeimbangkan kehalusan dengan ketepatan struktur (ε lebih besar = lebih halus, ε lebih kecil = lebih banyak detail). Rentang keluaran sesuai dengan masukan; perbandingan visual dengan citra pemandu memvalidasi ketepatan pelestarian tepi. Artefak umum mencakup penghalusan berlebihan pada diskontinuitas yang kuat (pilih parameter yang sesuai) dan penghalusan yang tidak memadai di wilayah dengan panduan buruk (verifikasi kualitas citra pemandu). Pantau korelasi silang antara keluaran tersaring dan citra pemandu untuk menilai kualitas penyelarasan. Terapkan secara strategis dalam alur kerja fusi, penajaman, dan rekonstruksi citra ketika informasi tepi dari satu sumber memandu penyaringan sumber lain.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius jendela filter terpandu dalam piksel (default 4)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Parameter regularisasi untuk varians lokal (default 0.01)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "high_pass_bilateral_filter": {
            "name": "Filter bilateral lolos tinggi",
            "description": "Menghitung residu high-pass dengan mengurangkan hasil penghalusan bilateral dari raster masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "sigma_dist": {
                "label": "Sigma jarak",
                "description": "Simpangan baku kernel Gaussian spasial (jarak), dalam piksel (0.5–20.0, default 0.75)."
              },
              "sigma_int": {
                "label": "Sigma intensitas",
                "description": "Simpangan baku kernel Gaussian intensitas, dalam satuan nilai raster (default 1.0)."
              },
              "treat_as_rgb": {
                "label": "Perlakukan sebagai RGB",
                "description": "Setel true untuk memaksa penyaringan intensitas HSI pada raster RGB terkemas sebelum pengurangan lolos tinggi."
              },
              "assume_three_band_rgb": {
                "label": "Anggap RGB tiga band",
                "description": "Ketika true (default), dan tidak ada metadata warna eksplisit, izinkan interpretasi RGB uint8/uint16 3 band."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "high_pass_filter": {
            "name": "Filter lolos tinggi",
            "description": "Filter high-pass mengisolasi komponen spasial berfrekuensi tinggi pada citra dengan mengurangkan versi berfrekuensi rendah (yang dihaluskan) dari citra asli. Secara matematis, hal ini dicapai dengan melakukan konvolusi citra menggunakan kernel yang dirancang untuk menonjolkan gradien dan menekan variasi tonal yang luas. Implementasinya menggunakan konvolusi langsung atau pemrosesan domain frekuensi, bergantung pada ukuran kernel dan dimensi citra. Filter ini menonjolkan tepi, detail tekstur halus, dan variasi berskala kecil sambil menghapus tren iluminasi berskala besar. Fitur pembeda utama mencakup pelestarian kontras tepi tanpa artefak batas, atenuasi frekuensi selektif berdasarkan radius kernel, dan penerapan langsung pada citra skala abu-abu maupun multispektral. Penyaringan high-pass sangat berharga untuk analisis medan yang memerlukan peningkatan fitur topografi halus, penajaman citra satelit untuk interpretasi visual, deteksi struktur geologis berskala kecil, dan prapemrosesan data untuk klasifikasi machine learning. Filter ini juga penting untuk menyiapkan ortofoto bagi deteksi perubahan dan meningkatkan produk turunan LiDAR. Interpretasi keluaran memerlukan pemahaman bahwa nilai positif menunjukkan maksimum lokal (tepi terang) dan nilai negatif menunjukkan minimum lokal (tepi gelap). Rentang tipikal adalah ±100 untuk citra 8-bit; keluaran dengan rata-rata nol menunjukkan ekstraksi frekuensi tinggi yang berhasil. Artefak umum mencakup ringing pada diskontinuitas yang kuat dan noise yang teramplifikasi jika citra sumber ber-noise. Interpretasi skala bergantung pada radius kernel: kernel yang lebih kecil menonjolkan tekstur halus (piksel individual), sedangkan kernel yang lebih besar menonjolkan fitur berskala sedang (variasi medan yang mencakup puluhan piksel). Pantau statistik keluaran; pemusatan nol yang berlebihan menunjukkan potensi pemrosesan berlebihan. Terapkan bersama hasil low-pass pelengkap untuk merekonstruksi citra asli atau untuk alur kerja dekomposisi multiskala.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "high_pass_median_filter": {
            "name": "Filter median lolos tinggi",
            "description": "Melakukan penyaringan high-pass dengan mengurangkan median lokal dari nilai pusat: output = pixel - median_neighborhood. Menggabungkan penyaringan high-pass (menonjolkan detail) dengan ketahanan median (menghapus noise). Keluaran berpusat di sekitar nol (negatif = lebih gelap dari sekitarnya, positif = lebih terang). Lebih tahan terhadap pencilan dibandingkan high-pass berbasis Gaussian. Residu high-pass mengungkap penyimpangan lokal dari tren median. Sangat andal untuk data ber-noise—median lebih stabil daripada rata-rata terhadap pencilan. Keluaran menonjolkan variasi berskala halus. Sering diterapkan pada versi yang dihaluskan secara Gaussian (menghasilkan filter band-pass). Berguna untuk peningkatan tekstur dan ekstraksi fitur dari citra ber-noise. Aplikasi: (1) Peningkatan tekstur dari data ber-noise, (2) Ekstraksi detail sebelum klasifikasi, (3) Deteksi fitur yang andal, (4) Prapemrosesan untuk segmentasi berbasis tekstur, (5) Prapemrosesan SAR.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "sig_digits": {
                "label": "Digit signifikan",
                "description": "Digit signifikan yang digunakan untuk binning histogram (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "integral_image_transform": {
            "name": "Transformasi citra integral",
            "description": "Menghitung transformasi summed-area (citra integral) untuk setiap band.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "k_nearest_mean_filter": {
            "name": "Filter rata-rata K tetangga terdekat",
            "description": "Melakukan penghalusan rata-rata k-nearest neighbor yang mempertahankan tepi: mengurutkan ketetanggaan berdasarkan jarak terhadap nilai pusat, lalu merata-ratakan k nilai terdekat. Pendekatan hibrida yang mempertahankan tepi melalui pembobotan kemiripan. Piksel pusat dan k-1 tetangga yang paling serupa dirata-ratakan. Lebih canggih daripada k-NN sederhana (mempertimbangkan kemiripan spasial dan intensitas). Efisien secara komputasi dibandingkan bilateral. Pendekatan k-nearest memilih tetangga secara adaptif: nilai piksel yang dekat dengan pusat dirata-ratakan, piksel yang tidak serupa diabaikan. Parameter K mengendalikan penghalusan: k=1 (tanpa penghalusan), k=n (semua tetangga = filter rata-rata). Biasanya k=n/2 (setengah ketetanggaan). Alternatif efisien untuk filter bilateral—pelestarian tepi serupa dengan biaya komputasi yang lebih rendah. Sangat berguna untuk citra dengan diskontinuitas intensitas yang kuat. Aplikasi: (1) Penghalusan yang mempertahankan tepi (alternatif bilateral), (2) Prapemrosesan cepat untuk klasifikasi, (3) Prapemrosesan yang menuntut efisiensi, (4) Penyaringan citra multi-band. Parameter tipikal: k=neighborhood_size/2 hingga 3/4.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 3)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 3)."
              },
              "k": {
                "label": "K",
                "description": "Jumlah tetangga terdekat untuk dirata-ratakan (default 5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "kuwahara_filter": {
            "name": "Filter Kuwahara",
            "description": "Filter Kuwahara menerapkan penghalusan non-linear yang mempertahankan tepi dengan membagi ketetanggaan setiap piksel menjadi empat kuadran, menghitung statistik di dalam setiap kuadran, dan memilih kuadran dengan varians terendah sebagai nilai keluaran. Implementasinya membagi jendela (2k+1)×(2k+1) menjadi empat sub-jendela k×k yang saling tumpang tindih, menghitung rata-rata dan varians setiap kuadran, dan mengeluarkan rata-rata dari kuadran dengan varians minimum. Pendekatan berbasis peringkat ini sekaligus menghaluskan wilayah homogen dan menajamkan tepi. Fitur utama mencakup pelestarian tepi sejati melalui pemilihan kuadran (tepi di antara kuadran mencegah pengaburan keluaran), kesederhanaan komputasi yang hanya memerlukan perhitungan rata-rata/varians, kontrol parameter melalui ukuran kuadran k, dan efektivitas pada citra optik, radar, dan termal. Penyaringan Kuwahara unggul dalam penghalusan DEM turunan LiDAR yang mempertahankan gawir dan teras, ekstraksi jaringan jalan dari citra resolusi tinggi yang mempertahankan ketajaman garis tengah, delineasi tapak bangunan dari foto udara, dan deteksi batas tumpahan minyak pada citra SAR. Interpretasi keluaran menunjukkan bahwa wilayah homogen mengeluarkan kuadran yang secara alami merata-ratakan (varians terendah); tepi mengeluarkan kuadran yang berisi struktur seragam terdekat dengan tepi, sehingga secara efektif menambatkan keluaran ke sisi yang lebih bersih. Ukuran kuadran k mengendalikan pelestarian detail: k=1 (penghalusan minimal) mempertahankan tepi halus; k=3-4 memberikan keseimbangan antara penghalusan dan pelestarian tepi; k>5 berisiko kehilangan detail. Nilai keluaran persis sesuai dengan nilai piksel masukan dari kuadran yang dipilih (tanpa interpolasi). Pantau histogram keluaran untuk distribusi bimodal (tepi dan wilayah homogen terpisah dengan jelas); distribusi unimodal mengindikasikan pengaburan tepi. Terapkan penajaman pelengkap jika terjadi penghalusan berlebihan. Artefak umum mencakup bias arah yang bergantung pada penjajaran kuadran dan efek kotak-kotak di dekat tepi yang lemah. Gunakan dalam prapemrosesan untuk segmentasi ketika pelestarian tepi memastikan ekstraksi batas yang akurat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius kuadran Kuwahara dalam piksel (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "lee_filter": {
            "name": "Filter Lee",
            "description": "Filter Lee melakukan pengurangan speckle SAR menggunakan model multiplikatif Lee, dengan asumsi bahwa pantulan radar mengikuti noise multiplikatif: I = S·N, dengan S adalah sinyal dan N adalah noise multiplikatif. Implementasinya menghitung rata-rata dan varians lokal, mengestimasi varians speckle, lalu menyaring melalui: F = μ + (1 - σₙ²/σ_I²)·(I - μ), dengan σₙ² adalah varians speckle dan σ_I² adalah varians total. Pendekatan berbasis model ini mempertahankan fitur berkoherensi tinggi sambil menekan speckle. Fitur utama mencakup model noise khusus SAR (multiplikatif, bukan Gaussian), pelestarian target titik dan tepi, interpretasi parameter yang mudah (ukuran jendela mengendalikan pengukuran koherensi), dan efektivitas yang telah terbukti pada SAR single-pol dan multi-pol. Penyaringan Lee unggul dalam prapemrosesan SAR untuk pemantauan pertanian, klasifikasi hutan, pemantauan permukaan laut, dan alur kerja pemetaan banjir. Interpretasi keluaran menunjukkan bahwa wilayah berkoherensi tinggi (target titik, tepi yang kuat) disaring secara minimal; wilayah berkoherensi rendah (noise speckle, batas yang lemah) disaring secara agresif. Estimasi varians speckle memengaruhi keluaran: estimasi yang akurat memerlukan piksel homogen yang memadai; varians yang diestimasi terlalu rendah menghasilkan penghalusan yang kurang; varians yang diestimasi terlalu tinggi menyebabkan penghalusan berlebihan. Ukuran jendela mengendalikan resolusi pengukuran koherensi: jendela kecil (3×3) mempertahankan detail halus; jendela besar (7×7) meningkatkan estimasi varians tetapi berisiko kehilangan detail. Penskalaan keluaran sesuai dengan masukan; visualisasi logaritmik meningkatkan visibilitas. Pengurangan noise tipikal mencapai penurunan varians 5-10 dB bergantung pada jumlah look. Pantau histogram keluaran untuk sisa tanda speckle; distribusi yang halus menunjukkan penyaringan yang memadai. Artefak mencakup potensi pengaburan tepi di wilayah berkoherensi lemah dan bias arah pada fitur linear. Terapkan secara strategis dalam klasifikasi SAR yang memerlukan penekanan speckle sambil mempertahankan integritas fitur klasifikasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Setengah lebar inklusi intensitas di sekitar nilai pusat (default 10.0)."
              },
              "m_value": {
                "label": "Nilai M",
                "description": "Jumlah sampel dalam rentang minimum sebelum perata-rataan cadangan (default 5.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "line_detection_filter": {
            "name": "Filter deteksi garis",
            "description": "Filter deteksi garis adalah detektor tepi khusus yang dirancang untuk menonjolkan fitur linear—jalan, sungai, jalur listrik, dan kelurusan geologis—pada empat arah utama (horizontal, vertikal, dan kedua diagonal) dengan menerapkan kernel konvolusi terarah yang dioptimalkan untuk konektivitas dan kontinuitas garis. Filter ini menggunakan kernel 3×3 yang menonjolkan struktur linear yang sejajar dengan setiap arah utama sambil menekan noise tegak lurus dan variasi fitur acak. Pendekatan terarah ini memisahkan deteksi berdasarkan orientasi, sehingga memungkinkan aplikasi lanjutan membedakan infrastruktur horizontal (pipa, batas lahan) dari struktur vertikal (barisan pohon, koridor utilitas). Fitur utama mencakup dekomposisi multi-arah yang menghasilkan band besaran dan arah yang terpisah, penyetelan sensitivitas adaptif untuk variasi lebar dan kontras garis, dan kinerja luar biasa pada fitur linear halus yang tertanam dalam medan yang kompleks. Kasus penggunaan mencakup pemetaan infrastruktur (jalan, rel kereta, jalur listrik), ekstraksi fitur alami (sungai, punggungan, sesar), dan delineasi batas penggunaan lahan. Aplikasinya mencakup prapemrosesan konversi vektor untuk digitasi kadastral, ekstraksi jaringan transportasi dari ortofotografi, pemetaan struktur geologis dari citra satelit, dan pengenalan pola dalam analisis penginderaan jauh. Interpretasi keluaran memerlukan pemahaman bahwa setiap komponen arah mengungkap kekuatan garis pada orientasi spesifik tersebut—periksa keempat keluaran arah utama untuk mengidentifikasi arah fitur yang dominan. Nilai besaran yang lebih tinggi menunjukkan kontinuitas garis yang lebih kuat; nilai rendah mengindikasikan noise atau putusnya garis. Keluaran secara alami bersifat jarang, hanya menyoroti piksel yang merepresentasikan fitur linear; area latar belakang tetap mendekati nol. Keluaran multi-arah memungkinkan pasca-klasifikasi yang membedakan jalan (biasanya horizontal/vertikal di area terbangun) dari kelurusan alami (orientasi sembarang). Gabungkan komponen arah untuk menghasilkan peta garis terpadu atau analisis setiap arah secara terpisah untuk pemetaan struktur berorientasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "variant": {
                "label": "Varian",
                "description": "Varian arah garis: v, h, 45, atau 135."
              },
              "abs_values": {
                "label": "Nilai absolut",
                "description": "Jika true, keluarkan nilai respons absolut."
              },
              "clip_tails": {
                "label": "Potong ekor",
                "description": "Persen pemotongan ekor simetris opsional (0-40)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "line_thinning": {
            "name": "Penipisan garis",
            "description": "Mereduksi fitur raster biner yang terhubung menjadi garis kerangka selebar satu sel.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "lidar_ground_point_filter": {
            "name": "Filter titik tanah LiDAR",
            "description": "Memisahkan medan dari titik non-tanah: klasifikasi/penyaringan berbasis kemiringan menggunakan geometri bidang lokal dan ambang batas ketinggian. Segmentasi tanah yang efisien.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius pencarian ketetanggaan (default 2.0)."
              },
              "min_neighbours": {
                "label": "Tetangga minimum",
                "description": "Target tetangga minimum (default 0)."
              },
              "slope_threshold": {
                "label": "Ambang kemiringan",
                "description": "Ambang kemiringan dalam derajat (default 45.0, maks 88)."
              },
              "height_threshold": {
                "label": "Ambang tinggi",
                "description": "Pemisahan vertikal minimum untuk menandai non-medan (default 1.0)."
              },
              "classify": {
                "label": "Klasifikasikan",
                "description": "Jika true klasifikasikan titik (tanah=2, non-medan=1); jika tidak, saring titik non-medan."
              },
              "slope_norm": {
                "label": "Normalisasi kemiringan",
                "description": "Jika true, terapkan normalisasi medan top-hat sebelum pengujian kemiringan (default true)."
              },
              "height_above_ground": {
                "label": "Tinggi di atas tanah",
                "description": "Jika true, keluarkan nilai z sebagai tinggi lokal di atas tetangga lebih rendah terdekat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional untuk mode masukan tunggal."
              }
            }
          },
          "majority_filter": {
            "name": "Filter mayoritas",
            "description": "Menghitung modus jendela bergerak (nilai/kelas yang paling sering muncul) untuk setiap piksel. Filter non-linear yang mempertahankan batas kategorikal dan pola dominan. Sangat berguna untuk citra terklasifikasi yang keluarannya harus tetap berada dalam himpunan kelas asli (tidak seperti filter rata-rata yang menghasilkan nilai interpolasi). Penting untuk pembersihan morfologis keluaran klasifikasi.\n\nFilter mayoritas adalah padanan berbasis modus dari filter median. Untuk data kategorikal (citra terklasifikasi, tutupan lahan), filter mayoritas mempertahankan definisi kelas sambil menghaluskan derau. Untuk data kontinu, filter mayoritas dapat mengungkap puncak lokal dalam distribusi nilai. Sering diikuti oleh eliminasi kelas minoritas (pembersihan pascaklasifikasi) untuk menghilangkan artefak klasifikasi \"salt-and-pepper\".\n\nAplikasi: (1) Penghalusan pascaklasifikasi (menghilangkan petak kelas kecil yang palsu), (2) Peta kelas mayoritas dari beberapa keluaran klasifikasi, (3) Pembersihan data vektor (disagregasi kelas), (4) Penekanan derau pada citra hasil pengambangan, (5) Penghalusan atribut pada keluaran segmentasi. Alur kerja umum: klasifikasi→filter mayoritas→eliminasi minoritas→peta akhir yang telah dibersihkan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "maximum_filter": {
            "name": "Filter maksimum",
            "description": "Menghitung nilai maksimum jendela bergerak, mengungkap puncak dan punggungan lokal. Operator dilasi dalam pengolahan citra morfologis. Berguna untuk mendeteksi puncak, garis punggungan, dan fitur beramplitudo maksimum. Sensitif terhadap satu pencilan (satu nilai tinggi di jendela menghasilkan keluaran tinggi).\n\nFilter maksimum adalah operator morfologis \"dilasi\"—memperluas wilayah terang dan menyusutkan wilayah gelap. Bila diterapkan berulang kali (dilasi multi-lintasan), menghasilkan puncak yang dihaluskan dan fitur terisolasi membesar mengisi ketetanggaannya. Dikombinasikan dengan filter minimum, memungkinkan closing (dilasi lalu erosi) dan opening (erosi lalu dilasi). Penting untuk deteksi fitur morfologis dan analisis multiskala.\n\nAplikasi: (1) Dilasi morfologis untuk penyaringan berbasis ukuran, (2) Closing melalui dilasi→erosi untuk mengisi lubang kecil, (3) Identifikasi puncak/punggungan pada medan dan citra, (4) Tingkat plafon lokal pada batimetri/DEM, (5) Analisis fitur multiskala (bandingkan dilasi antar skala). Alur kerja umum: maksimum→perbandingan dengan minimum→closing atau opening tergantung jenis fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "mean_filter": {
            "name": "Filter rata-rata",
            "description": "Menghitung rata-rata jendela bergerak untuk setiap piksel. Operasi penghalusan dasar yang mengurangi derau lokal sambil mengaburkan transisi tajam. Keluaran merepresentasikan tendensi sentral lokal. Banyak digunakan untuk prapemrosesan, pengurangan derau, dan analisis multiskala.\n\nFilter rata-rata adalah operasi penghalusan low-pass yang paling umum. Sangat sensitif terhadap pencilan (nilai ekstrem dapat mendistorsi hasil), sehingga filter median lebih disarankan untuk data yang berderau. Efisien secara komputasi. Ukuran filter mengendalikan tingkat penghalusan: kecil (3×3) mempertahankan detail, besar (31×31+) menghasilkan permukaan yang sangat halus. Sering diterapkan secara iteratif atau pada beberapa skala untuk analisis multiresolusi.\n\nAplikasi: (1) Pengurangan derau dasar, (2) Prapemrosesan sebelum deteksi fitur (menghaluskan positif palsu), (3) Analisis multiskala (terapkan pada 3×3, 11×11, 31×31), (4) Penghalusan temporal (menggabungkan adegan), (5) Dasar bagi operasi statistik lainnya. Bandingkan dengan median (non-linear, mempertahankan tepi) untuk pelestarian tepi yang lebih baik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "median_filter": {
            "name": "Filter median",
            "description": "Menghitung nilai median jendela bergerak untuk setiap piksel, menggantinya dengan persentil ke-50 dari ketetanggaan. Filter derau yang tangguh dan mempertahankan tepi (non-linear). Sangat efektif untuk menghilangkan derau impuls (salt-and-pepper) sambil mempertahankan batas yang tajam. Nilai keluaran adalah nilai piksel aktual dari ketetanggaan (bukan hasil interpolasi).\n\nFilter median bersifat non-linear—keunggulan penting dibandingkan filter rata-rata untuk pengurangan derau karena tidak menciptakan nilai baru atau mengaburkan tepi. Ukuran filter yang besar menghaluskan secara kuat sambil mempertahankan transisi tajam. Banyak digunakan dalam penginderaan jauh, pencitraan medis, dan pengolahan citra SAR. Biaya komputasi meningkat seiring ukuran filter, tetapi umumnya lebih cepat daripada filter bilateral atau guided.\n\nAplikasi: (1) Pengurangan speckle citra SAR (terutama efektif untuk koherensi fase), (2) Penghilangan derau salt-and-pepper, (3) Prapemrosesan sebelum deteksi tepi (mengurangi tepi palsu), (4) Pelestarian batas dalam prapemrosesan klasifikasi, (5) Koreksi radiometrik untuk nilai pencilan. Alur kerja umum: terapkan median→keluaran dengan tepi yang diperkuat→ambang batas untuk ekstraksi fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Digit signifikan",
                "description": "Jumlah digit signifikan yang digunakan untuk penyaringan peringkat terkuantisasi (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "minimum_filter": {
            "name": "Filter minimum",
            "description": "Menghitung nilai minimum jendela bergerak, mengungkap titik rendah dan palung lokal. Operator erosi dalam pengolahan citra morfologis. Berguna untuk mendeteksi dasar lembah, cekungan, dan fitur berketinggian minimum. Sensitif terhadap satu pencilan (satu nilai rendah di jendela menghasilkan keluaran rendah).\n\nFilter minimum adalah operator morfologis \"erosi\"—menyusutkan wilayah terang dan memperluas wilayah gelap. Bila diterapkan berulang kali (erosi multi-lintasan), menghasilkan lembah yang dihaluskan dan fitur terisolasi menghilang. Dikombinasikan dengan filter maksimum (dilasi), memungkinkan operasi opening (erosi lalu dilasi) dan closing (dilasi lalu erosi). Sering digunakan dalam dekomposisi multiskala: bandingkan minimum pada 3×3, 11×11, 31×31 untuk mengidentifikasi skala fitur.\n\nAplikasi: (1) Erosi morfologis untuk penyaringan berbasis ukuran, (2) Opening melalui erosi→dilasi untuk menghilangkan objek derau kecil, (3) Identifikasi cekungan/lembah pada medan, (4) Tingkat dasar lokal pada batimetri/DEM, (5) Analisis fitur multiskala (bandingkan erosi antar skala). Alur kerja umum: minimum→perbandingan dengan maksimum→opening atau closing tergantung jenis fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "non_local_means_filter": {
            "name": "Filter non-local means",
            "description": "Filter non-local means melakukan penghilangan derau yang kuat dengan merata-ratakan patch serupa yang diidentifikasi di seluruh citra, bukan piksel tetangga, memanfaatkan kemiripan-diri citra untuk menekan derau sambil mempertahankan struktur. Implementasinya mengidentifikasi patch yang mirip dengan setiap patch target melalui jarak Euclidean di ruang patch, memberi bobot patch serupa secara eksponensial berdasarkan kemiripan, dan merata-ratakan patch berbobot. Algoritme menghitung: Fᵢ = (1/Z) Σⱼ exp(-d(Pᵢ, Pⱼ)²/h²) · Iⱼ, dengan d mengukur jarak patch, h mengendalikan bandwidth, dan Z menormalkan. Fitur utama meliputi penghilangan derau yang unggul melalui pencarian kemiripan alih-alih hanya kedekatan spasial, efektivitas pada tekstur kompleks dan detail halus, penerapan pada jenis data apa pun, serta kinerja yang terbukti pada citra medis, satelit, dan fotografi. Filter non-local means unggul dalam restorasi citra satelit terperinci yang mempertahankan tekstur dan struktur halus, perata-rataan tumpukan multitemporal untuk persiapan deteksi perubahan, penghilangan derau data survei yang sangat berderau (ultrasonik, hiperspektral), dan peningkatan citra survei arkeologi/udara. Interpretasi keluaran memerlukan pemahaman bahwa wilayah serupa di seluruh citra berkontribusi pada setiap piksel keluaran; wilayah yang secara lokal tidak serupa berkontribusi sangat kecil. Ukuran patch mengendalikan pelestarian fitur (patch lebih besar = hasil lebih halus, patch lebih kecil = lebih banyak detail); bandwidth h mengendalikan pembobotan kemiripan (h lebih besar = lebih banyak patch disertakan, h lebih kecil = persyaratan kemiripan lebih ketat). Rentang keluaran sama dengan masukan; statistik bergeser ke arah rata-rata regional sementara struktur halus tetap ada. Biaya komputasi bertambah seiring ukuran citra dan radius patch; eksekusi umumnya memerlukan waktu pemrosesan yang cukup lama untuk citra berukuran besar. Pantau perkembangan penyaringan melalui PSNR atau inspeksi visual. Artefak umum meliputi penghalusan berlebih pada tekstur halus (tingkatkan ukuran patch dengan hati-hati) dan penghalusan yang kurang di wilayah berderau tinggi (tingkatkan bandwidth). Terapkan secara strategis dalam alur kerja yang memerlukan pengurangan derau maksimum sambil mempertahankan fitur berskala halus.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius jendela pencarian dalam piksel (default 5)."
              },
              "patch_radius": {
                "label": "Radius patch",
                "description": "Radius patch dalam piksel (default 1)."
              },
              "h": {
                "label": "H",
                "description": "Parameter kekuatan penyaringan (default 10.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "opening": {
            "name": "Pembukaan morfologi",
            "description": "Melakukan operasi opening morfologis menggunakan elemen penstruktur persegi panjang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan ganjil (default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan ganjil (default sama dengan filter_size_x)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "olympic_filter": {
            "name": "Filter olimpik",
            "description": "Filter Olympic menerapkan penghalusan berbasis peringkat dengan membuang satu nilai tertinggi dan satu nilai terendah dari setiap ketetanggaan piksel, lalu merata-ratakan piksel yang tersisa. Pendekatan penyaringan yang tangguh ini menghilangkan pencilan ekstrem (kemungkinan derau atau nilai palsu) sambil mempertahankan tendensi sentral. Formulasi matematis: F = (1/(N-2)) Σ(I_sorted[2:N-1]), dengan nilai ketetanggaan terurut tidak menyertakan nilai tertinggi dan terendah. Implementasinya memerlukan pengurutan ketetanggaan kecil (efisien secara komputasi) tetapi menghasilkan pengurangan derau yang efektif. Fitur utama meliputi strategi penghilangan pencilan yang sederhana, pengurangan derau salt-pepper yang efektif, penyaringan yang peka tepi (tepi sering tampak sebagai nilai ekstrem), dan penerapan pada jenis data apa pun. Filter Olympic unggul dalam prapemrosesan citra satelit optis (menghilangkan piksel awan terang dan bayangan gelap yang terisolasi), penghalusan DEM untuk mengurangi artefak derau survei, penghilangan derau citra termal (menghilangkan pencilan sensor), dan prapemrosesan citra radar. Interpretasi keluaran menunjukkan bahwa distribusi derau simetris (jumlah pencilan tinggi/rendah yang sama) tersaring secara simetris; distribusi miring (lebih banyak nilai tinggi atau rendah) menghasilkan penyaringan berarah. Ukuran ketetanggaan mengendalikan tingkat penghalusan: jendela 3×3 membuang 2 nilai ekstrem dari 9 piksel (penyaringan ringan); jendela yang lebih besar menyaring lebih agresif. Nilai keluaran tetap berada dalam rentang masukan (keluaran adalah rata-rata nilai ketetanggaan aktual). Statistik menunjukkan pengurangan varians terkendali yang secara khusus menyasar pencilan. Citra selisih (asli - tersaring) menyoroti pencilan yang dibuang; wilayah bernilai tinggi yang terkonsentrasi menunjukkan isolasi derau yang efektif. Artefak umum meliputi penghalusan yang tidak memadai jika frekuensi pencilan rendah dan pengaburan tepi jika piksel tepi secara konsisten berperingkat ekstrem. Beberapa iterasi memungkinkan penghalusan progresif: satu lintasan memberikan pengurangan derau; lintasan berulang memperkuat penghalusan. Terapkan dalam alur kerja pengurangan derau cepat yang memerlukan penyaringan sederhana dan mudah diinterpretasikan, terutama efektif untuk derau salt-pepper pada mosaik multisensor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "percentile_filter": {
            "name": "Filter persentil",
            "description": "Menghitung peringkat persentil lokal dari elevasi/nilai sel pusat di dalam jendela bergerak (0-100%). Analog dengan Elevation Percentile untuk data raster generik. Mengukur posisi relatif: keluaran=0 menunjukkan minimum lokal, keluaran=100 menunjukkan maksimum lokal, keluaran=50 menunjukkan median. Mengungkap posisi lokal dalam distribusi secara independen dari nilai absolut.\n\nFilter persentil memungkinkan analisis relatif terhadap posisi. Berguna untuk analisis berlapis: sel dengan peringkat persentil tinggi (>80) di semua band menunjukkan fitur \"terang\"; persentil rendah (<20) menunjukkan fitur \"gelap\". Sangat berguna untuk prapemrosesan klasifikasi—memisahkan posisi medan/tekstur, bukan hanya besarannya. Sering dikombinasikan dengan filter statistik untuk karakterisasi multimetrik.\n\nAplikasi: (1) Klasifikasi kecerahan/kegelapan relatif, (2) Karakterisasi tekstur (varians persentil tinggi = kasar, varians rendah = halus), (3) Peningkatan kontras lokal (normalisasi berbasis persentil), (4) Identifikasi bentuk lahan serupa dengan persentil elevasi, (5) Analisis tekstur multiband (terapkan persentil pada setiap band, bandingkan polanya).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Digit signifikan",
                "description": "Jumlah digit signifikan yang digunakan untuk penyaringan peringkat terkuantisasi (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "range_filter": {
            "name": "Filter rentang",
            "description": "Menghitung rentang jendela bergerak (maksimum - minimum), mengungkap sebaran nilai lokal yang independen dari tingkat rata-rata. Metrik heterogenitas sederhana: rentang tinggi = nilai beragam, rentang rendah = nilai seragam. Lebih sederhana daripada simpangan baku tetapi sama informatifnya untuk banyak aplikasi, dan lebih tangguh terhadap bentuk distribusi.\n\nRentang efisien secara komputasi (hanya memerlukan dua perbandingan). Sangat berguna untuk mendeteksi transisi/batas, dengan lonjakan rentang menunjukkan zona kontras. Kurang sensitif terhadap bentuk distribusi dibandingkan simpangan baku (simpangan baku menekankan pencilan, rentang hanya menggunakan nilai ekstrem). Rentang ternormalisasi (rentang/rata-rata) memungkinkan perbandingan antarband, sebagaimana koefisien variasi memungkinkan perbandingan antarskala.\n\nAplikasi: (1) Pemetaan tekstur/kontras (interpretasi mudah: rentang tinggi = kasar/kontras), (2) Deteksi batas melalui puncak rentang, (3) Alternatif simpangan baku yang efisien secara komputasi, (4) Kontrol kualitas (latar belakang seragam berentang rendah, area fitur berentang tinggi), (5) Kekasaran/variabilitas pada data generik. Alur kerja umum: hitung rentang→ambang batas untuk mengidentifikasi zona transisi→vektorisasi batas berentang tinggi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "remove_spurs": {
            "name": "Hapus taji",
            "description": "Menghapus artefak taji pendek dari fitur raster biner melalui pemangkasan iteratif.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "max_iterations": {
                "label": "Iterasi maksimum",
                "description": "Iterasi pemangkasan maksimum (default 10)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "savitzky_golay_2d_filter": {
            "name": "Filter Savitzky-Golay 2D",
            "description": "Melakukan penghalusan Savitzky-Golay 2D—filter berbasis pencocokan polinomial yang mempertahankan fitur polinomial lokal. Mencocokkan polinomial lokal ke ketetanggaan, lalu mengganti nilai pusat dengan nilai hasil pencocokan. Mempertahankan puncak/lembah lebih baik daripada Gaussian. Berguna untuk data berderau yang pelestarian fiturnya penting. Pengaburan lebih sedikit daripada Gaussian untuk polinomial berorde rendah; penghalusan meningkat seiring orde polinomial. Filter Savitzky-Golay mencocokkan polinomial lokal (biasanya kuadratik/kubik) dengan kuadrat terkecil ke ketetanggaan. Nilai pusat diganti dengan nilai polinomial. Berbeda dari median/Gaussian—mempertahankan fitur yang tampak sebagai struktur polinomial (puncak, lembah, punggungan). Mudah secara komputasi tetapi lebih lambat daripada konvolusi sederhana. Orde polinomial mengendalikan kompromi antara penghalusan dan pelestarian. Aplikasi: (1) Menghaluskan data berderau sambil mempertahankan struktur puncak, (2) Pemrosesan grid elevasi (mempertahankan topografi punggungan/lembah), (3) Penghalusan data spektral (mempertahankan fitur serapan), (4) Prapemrosesan yang mempertahankan fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "window_size": {
                "label": "Ukuran jendela",
                "description": "Ukuran jendela ganjil (default 5). Saat ini mendukung 5 untuk orde polinomial 2."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "scharr_filter": {
            "name": "Filter Scharr",
            "description": "Filter Scharr adalah operator deteksi tepi yang menyempurnakan filter Sobel dengan menggunakan koefisien kernel yang dioptimalkan, yang dirancang khusus untuk mengurangi bias arah dan memberikan invariansi rotasi yang lebih unggul. Operator Scharr menggunakan kernel konvolusi 3×3 dengan koefisien bilangan bulat (3, 10, 3) yang dioptimalkan secara empiris untuk arah tepi 0°, 45°, 90°, dan 135°, menghasilkan estimasi gradien yang lebih akurat daripada filter Sobel tradisional, terutama untuk fitur melingkar dan tepi yang terotasi. Filter ini menghitung gradien horizontal dan magnitudo gradien secara bersamaan, memungkinkan lokalisasi tepi yang tangguh. Keunggulan utama meliputi akurasi yang lebih baik untuk gradien berarah, bias rotasi yang lebih kecil dibandingkan Sobel, dan komputasi kernel 3×3 yang efisien dengan overhead memori minimal. Keluaran mencakup magnitudo dan komponen arah opsional. Filter Scharr unggul dalam alur kerja ekstraksi fitur, deteksi batas, dan penjaminan kualitas yang memerlukan akurasi arah tinggi. Kasus penggunaan meliputi ekstraksi jejak bangunan dari citra udara, deteksi jaringan jalan, delineasi batas perairan dengan distorsi minimal, dan identifikasi kelurusan geologi pada data satelit. Filter ini berkinerja sangat baik dalam aplikasi pemetaan perkotaan, deteksi batas lahan pertanian, dan navigasi otonom. Interpretasi keluaran memerlukan pemahaman bahwa nilai magnitudo merepresentasikan kekuatan tepi—nilai yang lebih tinggi menunjukkan transisi yang lebih tajam antara kelas spektral yang berbeda. Komponen arah mengungkap orientasi tepi yang dominan (horizontal, diagonal, atau vertikal), berguna untuk analisis kelurusan. Untuk raster multiband, terapkan secara terpisah pada setiap band atau gunakan indeks hasil perhitungan. Nilai latar belakang tampak gelap pada keluaran; tepi yang kuat tampak terang. Perbandingan RMSE dengan tepi referensi memvalidasi kinerja filter. Skalakan keluaran ke 0-255 untuk visualisasi standar atau pertahankan floating-point untuk analisis kuantitatif.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "clip_tails": {
                "label": "Potong ekor",
                "description": "Persen pemotongan ekor simetris opsional (0-40)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "standard_deviation_filter": {
            "name": "Filter simpangan baku",
            "description": "Menghitung simpangan baku jendela bergerak, mengukur variasi/dispersi nilai lokal. Simpangan baku tinggi = nilai beragam (kasar/heterogen), simpangan baku rendah = nilai seragam (halus/homogen). Mengungkap pola tekstur, kekasaran, dan variabilitas. Penting untuk kuantifikasi ketidakpastian dan penilaian kualitas.\n\nSimpangan baku lebih tangguh daripada rentang untuk mengkarakterisasi variasi lokal (tidak bias oleh satu pencilan). Memungkinkan klasifikasi area berdasarkan tekstur: lereng curam (simpangan baku tinggi), lereng landai (simpangan baku rendah); hutan (simpangan baku tinggi), padang rumput (simpangan baku rendah). Sering dinormalisasi (koefisien variasi = simpangan baku/rata-rata) agar dapat dibandingkan antar data dengan rentang nilai berbeda. Dapat dihitung dari histogram (varians = rata-rata kuadrat - kuadrat rata-rata).\n\nAplikasi: (1) Pemetaan tekstur (analisis kekasaran/heterogenitas), (2) Kuantifikasi ketidakpastian pada data berderau, (3) Penilaian kualitas (latar belakang seragam = simpangan baku rendah, area kaya fitur = tinggi), (4) Keyakinan klasifikasi (simpangan baku tinggi = kelas campuran/tidak pasti), (5) Heterogenitas multiband (tumpuk simpangan baku dari setiap band). Alur kerja umum: hitung simpangan baku pada beberapa skala→bandingkan perubahan pola antarskala→identifikasi skala karakteristik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "thicken_raster_line": {
            "name": "Pertebal garis raster",
            "description": "Menebalkan segmen garis raster diagonal untuk mencegah kebocoran diagonal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "tophat_transform": {
            "name": "Transformasi top-hat",
            "description": "Melakukan transformasi top-hat morfologis putih atau hitam.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan ganjil (default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan ganjil (default sama dengan filter_size_x)."
              },
              "variant": {
                "label": "Varian",
                "description": "Varian top-hat: white (default) atau black."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "total_filter": {
            "name": "Filter total",
            "description": "Menghitung jumlah (total) jendela bergerak dari nilai piksel di ketetanggaan. Mengintegrasikan kekuatan sinyal lokal. Penerapannya bergantung pada semantik data: untuk hitungan/kerapatan, total mengungkap pola kerapatan lokal; untuk curah hujan, total mengungkap akumulasi skala cekungan; untuk reflektansi, total sebanding dengan ukuran target lokal.\n\nFilter total memiliki interpretasi yang berbeda menurut domain. Pada data hitungan/populasi, total mengungkap pengelompokan dan hotspot. Pada data elevasi, total jarang digunakan (jumlah tidak memiliki makna geomorfologis). Dalam analisis spektral, total dapat mengungkap kekuatan sinyal multiband. Sering digunakan sebagai langkah perantara (misalnya, dibagi dengan jumlah sel ketetanggaan untuk menghitung rata-rata, atau dibandingkan dengan total tetangga untuk deteksi heterogenitas lokal).\n\nAplikasi: (1) Deteksi hotspot pada data hitungan (total tinggi = klaster), (2) Model akumulasi cekungan/DAS, (3) Integrasi pengukuran terdistribusi, (4) Perhitungan perantara (total/N = rata-rata), (5) Agregasi kekuatan sinyal pada mosaik multisensor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar jendela dalam piksel (bilangan bulat ganjil, default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi jendela dalam piksel (bilangan bulat ganjil, default = filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "unsharp_masking": {
            "name": "Unsharp masking",
            "description": "Unsharp masking melakukan penajaman citra dengan mengurangkan versi yang dihaluskan (low-pass) dari citra asli, sehingga memperkuat tepi dan detail halus. Transformasi matematisnya adalah I_sharp = I_original + w·(I_original - I_smooth), dengan w adalah bobot penajaman yang mengendalikan kekuatan peningkatan. Proses ini mengisolasi komponen berfrekuensi tinggi dan memperkuatnya, secara efektif memisahkan detail dari variasi tonal yang luas. Fitur utama meliputi kendali parameter yang fleksibel (radius blur dan bobot memungkinkan kendali detail), efisiensi komputasi melalui penggunaan ulang penghalusan Gaussian, peningkatan yang mudah diinterpretasikan (bobot=0 menghasilkan citra asli; bobot=1 menghasilkan high-pass sejati; bobot>1 memberikan penajaman agresif), dan efektivitas pada data multispektral. Unsharp masking unggul dalam persiapan citra satelit untuk interpretasi manual (memperkuat medan, vegetasi, dan infrastruktur yang samar), peningkatan produk turunan LiDAR (menajamkan DEM, metrik vegetasi), peningkatan kualitas ortofoto untuk visibilitas fitur, dan peningkatan citra survei arkeologi. Interpretasi keluaran memerlukan pemahaman bahwa nilai hasil penajaman terkonsentrasi pada tepi; wilayah homogen tetap tidak berubah. Parameter bobot mengendalikan besaran peningkatan: w=0.5-1.0 memberikan peningkatan halus; w=1.0-2.0 memberikan penajaman sedang; w>2.0 menghasilkan hasil agresif yang berpotensi penuh artefak. Radius blur mengendalikan skala fitur: radius lebih kecil (3-5 piksel) memperkuat tekstur halus; radius lebih besar (10-20 piksel) memperkuat fitur berukuran sedang. Nilai keluaran dapat melampaui rentang masukan; pemotongan (clipping) biasanya diperlukan. Artefak meliputi halo di sekitar tepi yang kuat (bobot atau radius lebih besar = lebih menonjol), derau yang diperkuat jika sumbernya berderau, dan potensi warna palsu pada penajaman multispektral. Verifikasi peningkatan melalui citra selisih. Terapkan secara selektif dalam alur kerja visualisasi; hindari sebelum analisis otomatis yang sensitif terhadap perubahan rentang keluaran.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Sigma Gaussian yang digunakan oleh masker blur (0.5-20.0, default 0.75)."
              },
              "amount": {
                "label": "Jumlah",
                "description": "Pengali jumlah penajaman yang diterapkan pada residu (default 100.0)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Residu absolut minimum untuk dipertajam (default 0.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "user_defined_weights_filter": {
            "name": "Filter bobot tentuan pengguna",
            "description": "Filter bobot tentuan pengguna memberikan fleksibilitas maksimum untuk analisis konvolusi khusus dengan menerima koefisien berbobot arbitrer untuk piksel ketetanggaan, memungkinkan penerapan operator khusus, kernel spesifik domain, dan algoritme tingkat riset tanpa memerlukan modifikasi alat atau perangkat lunak khusus. Pengguna menentukan dimensi kernel (biasanya 3×3 atau 5×5), menetapkan bobot floating-point untuk setiap posisi, dan secara opsional menentukan metode penanganan tepi (refleksi, pembungkusan, pengisian konstan). Filter ini menerapkan kernel khusus di seluruh raster melalui matematika konvolusi standar: setiap piksel keluaran sama dengan jumlah tetangga berbobot, sehingga memungkinkan filter pengolahan citra tradisional maupun kernel analitis khusus. Fitur utama meliputi kustomisasi penuh untuk aplikasi riset, dukungan untuk operasi peningkatan maupun analisis, kompatibilitas dengan kernel ternormalisasi dan tidak ternormalisasi, serta pelestarian presisi floating-point di seluruh komputasi. Kasus penggunaan mencakup penyaringan spasial tingkat lanjut untuk indeks spektral khusus, penerapan operator eksperimental untuk validasi algoritme, kernel analisis tekstur khusus, agregasi ketetanggaan berbobot untuk analisis multikriteria, dan penerapan kernel standar di berbagai dataset. Aplikasi meliputi pembuatan prototipe riset akademik, evaluasi algoritme industri, kustomisasi regional pipeline pemrosesan, dan studi perbandingan kinerja. Interpretasi keluaran sepenuhnya bergantung pada koefisien yang ditentukan pengguna; kernel yang berbeda menghasilkan hasil yang secara fundamental berbeda. Kernel ternormalisasi (jumlah bobot sama dengan 1.0) mempertahankan rentang nilai sehingga berguna untuk penghalusan; kernel tidak ternormalisasi (biasanya berjumlah nol) menekankan perbedaan sehingga berguna untuk deteksi tepi/turunan. Pengguna harus memvalidasi sifat kernel—tanda koefisien, besaran, dan jumlah—sebelum penerapan produksi. Dokumentasi spesifikasi kernel penting untuk alur kerja yang dapat direproduksi. Rentang nilai keluaran bergantung pada desain kernel; dokumentasi harus menyebutkan karakteristik keluaran yang diharapkan dan persyaratan penskalaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "weights": {
                "label": "Bobot",
                "description": "Bobot kernel 2D sebagai array bersarang."
              },
              "kernel_center": {
                "label": "Pusat kernel",
                "description": "Mode pusat kernel: center, upper-left, upper-right, lower-left, lower-right."
              },
              "normalize_weights": {
                "label": "Normalisasi bobot",
                "description": "Jika true, normalisasi berdasarkan jumlah lokal bobot aktif."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "wiener_filter": {
            "name": "Filter Wiener",
            "description": "Filter Wiener melakukan pengurangan derau adaptif dengan meminimalkan galat kuadrat rata-rata antara keluaran tersaring dan sinyal sebenarnya, dengan asumsi sifat statistik sinyal dan derau diketahui. Implementasinya mengestimasi varians sinyal dan derau lokal di dalam jendela bergerak, lalu menghitung koefisien filter yang menyeimbangkan penekanan derau dengan pelestarian detail: F = μ + (σ² - σₙ²)/σ² · (I - μ), dengan μ adalah rata-rata lokal, σ² adalah varians sinyal, dan σₙ² adalah varians derau. Adaptasi berbasis data ini memastikan kekuatan penyaringan menyesuaikan karakteristik citra lokal. Fitur utama meliputi adaptasi otomatis terhadap statistik lokal (wilayah datar dihaluskan secara agresif; wilayah terperinci mempertahankan struktur), efektivitas yang terbukti pada citra optis dan SAR, parameter yang mudah diinterpretasikan berdasarkan asumsi model derau, dan kelayakan komputasi melalui aproksimasi yang dapat dipisahkan. Filter Wiener unggul dalam prapemrosesan citra satelit yang deraunya bervariasi secara spasial, pengurangan speckle SAR sambil mempertahankan target titik, data multispektral bebas speckle untuk pemetaan vegetasi, dan penghilangan derau fusi radar-optis. Interpretasi keluaran menunjukkan bahwa wilayah bervarians tinggi (terperinci) disaring secara minimal, sedangkan wilayah bervarians rendah (berderau) disaring secara agresif. Estimasi varians derau memengaruhi keluaran: varians derau yang diestimasi terlalu rendah menghasilkan penghalusan yang kurang; varians yang diestimasi terlalu tinggi menyebabkan penghalusan berlebih dan hilangnya detail. Rentang keluaran mendekati rentang masukan; periksa citra selisih (asli - tersaring) untuk memverifikasi pengurangan derau. Peak Signal-to-Noise Ratio (PSNR) dan Structural Similarity Index (SSIM) mengukur efektivitas penyaringan. Ambang batas varians lokal menunjukkan dampak pemrosesan: wilayah dengan rasio varians terdeteksi > 5 disaring secara substansial; rasio < 1 disaring secara minimal. Kesalahan umum meliputi estimasi varians derau yang tidak akurat (lakukan analisis dark-frame atau wilayah homogen untuk estimasi) dan pemilihan ukuran jendela yang memengaruhi lokalisasi. Terapkan sebelum klasifikasi atau ekstraksi fitur untuk mengurangi kesalahan klasifikasi kategori akibat derau.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius jendela lokal Wiener dalam piksel (default 2)."
              },
              "noise_variance": {
                "label": "Varians derau",
                "description": "Varians derau aditif opsional. Jika dihilangkan, diestimasi dari peta varians lokal."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "cloude_pottier_decomposition": {
            "name": "Dekomposisi Cloude-Pottier",
            "description": "Dekomposisi Cloude-Pottier mendiagonalisasi matriks koherensi dari data SAR kuad-polarimetrik, mengekstraksi nilai eigen dan vektor eigen yang mengkarakterisasi mekanisme hamburan. Entropi, anisotropi, dan sudut alfa rata-rata yang dihitung dari vektor eigen masing-masing mengkarakterisasi ketidakteraturan hamburan, dominansi mekanisme, dan jenis hamburan. Ruang parameter H-alpha memungkinkan klasifikasi mekanisme hamburan fisik yang independen dari variasi amplitudo, dengan memanfaatkan informasi fase polarimetrik. Fitur Utama: Dekomposisi SAR kuad-polarimetrik; pemanfaatan informasi fase; parameter hamburan yang bermakna secara fisik; memisahkan mekanisme hamburan; tangguh terhadap speckle amplitudo; memungkinkan klasifikasi dan interpretasi target. Kasus Penggunaan: Pengenalan target SAR; estimasi biomassa hutan; karakterisasi lahan basah; deteksi kapal/kendaraan; klasifikasi tutupan lahan; interpretasi data SAR polarimetrik. Interpretasi Keluaran: Keluaran mencakup entropi (tingkat ketidakteraturan; 0=hamburan teratur, 1=acak), anisotropi (dominansi mekanisme 0-1), dan sudut alfa (jenis hamburan: ~45°=dipol, ~30°=permukaan, ~60°=volume). Plot sebaran H-alpha mengungkap pola pengelompokan yang menunjukkan jenis hamburan. Pantulan ganda (perkotaan) menunjukkan alfa tinggi; hamburan permukaan (air) menunjukkan alfa rendah; hamburan volume (hutan) menunjukkan nilai menengah.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Raster matriks: diag3 [m11,m22,m33], full3x3 kompak [m11,m22,m33,m12,m13,m23], atau 9 raster penuh urutan baris."
              },
              "matrix_format": {
                "label": "Format matriks",
                "description": "Format matriks masukan: diag3 (default dengan 3 raster) atau full3x3."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster 3 band keluaran opsional [H, A, alpha_deg]."
              }
            }
          },
          "enhanced_lee_filter": {
            "name": "Filter Lee yang ditingkatkan",
            "description": "Filter Enhanced Lee menggabungkan model multiplikatif Lee dengan estimasi varians yang disempurnakan dan pemrosesan multiskala, mencapai pengurangan speckle yang unggul sambil mempertahankan detail halus dan tepi pada citra SAR. Implementasinya menggunakan statistik lokal yang dihitung melalui jendela berukuran adaptif, menyertakan deteksi tepi berbasis Laplacian, dan menerapkan parameter filter yang bervariasi secara spasial. Formulasi yang disempurnakan menerapkan: F = μ + w·(I - μ) dengan w menyesuaikan kedekatan terhadap tepi: w→0 di dekat tepi (penyaringan minimal), w→1 di wilayah homogen (penyaringan agresif). Fitur utama meliputi pemrosesan adaptif tepi (mempertahankan batas), adaptasi parameter multiskala, pelestarian target yang lebih baik dibandingkan Lee standar, dan efektivitas pada SAR berderau tinggi. Filter Enhanced Lee unggul pada adegan SAR kompleks dengan banyak fitur, aplikasi pemetaan banjir yang memerlukan lokalisasi tepi secara kritis, deteksi bangunan dari SAR perkotaan, dan analisis perubahan multitemporal. Interpretasi keluaran mengungkap pelestarian tepi melalui berkurangnya penyaringan di dekat transisi: piksel batas mempertahankan varians yang lebih besar daripada piksel yang jauh. Adaptasi multiskala terlihat melalui analisis histogram yang menunjukkan puncak-puncak jelas yang sesuai dengan kelas adegan. Rentang keluaran sama dengan masukan; perbandingan dengan Lee standar menunjukkan berkurangnya pengaburan tepi dan terjaganya ketajaman target. Kualitas deteksi tepi berdampak langsung pada keluaran: tepi yang kuat memungkinkan pelestarian batas yang baik; tepi yang lemah dapat menyebabkan penghalusan berlebih. Statistik menunjukkan pengurangan varians terkendali yang menyeimbangkan penekanan derau dengan pelestarian detail. Artefak umum meliputi potensi tampilan berblok jika transisi multiskala terlihat dan pelestarian berlebih jika deteksi tepi terlalu agresif. Pantau kualitas peta tepi untuk memvalidasi perilaku penyaringan. Terapkan dalam pipeline analisis SAR komprehensif yang mengharuskan banyak fitur dipertahankan dan tepi tetap tajam, terutama penting untuk prapemrosesan machine learning yang memerlukan data latih dengan batas fitur yang jelas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "enl": {
                "label": "ENL",
                "description": "Parameter jumlah look setara untuk pembobotan rasio sigma (default 4.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "freeman_durden_decomposition": {
            "name": "Dekomposisi Freeman-Durden",
            "description": "Dekomposisi Freeman-Durden mengkuantifikasi kontribusi mekanisme hamburan dari SAR kuad-polarimetrik melalui dekomposisi basis ortogonal menjadi komponen pantulan permukaan, pantulan ganda (perkotaan/dihedral), dan volume (vegetasi/media acak). Optimasi kuadrat terkecil non-negatif membatasi fraksi daya untuk memastikan realisabilitas fisik dan kemudahan interpretasi. Peta daya keluaran terkait langsung dengan sifat medan: dominansi permukaan yang tinggi menunjukkan tanah terbuka/air, pantulan ganda yang tinggi menunjukkan struktur perkotaan, volume yang tinggi menunjukkan hutan/vegetasi. Fitur Utama: Komponen hamburan yang dapat diinterpretasikan secara fisik; signature spesifik medan; optimasi terkendala; mendukung SAR kuad-polarimetrik; tangguh terhadap speckle; memungkinkan klasifikasi spesifik target. Kasus Penggunaan: Klasifikasi perkotaan-perdesaan; estimasi biomassa hutan; deteksi kelembapan tanah; deteksi banjir; pemantauan fenologi tanaman; pemetaan tutupan lahan. Interpretasi Keluaran: Daya permukaan menunjukkan pantulan spekular dari medan kering/air; daya pantulan ganda menunjukkan struktur buatan manusia/area perkotaan; daya volume menunjukkan vegetasi/hutan. Kombinasi komponen memungkinkan pembedaan tutupan lahan: volume tinggi + pantulan ganda rendah menunjukkan hutan; pantulan ganda tinggi + volume rendah menunjukkan perkotaan; permukaan/volume yang seimbang menunjukkan medan campuran.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Raster matriks: diag3 [m11,m22,m33], full3x3 kompak [m11,m22,m33,m12,m13,m23], atau 9 raster penuh urutan baris."
              },
              "matrix_format": {
                "label": "Format matriks",
                "description": "Format matriks masukan: diag3 (default dengan 3 raster) atau full3x3."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster 3 band keluaran opsional [surface, double_bounce, volume]."
              },
              "output_clip_mask": {
                "label": "Keluaran masker pemotongan",
                "description": "Raster masker pemotongan keluaran opsional (1 di mana pemotongan/renormalisasi non-fisik terjadi)."
              }
            }
          },
          "frost_filter": {
            "name": "Filter Frost",
            "description": "Filter Frost menerapkan pengurangan speckle SAR menggunakan model derau multiplikatif dan statistik lokal adaptif, yang dirancang khusus untuk citra radar dengan speckle yang mengikuti distribusi Gamma alih-alih derau Gaussian. Implementasinya menghitung rata-rata dan varians lokal, lalu menerapkan pembobotan multiplikatif adaptif: F = I · exp(-variance/(2·mean²)·distance²), dengan distance mengukur deviasi piksel dari rata-rata lokal. Formulasi ini mengurangi intensitas speckle secara berbanding terbalik dengan koherensi yang diestimasi. Fitur utama meliputi adaptasi khusus SAR (model derau multiplikatif, bukan aditif), pelestarian target titik dan tepi (fitur koheren), adaptasi berbasis varians lokal yang memungkinkan penyesuaian kekuatan, dan efektivitas yang terbukti pada data SAR single-pol dan multi-pol. Filter Frost unggul dalam prapemrosesan citra SAR untuk klasifikasi (pemantauan pertanian, pemetaan penggunaan lahan), fusi SAR-optis berbobot koherensi, pemetaan banjir dari radar saat tertutup awan, dan alur kerja deteksi perubahan synthetic aperture radar. Interpretasi keluaran menunjukkan bahwa wilayah bervarians tinggi (berpotensi target koheren) disaring secara minimal; wilayah bervarians rendah (didominasi speckle) disaring secara agresif. Rentang keluaran umumnya sama dengan masukan; penskalaan logaritmik (desibel) sering diterapkan sebelum atau sesudah penyaringan untuk visualisasi. Rasio varians terhadap rata-rata secara langsung mengendalikan kekuatan filter: rasio > 0.5 menunjukkan kemungkinan speckle; rasio < 0.1 mengindikasikan target koheren. Artefak keluaran meliputi potensi hilangnya detail jika estimasi varians tidak andal dan bias arah pada fitur yang berorientasi. Verifikasi melalui peta koherensi mengonfirmasi pelestarian tepi di zona berkoherensi tinggi. Pantau statistik keluaran: rata-rata harus stabil di seluruh iterasi penyaringan; varians harus menurun secara substansial. Terapkan sebelum klasifikasi untuk meningkatkan akurasi kategorikal. Kombinasikan dengan pascapemrosesan morfologis untuk memperhalus batas objek dan menghilangkan sisa bercak speckle.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius jendela lokal dalam piksel (default 2)."
              },
              "damping_factor": {
                "label": "Faktor redaman",
                "description": "Faktor redaman Frost yang mengendalikan peluruhan eksponensial (default 2.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "gamma_map_filter": {
            "name": "Filter Gamma MAP",
            "description": "Filter Gamma Map melakukan pengurangan speckle SAR menggunakan model statistik distribusi Gamma, secara eksplisit memperhitungkan karakteristik speckle multiplikatif sinyal radar melalui adaptasi parametrik. Implementasinya mengestimasi parameter distribusi Gamma lokal (bentuk α dan skala β) dari statistik citra, lalu menyaring melalui fungsi pembobotan yang mengikuti distribusi tersebut: F = I · [1 - (1-L/N)/(1 + L/N)·√(1 + N/L²)], dengan L adalah jumlah look ekuivalen (ukuran koherensi) dan N adalah parameter yang diestimasi. Fitur utama meliputi statistik SAR yang ketat secara teoretis (distribusi Gamma adalah standar untuk radar), estimasi jumlah look otomatis yang memerlukan masukan pengguna minimal, pelestarian tepi yang lebih unggul dibandingkan filter seragam, dan penerapan pada SAR single-look maupun multi-look. Filter Gamma Map unggul dalam penghilangan derau tumpukan SAR multitemporal untuk deteksi perubahan deret waktu, peningkatan koherensi fase SAR interferometrik (InSAR), prapemrosesan dekomposisi SAR polarimetrik, dan normalisasi backscatter SAR kehutanan. Interpretasi keluaran mengungkap bahwa kekuatan filter menyesuaikan koherensi adegan: wilayah berkoherensi tinggi (α besar) disaring secara lembut sehingga target terjaga; wilayah berkoherensi rendah (α kecil) disaring secara agresif sehingga speckle tertekan. Jumlah look ekuivalen L menunjukkan efektivitas penyaringan: L=1 (penyaringan minimal) mempertahankan semua detail; L>5 menghasilkan penghalusan yang substansial. Skala keluaran tetap dalam satuan masukan; konversi logaritmik memudahkan visualisasi. Pengurangan varians keluaran umumnya berkisar 50-80% tergantung karakter adegan dan pemilihan jumlah look. Pantau histogram keluaran untuk sisa signature speckle; distribusi bimodal mengindikasikan pemisahan komponen adegan yang baik. Artefak meliputi potensi pola bergaris pada fitur yang berorientasi atau sedikit degradasi tekstur jika L diestimasi terlalu tinggi. Validasi penyaringan terhadap data lapangan (ground truth) di area latih. Terapkan secara strategis dalam klasifikasi SAR polarimetrik atau penyaringan fase InSAR yang memerlukan peningkatan berbobot koherensi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius jendela lokal dalam piksel (default 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Jumlah look setara (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "h_alpha_wisart_classification": {
            "name": "Klasifikasi H-Alpha Wishart",
            "description": "Klasifikasi H/α/A-Wisart menggabungkan zonasi tanpa supervisi melalui partisi ruang parameter H/α/A dengan pengelompokan statistik Wishart untuk mengklasifikasikan data SAR polarimetrik secara otomatis ke dalam 9 zona yang bermakna secara fisik, sesuai dengan kelas mekanisme hamburan. Algoritme menerima parameter entropi (H), anisotropi (A), dan alfa (α) dari dekomposisi Cloude-Pottier dan mempartisi ruang fitur 3D (H,A,α) menjadi 9 wilayah menggunakan ambang batas tetap: Zona 1 (H rendah, α~20°) merepresentasikan pantulan Bragg pada permukaan kering; Zona 5 (H~0.7, α~45°) menunjukkan hamburan volume isotropik di hutan; Zona 9 (H tinggi, α~80°) merepresentasikan hamburan dihedral (pantulan ganda) dari struktur perkotaan. Di dalam setiap zona, pengelompokan Wishart secara opsional memperhalus klasifikasi dengan menghitung jarak statistik di ruang polarimetrik multivariat, sehingga meningkatkan pembedaan mekanisme yang serupa. Fitur utama meliputi klasifikasi otomatis tanpa supervisi yang tidak memerlukan sampel latih; 9 kelas yang dapat diinterpretasikan secara fisik dengan definisi terstandar sehingga memungkinkan perbandingan global; operasi mode ganda opsional (hanya ambang batas untuk kecepatan, ambang batas+Wishart untuk akurasi); serta metrik keyakinan bawaan berdasarkan jarak ke batas zona dan likelihood Wishart. Alat ini menerima citra (H,A,α) yang telah dihitung sebelumnya atau secara otomatis memanggil dekomposisi Cloude-Pottier jika matriks mentah diberikan. Kasus penggunaan utama mencakup segmentasi citra SAR dan pembuatan peta dari data polarimetrik, klasifikasi tanpa supervisi jenis tutupan lahan (air, pertanian, hutan, perkotaan) langsung dari matriks koherensi SAR, penilaian cepat kualitas data polarimetrik melalui distribusi okupansi zona, dan deteksi perubahan yang mengungkap transisi mekanisme hamburan yang menunjukkan perubahan tutupan lahan. Interpretasi keluaran: peta 9 kelas secara langsung berkorespondensi dengan jenis medan; zona dapat diagregasi menjadi kategori yang lebih luas (air/spekular = zona 1-2, vegetasi/volume = zona 4-6, perkotaan/dihedral = zona 7-9). Piksel tidak terklasifikasi (kelas 0) menunjukkan signature polarimetrik yang tidak biasa dan memerlukan penyelidikan.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster entropi (H) masukan dari dekomposisi Cloude-Pottier (rentang 0-1)."
              },
              "alpha_raster": {
                "label": "Raster alpha",
                "description": "Raster alpha (α) masukan dari dekomposisi Cloude-Pottier (derajat, 0-90)."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi alpha agar cocok dengan H ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran opsional dengan label 9 kelas (1-9)."
              }
            }
          },
          "kuan_filter": {
            "name": "Filter Kuan",
            "description": "Melakukan penyaringan speckle Kuan untuk citra SAR/radar menggunakan pendekatan parametrik yang mengestimasi rata-rata dan varians lokal. Pembobotan adaptif berdasarkan varians derau dan varians citra lokal. Mirip dengan Lee tetapi dengan asumsi statistik yang berbeda. Metode pemrosesan SAR operasional yang banyak digunakan. Menyeimbangkan efisiensi komputasi dan hasil yang baik pada beragam data SAR. Filter Kuan mengasumsikan statistik Gaussian dengan model speckle multiplikatif. Beradaptasi terhadap varians lokal—membedakan antara variasi sinyal dan speckle. Sangat efektif untuk citra SAR heterogen (campuran fitur terang dan gelap). Wajar secara komputasi. Merupakan kompromi praktis antara kecanggihan dan biaya komputasi. Standar di banyak sistem pemrosesan SAR. Aplikasi: (1) Penghilangan speckle SAR operasional, (2) Prapemrosesan SAR dengan backscatter campuran, (3) Prapemrosesan RadarSat/Sentinel-1, (4) Pemrosesan SAR rutin. Parameter umum: filter_size=5×7 hingga 7×7.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius jendela lokal dalam piksel (default 2)."
              },
              "enl": {
                "label": "ENL",
                "description": "Jumlah look setara (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "refined_lee_filter": {
            "name": "Filter Lee yang disempurnakan",
            "description": "Filter Refined Lee menyempurnakan filter Lee standar melalui estimasi koherensi yang ditingkatkan dan adaptasi yang mempertahankan tepi, menggunakan statistik lokal yang disempurnakan dan analisis arah untuk pengurangan speckle yang lebih unggul. Implementasinya memperluas model Lee dengan mendeteksi orientasi tepi, menerapkan jendela berarah yang sejajar dengan batas, dan menghitung estimasi koherensi yang disempurnakan. Secara matematis: F = μ + √(σ_p²/(σ_I²))·(I - μ) dengan perhitungan varians yang disejajarkan secara berarah. Penyempurnaan ini meningkatkan pelestarian tepi sambil mempertahankan penekanan speckle. Fitur utama meliputi sensitivitas arah (menyesuaikan arah penyaringan dengan struktur citra), estimasi koherensi yang lebih baik (menggunakan jendela anisotropik), pelestarian tepi yang lebih unggul dibandingkan Lee standar, dan efektivitas pada adegan SAR yang kompleks. Filter Refined Lee unggul dalam deteksi perubahan yang memerlukan batas tajam, persiapan peta koherensi InSAR, pemrosesan SAR polarimetrik yang mengutamakan pelestarian target, dan analisis SAR kehutanan untuk membedakan pohon dari latar belakang. Interpretasi keluaran mengungkap bahwa penyaringan mengikuti orientasi tepi: tepi horizontal disaring secara horizontal; tepi vertikal disaring secara vertikal; tepi diagonal disaring secara diagonal. Adaptasi arah ini meminimalkan penyaringan melintasi batas yang sebenarnya. Estimasi koherensi umumnya lebih akurat daripada Lee standar, sehingga mengurangi artefak penyaringan. Rentang keluaran sama dengan masukan; adaptasi arah terlihat melalui inspeksi visual (tepi tetap lebih tajam daripada Lee standar). Statistik menunjukkan pelestarian wilayah berkontras tinggi yang lebih besar. Komponen arah mengungkap orientasi struktur adegan; bias arah yang kuat menunjukkan orientasi fitur yang dominan. Artefak umum berkurang dibandingkan Lee standar, terutama di dekat tepi dan fitur kompleks. Artefak meliputi potensi adaptasi berlebih jika estimasi arah gagal dan artefak jendela berarah pada batas yang lemah. Pantau peta koherensi untuk memvalidasi akurasi deteksi tepi. Terapkan secara strategis dalam klasifikasi SAR yang mengharuskan struktur berarah (misalnya hutan, lahan pertanian yang sejajar) dipertahankan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi ketetanggaan dalam piksel (bilangan bulat ganjil, default 11)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "wisart_iterative_clustering": {
            "name": "Klasterisasi iteratif Wishart",
            "description": "Pengklasteran iteratif Wishart melakukan klasifikasi tak terbimbing data polarimetrik SAR dengan menyempurnakan pusat klaster secara iteratif menggunakan metrik jarak statistik Wishart kompleks, yang mengukur kemiripan dalam distribusi probabilitas polarimetrik multivariat. Algoritme diinisialisasi dari zona dekomposisi H/α (menyediakan 9 klaster benih dengan interpretasi fisik yang diketahui), lalu memasuki loop serupa expectation-maximization: (1) menghitung jarak Wishart dari matriks koherensi estimasi setiap piksel ke setiap prototipe klaster; (2) menetapkan ulang piksel ke klaster terdekat; (3) memperbarui prototipe klaster dengan merata-ratakan matriks piksel yang ditetapkan; (4) mengulangi hingga konvergen (laju penetapan ulang piksel <convergence_threshold) atau max_iterations tercapai. Fitur utama meliputi kerangka statistik bernilai kompleks yang menangani struktur data polarimetrik dengan benar, tidak seperti jarak Euclidean; inisialisasi otomatis dari zona H/α yang dapat diinterpretasikan sehingga mengurangi ketergantungan pada benih acak; pemantauan konvergensi per piksel yang memungkinkan penargetan iterasi adaptif; masukan opsional (H,α) yang telah dihitung sebelumnya atau perhitungan matriks otomatis dari masukan koherensi mentah; serta ketahanan bawaan terhadap speckle single-look melalui kompatibilitas pemrosesan multi-look. Alat ini mendukung format matriks konvensional maupun ringkas. Kasus penggunaan utama mencakup klasifikasi citra polarimetrik SAR yang menghasilkan peta tutupan lahan yang lebih halus melampaui partisi 9 zona H/α, penyempurnaan iteratif klasifikasi tak terbimbing awal untuk kartografi, penilaian kualitas data polarimetrik otomatis melalui metrik stabilitas klaster, dan klasifikasi SAR deret waktu yang memungkinkan deteksi perubahan temporal melalui analisis transisi klaster. Interpretasi keluaran: Peta klaster yang disempurnakan (biasanya 3-9 kelas bergantung pada konvergensi) yang menunjukkan kelompok mekanisme hamburan yang terpisah dengan baik. Riwayat konvergensi memberikan metrik kepercayaan—konvergensi awal yang cepat menunjukkan pemisahan kelas yang stabil; konvergensi yang lambat menunjukkan piksel ambigu yang akan terbantu oleh analisis multi-view atau deteksi perubahan. Integrasi dengan zona H/α memungkinkan penyusunan legenda: pertahankan korespondensi zona H/α bila memungkinkan untuk menjaga keterbacaan interpretasi.",
            "params": {
              "h_raster": {
                "label": "Raster H",
                "description": "Raster entropi (H) masukan (rentang 0-1)."
              },
              "alpha_raster": {
                "label": "Raster alpha",
                "description": "Raster alpha (α) masukan (derajat, 0-90)."
              },
              "max_iterations": {
                "label": "Iterasi maksimum",
                "description": "Iterasi klasterisasi maksimum (default 10)."
              },
              "convergence_threshold": {
                "label": "Ambang konvergensi",
                "description": "Kriteria konvergensi: fraksi piksel yang tidak berubah (default 0.99)."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi alpha agar cocok dengan H ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster label klaster keluaran opsional."
              }
            }
          },
          "yamaguchi_4component_decomposition": {
            "name": "Dekomposisi 4 komponen Yamaguchi",
            "description": "Dekomposisi SAR 4 komponen Yamaguchi menguraikan data radar apertur sintetis polarisasi ganda menjadi komponen yang dapat diinterpretasikan secara fisik yang mewakili hamburan permukaan, hamburan double-bounce (volume), hamburan heliks, dan hamburan volume menggunakan analisis polarimetrik berbasis model dengan penyertaan DEM opsional. Dekomposisi memisahkan mekanisme hamburan balik yang berbeda melalui analisis nilai eigen matriks kovarians polarimetrik, menginterpretasikan komponen sebagai pantulan permukaan (hamburan Bragg), pantulan double-bounce dari reflektor sudut, rotasi polarisasi heliks (jarang), dan hamburan volume difus dari vegetasi atau permukaan kasar. Penyertaan DEM eksternal mengestimasi kontribusi hamburan topografis sehingga meningkatkan pembedaan hamburan volume sejati dari efek topografis. Fitur utama meliputi interpretasi fisik berbasis model yang memungkinkan ekstraksi parameter geofisika yang bermakna, koreksi topografis berbasis DEM opsional yang meningkatkan akurasi komponen di atas medan, batasan komponen non-negatif yang mencegah hasil dekomposisi yang tidak fisis, dan penanganan otomatis celah data serta wilayah layover. Aplikasinya meliputi estimasi biomassa hutan dari komponen hamburan volume, pemetaan perkotaan yang memanfaatkan dominasi double-bounce di area terbangun, estimasi kelembapan tanah dari perilaku hamburan permukaan, dan deteksi longsor/perubahan melalui perubahan rasio komponen. Keluaran dekomposisi Yamaguchi memungkinkan interpretasi geofisika. Keluaran terdiri atas citra empat komponen (daya hamburan permukaan, double-bounce, heliks, volume), metrik kualitas dekomposisi yang mengukur akurasi kecocokan, indeks jenis hamburan rata-rata yang memudahkan karakterisasi tutupan lahan, serta diagnostik koherensi/entropi opsional yang memandu penilaian kualitas data.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Raster matriks: 6 kompak [m11,m22,m33,m12,m13,m23] atau 9 elemen matriks kompleks 3x3 penuh urutan baris."
              },
              "matrix_format": {
                "label": "Format matriks",
                "description": "Format matriks masukan: full3x3 (default) untuk matriks Hermitian dengan bagian riil/imajiner."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), reproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster 4 band keluaran opsional [surface, double_bounce, volume, helix]."
              }
            }
          },
          "ascii_to_las": {
            "name": "ASCII ke LAS",
            "description": "Konversi format: pemrosesan batch CSV→LAS. Mengurai file teks berpemisah spasi/koma/tab (x,y,z,intensity,class,returns,angle,time) menjadi LAS dengan metadata EPSG.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array path file ASCII masukan."
              },
              "pattern": {
                "label": "Pola",
                "description": "Pola field, mis. 'x,y,z,i,c,rn,nr,sa'."
              },
              "epsg_code": {
                "label": "Kode EPSG",
                "description": "Kode EPSG untuk metadata CRS LAS keluaran."
              },
              "output_directory": {
                "label": "Direktori keluaran",
                "description": "Direktori keluaran opsional untuk file LAS yang dihasilkan."
              }
            }
          },
          "las_to_ascii": {
            "name": "LAS ke ASCII",
            "description": "Konversi format: keluaran LAS→CSV. Mengekspor semua atribut titik ke teks berpemisah untuk impor ke spreadsheet/basis data atau skrip.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran opsional (hanya mode masukan tunggal)."
              }
            }
          },
          "las_to_shapefile": {
            "name": "LAS ke Shapefile",
            "description": "Mengonversi awan titik LAS/LAZ menjadi shapefile titik vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional untuk mode masukan tunggal."
              },
              "output_multipoint": {
                "label": "Keluaran multititik",
                "description": "Jika true keluarkan geometri multititik dengan satu fitur; jika tidak, keluarkan satu fitur titik per titik."
              }
            }
          },
          "lidar_colourize": {
            "name": "Pewarnaan LiDAR",
            "description": "Menetapkan warna titik dari citra: mengambil sampel ortofoto/citra tergeoreferensi yang tumpang tindih di setiap lokasi titik, menyimpannya sebagai RGB. Rendering awan titik fotorealistis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "image": {
                "label": "Citra",
                "description": "Path raster citra masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_join": {
            "name": "Gabungkan LiDAR",
            "description": "Menggabungkan beberapa file LiDAR: menyambungkan awan titik sambil mempertahankan atribut dan konsistensi header. Pemrosesan batch di seluruh koleksi petak.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array path LiDAR masukan atau objek LiDAR bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_shift": {
            "name": "Geser LiDAR",
            "description": "Mentranslasikan koordinat awan titik: offset x/y/z untuk pergeseran datum, koreksi registrasi, atau transformasi sistem koordinat. Penyesuaian koordinat massal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "x_shift": {
                "label": "Geser X",
                "description": "Pergeseran yang ditambahkan ke koordinat x."
              },
              "y_shift": {
                "label": "Geser Y",
                "description": "Pergeseran yang ditambahkan ke koordinat y."
              },
              "z_shift": {
                "label": "Geser Z",
                "description": "Pergeseran yang ditambahkan ke koordinat z."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_tile": {
            "name": "Petak LiDAR",
            "description": "Membagi awan titik menjadi petak grid beraturan: mempartisi berdasarkan cakupan x/y dengan dimensi yang dapat dikonfigurasi dan ambang batas jumlah titik minimum. Distribusi dan pemrosesan data standar.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "tile_width": {
                "label": "Lebar petak",
                "description": "Lebar petak dalam satuan x (default 1000)."
              },
              "tile_height": {
                "label": "Tinggi petak",
                "description": "Tinggi petak dalam satuan y (default 1000)."
              },
              "origin_x": {
                "label": "Asal X",
                "description": "Koordinat x asal grid (default 0)."
              },
              "origin_y": {
                "label": "Asal Y",
                "description": "Koordinat y asal grid (default 0)."
              },
              "min_points_in_tile": {
                "label": "Titik minimum per petak",
                "description": "Titik minimum yang diperlukan untuk menulis petak (default 2)."
              },
              "output_laz_format": {
                "label": "Format keluaran LAZ",
                "description": "Jika true, tulis keluaran .laz; jika tidak .las (default true)."
              },
              "output_directory": {
                "label": "Direktori keluaran",
                "description": "Direktori opsional untuk menulis keluaran petak; default <input_dir>/<input_stem>/."
              }
            }
          },
          "lidar_tophat_transform": {
            "name": "Transformasi top-hat LiDAR",
            "description": "Mengekstrak tinggi di atas tanah melalui white top-hat morfologis: erosi + dilasi mengaproksimasi tanah lokal, residual = tinggi. Normalisasi tanpa tanah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan yang digunakan untuk erosi dan dilasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "recover_flightline_info": {
            "name": "Pulihkan info jalur terbang",
            "description": "Merekonstruksi ID jalur terbang dari celah waktu GPS: menyimpulkan batas jalur terbang, menandainya di point-source-ID/user-data/RGB. Pemulihan jalur penerbangan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "max_time_diff": {
                "label": "Selisih waktu maksimum",
                "description": "Celah waktu GPS maksimum dalam jalur terbang sebelum memulai jalur terbang baru."
              },
              "pt_src_id": {
                "label": "ID sumber titik",
                "description": "Jika true, tulis ID jalur terbang yang disimpulkan ke point_source_id."
              },
              "user_data": {
                "label": "Data pengguna",
                "description": "Jika true, tulis ID jalur terbang yang disimpulkan ke user_data (modulo 256)."
              },
              "rgb": {
                "label": "RGB",
                "description": "Jika true, tetapkan warna acak per jalur terbang yang disimpulkan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "select_tiles_by_polygon": {
            "name": "Pilih petak berdasarkan poligon",
            "description": "Pemilihan petak batch: menyalin petak LAS/LAZ dari direktori ke keluaran ketika titik sampel petak berpotongan dengan batas poligon. Ekstraksi data berbasis AOI.",
            "params": {
              "input_directory": {
                "label": "Direktori masukan",
                "description": "Direktori masukan yang memuat petak LiDAR."
              },
              "output_directory": {
                "label": "Direktori keluaran",
                "description": "Direktori keluaran untuk petak LiDAR terpilih."
              },
              "polygons": {
                "label": "Poligon",
                "description": "Path vektor poligon masukan atau objek vektor bertipe."
              }
            }
          },
          "sort_lidar": {
            "name": "Urutkan LiDAR",
            "description": "Mengurutkan titik berdasarkan beberapa kriteria: x/y/z dengan ukuran bin, ditambah atribut turunan. Mengoptimalkan koherensi spasial untuk kompresi dan pemrosesan petak.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "sort_criteria": {
                "label": "Kriteria pengurutan",
                "description": "Ekspresi kriteria pengurutan, mis. 'x 100, y 100, z 10, scan_angle'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "split_lidar": {
            "name": "Pisahkan LiDAR",
            "description": "Mempartisi titik ke dalam file terpisah berdasarkan atribut: mengelompokkan menurut kelas, source-id, jendela waktu, bin spasial, atau jumlah titik. Stratifikasi dan distribusi data.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "split_criterion": {
                "label": "Kriteria pemisahan",
                "description": "Kriteria pengelompokan: num_pts, x, y, z, intensity, class, user_data, point_source_id, scan_angle, atau time."
              },
              "interval": {
                "label": "Interval",
                "description": "Ukuran bin untuk kriteria numerik; untuk num_pts ini adalah titik per file keluaran."
              },
              "min_pts": {
                "label": "Titik minimum",
                "description": "Titik minimum yang diperlukan sebelum menulis file keluaran pemisahan (default 5)."
              },
              "output_directory": {
                "label": "Direktori keluaran",
                "description": "Direktori opsional untuk keluaran pemisahan."
              }
            }
          },
          "classify_buildings_in_lidar": {
            "name": "Klasifikasi bangunan pada LiDAR",
            "description": "Menandai titik di dalam tapak bangunan: menetapkan kelas 6 ke semua titik yang secara spasial berada di dalam batas poligon. Ekstraksi bangunan berbasis vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "buildings": {
                "label": "Bangunan",
                "description": "Path vektor poligon jejak bangunan masukan atau objek vektor bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "classify_lidar": {
            "name": "Klasifikasi LiDAR",
            "description": "Klasifikasi titik otomatis: tanah, vegetasi, bangunan melalui geometri lokal (linearitas, planaritas) dan pencocokan bidang RANSAC. Segmentasi berbasis geometri.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan (default 2.5)."
              },
              "grd_threshold": {
                "label": "Ambang GRD",
                "description": "Tinggi di atas minimum lokal yang dianggap tanah (default 0.1)."
              },
              "oto_threshold": {
                "label": "Ambang OTO",
                "description": "Tinggi di atas minimum lokal yang dianggap objek non-medan (default 1.0)."
              },
              "linearity_threshold": {
                "label": "Ambang linearitas",
                "description": "Ambang linearitas yang digunakan dalam penyaringan akhir yang tidak terklasifikasi (default 0.5)."
              },
              "planarity_threshold": {
                "label": "Ambang planaritas",
                "description": "Ambang planaritas yang digunakan dalam segmentasi dan penghalusan (default 0.85)."
              },
              "num_iter": {
                "label": "Jumlah iterasi",
                "description": "Jumlah iterasi RANSAC lokal untuk estimasi planaritas/linearitas (default 30)."
              },
              "facade_threshold": {
                "label": "Ambang fasad",
                "description": "Jarak tetangga yang digunakan saat melabeli fasad bangunan (default 0.5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "classify_overlap_points": {
            "name": "Klasifikasi titik tumpang tindih",
            "description": "Mengidentifikasi tumpang tindih jalur terbang: mendeteksi sel grid dengan beberapa ID sumber titik, menandai atau menghapus titik tumpang tindih. Kontrol kualitas untuk validasi akuisisi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel grid yang digunakan untuk analisis tumpang tindih."
              },
              "overlap_criterion": {
                "label": "Kriteria tumpang tindih",
                "description": "sudut pindai maks, bukan ID sumber titik min, bukan waktu min, atau beberapa ID sumber titik."
              },
              "filter": {
                "label": "Filter",
                "description": "Jika true, hapus titik tumpang tindih; jika tidak, klasifikasikan titik tumpang tindih sebagai kelas 12."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "clip_lidar_to_polygon": {
            "name": "Potong LiDAR ke poligon",
            "description": "Subset spasial awan titik: mempertahankan titik di dalam batas poligon. Pemilihan titik berbasis vektor untuk ekstraksi area studi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "polygons": {
                "label": "Poligon",
                "description": "Path vektor poligon masukan atau objek vektor bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "erase_polygon_from_lidar": {
            "name": "Hapus poligon dari LiDAR",
            "description": "Menghapus titik LiDAR yang berada di dalam geometri poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "polygons": {
                "label": "Poligon",
                "description": "Path vektor poligon masukan atau objek vektor bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "filter_lidar": {
            "name": "Filter LiDAR",
            "description": "Menghapus titik melalui ekspresi: logika boolean pada atribut (class, elevation, return_number, scan_angle, noise_flag, dll.). Pemilihan titik yang fleksibel.",
            "params": {
              "statement": {
                "label": "Pernyataan",
                "description": "Ekspresi boolean, mis. '!is_noise && class == 2' atau 'NOT is_noise AND class == 2'."
              },
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional untuk mode masukan tunggal."
              }
            }
          },
          "filter_lidar_by_percentile": {
            "name": "Filter LiDAR berdasarkan persentil",
            "description": "Memilih titik peringkat persentil per sel: mempertahankan satu titik per blok grid pada persentil elevasi yang ditentukan. Desimasi sampel representatif.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "percentile": {
                "label": "Persentil",
                "description": "Persentil dalam [0, 100] (0=terendah, 100=tertinggi)."
              },
              "block_size": {
                "label": "Ukuran blok",
                "description": "Ukuran blok grid untuk pemilihan persentil lokal (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "filter_lidar_by_reference_surface": {
            "name": "Filter LiDAR berdasarkan permukaan acuan",
            "description": "Mengekstrak titik relatif terhadap permukaan referensi: z<surface, z>surface, atau dalam ambang batas. Mengidentifikasi vegetasi di atas DTM atau titik di bawah permukaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "ref_surface": {
                "label": "Permukaan acuan",
                "description": "Path raster referensi atau objek raster bertipe."
              },
              "query": {
                "label": "Kueri",
                "description": "Jenis kueri: within, <, <=, >, >= (default within)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ambang jarak z absolut yang digunakan oleh query=within."
              },
              "classify": {
                "label": "Klasifikasikan",
                "description": "Jika true klasifikasikan titik; jika tidak, saring dan hanya pertahankan yang cocok."
              },
              "true_class_value": {
                "label": "Nilai kelas benar",
                "description": "Nilai kelas yang ditetapkan ke titik yang cocok dalam mode klasifikasi."
              },
              "false_class_value": {
                "label": "Nilai kelas salah",
                "description": "Nilai kelas yang ditetapkan ke titik yang tidak cocok dalam mode klasifikasi."
              },
              "preserve_classes": {
                "label": "Pertahankan kelas",
                "description": "Jika true pertahankan kelas yang tidak cocok dalam mode klasifikasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "filter_lidar_classes": {
            "name": "Filter kelas LiDAR",
            "description": "Menghapus titik berdasarkan klasifikasi: menyaring kelas LAS yang tidak diinginkan (noise, air, bangunan, dll.). Pra-pemrosesan penting untuk alur kerja pengondisian medan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "filter_lidar_noise": {
            "name": "Filter derau LiDAR",
            "description": "Menghapus kelas noise ASPRS: menyaring kelas 7 (noise rendah) dan kelas 18 (noise tinggi). Pembersihan awan titik standar untuk data yang sesuai LAS 1.4.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "filter_lidar_scan_angles": {
            "name": "Filter sudut pindai LiDAR",
            "description": "Menghapus pantulan LiDAR miring: menyaring titik berdasarkan ambang batas sudut pindai. Meningkatkan akurasi vertikal dengan menghapus pantulan bersudut rendah yang memiliki galat posisi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Sudut pindai absolut maksimum (satuan LAS bilangan bulat; 1 satuan = 0.006°). Wajib."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "height_above_ground": {
            "name": "Tinggi di atas tanah",
            "description": "Menormalkan melalui geometri awan titik: menghitung tinggi setiap titik di atas tetangga kelas tanah terdekat yang lebih rendah. Permukaan medan lokal tanpa referensi raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "improved_ground_point_filter": {
            "name": "Filter titik tanah yang ditingkatkan",
            "description": "Pipeline penyaringan titik tanah multi-tahap.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan."
              },
              "block_size": {
                "label": "Ukuran blok",
                "description": "Ukuran sel grid dalam satuan xy."
              },
              "max_building_size": {
                "label": "Ukuran bangunan maksimum",
                "description": "Lebar bangunan maksimum yang diharapkan dalam satuan xy."
              },
              "slope_threshold": {
                "label": "Ambang kemiringan",
                "description": "Kemiringan tepi minimum dalam derajat."
              },
              "elev_threshold": {
                "label": "Ambang elevasi",
                "description": "Ambang jarak elevasi."
              },
              "classify": {
                "label": "Klasifikasikan",
                "description": "Klasifikasikan alih-alih menyaring titik."
              },
              "preserve_classes": {
                "label": "Pertahankan kelas",
                "description": "Pertahankan kelas yang ada dalam mode klasifikasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "individual_tree_segmentation": {
            "name": "Segmentasi pohon individu",
            "description": "Mensegmentasi titik vegetasi menjadi tajuk pohon: pengklasteran mean-shift dengan bandwidth adaptif dari geometri kanopi lokal. Delineasi pohon tingkat inventaris.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "only_use_veg": {
                "label": "Hanya gunakan vegetasi",
                "description": "Jika true, proses hanya kelas vegetasi (default true)."
              },
              "veg_classes": {
                "label": "Kelas vegetasi",
                "description": "Kelas vegetasi sebagai teks berpembatas koma atau array bilangan bulat (default '3,4,5')."
              },
              "min_height": {
                "label": "Tinggi minimum",
                "description": "Tinggi titik minimum untuk segmentasi (default 2.0)."
              },
              "max_height": {
                "label": "Tinggi maksimum",
                "description": "Tinggi titik maksimum opsional."
              },
              "bandwidth_min": {
                "label": "Bandwidth minimum",
                "description": "Bandwidth horizontal minimum (default 1.0)."
              },
              "bandwidth_max": {
                "label": "Bandwidth maksimum",
                "description": "Bandwidth horizontal maksimum (default 6.0)."
              },
              "adaptive_bandwidth": {
                "label": "Bandwidth adaptif",
                "description": "Estimasi bandwidth horizontal per seed dari geometri tajuk lokal (default true)."
              },
              "adaptive_neighbors": {
                "label": "Tetangga adaptif",
                "description": "Jumlah tetangga yang digunakan untuk skala kerapatan lokal adaptif (default 24)."
              },
              "adaptive_sector_count": {
                "label": "Jumlah sektor adaptif",
                "description": "Jumlah sektor sudut untuk estimasi radius tajuk lokal (default 8)."
              },
              "grid_acceleration": {
                "label": "Akselerasi grid",
                "description": "Gunakan aproksimasi grid gaya MeanShift++ untuk pembaruan mode lebih cepat (default false)."
              },
              "grid_cell_size": {
                "label": "Ukuran sel grid",
                "description": "Ukuran sel grid untuk pembaruan mode terakselerasi (default 0.5)."
              },
              "grid_refine_exact": {
                "label": "Penghalusan grid eksak",
                "description": "Jalankan penghalusan tetangga eksak singkat setelah akselerasi grid (default false)."
              },
              "grid_refine_iterations": {
                "label": "Iterasi penghalusan grid",
                "description": "Batas iterasi penghalusan eksak setelah pembaruan mode grid (default 2)."
              },
              "tile_size": {
                "label": "Ukuran petak",
                "description": "Ukuran petak opsional untuk penjadwalan seed; <=0 menonaktifkan pemetakan (default 0.0)."
              },
              "tile_overlap": {
                "label": "Tumpang tindih petak",
                "description": "Lebar tumpang tindih petak untuk penjadwalan seed terpetak (default 0.0)."
              },
              "vertical_bandwidth": {
                "label": "Bandwidth vertikal",
                "description": "Bandwidth kernel vertikal (default 5.0)."
              },
              "max_iterations": {
                "label": "Iterasi maksimum",
                "description": "Iterasi mean-shift maksimum per seed (default 30)."
              },
              "convergence_tol": {
                "label": "Toleransi konvergensi",
                "description": "Toleransi konvergensi untuk magnitudo pergeseran (default 0.05)."
              },
              "min_cluster_points": {
                "label": "Titik klaster minimum",
                "description": "Titik minimum per klaster pohon yang dipertahankan (default 50)."
              },
              "mode_merge_dist": {
                "label": "Jarak penggabungan mode",
                "description": "Ambang jarak untuk menggabungkan mode yang konvergen (default 0.8)."
              },
              "threads": {
                "label": "Thread",
                "description": "Penimpaan jumlah thread (0 menggunakan pool Rayon default)."
              },
              "simd": {
                "label": "SIMD",
                "description": "Aktifkan aritmetika berbantuan SIMD dalam loop pembobotan (default true)."
              },
              "output_id_mode": {
                "label": "Mode ID keluaran",
                "description": "Pengkodean ID segmen keluaran {rgb|user_data|point_source_id|rgb+user_data|rgb+point_source_id} (default rgb)."
              },
              "output_sidecar_csv": {
                "label": "Keluaran CSV pendamping",
                "description": "Jika true, tulis CSV point_index,segment_id di samping keluaran lidar."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed deterministik untuk pemetaan warna (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_classify_subset": {
            "name": "Klasifikasi subset LiDAR",
            "description": "Mentransfer klasifikasi: menandai titik dasar yang cocok dengan lokasi awan subset. Memungkinkan reklasifikasi spasial berdasarkan set titik tambahan.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Path LiDAR dasar atau objek LiDAR bertipe."
              },
              "subset": {
                "label": "Subset",
                "description": "Path LiDAR subset atau objek LiDAR bertipe."
              },
              "subset_class_value": {
                "label": "Nilai kelas subset",
                "description": "Nilai klasifikasi yang ditetapkan ke titik subset yang cocok (0-18)."
              },
              "nonsubset_class_value": {
                "label": "Nilai kelas non-subset",
                "description": "Kelas opsional untuk titik yang tidak cocok (0-18). Gunakan 255 untuk mempertahankan kelas yang ada."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi pencocokan tetangga terdekat 3D dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_elevation_slice": {
            "name": "Irisan elevasi LiDAR",
            "description": "Mengekstrak titik pita elevasi: menyaring atau mereklasifikasi titik dalam rentang z. Mengisolasi lapisan tertentu (tanah, tumbuhan bawah, kanopi) atau zona elevasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "minz": {
                "label": "Z minimum",
                "description": "Batas bawah irisan elevasi (default -tak hingga)."
              },
              "maxz": {
                "label": "Z maksimum",
                "description": "Batas atas irisan elevasi (default +tak hingga)."
              },
              "classify": {
                "label": "Klasifikasikan",
                "description": "Jika true, reklasifikasi titik alih-alih menyaringnya (default false)."
              },
              "in_class_value": {
                "label": "Nilai kelas masuk",
                "description": "Klasifikasi yang ditetapkan ke titik di dalam irisan ketika classify=true (default 2)."
              },
              "out_class_value": {
                "label": "Nilai kelas keluar",
                "description": "Klasifikasi yang ditetapkan ke titik di luar irisan ketika classify=true (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_remove_outliers": {
            "name": "Hapus pencilan LiDAR",
            "description": "Mendeteksi titik pencilan melalui residual elevasi lokal: membandingkan titik dengan rata-rata/median ketetanggaan, menandai anomali. Menghapus kesalahan kasar dan noise yang tidak menentu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk perhitungan residu lokal (default 2.0)."
              },
              "elev_diff": {
                "label": "Selisih elevasi",
                "description": "Ambang residu elevasi absolut untuk deteksi pencilan (default 50.0)."
              },
              "use_median": {
                "label": "Gunakan median",
                "description": "Gunakan median alih-alih rata-rata elevasi ketetanggaan."
              },
              "classify": {
                "label": "Klasifikasikan",
                "description": "Jika true, klasifikasikan pencilan sebagai kelas 7/18 alih-alih menghapusnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_segmentation": {
            "name": "Segmentasi LiDAR",
            "description": "Mempartisi awan titik: pencocokan bidang RANSAC + region-growing menghasilkan komponen terhubung. Menetapkan ID segmen yang disimpan di RGB. Pengklasteran titik berbasis bentuk.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk penumbuhan wilayah."
              },
              "num_iterations": {
                "label": "Jumlah iterasi",
                "description": "Jumlah iterasi RANSAC yang digunakan untuk mendeteksi model planar lokal."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Jumlah titik yang disampel per penyesuaian model RANSAC lokal."
              },
              "inlier_threshold": {
                "label": "Ambang inlier",
                "description": "Ambang residu yang digunakan untuk mengklasifikasikan titik sebagai inlier bidang lokal."
              },
              "acceptable_model_size": {
                "label": "Ukuran model yang diterima",
                "description": "Jumlah inlier minimum yang diperlukan untuk model bidang lokal yang diterima."
              },
              "max_planar_slope": {
                "label": "Kemiringan planar maksimum",
                "description": "Kemiringan planar maksimum yang diterima dalam derajat."
              },
              "norm_diff_threshold": {
                "label": "Ambang selisih normal",
                "description": "Selisih sudut maksimum (derajat) antara normal planar bertetangga selama penumbuhan."
              },
              "max_z_diff": {
                "label": "Selisih Z maksimum",
                "description": "Selisih Z maksimum yang diizinkan saat menumbuhkan segmen."
              },
              "classes": {
                "label": "Kelas",
                "description": "Jika true, jangan melintasi batas kelas saat menumbuhkan segmen."
              },
              "ground": {
                "label": "Tanah",
                "description": "Jika true, tetapkan class=2 ke segmen terbesar dan class=1 ke titik tersegmentasi lainnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_segmentation_based_filter": {
            "name": "Filter berbasis segmentasi LiDAR",
            "description": "Penyaringan tanah melalui segmentasi relief rendah: menumbuhkan komponen terhubung dari wilayah yang datar secara lokal, memisahkan medan dari vegetasi. Pemisahan tanah yang andal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk penumbuhan komponen terhubung."
              },
              "norm_diff_threshold": {
                "label": "Ambang selisih normal",
                "description": "Parameter kompatibilitas untuk pemeriksaan sudut normal lama."
              },
              "max_z_diff": {
                "label": "Selisih Z maksimum",
                "description": "Selisih elevasi maksimum untuk penumbuhan terhubung."
              },
              "classify_points": {
                "label": "Klasifikasikan titik",
                "description": "Jika true, klasifikasikan titik alih-alih menyaring."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "modify_lidar": {
            "name": "Modifikasi LiDAR",
            "description": "Memperbarui atribut titik melalui penugasan: z=z+offset, class=reclassify_expr, intensity=scale_factor. Transformasi tingkat titik yang fleksibel.",
            "params": {
              "statement": {
                "label": "Pernyataan",
                "description": "Satu atau lebih ekspresi penetapan yang dipisahkan titik koma, mis. 'z = z + 1; class = if(z > 5, 2, class)'."
              },
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional untuk mode masukan tunggal."
              }
            }
          },
          "normalize_lidar": {
            "name": "Normalisasi LiDAR",
            "description": "Mengonversi elevasi LiDAR absolut menjadi tinggi di atas tanah: mengurangkan DTM (DEM raster) dari nilai z titik. Membuat awan titik ternormalisasi untuk analisis struktur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "dtm": {
                "label": "DTM",
                "description": "Path raster DTM masukan atau objek raster bertipe."
              },
              "no_negatives": {
                "label": "Tanpa nilai negatif",
                "description": "Batasi tinggi ternormalisasi negatif menjadi nol."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "remove_duplicates": {
            "name": "Hapus duplikat",
            "description": "Menghapus duplikat awan titik: menghapus titik dengan x/y identik (opsional z). Menangani tumpang tindih multi-pindaian dan meningkatkan efisiensi pemrosesan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "include_z": {
                "label": "Sertakan Z",
                "description": "Jika true, deteksi duplikat menyertakan z; jika tidak, hanya menggunakan x/y."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "flightline_overlap": {
            "name": "Tumpang tindih jalur terbang",
            "description": "Mendeteksi tumpang tindih akuisisi: menghitung ID sumber titik yang berbeda per sel. Visualisasi tumpang tindih berbasis grid untuk penilaian cakupan jalur terbang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi grid yang digunakan untuk menghitung jalur terbang berbeda per sel."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_block_maximum": {
            "name": "Maksimum blok LiDAR",
            "description": "Raster dari atribut LiDAR maksimum: nilai sel = pantulan titik tertinggi (elevasi, intensitas, kelas, dll.). Pembuatan DSM, ekstraksi puncak kanopi, statistik pulsa.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Atribut titik (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_block_minimum": {
            "name": "Minimum blok LiDAR",
            "description": "Raster dari atribut LiDAR minimum: nilai sel = pantulan titik terendah (elevasi, intensitas, kelas). Pembuatan DEM, ekstraksi permukaan tanah, penetapan garis dasar medan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Atribut titik (elevation/intensity/class/return_number/number_of_returns/scan_angle/time/rgb/user_data)."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_construct_vector_tin": {
            "name": "Bangun TIN vektor LiDAR",
            "description": "Membangun mesh 3D: triangulasi Delaunay dari titik tersaring dikeluarkan sebagai layer poligon vektor. Representasi permukaan dan analisis topografis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional; dalam mode batch setiap masukan menulis _tin.shp pendamping."
              },
              "returns": {
                "label": "Pantulan",
                "description": "Filter pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Nilai kelas opsional untuk dikecualikan."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Elevasi titik minimum yang diizinkan."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Elevasi titik maksimum yang diizinkan."
              },
              "max_triangle_edge_length": {
                "label": "Panjang tepi segitiga maksimum",
                "description": "Panjang tepi segitiga maksimum opsional yang diizinkan."
              }
            }
          },
          "lidar_contour": {
            "name": "Kontur LiDAR",
            "description": "Mengekstrak garis kontur vektor: pembuatan kontur berbasis TIN dengan interpolasi untuk elevasi, intensitas, waktu. Interval dan penyaringan panjang tepi yang dapat dikonfigurasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (.shp/.geojson). Dalam mode batch setiap masukan menulis .shp pendamping."
              },
              "interval": {
                "label": "Interval",
                "description": "Interval kontur (harus > 0)."
              },
              "base_contour": {
                "label": "Kontur dasar",
                "description": "Nilai offset kontur dasar."
              },
              "smooth": {
                "label": "Haluskan",
                "description": "Parameter penghalusan kompatibilitas (diterima demi paritas bentuk pemanggilan)."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Salah satu dari elevation, intensity, scan_angle, time, atau user_data."
              },
              "returns": {
                "label": "Pantulan",
                "description": "Filter pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Nilai kelas opsional untuk dikecualikan."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Elevasi titik minimum yang diizinkan."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Elevasi titik maksimum yang diizinkan."
              },
              "max_triangle_edge_length": {
                "label": "Panjang tepi segitiga maksimum",
                "description": "Panjang tepi segitiga maksimum opsional; segitiga yang lebih panjang dilewati."
              }
            }
          },
          "lidar_digital_surface_model": {
            "name": "Model permukaan digital LiDAR",
            "description": "Menghasilkan DSM dari pantulan permukaan atas LiDAR melalui TIN: menggunakan kandidat titik tertinggi lokal dalam radius, lalu triangulasi. Representasi kanopi vegetasi dan puncak fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk memilih kandidat permukaan atas."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_triangle_edge_length": {
                "label": "Panjang tepi segitiga maksimum",
                "description": "Panjang tepi segitiga maksimum opsional untuk menekan faset bertepi panjang."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_hex_bin": {
            "name": "Bin heksagonal LiDAR",
            "description": "Mengagregasi titik ke heksagon: grid binning dengan ringkasan per sel (jumlah, rata-rata z, intensitas). Pengambilan sampel seragam dan binning statistik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar heksagon (jarak antara sisi yang berhadapan)."
              },
              "orientation": {
                "label": "Orientasi",
                "description": "Orientasi grid: h (runcing ke atas) atau v (datar ke atas)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional."
              }
            }
          },
          "lidar_hillshade": {
            "name": "Bayangan bukit LiDAR",
            "description": "Merender permukaan LiDAR melalui bayangan bukit: menghitung normal permukaan per titik dari pencocokan bidang lokal, lalu memberi bayangan berdasarkan sudut iluminasi. Disimpan sebagai RGB untuk visualisasi 3D.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk estimasi normal lokal. Nilai <= 0 menggunakan jarak antar nominal yang diestimasi."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut iluminasi dalam derajat."
              },
              "altitude": {
                "label": "Altitud",
                "description": "Altitud iluminasi dalam derajat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_idw_interpolation": {
            "name": "Interpolasi IDW LiDAR",
            "description": "Pembuatan grid LiDAR berbobot jarak: menetapkan nilai sel dari rata-rata berbobot titik-titik di sekitarnya (pangkat jarak terbalik). Permukaan halus, dikendalikan melalui parameter eksponen.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "weight": {
                "label": "Bobot",
                "description": "Eksponen IDW (pangkat)."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan; <=0 beralih ke mode k terdekat."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Atribut titik untuk diinterpolasi (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Jumlah titik minimum untuk cadangan k terdekat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_nearest_neighbour_gridding": {
            "name": "Gridding tetangga terdekat LiDAR",
            "description": "Pembuatan grid LiDAR cepat: menetapkan nilai sel dari titik terdekat dalam radius pencarian. Bias interpolasi minimal, efisien untuk awan titik berkerapatan tinggi. Pembuatan DSM/DEM yang cepat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Jarak tetangga terdekat maksimum; sel di luar ini menjadi NoData."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Atribut titik untuk diinterpolasi (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_radial_basis_function_interpolation": {
            "name": "Interpolasi fungsi basis radial LiDAR",
            "description": "Permukaan LiDAR halus melalui RBF: fungsi basis radial menangkap kelengkungan lokal dan mikrotopografi. Pembuatan grid berkualitas tinggi dengan turunan kontinu melintasi batas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "num_points": {
                "label": "Jumlah titik",
                "description": "Jumlah tetangga minimum yang digunakan untuk interpolasi lokal."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan; <=0 hanya menggunakan mode k terdekat."
              },
              "func_type": {
                "label": "Jenis fungsi",
                "description": "Jenis basis RBF (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Orde polinomial",
                "description": "Orde tren polinomial yang digunakan untuk koreksi lokal (none, constant, quadratic)."
              },
              "weight": {
                "label": "Bobot",
                "description": "Parameter bentuk/eksponen basis bergantung pada func_type."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Atribut titik untuk diinterpolasi (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_sibson_interpolation": {
            "name": "Interpolasi Sibson LiDAR",
            "description": "Pembuatan grid LiDAR natural-neighbour: interpolasi berbasis Voronoi menggunakan bobot natural-neighbour. Permukaan halus dan tampak alami tanpa artefak kemiringan di lokasi titik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Atribut titik untuk diinterpolasi (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_thin": {
            "name": "Penjarangan LiDAR",
            "description": "Mendesimasi kerapatan awan titik: mempertahankan ≤1 titik per sel grid menggunakan strategi pertama/terakhir/terendah/tertinggi/terdekat. Mengurangi penyimpanan sambil mempertahankan cakupan dan kompleksitas topografis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel grid untuk penjarangan (default 1.0)."
              },
              "method": {
                "label": "Metode",
                "description": "Metode pemilihan titik per sel: first, last, lowest, highest, nearest (default 'first')."
              },
              "save_filtered": {
                "label": "Simpan hasil filter",
                "description": "Jika true, juga tulis titik yang tersaring keluar dan kembalikan lokatornya di outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Keluaran terfilter",
                "description": "Path keluaran opsional untuk titik yang tersaring keluar (mode masukan tunggal)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_thin_high_density": {
            "name": "Penjarangan LiDAR kerapatan tinggi",
            "description": "Desimasi kerapatan adaptif: mengurangi jumlah titik di zona yang terlalu padat sambil mempertahankan wilayah yang jarang. Menyetarakan pengambilan sampel di seluruh pola tumpang tindih jalur terbang yang bervariasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "density": {
                "label": "Kerapatan",
                "description": "Ambang kerapatan titik target dalam titik per satuan persegi."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi grid yang digunakan untuk binning x/y dan z (default 1.0)."
              },
              "save_filtered": {
                "label": "Simpan hasil filter",
                "description": "Jika true, tulis titik yang tersaring keluar dan kembalikan outputs.filtered_path."
              },
              "filtered_output": {
                "label": "Keluaran terfilter",
                "description": "Path keluaran opsional untuk titik yang tersaring keluar dalam mode masukan tunggal."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_tile_footprint": {
            "name": "Jejak petak LiDAR",
            "description": "Menghasilkan tapak: kotak pembatas sejajar sumbu atau convex hull per awan titik. Keluaran poligon vektor untuk pengindeksan spasial dan katalog data.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan atas semua file LiDAR di direktori saat ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional untuk jejak."
              },
              "output_hulls": {
                "label": "Keluaran hull",
                "description": "Jika true tulis jejak convex hull; jika tidak, tulis kotak pembatas selaras sumbu."
              }
            }
          },
          "lidar_tin_gridding": {
            "name": "Gridding TIN LiDAR",
            "description": "Interpolasi LiDAR eksak melalui TIN: membangun triangulasi Delaunay dari titik, menginterpolasi nilai sel dari bidang segitiga. Menghormati ketinggian titik, sangat baik untuk cakupan tidak beraturan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "max_triangle_edge_length": {
                "label": "Panjang tepi segitiga maksimum",
                "description": "Panjang tepi segitiga maksimum opsional untuk menekan faset bertepi panjang."
              },
              "interpolation_parameter": {
                "label": "Parameter interpolasi",
                "description": "Atribut titik untuk diinterpolasi (elevation, intensity, class, return_number, number_of_returns, scan_angle, time, rgb, user_data)."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              },
              "triangulation_backend": {
                "label": "Backend triangulasi",
                "description": "Pemilihan backend triangulasi: auto, delaunator, atau wbtopology."
              },
              "triangulation_auto_threshold": {
                "label": "Ambang otomatis triangulasi",
                "description": "Ketika backend=auto, beralih ke wbtopology pada jumlah sampel ini (default nonaktif; setel secara eksplisit untuk mengaktifkan)."
              },
              "triangulation_epsilon": {
                "label": "Epsilon triangulasi",
                "description": "Epsilon yang digunakan oleh penanganan duplikat backend wbtopology (default 1e-12)."
              },
              "triangulation_thin_cell_size": {
                "label": "Ukuran sel penjarangan triangulasi",
                "description": "Ukuran sel pra-penjarangan opsional untuk sampel triangulasi; nilai > 0 mengaktifkan penjarangan dan 0 menonaktifkannya."
              },
              "triangulation_thin_method": {
                "label": "Metode penjarangan triangulasi",
                "description": "Metode titik representatif untuk penjarangan: nearest_center, min_value, atau max_value."
              }
            }
          },
          "colourize_based_on_class": {
            "name": "Pewarnaan berdasarkan kelas",
            "description": "Mewarnai titik berdasarkan kelas: warna standar ASPRS (hijau=vegetasi, cokelat=tanah, abu-abu=bangunan, dll.). Dipadukan dengan intensitas untuk kontras. Visualisasi klasifikasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "intensity_blending_amount": {
                "label": "Jumlah pencampuran intensitas",
                "description": "Persen pencampuran [0,100] antara warna kelas dan intensitas."
              },
              "clr_str": {
                "label": "String warna",
                "description": "Penimpaan warna kelas opsional, mis. '2:(184,167,108);5:#9ab86c'."
              },
              "use_unique_clrs_for_buildings": {
                "label": "Gunakan warna unik untuk bangunan",
                "description": "Jika true, tetapkan warna unik ke klaster bangunan terhubung."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan yang digunakan untuk pewarnaan klaster bangunan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "colourize_based_on_point_returns": {
            "name": "Pewarnaan berdasarkan pantulan titik",
            "description": "Mewarnai titik berdasarkan urutan pantulan: pantulan pertama/antara/terakhir menggunakan warna berbeda. Visualisasi struktur pulsa multi-pantulan untuk validasi pemrosesan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "intensity_blending_amount": {
                "label": "Jumlah pencampuran intensitas",
                "description": "Persen pencampuran [0,100] antara warna pantulan dan intensitas."
              },
              "only_ret_colour": {
                "label": "Warna pantulan tunggal",
                "description": "Warna untuk titik pantulan tunggal."
              },
              "first_ret_colour": {
                "label": "Warna pantulan pertama",
                "description": "Warna untuk titik pantulan pertama dalam pulsa multi-pantulan."
              },
              "intermediate_ret_colour": {
                "label": "Warna pantulan antara",
                "description": "Warna untuk titik pantulan antara."
              },
              "last_ret_colour": {
                "label": "Warna pantulan terakhir",
                "description": "Warna untuk titik pantulan terakhir dalam pulsa multi-pantulan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "find_flightline_edge_points": {
            "name": "Temukan titik tepi jalur terbang",
            "description": "Menyaring titik tepi penerbangan: hanya mengekstrak titik di batas sapuan akuisisi. QA untuk tumpang tindih strip dan efek tepi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "individual_tree_detection": {
            "name": "Deteksi pohon individu",
            "description": "Mengidentifikasi puncak pohon: maksimum lokal dalam awan titik yang disaring berdasarkan tinggi dengan radius pencarian adaptif. Mengembalikan shapefile titik vektor berisi lokasi batang potensial.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "min_search_radius": {
                "label": "Radius pencarian minimum",
                "description": "Radius pencarian minimum dalam satuan peta (default 1.0)."
              },
              "min_height": {
                "label": "Tinggi minimum",
                "description": "Tinggi minimum untuk mempertimbangkan titik (default 0.0)."
              },
              "max_search_radius": {
                "label": "Radius pencarian maksimum",
                "description": "Radius pencarian maksimum; jika tidak disetel, gunakan min_search_radius."
              },
              "max_height": {
                "label": "Tinggi maksimum",
                "description": "Tinggi maksimum; jika tidak disetel, gunakan min_height."
              },
              "only_use_veg": {
                "label": "Hanya gunakan vegetasi",
                "description": "Jika true, proses hanya kelas vegetasi (default true)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path shapefile vektor keluaran."
              }
            }
          },
          "lidar_eigenvalue_features": {
            "name": "Fitur nilai eigen LiDAR",
            "description": "Menurunkan fitur PCA: nilai/vektor eigen dari ketetanggaan. Deskriptor bentuk (planaritas, linearitas, varians tinggi) untuk analisis awan titik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "num_neighbours": {
                "label": "Jumlah tetangga",
                "description": "Ukuran ketetanggaan target opsional (tidak termasuk titik itu sendiri)."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius pencarian maksimum opsional untuk pengumpulan ketetanggaan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path .eigen keluaran opsional dalam mode masukan tunggal."
              }
            }
          },
          "lidar_histogram": {
            "name": "Histogram LiDAR",
            "description": "Menghitung distribusi atribut: histogram frekuensi untuk elevasi, intensitas, sudut pindai, kelas. Persentil terpotong untuk menekan pencilan. Visualisasi HTML.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path HTML keluaran opsional untuk laporan histogram."
              },
              "parameter": {
                "label": "Parameter",
                "description": "Salah satu dari elevation, intensity, scan angle, class, atau time."
              },
              "clip_percent": {
                "label": "Persen pemotongan",
                "description": "Jumlah pemotongan persentil dalam [0,50] untuk ekor bawah/atas."
              }
            }
          },
          "lidar_info": {
            "name": "Info LiDAR",
            "description": "Menghasilkan laporan ringkasan metadata: jumlah titik, cakupan, rentang intensitas, histogram kelas, distribusi pantulan. Keluaran HTML/teks untuk dokumentasi data.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan keluaran opsional (.html/.txt)."
              },
              "show_point_density": {
                "label": "Tampilkan kerapatan titik",
                "description": "Jika true sertakan metrik kerapatan titik bbox aproksimatif."
              },
              "show_vlrs": {
                "label": "Tampilkan VLR",
                "description": "Penanda kompatibilitas; dicadangkan untuk keluaran metadata terperinci di masa mendatang."
              },
              "show_geokeys": {
                "label": "Tampilkan geokey",
                "description": "Penanda kompatibilitas; dicadangkan untuk keluaran CRS-key terperinci di masa mendatang."
              }
            }
          },
          "lidar_kappa": {
            "name": "Kappa LiDAR",
            "description": "Menghitung laporan kesepakatan kappa antara dua awan LiDAR terklasifikasi dan menulis raster kesepakatan kelas.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path LiDAR klasifikasi atau objek LiDAR bertipe."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path LiDAR referensi atau objek LiDAR bertipe."
              },
              "report": {
                "label": "Laporan",
                "description": "Path laporan HTML keluaran."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi grid untuk keluaran kesepakatan kelas spasial."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              },
              "output_class_accuracy": {
                "label": "Keluaran akurasi kelas",
                "description": "Penanda kompatibilitas yang dipertahankan demi paritas lama; raster kesepakatan selalu dihasilkan."
              }
            }
          },
          "lidar_point_density": {
            "name": "Kerapatan titik LiDAR",
            "description": "Memetakan intensitas pengambilan sampel LiDAR: jumlah titik per satuan luas (hitungan dalam radius per sel). Penilaian kualitas data, analisis cakupan, visualisasi pola akuisisi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran sel keluaran."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk penghitungan titik."
              },
              "returns_included": {
                "label": "Pantulan yang disertakan",
                "description": "Mode penyaringan pantulan: all, first, atau last."
              },
              "excluded_classes": {
                "label": "Kelas yang dikecualikan",
                "description": "Kelas yang dikecualikan (array atau string berpembatas koma)."
              },
              "min_elev": {
                "label": "Elevasi minimum",
                "description": "Ambang elevasi minimum yang digunakan untuk penyaringan inklusi titik."
              },
              "max_elev": {
                "label": "Elevasi maksimum",
                "description": "Ambang elevasi maksimum yang digunakan untuk penyaringan inklusi titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "lidar_point_return_analysis": {
            "name": "Analisis pantulan titik LiDAR",
            "description": "Alat QA: mengaudit validitas urutan pantulan (konsistensi multi/pertama/terakhir). Menghasilkan laporan + keluaran terklasifikasi yang menandai anomali pantulan. Pemeriksaan integritas data.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "create_output": {
                "label": "Buat keluaran",
                "description": "Jika true tulis keluaran QC LiDAR terklasifikasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran LiDAR opsional yang digunakan ketika create_output=true."
              },
              "report": {
                "label": "Laporan",
                "description": "Path keluaran laporan teks opsional."
              }
            }
          },
          "lidar_point_stats": {
            "name": "Statistik titik LiDAR",
            "description": "Membuat grid statistik raster: jumlah titik, jumlah pulsa, rata-rata titik/pulsa, rentang z/intensitas, kelas dominan per sel. Analisis multi-keluaran.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan opsional atau objek LiDAR bertipe. Jika dihilangkan, berjalan dalam mode batch atas file LiDAR di direktori saat ini."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi grid keluaran."
              },
              "num_points": {
                "label": "Jumlah titik",
                "description": "Buat raster jumlah titik."
              },
              "num_pulses": {
                "label": "Jumlah pulsa",
                "description": "Buat raster jumlah pulsa pantulan awal."
              },
              "avg_points_per_pulse": {
                "label": "Rata-rata titik per pulsa",
                "description": "Buat raster rata-rata titik per pulsa."
              },
              "z_range": {
                "label": "Rentang Z",
                "description": "Buat raster rentang elevasi."
              },
              "intensity_range": {
                "label": "Rentang intensitas",
                "description": "Buat raster rentang intensitas."
              },
              "predominant_class": {
                "label": "Kelas dominan",
                "description": "Buat raster kelas dominan."
              },
              "output_directory": {
                "label": "Direktori keluaran",
                "description": "Direktori keluaran opsional untuk raster yang dihasilkan."
              }
            }
          },
          "lidar_ransac_planes": {
            "name": "Bidang RANSAC LiDAR",
            "description": "Mengidentifikasi titik LiDAR yang planar secara lokal menggunakan pencocokan bidang RANSAC ketetanggaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk penyesuaian bidang lokal."
              },
              "num_iterations": {
                "label": "Jumlah iterasi",
                "description": "Jumlah iterasi RANSAC per titik."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Jumlah titik tetangga yang disampel per iterasi RANSAC."
              },
              "inlier_threshold": {
                "label": "Ambang inlier",
                "description": "Residu titik-ke-bidang maksimum untuk inlier."
              },
              "acceptable_model_size": {
                "label": "Ukuran model yang diterima",
                "description": "Jumlah titik inlier minimum yang diperlukan untuk model planar."
              },
              "max_planar_slope": {
                "label": "Kemiringan planar maksimum",
                "description": "Kemiringan bidang maksimum yang diterima dalam derajat."
              },
              "classify": {
                "label": "Klasifikasikan",
                "description": "Jika true klasifikasikan titik planar vs non-planar alih-alih menyaring."
              },
              "only_last_returns": {
                "label": "Hanya pantulan terakhir",
                "description": "Jika true, hanya gunakan pantulan akhir dalam penyesuaian model."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "lidar_rooftop_analysis": {
            "name": "Analisis atap LiDAR",
            "description": "Mengidentifikasi segmen atap planar di dalam tapak bangunan dan mengeluarkan poligon segmen dengan atribut atap.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "building_footprints": {
                "label": "Jejak bangunan",
                "description": "Layer poligon jejak bangunan."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk analisis atap lokal."
              },
              "inlier_threshold": {
                "label": "Ambang inlier",
                "description": "Residu maksimum untuk dukungan planar lokal."
              },
              "acceptable_model_size": {
                "label": "Ukuran model yang diterima",
                "description": "Ukuran segmen minimum."
              },
              "max_planar_slope": {
                "label": "Kemiringan planar maksimum",
                "description": "Kemiringan maksimum untuk faset atap dalam derajat."
              },
              "norm_diff_threshold": {
                "label": "Ambang selisih normal",
                "description": "Selisih sudut maksimum antara normal bertetangga dalam derajat."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut iluminasi untuk pencahayaan faset gaya bayangan bukit."
              },
              "altitude": {
                "label": "Altitud",
                "description": "Altitud iluminasi untuk pencahayaan faset gaya bayangan bukit."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional."
              }
            }
          },
          "normal_vectors": {
            "name": "Vektor normal",
            "description": "Menghitung normal permukaan per titik: PCA pada ketetanggaan lokal mengestimasi orientasi bidang. Normal disimpan dalam rekaman titik dan visualisasi RGB.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path LiDAR masukan atau objek LiDAR bertipe."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan untuk penyesuaian bidang lokal. Nilai <= 0 menggunakan jarak antar nominal yang diestimasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional."
              }
            }
          },
          "snap_events_to_routes": {
            "name": "Jepret kejadian ke rute",
            "description": "Menjepret titik kejadian ke garis rute dan melaporkan diagnostik ukuran/offset rute.",
            "params": {
              "routes": {
                "label": "Rute",
                "description": "Layer garis rute masukan."
              },
              "events": {
                "label": "Kejadian",
                "description": "Layer titik kejadian masukan."
              },
              "max_offset_distance": {
                "label": "Jarak offset maksimum",
                "description": "Jarak offset rute maksimum opsional dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik kejadian terjepret keluaran."
              }
            }
          },
          "locate_points_along_routes": {
            "name": "Tentukan lokasi titik sepanjang rute",
            "description": "Menemukan lokasi fitur titik di sepanjang garis rute dan menulis atribut ukuran rute.",
            "params": {
              "routes": {
                "label": "Rute",
                "description": "Layer garis rute masukan."
              },
              "points": {
                "label": "Titik",
                "description": "Layer titik masukan untuk ditentukan lokasinya sepanjang rute."
              },
              "max_offset_distance": {
                "label": "Jarak offset maksimum",
                "description": "Jarak offset titik-ke-rute maksimum opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "points_along_lines": {
            "name": "Titik sepanjang garis",
            "description": "Menghasilkan fitur titik berjarak teratur di sepanjang polyline masukan untuk pemantauan infrastruktur, pengambilan sampel lingkungan, dan analisis spasial.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis masukan."
              },
              "spacing": {
                "label": "Jarak antar",
                "description": "Jarak antar titik."
              },
              "include_end": {
                "label": "Sertakan ujung",
                "description": "Sertakan titik ujung garis (default true)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "route_calibrate": {
            "name": "Kalibrasi rute",
            "description": "Mengkalibrasi ukuran awal/akhir rute dari titik kontrol dengan ukuran yang diketahui.",
            "params": {
              "routes": {
                "label": "Rute",
                "description": "Layer garis rute masukan."
              },
              "control_points": {
                "label": "Titik kontrol",
                "description": "Layer titik kontrol masukan."
              },
              "control_measure_field": {
                "label": "Field ukuran kontrol",
                "description": "Field titik kontrol yang memuat nilai ukuran yang diketahui."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field pengenal rute opsional dalam routes. Default FID fitur."
              },
              "control_route_id_field": {
                "label": "Field ID rute kontrol",
                "description": "Field pengenal rute opsional dalam titik kontrol. Default FID fitur."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field keluaran untuk ukuran awal rute (default 'from_measure')."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field keluaran untuk ukuran akhir rute (default 'to_measure')."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Jarak offset titik kontrol maksimum dari geometri rute (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer rute terkalibrasi keluaran."
              }
            }
          },
          "route_event_lines_from_layer": {
            "name": "Garis kejadian rute dari layer",
            "description": "Membuat kejadian garis berute dari layer vektor kejadian menggunakan ukuran from/to.",
            "params": {
              "routes": {
                "label": "Rute",
                "description": "Layer garis rute masukan."
              },
              "events": {
                "label": "Kejadian",
                "description": "Layer vektor kejadian masukan."
              },
              "event_route_field": {
                "label": "Field rute kejadian",
                "description": "Field layer kejadian yang memuat pengenal rute."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field layer kejadian yang memuat ukuran awal."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field layer kejadian yang memuat ukuran akhir."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field layer rute opsional yang memuat pengenal rute. Default FID fitur."
              },
              "write_event_fid": {
                "label": "Tulis FID kejadian",
                "description": "Tulis EVENT_FID untuk mempertahankan ID fitur kejadian sumber (default true)."
              },
              "write_event_xy": {
                "label": "Tulis XY kejadian",
                "description": "Tulis atribut X/Y geometri kejadian sumber (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran."
              }
            }
          },
          "route_event_lines_from_table": {
            "name": "Garis kejadian rute dari tabel",
            "description": "Membuat kejadian garis berute dari tabel kejadian CSV dan layer rute menggunakan ukuran from/to.",
            "params": {
              "routes": {
                "label": "Rute",
                "description": "Layer garis rute masukan."
              },
              "events": {
                "label": "Kejadian",
                "description": "Path tabel kejadian CSV masukan."
              },
              "event_route_field": {
                "label": "Field rute kejadian",
                "description": "Field CSV yang memuat pengenal rute."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field CSV yang memuat ukuran awal."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field CSV yang memuat ukuran akhir."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field layer rute opsional yang memuat pengenal rute. Default FID fitur."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran."
              }
            }
          },
          "route_event_merge": {
            "name": "Gabungkan kejadian rute",
            "description": "Menggabungkan kejadian rute bersebelahan yang kompatibel.",
            "params": {
              "events": {
                "label": "Kejadian",
                "description": "Layer kejadian masukan yang memuat interval rute."
              },
              "event_route_field": {
                "label": "Field rute kejadian",
                "description": "Field pengenal rute layer kejadian."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field awal interval layer kejadian."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field akhir interval layer kejadian."
              },
              "group_fields": {
                "label": "Field pengelompokan",
                "description": "Field berpembatas koma opsional yang digunakan untuk kompatibilitas penggabungan. Default semua field non-ukuran."
              },
              "gap_tolerance": {
                "label": "Toleransi celah",
                "description": "Celah maksimum yang diizinkan untuk penggabungan kebersebelahan (default 0.0)."
              },
              "conflict_mode": {
                "label": "Mode konflik",
                "description": "Mode penanganan tumpang tindih: error|skip (default error)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer kejadian tergabung keluaran."
              }
            }
          },
          "route_event_overlay": {
            "name": "Tumpang susun kejadian rute",
            "description": "Menumpangtindihkan dua layer kejadian rute berdasarkan tumpang tindih interval.",
            "params": {
              "primary_events": {
                "label": "Kejadian utama",
                "description": "Layer kejadian utama."
              },
              "overlay_events": {
                "label": "Kejadian tumpang susun",
                "description": "Layer kejadian tumpang susun."
              },
              "primary_route_field": {
                "label": "Field rute utama",
                "description": "Field pengenal rute layer utama."
              },
              "primary_from_measure_field": {
                "label": "Field ukuran awal utama",
                "description": "Field awal interval layer utama."
              },
              "primary_to_measure_field": {
                "label": "Field ukuran akhir utama",
                "description": "Field akhir interval layer utama."
              },
              "overlay_route_field": {
                "label": "Field rute tumpang susun",
                "description": "Field pengenal rute layer tumpang susun."
              },
              "overlay_from_measure_field": {
                "label": "Field ukuran awal tumpang susun",
                "description": "Field awal interval layer tumpang susun."
              },
              "overlay_to_measure_field": {
                "label": "Field ukuran akhir tumpang susun",
                "description": "Field akhir interval layer tumpang susun."
              },
              "min_overlap_length": {
                "label": "Panjang tumpang tindih minimum",
                "description": "Panjang tumpang tindih minimum untuk dipertahankan (default 0.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer tumpang susun keluaran."
              }
            }
          },
          "route_event_points_from_layer": {
            "name": "Titik kejadian rute dari layer",
            "description": "Membuat kejadian titik berute dari layer vektor kejadian dan layer rute.",
            "params": {
              "routes": {
                "label": "Rute",
                "description": "Layer garis rute masukan."
              },
              "events": {
                "label": "Kejadian",
                "description": "Layer vektor kejadian masukan."
              },
              "event_route_field": {
                "label": "Field rute kejadian",
                "description": "Field layer kejadian yang memuat pengenal rute."
              },
              "measure_field": {
                "label": "Field ukuran",
                "description": "Field layer kejadian yang memuat ukuran kejadian titik."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field layer rute opsional yang memuat pengenal rute. Default FID fitur."
              },
              "write_event_fid": {
                "label": "Tulis FID kejadian",
                "description": "Tulis EVENT_FID untuk mempertahankan ID fitur kejadian sumber (default true)."
              },
              "write_event_xy": {
                "label": "Tulis XY kejadian",
                "description": "Tulis atribut X/Y geometri kejadian sumber (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "route_event_points_from_table": {
            "name": "Titik kejadian rute dari tabel",
            "description": "Membuat kejadian titik berute dari tabel kejadian CSV dan layer rute.",
            "params": {
              "routes": {
                "label": "Rute",
                "description": "Layer garis rute masukan."
              },
              "events": {
                "label": "Kejadian",
                "description": "Path tabel kejadian CSV masukan."
              },
              "event_route_field": {
                "label": "Field rute kejadian",
                "description": "Field CSV yang memuat pengenal rute."
              },
              "measure_field": {
                "label": "Field ukuran",
                "description": "Field CSV yang memuat ukuran kejadian titik."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field layer rute opsional yang memuat pengenal rute. Default FID fitur."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "route_event_split": {
            "name": "Pisahkan kejadian rute",
            "description": "Membagi kejadian rute berdasarkan ukuran batas per rute.",
            "params": {
              "events": {
                "label": "Kejadian",
                "description": "Layer kejadian masukan yang memuat interval rute."
              },
              "boundaries": {
                "label": "Batas",
                "description": "Layer batas masukan yang berisi titik putus ukuran rute."
              },
              "event_route_field": {
                "label": "Field rute kejadian",
                "description": "Field pengenal rute layer kejadian."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field awal interval layer kejadian."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field akhir interval layer kejadian."
              },
              "boundary_route_field": {
                "label": "Field rute batas",
                "description": "Field pengenal rute layer batas."
              },
              "boundary_measure_field": {
                "label": "Field ukuran batas",
                "description": "Field ukuran layer batas."
              },
              "min_segment_length": {
                "label": "Panjang segmen minimum",
                "description": "Panjang segmen hasil pemisahan minimum opsional yang dipertahankan (default 0.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer kejadian hasil pemisahan keluaran."
              }
            }
          },
          "route_measure_qa": {
            "name": "QA ukuran rute",
            "description": "Mendiagnosis celah ukuran kejadian rute, tumpang tindih, urutan non-monoton, dan ukuran duplikat.",
            "params": {
              "events": {
                "label": "Kejadian",
                "description": "Layer kejadian masukan yang memuat interval rute."
              },
              "route_field": {
                "label": "Field rute",
                "description": "Field pengenal rute."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field awal interval."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field akhir interval."
              },
              "gap_tolerance": {
                "label": "Toleransi celah",
                "description": "Toleransi celah (default 0.0)."
              },
              "overlap_tolerance": {
                "label": "Toleransi tumpang tindih",
                "description": "Toleransi tumpang tindih (default 0.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer diagnostik QA keluaran."
              }
            }
          },
          "route_recalibrate": {
            "name": "Kalibrasi ulang rute",
            "description": "Mengkalibrasi ulang ukuran rute yang diedit dari layer rute referensi sambil mempertahankan kontinuitas ukuran rute.",
            "params": {
              "original_routes": {
                "label": "Rute asli",
                "description": "Rute referensi yang berisi ukuran terkalibrasi sebelumnya."
              },
              "edited_routes": {
                "label": "Rute yang diedit",
                "description": "Rute tersunting yang akan dikalibrasi ulang."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field pengenal rute bersama opsional. Default-nya FID fitur."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Nama field awal ukuran (default 'from_measure')."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Nama field akhir ukuran (default 'to_measure')."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer rute terkalibrasi ulang keluaran."
              }
            }
          },
          "build_network_topology": {
            "name": "Bangun topologi jaringan",
            "description": "Membangun jaringan garis topologis bernode dengan keluaran tepi dan node yang stabil.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan saat mendeteksi dan memisahkan perpotongan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor sisi bernode secara topologis keluaran."
              },
              "nodes_output": {
                "label": "Keluaran node",
                "description": "Path vektor node keluaran opsional."
              }
            }
          },
          "closest_facility_network": {
            "name": "Fasilitas terdekat jaringan",
            "description": "Menemukan rute jaringan berbiaya minimum dari setiap titik insiden ke titik fasilitas terjangkau terdekat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "incidents": {
                "label": "Insiden",
                "description": "Layer titik kejadian/permintaan."
              },
              "facilities": {
                "label": "Fasilitas",
                "description": "Layer titik fasilitas/pasokan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik kejadian/fasilitas ke node jaringan terdekat."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (true/1/yes berarti hanya dari verteks pertama ke verteks kedua)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal (cakupan, sisi tak cocok, penggunaan cadangan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis rute fasilitas terdekat keluaran."
              }
            }
          },
          "generate_network_nodes": {
            "name": "Buat node jaringan",
            "description": "Menghasilkan node jaringan dan diagnostik node dari topologi garis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik node keluaran."
              }
            }
          },
          "k_shortest_paths_network": {
            "name": "K jalur terpendek jaringan",
            "description": "Menemukan k jalur sederhana terpendek antara koordinat awal dan akhir pada jaringan garis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "start_x": {
                "label": "X awal",
                "description": "Koordinat x awal."
              },
              "start_y": {
                "label": "Y awal",
                "description": "Koordinat y awal."
              },
              "end_x": {
                "label": "X akhir",
                "description": "Koordinat x akhir."
              },
              "end_y": {
                "label": "Y akhir",
                "description": "Koordinat y akhir."
              },
              "k": {
                "label": "K",
                "description": "Jumlah jalur terpendek yang dikembalikan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari koordinat awal/akhir ke node jaringan terdekat."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (true/1/yes berarti hanya dari verteks pertama ke verteks kedua)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal (cakupan, sisi tak cocok, penggunaan cadangan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran."
              }
            }
          },
          "location_allocation_network": {
            "name": "Alokasi lokasi jaringan",
            "description": "Memilih k fasilitas dan mengalokasikan titik permintaan berdasarkan biaya jaringan dengan penyelesaian greedy atau eksak, kapasitas opsional, dan batasan kandidat wajib/terlarang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "demand_points": {
                "label": "Titik permintaan",
                "description": "Layer titik permintaan yang akan dialokasikan."
              },
              "facilities": {
                "label": "Fasilitas",
                "description": "Layer titik fasilitas kandidat."
              },
              "facility_count": {
                "label": "Jumlah fasilitas",
                "description": "Jumlah fasilitas yang dipilih (k)."
              },
              "solver_mode": {
                "label": "Mode pemecah",
                "description": "Mode pemecah: auto, greedy, atau exact (exact ditujukan untuk masalah berukuran kecil)."
              },
              "demand_weight_field": {
                "label": "Field bobot permintaan",
                "description": "Field bobot permintaan numerik opsional dalam demand_points (default weight=1)."
              },
              "facility_capacity_field": {
                "label": "Field kapasitas fasilitas",
                "description": "Field kapasitas numerik opsional dalam facilities; kapasitas dikonsumsi oleh nilai demand_weight_field."
              },
              "required_facility_field": {
                "label": "Field fasilitas wajib",
                "description": "Field fasilitas boolean opsional yang menandai kandidat yang harus dipilih."
              },
              "forbidden_facility_field": {
                "label": "Field fasilitas terlarang",
                "description": "Field fasilitas boolean opsional yang menandai kandidat yang tidak boleh dipilih."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik permintaan/fasilitas ke node jaringan terdekat."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (true/1/yes berarti hanya dari verteks pertama ke verteks kedua)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal (cakupan, sisi tak cocok, penggunaan cadangan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis rute teralokasi keluaran."
              }
            }
          },
          "map_matching_v1": {
            "name": "Map matching V1",
            "description": "Menjepret titik trajektori ke jaringan garis dan merekonstruksi rute yang disimpulkan beserta diagnostiknya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "trajectory_points": {
                "label": "Titik trajektori",
                "description": "Layer titik trajektori masukan."
              },
              "timestamp_field": {
                "label": "Field stempel waktu",
                "description": "Field trajektori yang digunakan untuk pengurutan waktu."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius pencarian kandidat opsional di sekitar setiap titik trajektori."
              },
              "candidate_k": {
                "label": "K kandidat",
                "description": "Jumlah kandidat terdekat opsional yang dipertahankan per titik."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional untuk menjepret titik trajektori ke node jaringan."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "matched_points_output": {
                "label": "Keluaran titik tercocokkan",
                "description": "Path vektor keluaran opsional untuk diagnostik per titik."
              },
              "match_report": {
                "label": "Laporan pencocokan",
                "description": "Path keluaran JSON opsional untuk diagnostik ringkasan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran untuk rute hasil inferensi."
              }
            }
          },
          "multimodal_od_cost_matrix": {
            "name": "Matriks biaya OD multimoda",
            "description": "Menghitung biaya OD multimoda secara batch dan ringkasan moda antara set titik asal dan tujuan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal."
              },
              "destinations": {
                "label": "Tujuan",
                "description": "Layer titik tujuan."
              },
              "mode_field": {
                "label": "Field moda",
                "description": "Field atribut garis yang mengidentifikasi moda perjalanan per segmen."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik asal/tujuan ke node jaringan terdekat."
              },
              "default_mode_speed": {
                "label": "Kecepatan moda default",
                "description": "Kecepatan moda default dalam satuan koordinat per satuan waktu (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Penimpaan kecepatan moda",
                "description": "Penggantian mode:speed opsional yang dipisahkan koma (misalnya: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Moda yang diizinkan",
                "description": "Daftar izin moda opsional yang dipisahkan koma untuk disertakan dalam perutean."
              },
              "transfer_penalty": {
                "label": "Penalti transfer",
                "description": "Penalti tambahan opsional yang diterapkan setiap kali rute berganti moda."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal saat menggunakan masukan temporal langsung."
              },
              "scenario_bundle_csv": {
                "label": "CSV bundel skenario",
                "description": "CSV opsional yang mencantumkan skenario temporal bernama untuk keluaran OD multi-skenario komparatif."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "multimodal_routes_from_od": {
            "name": "Rute multimoda dari OD",
            "description": "Membangun geometri rute untuk pasangan titik asal-tujuan multimoda dengan ringkasan moda per rute.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal."
              },
              "destinations": {
                "label": "Tujuan",
                "description": "Layer titik tujuan."
              },
              "mode_field": {
                "label": "Field moda",
                "description": "Field atribut garis yang mengidentifikasi moda perjalanan per segmen."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik asal/tujuan ke node jaringan terdekat."
              },
              "default_mode_speed": {
                "label": "Kecepatan moda default",
                "description": "Kecepatan moda default dalam satuan koordinat per satuan waktu (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Penimpaan kecepatan moda",
                "description": "Penggantian mode:speed opsional yang dipisahkan koma (misalnya: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Moda yang diizinkan",
                "description": "Daftar izin moda opsional yang dipisahkan koma untuk disertakan dalam perutean."
              },
              "transfer_penalty": {
                "label": "Penalti transfer",
                "description": "Penalti tambahan opsional yang diterapkan setiap kali rute berganti moda."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal saat menggunakan masukan temporal langsung."
              },
              "scenario_bundle_csv": {
                "label": "CSV bundel skenario",
                "description": "CSV opsional yang mencantumkan skenario temporal bernama untuk keluaran rute multi-skenario komparatif."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis rute keluaran."
              }
            }
          },
          "multimodal_shortest_path": {
            "name": "Jalur terpendek multimoda",
            "description": "Menemukan jalur terpendek yang memperhatikan moda pada jaringan garis dengan penalti transfer yang dapat dikonfigurasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "start_x": {
                "label": "X awal",
                "description": "Koordinat x awal."
              },
              "start_y": {
                "label": "Y awal",
                "description": "Koordinat y awal."
              },
              "end_x": {
                "label": "X akhir",
                "description": "Koordinat x akhir."
              },
              "end_y": {
                "label": "Y akhir",
                "description": "Koordinat y akhir."
              },
              "mode_field": {
                "label": "Field moda",
                "description": "Field atribut garis yang mengidentifikasi moda perjalanan per segmen."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari koordinat awal/akhir ke node jaringan terdekat."
              },
              "default_mode_speed": {
                "label": "Kecepatan moda default",
                "description": "Kecepatan moda default dalam satuan koordinat per satuan waktu (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Penimpaan kecepatan moda",
                "description": "Penggantian mode:speed opsional yang dipisahkan koma (misalnya: walk:1.4,drive:12,transit:8)."
              },
              "allowed_modes": {
                "label": "Moda yang diizinkan",
                "description": "Daftar izin moda opsional yang dipisahkan koma untuk disertakan dalam perutean."
              },
              "transfer_penalty": {
                "label": "Penalti transfer",
                "description": "Penalti tambahan opsional yang diterapkan setiap kali rute berganti moda."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran."
              }
            }
          },
          "network_accessibility_metrics": {
            "name": "Metrik aksesibilitas jaringan",
            "description": "Menghitung indeks aksesibilitas untuk titik asal berdasarkan keterjangkauan ke tujuan dengan batas impedansi dan fungsi peluruhan opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal."
              },
              "destinations": {
                "label": "Tujuan",
                "description": "Layer titik tujuan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik asal/tujuan ke node jaringan terdekat."
              },
              "impedance_cutoff": {
                "label": "Batas impedansi",
                "description": "Ambang jarak maksimum opsional untuk menghitung tujuan yang dapat dijangkau (default: tak hingga)."
              },
              "decay_function": {
                "label": "Fungsi peluruhan",
                "description": "Fungsi peluruhan opsional: 'none' (default), 'linear', atau 'exponential' untuk aksesibilitas terboboti jarak."
              },
              "decay_parameter": {
                "label": "Parameter peluruhan",
                "description": "Parameter peluruhan opsional (lambda untuk exponential, laju untuk linear)."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "parallel_execution": {
                "label": "Eksekusi paralel",
                "description": "Jika true (default), evaluasi titik asal secara paralel untuk perhitungan aksesibilitas yang lebih cepat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (titik asal dengan metrik aksesibilitas)."
              }
            }
          },
          "network_centrality_metrics": {
            "name": "Metrik sentralitas jaringan",
            "description": "Menghitung metrik sentralitas dasar degree, closeness, dan betweenness untuk node jaringan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari pembangunan graf (true/1/yes memblokir)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "network_connected_components": {
            "name": "Komponen terhubung jaringan",
            "description": "Menetapkan ID komponen terhubung ke setiap fitur garis dalam jaringan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran."
              }
            }
          },
          "network_node_degree": {
            "name": "Derajat node jaringan",
            "description": "Mengekstrak node jaringan dari fitur garis dan menghitung derajat node dan jenis node.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "network_od_cost_matrix": {
            "name": "Matriks biaya OD jaringan",
            "description": "Menghitung biaya jalur terpendek asal-tujuan pada jaringan garis dan menulis matriks CSV.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal."
              },
              "destinations": {
                "label": "Tujuan",
                "description": "Layer titik tujuan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik asal/tujuan ke node jaringan terdekat."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal (cakupan, sisi tak cocok, penggunaan cadangan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "network_routes_from_od": {
            "name": "Rute jaringan dari OD",
            "description": "Membangun geometri rute untuk pasangan titik asal-tujuan pada jaringan garis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal."
              },
              "destinations": {
                "label": "Tujuan",
                "description": "Layer titik tujuan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik asal/tujuan ke node jaringan terdekat."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal (cakupan, sisi tak cocok, penggunaan cadangan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis rute keluaran."
              }
            }
          },
          "network_service_area": {
            "name": "Area layanan jaringan",
            "description": "Menghitung node jaringan yang dapat dijangkau dari titik asal dalam biaya jaringan maksimum.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal."
              },
              "max_cost": {
                "label": "Biaya maksimum",
                "description": "Biaya jalur maksimum yang dapat dijangkau."
              },
              "ring_costs": {
                "label": "Biaya cincin",
                "description": "Ambang cincin opsional yang dipisahkan koma untuk keluaran multi-cincin (misalnya: 5,10,15)."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik asal ke node jaringan terdekat."
              },
              "output_mode": {
                "label": "Mode keluaran",
                "description": "Mode keluaran: 'nodes' (default), 'edges' untuk segmen sisi terjangkau yang terpangkas biaya, atau 'polygons' untuk poligon mirip isokron per titik asal dari envelope sisi terjangkau."
              },
              "polygon_merge_origins": {
                "label": "Gabungkan poligon per asal",
                "description": "Jika true dan output_mode='polygons', lebur poligon titik asal yang tumpang tindih menjadi cakupan tergabung per cincin alih-alih menghasilkan satu poligon per titik asal."
              },
              "mode_field": {
                "label": "Field moda",
                "description": "Field atribut garis opsional yang mengidentifikasi moda perjalanan per segmen; mengaktifkan biaya area layanan yang sadar moda."
              },
              "default_mode_speed": {
                "label": "Kecepatan moda default",
                "description": "Kecepatan moda default dalam satuan koordinat per satuan waktu jika mode_field diberikan (default: 1)."
              },
              "mode_speed_overrides": {
                "label": "Penimpaan kecepatan moda",
                "description": "Penggantian mode:speed opsional yang dipisahkan koma (misalnya: walk:1.4,drive:12)."
              },
              "allowed_modes": {
                "label": "Moda yang diizinkan",
                "description": "Daftar izin moda opsional yang dipisahkan koma untuk disertakan jika mode_field diberikan."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal (cakupan, sisi tak cocok, penggunaan cadangan)."
              },
              "snapped_origins_output": {
                "label": "Keluaran asal terjepret",
                "description": "Path vektor keluaran opsional untuk titik jangkar asal terjepret internal yang digunakan sebagai awal penelusuran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor area layanan keluaran."
              }
            }
          },
          "network_topology_audit": {
            "name": "Audit topologi jaringan",
            "description": "Mengaudit jaringan garis untuk anomali topologi—komponen terputus, ujung buntu, dan anomali derajat—yang menyebabkan kegagalan perutean.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir untuk dikecualikan dari analisis."
              },
              "report": {
                "label": "Laporan",
                "description": "Path keluaran JSON opsional untuk laporan ringkasan audit."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran untuk diagnostik per node."
              }
            }
          },
          "od_sensitivity_analysis": {
            "name": "Analisis sensitivitas OD",
            "description": "Menghitung biaya jalur terpendek OD dengan perturbasi impedansi dan mengeluarkan statistik sensitivitas melalui pengambilan sampel Monte Carlo.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal."
              },
              "destinations": {
                "label": "Tujuan",
                "description": "Layer titik tujuan."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik wajib yang digunakan sebagai pengali impedansi untuk analisis perturbasi."
              },
              "impedance_disturbance_range": {
                "label": "Rentang gangguan impedansi",
                "description": "Rentang perturbasi biaya sebagai 'min_factor,max_factor' (misalnya, '0.8,1.2' untuk variasi ±20%)."
              },
              "monte_carlo_samples": {
                "label": "Sampel Monte Carlo",
                "description": "Jumlah sampel Monte Carlo untuk analisis perturbasi (default 1, maks 100)."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari titik asal/tujuan ke node jaringan terdekat."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup."
              },
              "node_cost_points": {
                "label": "Titik biaya node",
                "description": "Layer titik opsional yang menyediakan biaya masuk per node (misalnya, tundaan perpotongan)."
              },
              "node_cost_field": {
                "label": "Field biaya node",
                "description": "Field numerik dalam node_cost_points yang berisi biaya per node non-negatif."
              },
              "node_cost_snap_distance": {
                "label": "Jarak jepret biaya node",
                "description": "Jarak maksimum opsional dari setiap titik biaya node ke node jaringan untuk penetapan."
              },
              "parallel_execution": {
                "label": "Eksekusi paralel",
                "description": "Jika true (default), mengevaluasi pencarian asal secara paralel untuk proses OD dasar dan terperturbasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran dengan pasangan OD dan statistik sensitivitas."
              }
            }
          },
          "shortest_path_network": {
            "name": "Jalur terpendek jaringan",
            "description": "Menemukan jalur terpendek antara koordinat awal dan akhir pada jaringan garis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer jaringan garis masukan."
              },
              "start_x": {
                "label": "X awal",
                "description": "Koordinat x awal."
              },
              "start_y": {
                "label": "Y awal",
                "description": "Koordinat y awal."
              },
              "end_x": {
                "label": "X akhir",
                "description": "Koordinat x akhir."
              },
              "end_y": {
                "label": "Y akhir",
                "description": "Koordinat y akhir."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan node opsional untuk pembangunan graf."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak maksimum opsional dari koordinat awal/akhir ke node jaringan terdekat."
              },
              "edge_cost_field": {
                "label": "Field biaya edge",
                "description": "Field garis numerik opsional yang digunakan sebagai pengali impedansi untuk panjang segmen."
              },
              "one_way_field": {
                "label": "Field satu arah",
                "description": "Field garis opsional yang menandai sisi terdigitasi satu arah (mendukung FT/TF/B ditambah nilai boolean lama)."
              },
              "blocked_field": {
                "label": "Field terblokir",
                "description": "Field garis opsional yang menandai sisi terblokir/tertutup untuk dikecualikan dari perutean (true/1/yes memblokir)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer titik penghalang opsional; node jaringan terdekat diblokir dari penelusuran."
              },
              "barrier_snap_distance": {
                "label": "Jarak jepret penghalang",
                "description": "Jarak maksimum opsional dari setiap titik penghalang ke node jaringan untuk pemblokiran."
              },
              "turn_penalty": {
                "label": "Penalti belok",
                "description": "Biaya tambahan opsional yang diterapkan pada belokan tidak lurus di node jaringan."
              },
              "u_turn_penalty": {
                "label": "Penalti putar balik",
                "description": "Biaya tambahan opsional yang diterapkan pada transisi putar balik."
              },
              "forbid_u_turns": {
                "label": "Larang putar balik",
                "description": "Jika true, larang transisi putar balik."
              },
              "forbid_left_turns": {
                "label": "Larang belok kiri",
                "description": "Jika true, larang transisi belok kiri."
              },
              "forbid_right_turns": {
                "label": "Larang belok kanan",
                "description": "Jika true, larang transisi belok kanan."
              },
              "turn_restrictions_csv": {
                "label": "CSV pembatasan belok",
                "description": "CSV opsional berisi transisi belokan menggunakan kolom prev_x,prev_y,node_x,node_y,next_x,next_y. Kolom opsional: forbidden (default true jika tidak ada kolom turn_cost) dan turn_cost (atau penalty/cost/extra_cost) untuk biaya tambahan per belokan."
              },
              "temporal_cost_profile": {
                "label": "Profil biaya temporal",
                "description": "CSV opsional yang mendefinisikan biaya sisi bergantung waktu (kolom: edge_id,dow,start_minute,end_minute,value)."
              },
              "temporal_edge_id_field": {
                "label": "Field ID edge temporal",
                "description": "Field jaringan opsional yang digunakan untuk mencocokkan nilai edge_id temporal_cost_profile (default EDGE_ID)."
              },
              "departure_time": {
                "label": "Waktu keberangkatan",
                "description": "Waktu keberangkatan RFC3339 opsional yang digunakan untuk pencarian profil temporal."
              },
              "temporal_mode": {
                "label": "Mode temporal",
                "description": "Mode interpretasi temporal opsional: multiplier atau absolute."
              },
              "temporal_fallback": {
                "label": "Fallback temporal",
                "description": "Cadangan opsional jika baris temporal tidak ada: static_cost atau error."
              },
              "temporal_profile_report": {
                "label": "Laporan profil temporal",
                "description": "Path keluaran JSON opsional untuk diagnostik profil temporal (cakupan, sisi tak cocok, penggunaan cadangan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran."
              }
            }
          },
          "split_lines_at_intersections": {
            "name": "Pisahkan garis di persimpangan",
            "description": "Membagi jaringan garis di mana pun segmen garis berpotongan, termasuk perpotongan dengan dirinya sendiri.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis masukan yang akan dipisah pada perpotongan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi pemisahan; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis hasil pemisahan keluaran."
              }
            }
          },
          "snap_points_to_network": {
            "name": "Jepret titik ke jaringan",
            "description": "Menjepret fitur titik masukan ke lokasi terdekat di sepanjang layer garis jaringan.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer titik masukan yang akan dijepret."
              },
              "network": {
                "label": "Jaringan",
                "description": "Layer garis jaringan masukan."
              },
              "max_snap_distance": {
                "label": "Jarak jepret maksimum",
                "description": "Jarak penjepretan maksimum opsional dalam satuan peta."
              },
              "keep_unsnapped": {
                "label": "Pertahankan yang tidak terjepret",
                "description": "Jika true (default), pertahankan titik yang tidak dapat dijepret dalam toleransi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik terjepret keluaran."
              }
            }
          },
          "transfer_attributes": {
            "name": "Transfer atribut",
            "description": "Mentransfer atribut sumber ke fitur target menggunakan predikat spasial.",
            "params": {
              "target": {
                "label": "Target",
                "description": "Layer target yang menerima atribut yang ditransfer."
              },
              "source": {
                "label": "Sumber",
                "description": "Layer sumber yang menyediakan atribut."
              },
              "predicate": {
                "label": "Predikat",
                "description": "Predikat spasial: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak jika predicate=within_distance."
              },
              "strategy": {
                "label": "Strategi",
                "description": "Strategi transfer: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Awalan",
                "description": "Awalan untuk field sumber yang ditransfer (default SRC_)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "travelling_salesman_problem": {
            "name": "Travelling salesman problem",
            "description": "Menemukan solusi aproksimasi untuk travelling salesman problem (TSP) menggunakan heuristik 2-opt. Dengan sekumpulan lokasi titik, mengidentifikasi rute terpendek yang menghubungkan semua titik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "duration": {
                "label": "Durasi",
                "description": "Durasi optimasi maksimum dalam detik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path polyline keluaran opsional."
              }
            }
          },
          "vehicle_routing_cvrp": {
            "name": "Perutean kendaraan CVRP",
            "description": "Membangun rute pengiriman multi-depot dengan batasan kapasitas, kontrol armada heterogen, mode tujuan optimasi, dan optimasi lokal opsional.",
            "params": {
              "network": {
                "label": "Jaringan",
                "description": "Layer jaringan garis masukan (divalidasi untuk kesetaraan kontrak)."
              },
              "depot_points": {
                "label": "Titik depot",
                "description": "Layer titik depo; setiap titik dapat menyumbang satu kendaraan atau lebih."
              },
              "stop_points": {
                "label": "Titik pemberhentian",
                "description": "Layer titik perhentian pengiriman."
              },
              "demand_field": {
                "label": "Field permintaan",
                "description": "Field permintaan numerik dalam stop_points (default: demand)."
              },
              "priority_field": {
                "label": "Field prioritas",
                "description": "Field prioritas perhentian opsional menggunakan nilai seperti required/high/normal/low atau peringkat numerik."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Field profil kendaraan yang diizinkan",
                "description": "Field perhentian opsional yang mencantumkan profil kendaraan yang kompatibel (dipisahkan koma/titik koma/pipa)."
              },
              "allowed_route_classes_field": {
                "label": "Field kelas rute yang diizinkan",
                "description": "Alias opsional dari allowed_vehicle_profiles_field untuk aturan kompatibilitas kelas rute."
              },
              "depot_id_field": {
                "label": "Field ID depot",
                "description": "Field ID depo opsional yang digunakan dalam keluaran rute/penetapan."
              },
              "vehicle_count_field": {
                "label": "Field jumlah kendaraan",
                "description": "Field depo opsional untuk jumlah kendaraan yang dihasilkan di setiap depo."
              },
              "vehicle_capacity_field": {
                "label": "Field kapasitas kendaraan",
                "description": "Field depo opsional yang menggantikan vehicle_capacity per templat depo/kendaraan."
              },
              "vehicle_fixed_cost_field": {
                "label": "Field biaya tetap kendaraan",
                "description": "Field depo opsional yang menggantikan vehicle_fixed_cost per templat depo/kendaraan."
              },
              "travel_speed_field": {
                "label": "Field kecepatan perjalanan",
                "description": "Field depo opsional yang menggantikan travel_speed per templat depo/kendaraan."
              },
              "max_route_distance_field": {
                "label": "Field jarak rute maksimum",
                "description": "Field depo opsional yang menggantikan max_route_distance per templat depo/kendaraan."
              },
              "max_route_time_field": {
                "label": "Field waktu rute maksimum",
                "description": "Field depo opsional yang menggantikan max_route_time per templat depo/kendaraan."
              },
              "vehicle_profile_field": {
                "label": "Field profil kendaraan",
                "description": "Field depo opsional yang mendefinisikan token profil/kategori kendaraan yang digunakan untuk kompatibilitas perhentian."
              },
              "vehicle_route_class_field": {
                "label": "Field kelas rute kendaraan",
                "description": "Alias opsional dari vehicle_profile_field untuk aturan kompatibilitas kelas rute."
              },
              "vehicle_capacity": {
                "label": "Kapasitas kendaraan",
                "description": "Kapasitas per kendaraan (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Biaya tetap kendaraan",
                "description": "Biaya tetap opsional yang dibebankan per kendaraan/rute yang dikerahkan (default: 0)."
              },
              "max_vehicles": {
                "label": "Kendaraan maksimum",
                "description": "Jumlah maksimum kendaraan/rute opsional yang dibangun."
              },
              "max_route_distance": {
                "label": "Jarak rute maksimum",
                "description": "Jarak perjalanan maksimum opsional per rute, termasuk kembali ke depo."
              },
              "travel_speed": {
                "label": "Kecepatan perjalanan",
                "description": "Kecepatan perjalanan dalam satuan koordinat per satuan waktu (default: 1)."
              },
              "max_route_time": {
                "label": "Waktu rute maksimum",
                "description": "Durasi rute maksimum opsional dalam satuan waktu model, termasuk kembali ke depo."
              },
              "max_stops_per_vehicle": {
                "label": "Pemberhentian maksimum per kendaraan",
                "description": "Jumlah maksimum perhentian opsional yang ditetapkan ke setiap rute kendaraan."
              },
              "objective_mode": {
                "label": "Mode tujuan",
                "description": "Sasaran pembangunan rute: minimize_distance, minimize_vehicles, atau minimize_cost."
              },
              "apply_local_optimization": {
                "label": "Terapkan optimasi lokal",
                "description": "Jika true, terapkan tahap perbaikan lokal 2-opt deterministik pada setiap rute yang dibangun (default: true)."
              },
              "apply_simulated_annealing": {
                "label": "Terapkan simulated annealing",
                "description": "Jika true, terapkan tahap penghalusan simulated annealing berseed per rute setelah optimasi greedy/lokal (default: false)."
              },
              "sa_iterations": {
                "label": "Iterasi SA",
                "description": "Iterasi simulated annealing maksimum per rute jika apply_simulated_annealing=true (default: 1500)."
              },
              "sa_initial_temperature": {
                "label": "Suhu awal SA",
                "description": "Suhu simulated annealing awal (> 0, default: 1.0)."
              },
              "sa_cooling_rate": {
                "label": "Laju pendinginan SA",
                "description": "Pengali pendinginan simulated annealing dalam (0, 1); default 0.995."
              },
              "sa_seed": {
                "label": "Seed SA",
                "description": "Seed acak deterministik opsional untuk simulated annealing (default: 42)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis rute keluaran."
              },
              "assignment_output": {
                "label": "Keluaran penugasan",
                "description": "Keluaran titik penetapan perhentian opsional dengan diagnostik urutan kunjungan/muatan."
              }
            }
          },
          "vehicle_routing_pickup_delivery": {
            "name": "Perutean kendaraan jemput-antar",
            "description": "Membangun rute penjemputan-pengiriman berpasangan dengan batasan prioritas urutan dan kapasitas menggunakan baseline nearest-neighbour deterministik.",
            "params": {
              "network": {
                "label": "Jaringan",
                "description": "Layer jaringan garis masukan (divalidasi untuk kesetaraan kontrak)."
              },
              "depot_points": {
                "label": "Titik depot",
                "description": "Layer titik depo; titik pertama digunakan sebagai depo aktif dalam implementasi dasar ini."
              },
              "stop_points": {
                "label": "Titik pemberhentian",
                "description": "Layer titik perhentian yang berisi rekaman penjemputan dan pengiriman berpasangan."
              },
              "request_id_field": {
                "label": "Field ID permintaan",
                "description": "Field pengenal permintaan dalam stop_points yang digunakan untuk memasangkan rekaman penjemputan dan pengiriman (default: request_id)."
              },
              "stop_type_field": {
                "label": "Field jenis pemberhentian",
                "description": "Field tipe perhentian dalam stop_points yang berisi label pickup/delivery (default: stop_type)."
              },
              "demand_field": {
                "label": "Field permintaan",
                "description": "Field permintaan numerik dalam stop_points; permintaan penjemputan dimuat dan permintaan pengiriman diabaikan (default: demand)."
              },
              "vehicle_capacity": {
                "label": "Kapasitas kendaraan",
                "description": "Kapasitas per kendaraan (> 0)."
              },
              "max_vehicles": {
                "label": "Kendaraan maksimum",
                "description": "Jumlah maksimum kendaraan/rute opsional yang dibangun."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis rute keluaran."
              },
              "assignment_output": {
                "label": "Keluaran penugasan",
                "description": "Keluaran titik penetapan perhentian opsional dengan diagnostik permintaan dan prasyarat urutan."
              }
            }
          },
          "vehicle_routing_vrptw": {
            "name": "Perutean kendaraan VRPTW",
            "description": "Membangun rute VRPTW multi-depot dengan batasan kapasitas, pengaturan armada heterogen, jendela istirahat, dan kontrol mode tujuan optimasi.",
            "params": {
              "network": {
                "label": "Jaringan",
                "description": "Layer jaringan garis masukan (divalidasi untuk kesetaraan kontrak)."
              },
              "depot_points": {
                "label": "Titik depot",
                "description": "Layer titik depo; setiap titik dapat menyumbang satu kendaraan atau lebih."
              },
              "stop_points": {
                "label": "Titik pemberhentian",
                "description": "Layer titik perhentian pengiriman dengan field permintaan dan jendela waktu."
              },
              "demand_field": {
                "label": "Field permintaan",
                "description": "Field permintaan numerik dalam stop_points (default: demand)."
              },
              "priority_field": {
                "label": "Field prioritas",
                "description": "Field prioritas perhentian opsional menggunakan nilai seperti required/high/normal/low atau peringkat numerik."
              },
              "allowed_vehicle_profiles_field": {
                "label": "Field profil kendaraan yang diizinkan",
                "description": "Field perhentian opsional yang mencantumkan profil kendaraan yang kompatibel (dipisahkan koma/titik koma/pipa)."
              },
              "allowed_route_classes_field": {
                "label": "Field kelas rute yang diizinkan",
                "description": "Alias opsional dari allowed_vehicle_profiles_field untuk aturan kompatibilitas kelas rute."
              },
              "tw_start_field": {
                "label": "Field awal jendela waktu",
                "description": "Field awal jendela waktu numerik dalam stop_points (default: tw_start)."
              },
              "tw_end_field": {
                "label": "Field akhir jendela waktu",
                "description": "Field akhir jendela waktu numerik dalam stop_points (default: tw_end)."
              },
              "service_time_field": {
                "label": "Field waktu layanan",
                "description": "Field waktu layanan per perhentian numerik dalam stop_points (default: service_time)."
              },
              "depot_id_field": {
                "label": "Field ID depot",
                "description": "Field ID depo opsional yang digunakan dalam keluaran rute/penetapan."
              },
              "vehicle_count_field": {
                "label": "Field jumlah kendaraan",
                "description": "Field depo opsional untuk jumlah kendaraan yang dihasilkan di setiap depo."
              },
              "vehicle_capacity_field": {
                "label": "Field kapasitas kendaraan",
                "description": "Field depo opsional yang menggantikan vehicle_capacity per templat depo/kendaraan."
              },
              "vehicle_fixed_cost_field": {
                "label": "Field biaya tetap kendaraan",
                "description": "Field depo opsional yang menggantikan vehicle_fixed_cost per templat depo/kendaraan."
              },
              "travel_speed_field": {
                "label": "Field kecepatan perjalanan",
                "description": "Field depo opsional yang menggantikan travel_speed per templat depo/kendaraan."
              },
              "max_route_distance_field": {
                "label": "Field jarak rute maksimum",
                "description": "Field depo opsional yang menggantikan max_route_distance per templat depo/kendaraan."
              },
              "max_route_time_field": {
                "label": "Field waktu rute maksimum",
                "description": "Field depo opsional yang menggantikan max_route_time per templat depo/kendaraan."
              },
              "vehicle_profile_field": {
                "label": "Field profil kendaraan",
                "description": "Field depo opsional yang mendefinisikan token profil/kategori kendaraan yang digunakan untuk kompatibilitas perhentian."
              },
              "vehicle_route_class_field": {
                "label": "Field kelas rute kendaraan",
                "description": "Alias opsional dari vehicle_profile_field untuk aturan kompatibilitas kelas rute."
              },
              "depot_close_time_field": {
                "label": "Field waktu tutup depot",
                "description": "Field depo opsional yang menggantikan depot_close_time per templat depo/kendaraan."
              },
              "break_start_field": {
                "label": "Field awal istirahat",
                "description": "Field depo opsional yang menggantikan break_start_time per templat depo/kendaraan."
              },
              "break_end_field": {
                "label": "Field akhir istirahat",
                "description": "Field depo opsional yang menggantikan break_end_time per templat depo/kendaraan."
              },
              "break_duration_field": {
                "label": "Field durasi istirahat",
                "description": "Field depo opsional yang menggantikan break_duration per templat depo/kendaraan."
              },
              "vehicle_capacity": {
                "label": "Kapasitas kendaraan",
                "description": "Kapasitas per kendaraan (> 0)."
              },
              "vehicle_fixed_cost": {
                "label": "Biaya tetap kendaraan",
                "description": "Biaya tetap opsional yang dibebankan per kendaraan/rute yang dikerahkan (default: 0)."
              },
              "start_time": {
                "label": "Waktu mulai",
                "description": "Waktu mulai rute dalam satuan waktu model (default: 0)."
              },
              "travel_speed": {
                "label": "Kecepatan perjalanan",
                "description": "Kecepatan perjalanan dalam satuan koordinat per satuan waktu (default: 1)."
              },
              "enforce_time_windows": {
                "label": "Terapkan jendela waktu",
                "description": "Jika true, hanya perhentian dengan keterlambatan <= allowed_lateness yang memenuhi syarat untuk penetapan (default: false)."
              },
              "allowed_lateness": {
                "label": "Keterlambatan yang diizinkan",
                "description": "Keterlambatan maksimum yang ditoleransi jika enforce_time_windows=true (default: 0)."
              },
              "depot_close_time": {
                "label": "Waktu tutup depot",
                "description": "Waktu tutup keras opsional yang mengharuskan setiap rute kembali ke depo."
              },
              "break_start_time": {
                "label": "Waktu mulai istirahat",
                "description": "Waktu mulai jendela istirahat global opsional untuk semua kendaraan."
              },
              "break_end_time": {
                "label": "Waktu akhir istirahat",
                "description": "Waktu akhir jendela istirahat global opsional untuk semua kendaraan."
              },
              "break_duration": {
                "label": "Durasi istirahat",
                "description": "Durasi istirahat global opsional yang diterapkan sekali per rute jika jendela istirahat berpotongan."
              },
              "use_priority_scoring": {
                "label": "Gunakan skor prioritas",
                "description": "Jika true, memeringkat kandidat yang layak berdasarkan proyeksi keterlambatan/kelonggaran sebelum jarak perjalanan; jika false, menggunakan dasar tetangga terdekat (default: true)."
              },
              "max_vehicles": {
                "label": "Kendaraan maksimum",
                "description": "Jumlah maksimum kendaraan/rute opsional yang dibangun."
              },
              "max_route_distance": {
                "label": "Jarak rute maksimum",
                "description": "Jarak perjalanan rute maksimum opsional, termasuk kembali ke depo."
              },
              "max_route_time": {
                "label": "Waktu rute maksimum",
                "description": "Durasi rute maksimum opsional dalam satuan waktu model, termasuk kembali ke depo."
              },
              "max_stops_per_vehicle": {
                "label": "Pemberhentian maksimum per kendaraan",
                "description": "Jumlah maksimum perhentian opsional yang ditetapkan ke setiap rute kendaraan."
              },
              "objective_mode": {
                "label": "Mode tujuan",
                "description": "Sasaran pembangunan rute: minimize_lateness, minimize_distance, minimize_vehicles, atau minimize_cost."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis rute keluaran."
              },
              "assignment_output": {
                "label": "Keluaran penugasan",
                "description": "Keluaran titik penetapan perhentian opsional dengan diagnostik jendela waktu."
              }
            }
          },
          "clip": {
            "name": "Potong",
            "description": "Memotong poligon masukan ke batas poligon overlay menggunakan perpotongan berbasis topologi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "difference": {
            "name": "Selisih",
            "description": "Menghapus area poligon overlay dari poligon masukan menggunakan selisih berbasis topologi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "dissolve": {
            "name": "Lebur (dissolve)",
            "description": "Menghapus batas poligon bersama secara global atau berdasarkan field atribut dissolve.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "dissolve_field": {
                "label": "Field lebur",
                "description": "Field atribut opsional yang digunakan untuk melebur poligon dalam kelompok; jika dihilangkan, semua poligon dilebur."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan selama operasi topologi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "erase": {
            "name": "Hapus",
            "description": "Menghapus area poligon overlay dari poligon masukan dan mempertahankan atribut masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "identity": {
            "name": "Identitas",
            "description": "Mempertahankan semua fitur masukan; bagian yang tumpang tindih dengan layer identitas juga memperoleh atribut identitas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "intersect": {
            "name": "Irisan",
            "description": "Memotongkan poligon masukan dan overlay menggunakan overlay berbasis topologi dan melacak ID fitur sumber.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "line_intersections": {
            "name": "Perpotongan garis",
            "description": "Menemukan titik perpotongan garis antara layer masukan dan overlay serta menambahkan ID induk dengan atribut yang digabungkan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis atau poligon masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer garis atau poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi geometri; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "line_polygon_clip": {
            "name": "Potong garis dengan poligon",
            "description": "Memotong fitur garis ke bagian dalam poligon dan mengeluarkan segmen garis yang terpotong.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis masukan."
              },
              "clip": {
                "label": "Potong",
                "description": "Layer poligon pemotong."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "near": {
            "name": "Terdekat",
            "description": "Menambahkan atribut NEAR_FID dan NEAR_DIST yang mengidentifikasi fitur terdekat dan jaraknya menggunakan pengindeksan spasial.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "near": {
                "label": "Terdekat",
                "description": "Layer vektor fitur terdekat."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "select_by_location": {
            "name": "Pilih berdasarkan lokasi",
            "description": "Menyaring fitur target berdasarkan predikat spasial (intersects, within, contains, touches, overlaps, dll.) relatif terhadap fitur kueri.",
            "params": {
              "target": {
                "label": "Target",
                "description": "Layer fitur target yang akan disaring."
              },
              "query": {
                "label": "Kueri",
                "description": "Layer fitur kueri."
              },
              "predicate": {
                "label": "Predikat",
                "description": "Predikat spasial: intersects, within, contains, touches, crosses, overlaps, disjoint, within_distance."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak untuk predikat within_distance."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "spatial_join": {
            "name": "Gabung spasial",
            "description": "Mentransfer atribut dari fitur layer join ke target menggunakan predikat spasial; mendukung strategi agregasi (count, sum, mean, min, max) untuk beberapa kecocokan.",
            "params": {
              "target": {
                "label": "Target",
                "description": "Layer target yang menerima atribut hasil penggabungan."
              },
              "join": {
                "label": "Gabung",
                "description": "Layer penggabung yang menyediakan atribut."
              },
              "predicate": {
                "label": "Predikat",
                "description": "Predikat spasial: intersects, within, contains, touches, crosses, overlaps, within_distance."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak untuk predikat within_distance."
              },
              "strategy": {
                "label": "Strategi",
                "description": "Strategi penggabungan: first, last, count, sum, mean, min, max."
              },
              "prefix": {
                "label": "Awalan",
                "description": "Awalan untuk nama field hasil penggabungan (default JOIN_)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "symmetrical_difference": {
            "name": "Selisih simetris",
            "description": "Menghitung wilayah poligon yang tidak tumpang tindih dari layer masukan dan overlay.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "union": {
            "name": "Gabungan",
            "description": "Melebur gabungan poligon masukan dan overlay menjadi cakupan poligon terpadu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "update": {
            "name": "Perbarui",
            "description": "Mengganti fitur masukan dengan fitur pembaruan di tempat keduanya tumpang tindih; fitur masukan di luar layer pembaruan dipertahankan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Layer poligon tumpang susun."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi topologi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "centroid_vector": {
            "name": "Centroid vektor",
            "description": "Menghitung pusat geografis (koordinat rata-rata massa) untuk setiap fitur vektor, menghasilkan layer titik untuk penempatan label, pengklasteran, dan analisis spasial.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "concave_hull": {
            "name": "Concave hull",
            "description": "Membuat poligon concave hull di sekitar koordinat fitur masukan menggunakan algoritme concaveman.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "concavity": {
                "label": "Kecekungan",
                "description": "Rasio kecekungan (default 2.0). Nilai lebih tinggi menghasilkan hull yang kurang cekung dan lebih mendekati convex hull. Nilai lebih rendah memungkinkan kecekungan yang lebih rapat."
              },
              "max_edge_length": {
                "label": "Panjang tepi maksimum",
                "description": "Ambang panjang: sisi hull yang lebih pendek dari nilai ini tidak dihaluskan lebih lanjut. Default-nya tak terbatas (tak hingga)."
              },
              "epsilon": {
                "label": "Epsilon",
                "description": "Epsilon ketahanan (default 1e-9)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "densify_features": {
            "name": "Rapatkan fitur",
            "description": "Menambahkan verteks di sepanjang batas garis dan poligon pada jarak yang ditentukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "spacing": {
                "label": "Jarak antar",
                "description": "Jarak maksimum antar verteks yang bersebelahan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "eliminate_coincident_points": {
            "name": "Hilangkan titik berimpit",
            "description": "Menghapus titik yang berimpit atau hampir berimpit dalam jarak toleransi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "tolerance_dist": {
                "label": "Jarak toleransi",
                "description": "Ambang jarak untuk menganggap titik berimpit."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "extend_vector_lines": {
            "name": "Perpanjang garis vektor",
            "description": "Memperpanjang titik ujung polyline sejauh jarak yang ditentukan di awal, akhir, atau keduanya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor polyline masukan."
              },
              "distance": {
                "label": "Jarak",
                "description": "Jarak untuk memperpanjang titik ujung polyline."
              },
              "extend_direction": {
                "label": "Arah perpanjangan",
                "description": "Arah perpanjangan titik ujung: both, start, atau end."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "merge_line_segments": {
            "name": "Gabungkan segmen garis",
            "description": "Menggabungkan segmen garis terhubung yang bertemu di titik ujung tanpa percabangan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor polyline masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan titik ujung opsional yang digunakan untuk mencocokkan titik ujung garis; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "minimum_bounding_box": {
            "name": "Kotak pembatas minimum",
            "description": "Menghitung kotak pembatas minimum berorientasi di sekitar fitur individual atau seluruh layer.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "min_criteria": {
                "label": "Kriteria minimum",
                "description": "Kriteria minimisasi: area, perimeter, length, atau width. Default-nya area."
              },
              "individual_feature_hulls": {
                "label": "Hull per fitur",
                "description": "Jika true, hasilkan satu kotak per fitur; jika tidak, hasilkan satu kotak untuk seluruh layer."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "minimum_bounding_circle": {
            "name": "Lingkaran pembatas minimum",
            "description": "Menghitung lingkaran pembatas minimum di sekitar fitur individual atau seluruh layer.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "individual_feature_hulls": {
                "label": "Hull per fitur",
                "description": "Jika true, hasilkan satu lingkaran per fitur; jika tidak, hasilkan satu lingkaran untuk seluruh layer."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "minimum_bounding_envelope": {
            "name": "Amplop pembatas minimum",
            "description": "Menghitung amplop pembatas minimum sejajar sumbu di sekitar fitur individual atau seluruh layer.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "individual_feature_hulls": {
                "label": "Hull per fitur",
                "description": "Jika true, hasilkan satu envelope per fitur; jika tidak, hasilkan satu envelope untuk seluruh layer."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "minimum_convex_hull": {
            "name": "Convex hull minimum",
            "description": "Membuat poligon convex hull di sekitar fitur individual atau seluruh layer masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "individual_feature_hulls": {
                "label": "Hull per fitur",
                "description": "Jika true, hasilkan satu hull per fitur masukan; jika tidak, hasilkan satu hull untuk seluruh layer."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "polygonize": {
            "name": "Poligonisasi",
            "description": "Membuat poligon dari garis masukan, termasuk segmen yang berpotongan/terbuka di mana bidang tertutup dapat terbentuk.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Layer vektor garis masukan sebagai array atau string yang dipisahkan titik koma/koma. Jika dihilangkan, 'input' digunakan."
              },
              "input": {
                "label": "Masukan",
                "description": "Path layer vektor garis masukan tunggal opsional."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh poligonisasi; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "representative_point_vector": {
            "name": "Titik representatif vektor",
            "description": "Menghasilkan titik interior yang dijamin berada di dalam atau pada setiap geometri menggunakan pole-of-inaccessibility, ideal untuk penempatan label pada poligon cekung.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "simplify_features": {
            "name": "Sederhanakan fitur",
            "description": "Mengurangi kompleksitas geometri menggunakan algoritme Douglas-Peucker untuk meminimalkan ukuran file, menghapus noise GPS, dan mengoptimalkan kinerja rendering sambil mempertahankan bentuk.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi penyederhanaan dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "smooth_vectors": {
            "name": "Haluskan vektor",
            "description": "Menghaluskan geometri polyline atau poligon menggunakan penyaringan rata-rata bergerak untuk mengurangi noise digitasi dan getaran jejak GPS.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor garis atau poligon masukan."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran jendela rata-rata bergerak ganjil (>= 3). Nilai genap dinaikkan ke nilai ganjil berikutnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "snap_endnodes": {
            "name": "Jepret node ujung",
            "description": "Menjepret titik ujung polyline yang berdekatan ke lokasi bersama dalam toleransi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor polyline masukan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan titik ujung dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor polyline terjepret keluaran."
              }
            }
          },
          "split_vector_lines": {
            "name": "Pisahkan garis vektor",
            "description": "Membagi setiap fitur polyline menjadi segmen dengan panjang maksimum yang ditentukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor polyline masukan."
              },
              "segment_length": {
                "label": "Panjang segmen",
                "description": "Panjang segmen maksimum dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor polyline keluaran."
              }
            }
          },
          "split_with_lines": {
            "name": "Pisahkan dengan garis",
            "description": "Membagi polyline masukan menggunakan titik perpotongan dari layer garis pemotong.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis masukan yang akan dipisah."
              },
              "split": {
                "label": "Pisahkan",
                "description": "Layer garis pemisah yang digunakan untuk membuat titik putus."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi penjepretan opsional yang digunakan oleh operasi pemisahan; default-nya epsilon mesin."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "compactness_ratio": {
            "name": "Rasio kekompakan",
            "description": "Menghitung rasio kekompakan (luas / keliling) untuk fitur poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan field kekompakan yang ditambahkan."
              }
            }
          },
          "deviation_from_regional_direction": {
            "name": "Deviasi dari arah regional",
            "description": "Menghitung deviasi arah poligon dari orientasi rata-rata regional berbobot dan menambahkan DEV_DIR.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "elongation_threshold": {
                "label": "Ambang pemanjangan",
                "description": "Elongasi minimum yang digunakan untuk menyertakan poligon dalam estimasi arah regional; default 0.75."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "elongation_ratio": {
            "name": "Rasio pemanjangan",
            "description": "Menghitung rasio elongasi (sumbu pendek / sumbu panjang persegi panjang pembatas) untuk fitur poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan field elongasi yang ditambahkan."
              }
            }
          },
          "hole_proportion": {
            "name": "Proporsi lubang",
            "description": "Menghitung luas lubang poligon dibagi luas hull dan menambahkan HOLE_PROP.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "linearity_index": {
            "name": "Indeks linearitas",
            "description": "Menghitung indeks linearitas (r-kuadrat regresi) untuk fitur poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan field linearitas yang ditambahkan."
              }
            }
          },
          "narrowness_index_vector": {
            "name": "Indeks kesempitan vektor",
            "description": "Menghitung indeks kesempitan (keliling / sqrt(luas)) untuk fitur poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan field kesempitan yang ditambahkan."
              }
            }
          },
          "patch_orientation": {
            "name": "Orientasi patch",
            "description": "Menghitung orientasi poligon (derajat dari utara) menggunakan regresi reduced major axis dan menambahkan ORIENT.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "perimeter_area_ratio": {
            "name": "Rasio keliling-luas",
            "description": "Menghitung rasio keliling/luas poligon dan menambahkan P_A_RATIO.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "polygon_area": {
            "name": "Luas poligon",
            "description": "Menghitung luas poligon dan menambahkan field atribut AREA.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "polygon_long_axis": {
            "name": "Sumbu panjang poligon",
            "description": "Memetakan sumbu panjang kotak pembatas minimum setiap fitur poligon sebagai keluaran garis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor polyline keluaran."
              }
            }
          },
          "polygon_perimeter": {
            "name": "Keliling poligon",
            "description": "Menghitung keliling poligon dan menambahkan field atribut PERIMETER.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "polygon_short_axis": {
            "name": "Sumbu pendek poligon",
            "description": "Memetakan sumbu pendek kotak pembatas minimum setiap fitur poligon sebagai keluaran garis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor polyline keluaran."
              }
            }
          },
          "related_circumscribing_circle": {
            "name": "Lingkaran pembatas terkait",
            "description": "Menghitung 1 - (luas poligon / luas lingkaran luar terkecil) dan menambahkan RC_CIRCLE.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "shape_complexity_index_vector": {
            "name": "Indeks kompleksitas bentuk vektor",
            "description": "Menghitung indeks kompleksitas bentuk untuk fitur poligon vektor menggunakan faktor bentuk ternormalisasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan field indeks kompleksitas yang ditambahkan."
              }
            }
          },
          "global_morans_i": {
            "name": "Moran's I global",
            "description": "Menghitung Global Moran's I untuk menguji autokorelasi spasial: apakah nilai-nilai serupa mengelompok secara spasial. Fondasi penting untuk analisis geostatistik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Field atribut numerik yang akan dianalisis."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk mode k_nearest."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak untuk mode distance_band."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Terapkan standardisasi baris pada bobot (default true)."
              },
              "inference": {
                "label": "Inferensi",
                "description": "Mode inferensi: asymptotic atau permutation (default: asymptotic)."
              },
              "num_simulations": {
                "label": "Jumlah simulasi",
                "description": "Jumlah permutasi untuk uji permutasi (default: 999)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed acak untuk uji permutasi yang dapat direproduksi."
              },
              "island_policy": {
                "label": "Kebijakan pulau",
                "description": "Penanganan pulau: drop_with_warning, keep_zero_weight, error."
              },
              "output_json": {
                "label": "Keluaran JSON",
                "description": "Path keluaran laporan JSON opsional."
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              },
              "output_csv": {
                "label": "Keluaran CSV",
                "description": "Path keluaran ringkasan CSV opsional."
              },
              "output_distribution": {
                "label": "Keluaran distribusi",
                "description": "Path opsional untuk menyimpan distribusi permutasi sebagai JSON."
              }
            }
          },
          "getis_ord_gi_star": {
            "name": "Getis-Ord Gi*",
            "description": "Menghitung skor-z Getis-Ord Gi/Gi* untuk identifikasi hotspot/coldspot lokal. Ukuran langsung konsentrasi nilai tinggi/rendah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Field atribut numerik yang akan dianalisis."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk mode k_nearest."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak untuk mode distance_band."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Terapkan standardisasi baris pada bobot (default true)."
              },
              "variant": {
                "label": "Varian",
                "description": "Varian: gi atau gi_star (default gi_star)."
              },
              "inference": {
                "label": "Inferensi",
                "description": "Mode inferensi: asymptotic atau permutation (default: asymptotic)."
              },
              "num_simulations": {
                "label": "Jumlah simulasi",
                "description": "Jumlah permutasi untuk uji permutasi (default: 999)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed acak untuk uji permutasi yang dapat direproduksi."
              },
              "island_policy": {
                "label": "Kebijakan pulau",
                "description": "Penanganan pulau: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ambang signifikansi dalam [0, 1]; default 0.05."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran dengan field GI."
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              }
            }
          },
          "local_morans_i_lisa": {
            "name": "Moran's I lokal (LISA)",
            "description": "Menghitung Local Moran's I untuk setiap fitur guna mengidentifikasi klaster dan pencilan spasial lokal dengan uji signifikansi statistik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Field atribut numerik yang akan dianalisis."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk mode k_nearest."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak untuk mode distance_band."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Terapkan standardisasi baris pada bobot (default true)."
              },
              "inference": {
                "label": "Inferensi",
                "description": "Mode inferensi: asymptotic atau permutation (default: asymptotic)."
              },
              "num_simulations": {
                "label": "Jumlah simulasi",
                "description": "Jumlah permutasi untuk uji permutasi (default: 999)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed acak untuk uji permutasi yang dapat direproduksi."
              },
              "island_policy": {
                "label": "Kebijakan pulau",
                "description": "Penanganan pulau: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ambang signifikansi dalam [0, 1]; default 0.05."
              },
              "fdr_correction": {
                "label": "Koreksi FDR",
                "description": "Terapkan koreksi FDR-BH (default true untuk permutation)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran dengan field LISA."
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              }
            }
          },
          "nearest_neighbour_index": {
            "name": "Indeks tetangga terdekat",
            "description": "Menghitung indeks tetangga terdekat Clark-Evans yang menguji keacakan spasial lengkap. Mendeteksi pengelompokan vs. dispersi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "study_area_mode": {
                "label": "Mode area studi",
                "description": "Mode area studi: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Poligon area studi",
                "description": "Layer poligon yang digunakan jika study_area_mode=polygon_layer."
              },
              "output_json": {
                "label": "Keluaran JSON",
                "description": "Path keluaran laporan JSON opsional."
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              },
              "output_csv": {
                "label": "Keluaran CSV",
                "description": "Path keluaran ringkasan CSV opsional."
              }
            }
          },
          "quadrat_count_test": {
            "name": "Uji hitungan kuadrat",
            "description": "Melakukan uji chi-kuadrat keacakan pola titik menggunakan hitungan kuadrat. Menguji pengelompokan vs. dispersi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "grid_mode": {
                "label": "Mode grid",
                "description": "Mode grid: rows_cols atau cell_size."
              },
              "rows": {
                "label": "Baris",
                "description": "Jumlah baris jika grid_mode=rows_cols."
              },
              "cols": {
                "label": "Kolom",
                "description": "Jumlah kolom jika grid_mode=rows_cols."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel jika grid_mode=cell_size."
              },
              "study_area_mode": {
                "label": "Mode area studi",
                "description": "Mode area studi: hull, envelope, polygon_layer."
              },
              "study_area_polygon": {
                "label": "Poligon area studi",
                "description": "Layer poligon yang digunakan jika study_area_mode=polygon_layer."
              },
              "output_grid": {
                "label": "Keluaran grid",
                "description": "Path keluaran grid poligon kuadrat opsional."
              },
              "output_json": {
                "label": "Keluaran JSON",
                "description": "Path keluaran laporan JSON opsional."
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran laporan HTML opsional."
              },
              "output_csv": {
                "label": "Keluaran CSV",
                "description": "Path keluaran ringkasan CSV opsional."
              }
            }
          },
          "spatial_lag_regression": {
            "name": "Regresi spatial lag",
            "description": "Mengestimasi model autoregresif spasial yang menangkap efek limpahan endogen di mana variabel dependen dipengaruhi oleh tetangga spasial.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "response_field": {
                "label": "Field respons",
                "description": "Variabel respons (terikat)."
              },
              "predictor_fields": {
                "label": "Field prediktor",
                "description": "Nama field prediktor yang dipisahkan koma."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan spasial."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk k_nearest."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Standardisasi baris pada bobot."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran."
              }
            }
          },
          "spatial_error_regression": {
            "name": "Regresi spatial error",
            "description": "Mengestimasi model galat spasial yang menangani ketergantungan spasial eksogen dalam residual akibat variabel yang dihilangkan atau galat pengukuran.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "response_field": {
                "label": "Field respons",
                "description": "Variabel respons."
              },
              "predictor_fields": {
                "label": "Field prediktor",
                "description": "Field prediktor yang dipisahkan koma."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan spasial."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk k_nearest."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Standardisasi baris pada bobot."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran."
              }
            }
          },
          "geographically_weighted_regression": {
            "name": "Regresi terboboti geografis",
            "description": "Regresi linear lokal dengan bobot kernel peluruhan jarak (GWR): koefisien per fitur, R² lokal, residual dan prediksi, ditambah diagnostik AICc / R² global; bandwidth tetap atau adaptif, opsional dioptimalkan dengan AICc.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan (titik, atau geometri lain melalui titik representatifnya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "y_field": {
                "label": "Field Y",
                "description": "Field numerik terikat (respons)."
              },
              "x_fields": {
                "label": "Field X",
                "description": "Field numerik penjelas yang dipisahkan koma."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel peluruhan jarak: 'gaussian' (default) atau 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Jenis bandwidth",
                "description": "'adaptive' (default; lebar pita = k tetangga terdekat) atau 'fixed' (lebar pita = suatu jarak)."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita: jumlah tetangga untuk adaptive, atau jarak untuk fixed. Hilangkan untuk memilihnya dengan meminimalkan AICc."
              }
            }
          },
          "ripleys_k_test": {
            "name": "Uji K Ripley",
            "description": "Menghitung statistik pengelompokan multi-skala Ripley's K. Mengungkap pengelompokan/dispersi yang bergantung pada skala di berbagai rentang jarak.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Jarak analisis maksimum."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Ukuran langkah jarak."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan statistik K."
              }
            }
          },
          "envelope_test": {
            "name": "Uji amplop",
            "description": "Melakukan uji amplop Monte Carlo yang membandingkan pola teramati dengan distribusi nol CSR. Menentukan signifikansi pengelompokan/dispersi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "num_simulations": {
                "label": "Jumlah simulasi",
                "description": "Jumlah simulasi Monte Carlo."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Jarak analisis maksimum."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan batas envelope."
              }
            }
          },
          "point_process_residuals": {
            "name": "Residu proses titik",
            "description": "Menghitung residual dari model proses titik Poisson yang dicocokkan untuk diagnostik. Mendeteksi struktur spasial yang tidak termodelkan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "intensity_field": {
                "label": "Field intensitas",
                "description": "Field intensitas terpasang."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor keluaran dengan residu."
              }
            }
          },
          "ripleys_k_function": {
            "name": "Fungsi K Ripley",
            "description": "Menghitung K(t) dan L(t) untuk mengkarakterisasi pola pengelompokan spasial.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Ambang jarak maksimum."
              },
              "num_distances": {
                "label": "Jumlah jarak",
                "description": "Jumlah langkah jarak."
              },
              "output": {
                "label": "Keluaran",
                "description": "CSV keluaran."
              }
            }
          },
          "point_pattern_envelope": {
            "name": "Amplop pola titik",
            "description": "Menghasilkan amplop pita kritis untuk uji hipotesis terhadap CSR.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Jarak maksimum."
              },
              "num_distances": {
                "label": "Jumlah jarak",
                "description": "Bin jarak."
              },
              "num_simulations": {
                "label": "Jumlah simulasi",
                "description": "Replikat Monte Carlo."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Taraf signifikansi."
              },
              "output": {
                "label": "Keluaran",
                "description": "CSV keluaran."
              }
            }
          },
          "inhomogeneous_baseline": {
            "name": "Baseline inhomogen",
            "description": "Mengestimasi permukaan intensitas dan menghitung fungsi K terkoreksi intensitas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Jarak maksimum."
              },
              "num_distances": {
                "label": "Jumlah jarak",
                "description": "Bin jarak."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita KDE (dipilih otomatis jika dihilangkan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "CSV keluaran."
              }
            }
          },
          "hotspot_vs_process": {
            "name": "Hotspot vs proses",
            "description": "Membandingkan pola hotspot dengan intensitas proses titik yang mendasarinya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik."
              },
              "hotspot_field": {
                "label": "Field hotspot",
                "description": "Field klasifikasi hotspot."
              },
              "intensity_field": {
                "label": "Field intensitas",
                "description": "Field intensitas."
              },
              "output": {
                "label": "Keluaran",
                "description": "CSV keluaran."
              }
            }
          },
          "point_process_residuals_comparison": {
            "name": "Perbandingan residu proses titik",
            "description": "Menghitung diagnostik residual untuk pemeriksaan kecukupan model.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik."
              },
              "observed_field": {
                "label": "Field pengamatan",
                "description": "Field nilai teramati."
              },
              "predicted_field": {
                "label": "Field prediksi",
                "description": "Field nilai prediksi."
              },
              "residual_type": {
                "label": "Jenis residu",
                "description": "Tipe residu."
              },
              "output": {
                "label": "Keluaran",
                "description": "CSV keluaran."
              }
            }
          },
          "construct_vector_tin": {
            "name": "Bangun TIN vektor",
            "description": "Membangun triangular irregular network (TIN) dari set titik masukan menggunakan triangulasi Delaunay.",
            "params": {
              "input_points": {
                "label": "Titik masukan",
                "description": "Layer vektor titik atau multititik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Nama field opsional untuk ketinggian verteks (field numerik)."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Jika true, gunakan nilai Z geometri untuk elevasi segitiga."
              },
              "max_triangle_edge_length": {
                "label": "Panjang tepi segitiga maksimum",
                "description": "Panjang sisi segitiga maksimum yang diizinkan (menyaring sisi panjang). Gunakan 0 atau negatif untuk tanpa batas."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor poligon keluaran (TIN)."
              }
            }
          },
          "contours_from_points": {
            "name": "Kontur dari titik",
            "description": "Membuat polyline kontur dari elevasi titik menggunakan TIN Delaunay.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor titik atau multititik masukan."
              },
              "base": {
                "label": "Basis",
                "description": "Elevasi kontur dasar (default 0.0)."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik yang berisi nilai elevasi (diabaikan jika use_z_values=true)."
              },
              "interval": {
                "label": "Interval",
                "description": "Nilai interval kontur (default 10.0)."
              },
              "max_triangle_edge_length": {
                "label": "Panjang tepi segitiga maksimum",
                "description": "Panjang sisi segitiga maksimum yang disertakan dalam pembuatan kontur (satuan peta)."
              },
              "smooth": {
                "label": "Haluskan",
                "description": "Ukuran filter penghalusan (bilangan bulat ganjil, default 9)."
              },
              "use_z_values": {
                "label": "Gunakan nilai Z",
                "description": "Gunakan nilai Z geometri sebagai elevasi (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "contours_from_raster": {
            "name": "Kontur dari raster",
            "description": "Membuat polyline kontur dari model permukaan raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster permukaan masukan atau objek raster bertipe."
              },
              "base": {
                "label": "Basis",
                "description": "Elevasi kontur dasar (default 0.0)."
              },
              "interval": {
                "label": "Interval",
                "description": "Nilai interval kontur (default 10.0)."
              },
              "smooth": {
                "label": "Haluskan",
                "description": "Ukuran filter penghalusan (bilangan bulat ganjil, default 9)."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Sudut defleksi garis minimum dalam derajat untuk penyederhanaan (default 10.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "extract_nodes": {
            "name": "Ekstrak node",
            "description": "Mengonversi verteks polyline dan poligon menjadi fitur titik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor polyline atau poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "extract_raster_values_at_points": {
            "name": "Ekstrak nilai raster pada titik",
            "description": "Mengambil sampel satu atau beberapa raster di lokasi titik dan menulis nilainya ke atribut titik.",
            "params": {
              "rasters": {
                "label": "Raster",
                "description": "Path raster masukan sebagai array atau string terpisah."
              },
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "find_lowest_or_highest_points": {
            "name": "Temukan titik terendah atau tertinggi",
            "description": "Menemukan sel raster terendah dan/atau tertinggi dan mengeluarkan lokasinya sebagai titik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Tipe keluaran: lowest, highest, atau both."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran."
              }
            }
          },
          "hexagonal_grid_from_raster_base": {
            "name": "Grid heksagonal dari basis raster",
            "description": "Membuat grid poligon heksagonal dengan lebar dan orientasi yang dapat dikonfigurasi, menyediakan teselasi tak bias untuk peta panas dan agregasi.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Raster dasar yang mengendalikan ekstensi grid."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar heksagon dalam satuan peta."
              },
              "orientation": {
                "label": "Orientasi",
                "description": "Orientasi heksagon: horizontal atau vertical."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "hexagonal_grid_from_vector_base": {
            "name": "Grid heksagonal dari basis vektor",
            "description": "Membuat grid poligon heksagonal yang diselaraskan dengan cakupan layer vektor, memungkinkan agregasi spasial tak bias dan visualisasi kerapatan.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Layer vektor dasar yang mengendalikan ekstensi grid."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar heksagon dalam satuan peta."
              },
              "orientation": {
                "label": "Orientasi",
                "description": "Orientasi heksagon: horizontal atau vertical."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "layer_footprint_raster": {
            "name": "Jejak layer raster",
            "description": "Membuat poligon tapak yang mewakili cakupan penuh raster masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "layer_footprint_vector": {
            "name": "Jejak layer vektor",
            "description": "Membuat poligon tapak yang mewakili cakupan pembatas penuh layer vektor masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "medoid": {
            "name": "Medoid",
            "description": "Menghitung titik medoid dari geometri vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik medoid keluaran."
              }
            }
          },
          "random_points_in_polygon": {
            "name": "Titik acak dalam poligon",
            "description": "Menghasilkan titik acak secara seragam di dalam geometri poligon masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon masukan."
              },
              "num_points": {
                "label": "Jumlah titik",
                "description": "Jumlah titik acak yang dibuat."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed RNG opsional untuk reprodusibilitas."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "rectangular_grid_from_raster_base": {
            "name": "Grid persegi dari basis raster",
            "description": "Membuat grid poligon persegi panjang yang mencakup cakupan raster.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Raster dasar yang mengendalikan ekstensi grid."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar sel grid dalam satuan peta."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi sel grid dalam satuan peta."
              },
              "x_origin": {
                "label": "Asal X",
                "description": "Titik asal x opsional untuk penyelarasan grid."
              },
              "y_origin": {
                "label": "Asal Y",
                "description": "Titik asal y opsional untuk penyelarasan grid."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "rectangular_grid_from_vector_base": {
            "name": "Grid persegi dari basis vektor",
            "description": "Membuat grid poligon persegi panjang yang mencakup cakupan pembatas layer vektor.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Layer vektor dasar yang mengendalikan ekstensi grid."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar sel grid dalam satuan peta."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi sel grid dalam satuan peta."
              },
              "x_origin": {
                "label": "Asal X",
                "description": "Titik asal x opsional untuk penyelarasan grid."
              },
              "y_origin": {
                "label": "Asal Y",
                "description": "Titik asal y opsional untuk penyelarasan grid."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran."
              }
            }
          },
          "vector_hex_binning": {
            "name": "Binning heksagonal vektor",
            "description": "Mengagregasi fitur titik ke dalam bin heksagonal, menghitung titik per sel heksagon.",
            "params": {
              "vector_points": {
                "label": "Titik vektor",
                "description": "Layer vektor titik atau multititik masukan."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar heksagon (jarak antara sisi yang berhadapan)."
              },
              "orientation": {
                "label": "Orientasi",
                "description": "Orientasi heksagon: 'h' untuk horizontal (puncak lancip) atau 'v' untuk vertikal (puncak datar)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon heksagon keluaran dengan jumlah."
              }
            }
          },
          "voronoi_diagram": {
            "name": "Diagram Voronoi",
            "description": "Membuat poligon Voronoi (Thiessen) dari lokasi titik masukan.",
            "params": {
              "input_points": {
                "label": "Titik masukan",
                "description": "Layer vektor titik atau multititik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon Voronoi keluaran."
              }
            }
          },
          "add_field": {
            "name": "Tambah field",
            "description": "Menambahkan field atribut baru dengan nilai default opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field baru."
              },
              "field_type": {
                "label": "Jenis field",
                "description": "Tipe field: integer, float, text, boolean."
              },
              "default": {
                "label": "Default",
                "description": "Nilai default opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "add_geometry_attributes": {
            "name": "Tambah atribut geometri",
            "description": "Menghitung properti geometris (luas, panjang, keliling, centroid) secara otomatis dan menambahkannya sebagai field baru, mendukung pengukuran planar maupun geodesik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "measurement_mode": {
                "label": "Mode pengukuran",
                "description": "Metode pengukuran: auto (default), planar, atau geodesic."
              },
              "area": {
                "label": "Luas",
                "description": "Sertakan field luas (AREA_M2 untuk geodesic, AREA_MAP2 untuk planar)."
              },
              "length": {
                "label": "Panjang",
                "description": "Sertakan field panjang (LENGTH_M untuk geodesic, LENGTH_MAP untuk planar)."
              },
              "perimeter": {
                "label": "Keliling",
                "description": "Sertakan field keliling (PERIM_M untuk geodesic, PERIM_MAP untuk planar)."
              },
              "centroid": {
                "label": "Centroid",
                "description": "Sertakan field X/Y centroid (default true)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "attribute_correlation": {
            "name": "Korelasi atribut",
            "description": "Melakukan analisis korelasi Pearson pada field atribut vektor numerik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "attribute_histogram": {
            "name": "Histogram atribut",
            "description": "Membuat histogram untuk nilai field numerik dalam tabel atribut vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field atribut numerik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "attribute_scattergram": {
            "name": "Scattergram atribut",
            "description": "Menghitung statistik ringkasan diagram pencar antara dua field vektor numerik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "fieldx": {
                "label": "Field X",
                "description": "Nama field sumbu x numerik."
              },
              "fieldy": {
                "label": "Field Y",
                "description": "Nama field sumbu y numerik."
              },
              "trendline": {
                "label": "Garis tren",
                "description": "Sertakan ringkasan garis tren (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "delete_field": {
            "name": "Hapus field",
            "description": "Menghapus satu atau beberapa field atribut dari layer vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "fields": {
                "label": "Field",
                "description": "Nama field yang dipisahkan koma untuk dihapus."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "extract_by_attribute": {
            "name": "Ekstrak berdasarkan atribut",
            "description": "Mengekstrak fitur vektor yang memenuhi ekspresi atribut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "statement": {
                "label": "Pernyataan",
                "description": "Ekspresi boolean yang dievaluasi terhadap field atribut; menerima alias AND/OR/NOT/XOR bergaya SQL."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "field_calculator": {
            "name": "Kalkulator field",
            "description": "Menghitung nilai field dari ekspresi menggunakan atribut fitur dan variabel geometri; mendukung pembungkus bergaya SQL CASE, CAST, pemeriksaan null, dan UPDATE ... SET ... [WHERE ...].",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field keluaran."
              },
              "field_type": {
                "label": "Jenis field",
                "description": "Tipe field keluaran: float, integer, text."
              },
              "expression": {
                "label": "Ekspresi",
                "description": "Ekspresi yang dievaluasi per fitur. Mendukung CASE bergaya SQL, CAST(... AS type), IS NULL/IS NOT NULL, dan pembungkus UPDATE ... SET FIELD = ... [WHERE ...]."
              },
              "overwrite": {
                "label": "Timpa",
                "description": "Timpa field yang sudah ada jika tersedia (default true)."
              },
              "preview_rows": {
                "label": "Baris pratinjau",
                "description": "Jumlah baris pratinjau opsional yang dikembalikan dalam muatan hasil. Jika > 0, output dapat dihilangkan untuk evaluasi pratinjau saja."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Opsional jika preview_rows > 0."
              }
            }
          },
          "filter_vector_features_by_area": {
            "name": "Filter fitur vektor berdasarkan luas",
            "description": "Menyaring fitur poligon di bawah ambang batas luas minimum.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Luas poligon minimum yang dipertahankan, dalam satuan koordinat layer kuadrat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "list_unique_values": {
            "name": "Daftar nilai unik",
            "description": "Mencantumkan nilai unik dan frekuensinya dalam field atribut vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field atribut."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran opsional."
              }
            }
          },
          "rename_field": {
            "name": "Ganti nama field",
            "description": "Mengganti nama field atribut dalam layer vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field yang sudah ada."
              },
              "new_field": {
                "label": "Field baru",
                "description": "Nama field pengganti."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "download_osm_vector": {
            "name": "Unduh vektor OSM",
            "description": "Mengunduh fitur OpenStreetMap dari Overpass API untuk kotak pembatas dan menulis hasilnya sebagai layer vektor.",
            "params": {
              "west": {
                "label": "Barat",
                "description": "Bujur batas barat (EPSG:4326)."
              },
              "south": {
                "label": "Selatan",
                "description": "Lintang batas selatan (EPSG:4326)."
              },
              "east": {
                "label": "Timur",
                "description": "Bujur batas timur (EPSG:4326)."
              },
              "north": {
                "label": "Utara",
                "description": "Lintang batas utara (EPSG:4326)."
              },
              "input_extent_epsg": {
                "label": "EPSG ekstensi masukan",
                "description": "Kode EPSG untuk ekstensi masukan barat/selatan/timur/utara (default 4326)."
              },
              "filter_preset": {
                "label": "Preset filter",
                "description": "Praatur kelas fitur: all, roads, buildings, water, landuse, trails, parks, rail, amenities, boundaries, transit, poi (default all)."
              },
              "include_tags": {
                "label": "Sertakan tag",
                "description": "Daftar filter kunci tag yang dipisahkan titik koma, misalnya amenity;shop."
              },
              "include_key_values": {
                "label": "Sertakan nilai key",
                "description": "Daftar filter key=value yang dipisahkan titik koma, misalnya amenity=school;building=yes."
              },
              "filter_key": {
                "label": "Key filter",
                "description": "Filter kunci tag tunggal lama (usang; gunakan include_tags)."
              },
              "filter_key_value": {
                "label": "Nilai key filter",
                "description": "Filter key=value tunggal lama (usang; gunakan include_key_values)."
              },
              "include_points": {
                "label": "Sertakan titik",
                "description": "Sertakan fitur node OSM bertag sebagai geometri Point (default true)."
              },
              "include_lines": {
                "label": "Sertakan garis",
                "description": "Sertakan fitur way OSM sebagai geometri LineString (default true)."
              },
              "include_polygons": {
                "label": "Sertakan poligon",
                "description": "Sertakan way OSM tertutup bertag area sebagai geometri Polygon (default true)."
              },
              "clip_to_extent": {
                "label": "Potong ke ekstensi",
                "description": "Potong geometri keluaran ke ekstensi bbox kueri (default true)."
              },
              "split_output_by_geometry": {
                "label": "Pisahkan keluaran per geometri",
                "description": "Tulis keluaran terpisah per tipe geometri (<output>_points|lines|polygons.ext)."
              },
              "output_epsg": {
                "label": "EPSG keluaran",
                "description": "Proyeksikan ulang keluaran ke kode EPSG ini; hilangkan untuk mempertahankan EPSG:4326."
              },
              "overpass_profile": {
                "label": "Profil Overpass",
                "description": "Profil endpoint Overpass: main, kumi, fr, atau custom (default main)."
              },
              "overpass_url": {
                "label": "URL Overpass",
                "description": "URL endpoint Overpass API (default https://overpass-api.de/api/interpreter)."
              },
              "timeout_seconds": {
                "label": "Batas waktu (detik)",
                "description": "Batas waktu kueri dalam detik (default 25)."
              },
              "max_elements": {
                "label": "Elemen maksimum",
                "description": "Jumlah maksimum elemen Overpass yang dikembalikan sebelum galat dimunculkan (default 50 000)."
              },
              "chunk_large_aoi": {
                "label": "Pecah AOI besar",
                "description": "Otomatis membagi AOI besar menjadi beberapa permintaan Overpass (default true)."
              },
              "chunk_max_area_deg2": {
                "label": "Luas maksimum pecahan (deg2)",
                "description": "Luas maksimum per bagian dalam derajat persegi saat pembagian (default 4.0)."
              },
              "max_chunk_count": {
                "label": "Jumlah pecahan maksimum",
                "description": "Batas keras jumlah bagian saat membagi AOI besar (default 64)."
              },
              "chunk_parallel_requests": {
                "label": "Permintaan paralel per pecahan",
                "description": "Jumlah maksimum permintaan bagian paralel untuk AOI besar (default 1 = berurutan)."
              },
              "cache_dir": {
                "label": "Direktori cache",
                "description": "Direktori opsional untuk menyimpan cache respons JSON Overpass berdasarkan hash endpoint+kueri."
              },
              "cache_ttl_hours": {
                "label": "TTL cache (jam)",
                "description": "Masa berlaku cache dalam jam (default 24; 0 berarti tanpa pemeriksaan kedaluwarsa)."
              },
              "provenance_output": {
                "label": "Keluaran provenans",
                "description": "Path JSON opsional untuk menulis berkas pendamping metadata kueri/provenans."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional; jika dihilangkan, keluaran sementara digunakan."
              }
            }
          },
          "assign_projection_lidar": {
            "name": "Tetapkan proyeksi LiDAR",
            "description": "Menetapkan sistem referensi koordinat ke awan titik LiDAR tanpa memproyeksikan ulang titik-titiknya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file LiDAR masukan (LAS/LAZ/COPC, atau handle dalam memori)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG dari CRS yang ditetapkan, misalnya 4326 (WGS84) atau 3857 (Web Mercator). Koordinat tidak ditransformasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path LiDAR keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "assign_projection_raster": {
            "name": "Tetapkan proyeksi raster",
            "description": "Menetapkan sistem referensi koordinat ke raster tanpa melakukan warping pada selnya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan (atau handle dalam memori)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG dari CRS yang ditetapkan, misalnya 4326 (WGS84) atau 3857 (Web Mercator). Koordinat tidak ditransformasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "assign_projection_vector": {
            "name": "Tetapkan proyeksi vektor",
            "description": "Menetapkan sistem referensi koordinat ke layer vektor tanpa memproyeksikan ulang geometrinya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG dari CRS yang ditetapkan, misalnya 4326 (WGS84) atau 3857 (Web Mercator). Koordinat tidak ditransformasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "georeference_raster_from_control_points": {
            "name": "Georeferensi raster dari titik kontrol",
            "description": "Mencocokkan transformasi dari GCP dan melakukan warping raster menjadi keluaran tergeoreferensi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "control_points": {
                "label": "Titik kontrol",
                "description": "Path CSV titik kontrol dengan pixel_x,pixel_y,map_x,map_y (dan alias yang diterima)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG target."
              },
              "transform_type": {
                "label": "Jenis transformasi",
                "description": "Tipe transformasi: affine, projective, polynomial, atau thin_plate_spline."
              },
              "transform_order": {
                "label": "Orde transformasi",
                "description": "Orde polinomial jika transform_type=polynomial."
              },
              "resample": {
                "label": "Resampling",
                "description": "Metode resampling; default bilinear."
              },
              "allow_auto_downgrade": {
                "label": "Izinkan penurunan otomatis",
                "description": "Izinkan penurunan otomatis ke transformasi yang lebih sederhana jika GCP jarang."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster tergeoreferensi keluaran."
              },
              "report": {
                "label": "Laporan",
                "description": "Path JSON laporan keluaran."
              }
            }
          },
          "reproject_lidar": {
            "name": "Reproyeksi LiDAR",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Masukan"
              },
              "dst_epsg": {
                "label": "EPSG tujuan",
                "description": "EPSG tujuan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Keluaran"
              },
              "use_3d_transform": {
                "label": "Gunakan transformasi 3D",
                "description": "Gunakan transformasi 3D"
              },
              "failure_policy": {
                "label": "Kebijakan kegagalan",
                "description": "Kebijakan kegagalan"
              },
              "coordinate_epoch": {
                "label": "Epoch koordinat",
                "description": "Epoch koordinat"
              },
              "source_reference_epoch": {
                "label": "Epoch referensi sumber",
                "description": "Epoch referensi sumber"
              },
              "target_reference_epoch": {
                "label": "Epoch referensi target",
                "description": "Epoch referensi target"
              },
              "operation_code": {
                "label": "Kode operasi",
                "description": "Kode operasi"
              },
              "prefer_official_operation": {
                "label": "Utamakan operasi resmi",
                "description": "Utamakan operasi resmi"
              },
              "epoch_policy": {
                "label": "Kebijakan epoch",
                "description": "Kebijakan epoch"
              }
            }
          },
          "reproject_raster": {
            "name": "Reproyeksi raster",
            "description": "Memproyeksikan ulang (warp) raster ke sistem referensi koordinat EPSG target.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan. Harus membawa CRS sumber (EPSG atau WKT)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG tujuan, misalnya 3857 (Web Mercator) atau 4326 (WGS84)."
              },
              "method": {
                "label": "Metode",
                "description": "Metode resampling: nearest (default), bilinear, cubic, lanczos, average, min, max, mode, median."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "reproject_vector": {
            "name": "Reproyeksi vektor",
            "description": "Memproyeksikan ulang geometri vektor ke proyeksi EPSG tujuan sambil mempertahankan topologi dan atribut, memungkinkan integrasi multi-sumber.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG tujuan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "orthorectification": {
            "name": "Ortorektifikasi",
            "description": "Koreksi geometris berbasis DEM untuk citra mentah menggunakan model kamera RPC. Menghilangkan pergeseran relief medan untuk keluaran ortocitra tergeoreferensi.",
            "params": {
              "input_raster": {
                "label": "Raster masukan",
                "description": "Path raster citra mentah (belum terkoreksi) masukan. Metadata RPC harus tertanam dalam file atau tersedia dalam berkas pendamping .RPB di sebelahnya."
              },
              "input_dem": {
                "label": "DEM masukan",
                "description": "Raster DEM yang digunakan untuk memperoleh elevasi medan bagi setiap piksel keluaran. Sebaiknya mencakup seluruh ekstensi adegan. Jika tidak dalam koordinat geografis, alat ini memproyeksikan ulang sesuai kebutuhan."
              },
              "output_epsg": {
                "label": "EPSG keluaran",
                "description": "Kode EPSG sistem referensi koordinat keluaran (default 4326 geografis; tentukan CRS terproyeksi seperti 32617 untuk UTM zona 17N)."
              },
              "output_resolution": {
                "label": "Resolusi keluaran",
                "description": "Resolusi piksel keluaran dalam satuan CRS keluaran (misalnya, derajat untuk geografis, meter untuk terproyeksi). Default-nya GSD perkiraan dari citra masukan."
              },
              "resample_method": {
                "label": "Metode resampling",
                "description": "Metode resampling untuk keluaran: nearest, bilinear (default), cubic."
              },
              "nodata_value": {
                "label": "Nilai nodata",
                "description": "Nilai nodata yang ditetapkan untuk piksel tanpa cakupan sumber yang valid (default sama dengan masukan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster ortocitra keluaran."
              }
            }
          },
          "average_flowpath_slope": {
            "name": "Kemiringan jalur aliran rata-rata",
            "description": "Menghitung gradien kemiringan rata-rata jalur aliran yang melewati setiap sel DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM tanpa cekungan masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "average_upslope_flowpath_length": {
            "name": "Panjang jalur aliran hulu rata-rata",
            "description": "Menghitung panjang jalur aliran hulu rata-rata yang melewati setiap sel DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM tanpa cekungan masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "d8_flow_accum": {
            "name": "Akumulasi aliran D8",
            "description": "Menghitung akumulasi aliran D8 dari DEM atau raster penunjuk D8.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster DEM atau penunjuk D8 masukan"
              },
              "clip": {
                "label": "Potong",
                "description": "Batas atas tampilan potong (diterima untuk kompatibilitas)"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Gunakan pengodean penunjuk ESRI untuk masukan penunjuk"
              },
              "input_is_pointer": {
                "label": "Masukan adalah penunjuk",
                "description": "Perlakukan masukan sebagai raster penunjuk D8"
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log pada keluaran"
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Tipe keluaran: cells, ca, atau sca"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "d8_mass_flux": {
            "name": "Fluks massa D8",
            "description": "Melakukan akumulasi fluks massa berbasis D8 menggunakan raster beban, efisiensi, dan absorpsi.",
            "params": {
              "absorption": {
                "label": "Absorpsi",
                "description": "Raster kehilangan massa per sel dalam satuan pembebanan."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM tanpa cekungan masukan yang digunakan untuk menurunkan arah aliran D8."
              },
              "efficiency": {
                "label": "Efisiensi",
                "description": "Raster nilai efisiensi transfer, dalam `[0, 1]` atau persen."
              },
              "loading": {
                "label": "Muatan",
                "description": "Raster nilai pembebanan massa awal."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "d8_pointer": {
            "name": "Penunjuk D8",
            "description": "Arah aliran penurunan tercuram di atas 8 tetangga (N/NE/E/SE/S/SW/W/NW). Fondasi untuk analisis hidrologi D8 dan delineasi DAS.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Gunakan pengodean penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "dinf_flow_accum": {
            "name": "Akumulasi aliran Dinf",
            "description": "Menghitung akumulasi aliran D-Infinity dari DEM atau raster penunjuk D-Infinity.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster DEM atau penunjuk D-Infinity masukan"
              },
              "clip": {
                "label": "Potong",
                "description": "Batas atas tampilan potong (diterima untuk kompatibilitas)"
              },
              "convergence_threshold": {
                "label": "Ambang konvergensi",
                "description": "Ambang di atas mana aliran tidak didispersikan"
              },
              "input_is_pointer": {
                "label": "Masukan adalah penunjuk",
                "description": "Perlakukan masukan sebagai raster penunjuk D-Infinity"
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log pada keluaran"
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Tipe keluaran: cells, ca, atau sca"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "dinf_mass_flux": {
            "name": "Fluks massa Dinf",
            "description": "Melakukan akumulasi fluks massa D-Infinity menggunakan raster beban, efisiensi, dan absorpsi.",
            "params": {
              "absorption": {
                "label": "Absorpsi",
                "description": "Raster absorpsi masukan dalam satuan pembebanan."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "efficiency": {
                "label": "Efisiensi",
                "description": "Raster efisiensi masukan (nilai `0-1` atau persen)."
              },
              "loading": {
                "label": "Muatan",
                "description": "Raster pembebanan masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "dinf_pointer": {
            "name": "Penunjuk Dinf",
            "description": "Arah aliran kontinu (0-2π radian) yang menghilangkan bias diagonal D8. Lebih baik untuk pemodelan transpor sedimen dan aliran divergen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "downslope_flowpath_length": {
            "name": "Panjang jalur aliran hilir",
            "description": "Menghitung panjang jalur aliran hilir dari setiap sel ke outlet dalam raster penunjuk D8.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan"
              },
              "watersheds": {
                "label": "DAS",
                "description": "Raster daerah aliran sungai opsional"
              },
              "weights": {
                "label": "Bobot",
                "description": "Raster pembobotan jarak per sel opsional"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Gunakan pengodean penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "fd8_flow_accum": {
            "name": "Akumulasi aliran FD8",
            "description": "Menghitung akumulasi aliran FD8 dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "clip": {
                "label": "Potong",
                "description": "Batas atas tampilan potong (diterima untuk kompatibilitas)"
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Eksponen pembobotan kemiringan"
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log pada keluaran"
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Tipe keluaran: cells, ca, atau sca"
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ambang batas"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "fd8_pointer": {
            "name": "Penunjuk FD8",
            "description": "Aliran fraksional ke beberapa tetangga hilir yang diboboti oleh gradien. Lebih baik daripada D8 untuk proses dispersif, difusif, dan konservasi massa.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "flow_accum_full_workflow": {
            "name": "Alur kerja lengkap akumulasi aliran",
            "description": "Menjalankan alur kerja akumulasi aliran non-divergen lengkap dan mengembalikan DEM yang dibobol, penunjuk arah aliran, dan akumulasi.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "clip": {
                "label": "Potong",
                "description": "Jika true, potong batas atas tampilan akumulasi (perilaku kompatibilitas)."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, kodekan keluaran arah aliran dalam gaya penunjuk Esri."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Jika true, transformasikan nilai akumulasi secara logaritmik."
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Salah satu dari `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "breached_dem_output": {
                "label": "Keluaran DEM terbobol",
                "description": "Path keluaran opsional untuk raster DEM tanpa cekungan."
              },
              "flow_dir_output": {
                "label": "Keluaran arah aliran",
                "description": "Path keluaran opsional untuk raster arah aliran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster akumulasi aliran."
              },
              "output_pointer": {
                "label": "Keluaran penunjuk",
                "description": "Path keluaran opsional untuk penunjuk arah aliran D8 (alias dari flow_dir_output; berkode ESRI jika esri_pntr disetel)"
              }
            }
          },
          "flow_length_diff": {
            "name": "Selisih panjang aliran",
            "description": "Menghitung perbedaan absolut maksimum lokal dalam panjang jalur hilir dari raster penunjuk D8.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan."
              },
              "weights": {
                "label": "Bobot",
                "description": "Bobot"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, tafsirkan nilai penunjuk menggunakan pengodean D8 ESRI."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "max_upslope_flowpath_length": {
            "name": "Panjang jalur aliran hulu maksimum",
            "description": "Menghitung panjang jalur aliran hulu maksimum yang melewati setiap sel DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM tanpa cekungan masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "max_upslope_value": {
            "name": "Nilai hulu maksimum",
            "description": "Merambatkan nilai hulu maksimum di sepanjang jalur aliran D8 pada DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "values": {
                "label": "Nilai",
                "description": "Raster nilai masukan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "mdinf_flow_accum": {
            "name": "Akumulasi aliran MDinf",
            "description": "Akumulasi aliran majemuk dengan pembobotan gradien kemiringan (eksponen 1.1). Menyeimbangkan realisme dispersi dengan identifikasi aliran utama yang terkonsentrasi. Keluaran: sel, CA, atau SCA.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "clip": {
                "label": "Potong",
                "description": "Flag kompatibilitas yang diterima oleh API."
              },
              "convergence_threshold": {
                "label": "Ambang konvergensi",
                "description": "Ambang di atas mana aliran tidak didispersikan"
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Eksponen pembobotan kemiringan (default `1.1`)."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log pada keluaran"
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Salah satu dari `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "minimal_dispersion_flow_algorithm": {
            "name": "Algoritma aliran dispersi minimal",
            "description": "Menghasilkan raster arah aliran dan akumulasi aliran MDFA dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "clip": {
                "label": "Potong",
                "description": "Flag kompatibilitas yang diterima oleh API."
              },
              "debug_stats": {
                "label": "Statistik debug",
                "description": "Hasilkan diagnostik MDFA satu baris (jumlah dan maksimum mentah)"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, kodekan keluaran arah aliran dalam gaya penunjuk Esri."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Jika true, transformasikan nilai akumulasi secara logaritmik."
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Salah satu dari `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "path_corrected_direction_preference": {
                "label": "Preferensi arah terkoreksi jalur",
                "description": "Parameter preferensi `p` dalam `[0, 1]`; `1.0` sepenuhnya non-dispersif."
              },
              "flow_dir_output": {
                "label": "Keluaran arah aliran",
                "description": "Path keluaran opsional untuk raster arah aliran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster akumulasi aliran."
              }
            }
          },
          "num_inflowing_neighbours": {
            "name": "Jumlah tetangga masuk",
            "description": "Menghitung jumlah tetangga D8 yang mengalir masuk untuk setiap sel DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "qin_flow_accumulation": {
            "name": "Akumulasi aliran Qin",
            "description": "Menghitung akumulasi aliran MFD Qin dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "clip": {
                "label": "Potong",
                "description": "Flag kompatibilitas yang diterima oleh API."
              },
              "convergence_threshold": {
                "label": "Ambang konvergensi",
                "description": "Ambang di atas mana aliran tidak didispersikan"
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Parameter eksponen batas atas (default `10.0`)."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log pada keluaran"
              },
              "max_slope": {
                "label": "Kemiringan maksimum",
                "description": "Kemiringan batas atas dalam derajat yang digunakan oleh fungsi eksponen dinamis (default `45.0`)."
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Salah satu dari `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "quinn_flow_accumulation": {
            "name": "Akumulasi aliran Quinn",
            "description": "Menghitung akumulasi aliran MFD Quinn dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "clip": {
                "label": "Potong",
                "description": "Flag kompatibilitas yang diterima oleh API."
              },
              "convergence_threshold": {
                "label": "Ambang konvergensi",
                "description": "Ambang di atas mana aliran tidak didispersikan"
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Parameter eksponen (default `1.1`)."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log pada keluaran"
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Salah satu dari `\"cells\"`, `\"ca\"`, `\"sca\"` (default)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "rho8_flow_accum": {
            "name": "Akumulasi aliran Rho8",
            "description": "Menghitung akumulasi aliran Rho8 dari DEM atau raster penunjuk Rho8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "clip": {
                "label": "Potong",
                "description": "Batas atas tampilan potong (diterima untuk kompatibilitas)"
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log pada keluaran"
              },
              "out_type": {
                "label": "Jenis keluaran",
                "description": "Tipe keluaran: cells, ca, atau sca"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "rho8_pointer": {
            "name": "Penunjuk Rho8",
            "description": "Arah aliran tunggal stokastik yang diboboti oleh gradien kemiringan. Jalankan beberapa kali untuk analisis ensemble yang mengurangi artefak kanalisasi D8.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "trace_downslope_flowpaths": {
            "name": "Telusuri jalur aliran hilir",
            "description": "Menandai jalur aliran D8 yang dimulai dari titik benih hingga tidak ada aliran atau tepi grid.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan."
              },
              "seed_points": {
                "label": "Titik seed",
                "description": "Vektor titik seed lokasi masukan."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, tafsirkan penunjuk D8 dengan pengodean ESRI."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, latar belakang bernilai `0`; jika tidak, latar belakang adalah NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "breach_depressions_least_cost": {
            "name": "Bobol cekungan biaya terkecil",
            "description": "Membobol cekungan dalam DEM menggunakan pencarian jalur biaya terkecil yang dibatasi.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "fill_deps": {
                "label": "Isi cekungan",
                "description": "Jika true, isi cekungan yang belum terselesaikan setelah pembobolan."
              },
              "flat_increment": {
                "label": "Inkremen datar",
                "description": "Peningkatan penurunan monoton opsional."
              },
              "max_cost": {
                "label": "Biaya maksimum",
                "description": "Biaya pembobolan maksimum yang diizinkan."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum dalam sel."
              },
              "minimize_dist": {
                "label": "Minimalkan jarak",
                "description": "Jika true, bobot biaya pembobolan berdasarkan jarak."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "breach_single_cell_pits": {
            "name": "Bobol lubang sel tunggal",
            "description": "Membobol lubang sel tunggal dalam DEM dengan memahat kanal selebar satu sel.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil dikembalikan di memori jika didukung."
              }
            }
          },
          "burn_streams": {
            "name": "Bakar sungai",
            "description": "Membakar jaringan sungai ke dalam DEM dengan menurunkan elevasi sel sungai.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "streams": {
                "label": "Sungai",
                "description": "Vektor sungai masukan."
              },
              "decrement_value": {
                "label": "Nilai dekremen",
                "description": "Penurunan elevasi yang diterapkan pada sel sungai (default 5.0)."
              },
              "gradient_distance": {
                "label": "Jarak gradien",
                "description": "Jarak gradien dalam sel grid (0 = hanya penurunan datar; default 5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path DEM terbakar keluaran."
              }
            }
          },
          "burn_streams_at_roads": {
            "name": "Bakar sungai di jalan",
            "description": "Menurunkan elevasi sungai di dekat perlintasan sungai-jalan untuk membobol tanggul jalan dalam DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "roads": {
                "label": "Jalan",
                "description": "Layer vektor jalan."
              },
              "streams": {
                "label": "Sungai",
                "description": "Layer vektor sungai."
              },
              "method": {
                "label": "Metode",
                "description": "Metode"
              },
              "road_width": {
                "label": "Lebar jalan",
                "description": "Lebar tanggul maksimum dalam satuan peta yang digunakan untuk menetapkan jangkauan pembakaran sepanjang sungai."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "depth_in_sink": {
            "name": "Kedalaman dalam sink",
            "description": "Mengukur kedalaman setiap sel DEM di bawah permukaan yang cekungannya telah diisi.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, tetapkan `0.0` pada sel di luar sink; jika tidak, tetapkan NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "fill_burn": {
            "name": "Isi dan bakar",
            "description": "Melakukan hydro-enforcement DEM dengan membakar sungai lalu mengisi cekungan.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "streams": {
                "label": "Sungai",
                "description": "Layer vektor sungai masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "fill_depressions": {
            "name": "Isi cekungan",
            "description": "Mengisi cekungan dalam DEM menggunakan strategi priority-flood dengan resolusi area datar Garbrecht-Martz secara default dan resolusi area datar natural-path lama opsional.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "fix_flats": {
                "label": "Perbaiki area datar",
                "description": "Jika true, terapkan gradien kecil pada area datar hasil pengisian."
              },
              "flat_increment": {
                "label": "Inkremen datar",
                "description": "Peningkatan datar (default `0.0001`)."
              },
              "flat_resolution": {
                "label": "Resolusi area datar",
                "description": "Mode penyelesaian area datar. Salah satu dari `\"garbrecht_martz\"` atau `\"natural\"`."
              },
              "max_depth": {
                "label": "Kedalaman maksimum",
                "description": "Kedalaman pengisian maksimum yang diizinkan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "fill_depressions_planchon_and_darboux": {
            "name": "Isi cekungan Planchon dan Darboux",
            "description": "Mengisi cekungan dalam DEM dengan antarmuka yang kompatibel dengan Planchon-and-Darboux.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "fix_flats": {
                "label": "Perbaiki area datar",
                "description": "Jika true, terapkan gradien kecil pada area datar hasil pengisian."
              },
              "flat_increment": {
                "label": "Inkremen datar",
                "description": "Peningkatan datar (default `0.0001`)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "fill_depressions_wang_and_liu": {
            "name": "Isi cekungan Wang dan Liu",
            "description": "Mengisi cekungan dalam DEM dengan antarmuka yang kompatibel dengan Wang-and-Liu.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "fix_flats": {
                "label": "Perbaiki area datar",
                "description": "Jika true, terapkan gradien kecil pada area datar hasil pengisian."
              },
              "flat_increment": {
                "label": "Inkremen datar",
                "description": "Peningkatan datar (default `0.0001`)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "fill_pits": {
            "name": "Isi lubang",
            "description": "Mengisi lubang sel tunggal dalam DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil dikembalikan di memori jika didukung."
              }
            }
          },
          "flatten_lakes": {
            "name": "Ratakan danau",
            "description": "Meratakan elevasi danau menggunakan elevasi keliling minimum untuk setiap poligon.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "lakes": {
                "label": "Danau",
                "description": "Vektor poligon fitur danau masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "impoundment_size_index": {
            "name": "Indeks ukuran tampungan",
            "description": "Menghitung metrik pembendungan kedalaman rata-rata/maksimum, volume, luas, dan tinggi bendungan.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "max_dam_length": {
                "label": "Panjang bendungan maksimum",
                "description": "Panjang bendungan maksimum dalam satuan peta."
              },
              "output_area": {
                "label": "Keluaran luas",
                "description": "Sertakan raster area tergenang dalam tuple keluaran."
              },
              "output_height": {
                "label": "Keluaran tinggi",
                "description": "Sertakan raster tinggi bendungan dalam tuple keluaran."
              },
              "output_max": {
                "label": "Keluaran maksimum",
                "description": "Sertakan raster kedalaman genangan maksimum dalam tuple keluaran."
              },
              "output_mean": {
                "label": "Keluaran rata-rata",
                "description": "Sertakan raster kedalaman genangan rata-rata dalam tuple keluaran."
              },
              "output_volume": {
                "label": "Keluaran volume",
                "description": "Sertakan raster volume genangan dalam tuple keluaran."
              },
              "out_area": {
                "label": "Keluaran luas",
                "description": "Path keluaran opsional untuk raster area"
              },
              "out_dam_height": {
                "label": "Keluaran tinggi bendungan",
                "description": "Path keluaran opsional untuk raster tinggi bendungan"
              },
              "out_max": {
                "label": "Keluaran maksimum",
                "description": "Path keluaran opsional untuk raster kedalaman maksimum"
              },
              "out_mean": {
                "label": "Keluaran rata-rata",
                "description": "Path keluaran opsional untuk raster kedalaman rata-rata"
              },
              "out_volume": {
                "label": "Keluaran volume",
                "description": "Path keluaran opsional untuk raster volume"
              }
            }
          },
          "insert_dams": {
            "name": "Sisipkan bendungan",
            "description": "Menambahkan tanggul bendungan lokal pada titik yang ditentukan menggunakan pemilihan puncak berbasis profil.",
            "params": {
              "dam_points": {
                "label": "Titik bendungan",
                "description": "Vektor titik lokasi bendungan masukan."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "dam_length": {
                "label": "Panjang bendungan",
                "description": "Panjang bendungan maksimum dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "raise_walls": {
            "name": "Naikkan dinding",
            "description": "Menaikkan elevasi DEM di sepanjang vektor dinding dan secara opsional membobol perlintasan yang dipilih.",
            "params": {
              "breach_lines": {
                "label": "Garis bobol",
                "description": "Vektor opsional yang mendefinisikan lokasi pembobolan."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "walls": {
                "label": "Dinding",
                "description": "Vektor garis atau poligon masukan yang mendefinisikan segmen dinding."
              },
              "wall_height": {
                "label": "Tinggi dinding",
                "description": "Peningkatan elevasi yang diterapkan pada sel dinding."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "sink": {
            "name": "Sel sink",
            "description": "Mengidentifikasi sel yang termasuk dalam cekungan topografis dalam DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, tetapkan `0.0` pada sel di luar sink; jika tidak, tetapkan NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "stochastic_depression_analysis": {
            "name": "Analisis cekungan stokastik",
            "description": "Menjalankan perturbasi DEM Monte Carlo dan mengestimasi probabilitas keanggotaan cekungan.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah iterasi Monte Carlo."
              },
              "range": {
                "label": "Rentang",
                "description": "Rentang autokorelasi galat dalam satuan peta."
              },
              "rmse": {
                "label": "RMSE",
                "description": "RMSE elevasi yang digunakan untuk perturbasi Gaussian."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "topological_breach_burn": {
            "name": "Bobol-bakar topologis",
            "description": "Membakar sungai ke dalam DEM, mengondisikan permukaan, dan mengembalikan raster sungai, DEM, penunjuk, dan akumulasi.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "streams": {
                "label": "Sungai",
                "description": "Vektor jaringan sungai masukan."
              },
              "snap_distance": {
                "label": "Jarak jepret",
                "description": "Jarak penjepretan sungai opsional yang digunakan dalam penskalaan kedalaman pembakaran."
              },
              "out_dem": {
                "label": "DEM keluaran",
                "description": "Path keluaran opsional untuk DEM terbakar/terkondisikan."
              },
              "out_dir": {
                "label": "Direktori keluaran",
                "description": "Path keluaran opsional untuk raster penunjuk D8."
              },
              "out_fa": {
                "label": "Keluaran akumulasi aliran",
                "description": "Path keluaran opsional untuk raster akumulasi aliran."
              },
              "out_streams": {
                "label": "Keluaran sungai",
                "description": "Path keluaran opsional untuk sungai terasterisasi."
              }
            }
          },
          "upslope_depression_storage": {
            "name": "Tampungan cekungan hulu",
            "description": "Memetakan kedalaman tampungan cekungan hulu rata-rata dengan merutekan kedalaman cekungan di atas DEM yang telah dikondisikan.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "basins": {
            "name": "Basin",
            "description": "Mendelineasi semua cekungan drainase D8 yang mengalir ke tepi data valid.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, tafsirkan nilai penunjuk menggunakan pengodean D8 ESRI."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "flood_order": {
            "name": "Urutan banjir",
            "description": "Mengeluarkan urutan priority-flood berurutan untuk setiap sel DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "hillslopes": {
            "name": "Lereng bukit",
            "description": "Mengidentifikasi wilayah lereng bukit yang mengalir ke setiap ruas sungai, memisahkan area tepi kiri dan tepi kanan.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8."
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster jaringan sungai yang sel sungainya bernilai > 0 dan bukan NoData."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Flag pengodean penunjuk ESRI."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "isobasins": {
            "name": "Isobasin",
            "description": "Membagi bentang lahan menjadi DAS berukuran kurang lebih sama (isobasin) berdasarkan ambang batas luas target.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM terkondisikan secara hidrologis masukan."
              },
              "target_size": {
                "label": "Ukuran target",
                "description": "Luas isobasin target dalam jumlah sel grid (bilangan bulat positif atau desimal)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "jenson_snap_pour_points": {
            "name": "Jepret titik curah Jenson",
            "description": "Menjepret setiap titik curah ke sel sungai terdekat dalam jarak pencarian, dengan mempertahankan semua atribut masukan.",
            "params": {
              "pour_pts": {
                "label": "Titik curah",
                "description": "File vektor titik curah masukan (geometri titik atau multititik)."
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster jaringan sungai masukan yang sel sungainya bernilai > 0 dan bukan NoData."
              },
              "snap_dist": {
                "label": "Jarak jepret",
                "description": "Radius pencarian maksimum dalam satuan peta. Default-nya satu lebar sel jika dihilangkan atau nol."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran untuk file vektor titik curah terjepret (wajib; default-nya `snapped_pour_points.geojson` di direktori kerja jika tidak diberikan ke pembungkus)."
              }
            }
          },
          "longest_flowpath": {
            "name": "Jalur aliran terpanjang",
            "description": "Mendelineasi garis jalur aliran terpanjang untuk setiap cekungan dalam raster cekungan.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan"
              },
              "basins": {
                "label": "Basin",
                "description": "Raster DAS masukan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran"
              }
            }
          },
          "max_branch_length": {
            "name": "Panjang cabang maksimum",
            "description": "Menghitung panjang cabang maksimum antara jalur aliran D8 yang bertetangga, berguna untuk menyoroti batas pemisah air.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Terapkan transformasi log natural pada keluaran positif."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "snap_pour_points": {
            "name": "Jepret titik curah",
            "description": "Menjepret titik curah ke sel dengan akumulasi aliran tertinggi dalam jarak pencarian.",
            "params": {
              "flow_accum": {
                "label": "Akumulasi aliran",
                "description": "Raster akumulasi aliran masukan."
              },
              "pour_pts": {
                "label": "Titik curah",
                "description": "File vektor titik curah masukan (geometri titik atau multititik)."
              },
              "snap_dist": {
                "label": "Jarak jepret",
                "description": "Radius pencarian maksimum dalam satuan peta. Default-nya satu lebar sel jika dihilangkan atau nol."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran untuk file vektor titik curah terjepret (wajib; default-nya `snapped_pour_points.geojson` di direktori kerja jika tidak diberikan ke pembungkus)."
              }
            }
          },
          "subbasins": {
            "name": "Subbasin",
            "description": "Mengidentifikasi daerah tangkapan setiap ruas sungai (sub-DAS) dalam jaringan sungai D8.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 yang dihasilkan oleh `d8_pointer`."
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster jaringan sungai yang sel sungainya bernilai > 0 dan bukan NoData."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, tafsirkan nilai penunjuk menggunakan pengodean ESRI. Default `False`."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "unnest_basins": {
            "name": "Uraikan basin bersarang",
            "description": "Membuat satu raster cekungan per tingkat penyarangan titik curah dari grid penunjuk D8.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan"
              },
              "pour_points": {
                "label": "Titik curah",
                "description": "Vektor titik curah masukan"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Tafsirkan penunjuk sebagai gaya ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran dasar opsional untuk raster bernomor"
              }
            }
          },
          "watershed": {
            "name": "Daerah aliran sungai",
            "description": "Mendelineasi DAS dari penunjuk D8 dan titik curah vektor.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan."
              },
              "pour_pts": {
                "label": "Titik curah",
                "description": "File vektor titik curah masukan (geometri titik atau multititik)."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, tafsirkan nilai penunjuk menggunakan pengodean D8 ESRI."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "watershed_from_raster_pour_points": {
            "name": "DAS dari titik curah raster",
            "description": "Mendelineasi DAS dari penunjuk D8 dan raster ID outlet titik curah.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan."
              },
              "pour_points": {
                "label": "Titik curah",
                "description": "Raster titik curah; nilai sel bukan nol dan bukan NoData menjadi ID outlet."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Jika true, tafsirkan nilai penunjuk menggunakan pengodean D8 ESRI."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "depth_to_water": {
            "name": "Kedalaman ke air",
            "description": "Menghitung kedalaman ke air kartografis menggunakan akumulasi biaya terkecil dari fitur sumber sungai/danau.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "stream_raster": {
                "label": "Raster sungai",
                "description": "Raster sungai"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "distance_to_outlet": {
            "name": "Jarak ke outlet",
            "description": "Menghitung jarak hilir ke outlet untuk setiap sel sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "downslope_distance_to_stream": {
            "name": "Jarak hilir ke sungai",
            "description": "Menghitung jarak hilir dari setiap sel DEM ke sungai terdekat di sepanjang jalur aliran.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM tanpa cekungan masukan."
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster sungai masukan; sel sungai bernilai `> 0` dan bukan NoData."
              },
              "dinf": {
                "label": "Dinf",
                "description": "Jika true, gunakan perutean D-infinity; jika tidak, gunakan perutean D8."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "downslope_index": {
            "name": "Indeks hilir",
            "description": "Menghitung indeks hilir Hjerdt et al. (2004) menggunakan arah aliran D8.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output_type": {
                "label": "Jenis keluaran",
                "description": "Metrik keluaran: tangent, degrees, radians, distance (default tangent)."
              },
              "vertical_drop": {
                "label": "Penurunan vertikal",
                "description": "Ambang penurunan vertikal d untuk penelusuran menurun lereng."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "edge_contamination": {
            "name": "Kontaminasi tepi",
            "description": "Mengidentifikasi sel DEM yang area hulunya melampaui tepi DEM untuk skema perutean aliran umum.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM tanpa cekungan masukan."
              },
              "flow_type": {
                "label": "Jenis aliran",
                "description": "Metode perutean yang digunakan: salah satu dari `\"d8\"`, `\"mfd\"`/`\"fd8\"`, atau `\"dinf\"`."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional. Nilai `<= 0` diperlakukan sebagai `1.0`."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "elev_relative_to_watershed_min_max": {
            "name": "Elevasi relatif terhadap min-maks DAS",
            "description": "Menghitung posisi elevasi relatif sel DEM di dalam setiap DAS sebagai persentase.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "watersheds": {
                "label": "DAS",
                "description": "Path raster ID DAS atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "elevation_above_stream": {
            "name": "Elevasi di atas sungai",
            "description": "Menghitung elevasi di atas sungai terdekat yang diukur di sepanjang jalur aliran hilir.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM tanpa cekungan masukan."
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster sungai masukan; sel sungai bernilai `> 0` dan bukan NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "elevation_above_stream_euclidean": {
            "name": "Elevasi di atas sungai Euclidean",
            "description": "Menghitung elevasi di atas sungai terdekat menggunakan kedekatan garis lurus (Euclidean).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster sungai masukan; sel sungai bernilai `> 0` dan bukan NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "find_noflow_cells": {
            "name": "Temukan sel tanpa aliran",
            "description": "Menemukan sel DEM yang tidak memiliki tetangga D8 yang lebih rendah.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "interior_only": {
                "label": "Hanya interior",
                "description": "Jika true, hanya menandai sel tanpa aliran interior sejati (mengecualikan outlet di tepi raster dan yang bersebelahan dengan NoData)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "find_parallel_flow": {
            "name": "Temukan aliran paralel",
            "description": "Mengidentifikasi sel sungai yang memiliki arah aliran D8 paralel.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8 masukan."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "hydrologic_connectivity": {
            "name": "Konektivitas hidrologi",
            "description": "Menghitung indeks konektivitas DUL dan UDSA dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "convergence_threshold": {
                "label": "Ambang konvergensi",
                "description": "Ambang inisiasi sungai opsional dalam sel penyumbang."
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Parameter kompatibilitas untuk kendali dispersi."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional."
              },
              "output1": {
                "label": "Keluaran 1",
                "description": "Path keluaran opsional untuk raster DUL."
              },
              "output2": {
                "label": "Keluaran 2",
                "description": "Path keluaran opsional untuk raster UDSA."
              }
            }
          },
          "relative_stream_power_index": {
            "name": "Indeks daya aliran relatif",
            "description": "Menghitung indeks daya aliran relatif dari luas tangkapan spesifik dan kemiringan.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Path raster luas tangkapan spesifik atau objek raster bertipe."
              },
              "slope": {
                "label": "Kemiringan",
                "description": "Raster kemiringan dalam derajat."
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Eksponen luas tangkapan spesifik p (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "sediment_transport_index": {
            "name": "Indeks transpor sedimen",
            "description": "Menghitung indeks transpor sedimen (faktor LS) dari luas tangkapan spesifik dan kemiringan.",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Path raster luas tangkapan spesifik atau objek raster bertipe."
              },
              "slope": {
                "label": "Kemiringan",
                "description": "Raster kemiringan dalam derajat."
              },
              "sca_exponent": {
                "label": "Eksponen SCA",
                "description": "Eksponen luas tangkapan spesifik n (default 0.4)."
              },
              "slope_exponent": {
                "label": "Eksponen kemiringan",
                "description": "Eksponen kemiringan m (default 1.3)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "wetness_index": {
            "name": "Indeks kebasahan",
            "description": "Menghitung indeks kebasahan topografis ln(SCA / tan(slope)).",
            "params": {
              "sca": {
                "label": "SCA",
                "description": "Path raster luas tangkapan spesifik atau objek raster bertipe."
              },
              "slope": {
                "label": "Kemiringan",
                "description": "Raster kemiringan dalam derajat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "extract_streams": {
            "name": "Ekstrak sungai",
            "description": "Mengekstrak sungai berdasarkan ambang batas akumulasi aliran.",
            "params": {
              "flow_accumulation": {
                "label": "Akumulasi aliran",
                "description": "Raster akumulasi aliran masukan."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Nilai akumulasi minimum yang diperlukan untuk menjadi bagian dari alur sungai."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, latar belakang non-sungai bernilai 0 alih-alih NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster sungai keluaran opsional."
              }
            }
          },
          "extract_valleys": {
            "name": "Ekstrak lembah",
            "description": "Mengekstrak lembah dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran filter"
              },
              "line_thin": {
                "label": "Penipisan garis",
                "description": "Penipisan garis"
              },
              "variant": {
                "label": "Varian",
                "description": "Varian"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "prune_vector_streams": {
            "name": "Pangkas sungai vektor",
            "description": "Memangkas jaringan sungai vektor berdasarkan magnitudo Shreve.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan yang digunakan untuk menentukan arah aliran"
              },
              "streams": {
                "label": "Sungai",
                "description": "Vektor jaringan sungai masukan"
              },
              "max_ridge_cutting_height": {
                "label": "Tinggi pemotongan punggung maksimum",
                "description": "Kenaikan elevasi maksimum yang diizinkan saat menghubungkan tautan hilir"
              },
              "snap_distance": {
                "label": "Jarak jepret",
                "description": "Jarak penjepretan maksimum untuk konektivitas titik ujung"
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Magnitudo Shreve minimum yang dipertahankan"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran"
              }
            }
          },
          "raster_streams_to_vector": {
            "name": "Sungai raster ke vektor",
            "description": "Mengonversi jaringan sungai raster menjadi vektor.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams_raster": {
                "label": "Raster sungai",
                "description": "Raster sungai"
              },
              "all_vertices": {
                "label": "Semua verteks",
                "description": "Semua verteks"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "rasterize_streams": {
            "name": "Rasterisasi sungai",
            "description": "Merasterisasi jaringan sungai vektor.",
            "params": {
              "input_vector": {
                "label": "Vektor masukan",
                "description": "Vektor masukan"
              },
              "reference_raster": {
                "label": "Raster acuan",
                "description": "Raster acuan"
              },
              "use_feature_id": {
                "label": "Gunakan ID fitur",
                "description": "Gunakan ID fitur"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "remove_short_streams": {
            "name": "Hapus sungai pendek",
            "description": "Menghapus ruas sungai yang lebih pendek dari panjang minimum.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "min_length": {
                "label": "Panjang minimum",
                "description": "Panjang minimum"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "repair_stream_vector_topology": {
            "name": "Perbaiki topologi vektor sungai",
            "description": "Memperbaiki topologi jaringan sungai vektor.",
            "params": {
              "input_vector": {
                "label": "Vektor masukan",
                "description": "Vektor masukan"
              },
              "snap": {
                "label": "Jepret",
                "description": "Jepret"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "river_centerlines": {
            "name": "Garis tengah sungai",
            "description": "Mengekstrak garis tengah sungai dari raster air menggunakan sumbu medial.",
            "params": {
              "raster": {
                "label": "Raster",
                "description": "Raster biner air/bukan air"
              },
              "min_length": {
                "label": "Panjang minimum",
                "description": "Panjang garis tengah minimum dalam sel raster"
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius pencarian (sel) yang digunakan untuk menghubungkan titik ujung terdekat"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis tengah keluaran"
              }
            }
          },
          "farthest_channel_head": {
            "name": "Hulu saluran terjauh",
            "description": "Menghitung jarak ke hulu kanal terjauh.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "find_main_stem": {
            "name": "Temukan batang utama",
            "description": "Mengidentifikasi batang utama jaringan sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "length_of_upstream_channels": {
            "name": "Panjang saluran hulu",
            "description": "Menghitung total panjang kanal hulu.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "long_profile": {
            "name": "Profil memanjang",
            "description": "Membuat profil memanjang sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams_raster": {
                "label": "Raster sungai",
                "description": "Raster sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "long_profile_from_points": {
            "name": "Profil memanjang dari titik",
            "description": "Membuat profil memanjang dari titik vektor.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "points": {
                "label": "Titik",
                "description": "Titik"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "hack_stream_order": {
            "name": "Orde sungai Hack",
            "description": "Menetapkan orde sungai Hack ke sel sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Gunakan penunjuk gaya ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Tetapkan nol pada latar belakang"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "horton_ratios": {
            "name": "Rasio Horton",
            "description": "Menghitung rasio bifurkasi, panjang, luas drainase, dan kemiringan Horton.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "streams_raster": {
                "label": "Raster sungai",
                "description": "Raster sungai biner (positif = sungai)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan teks keluaran (opsional)."
              }
            }
          },
          "horton_stream_order": {
            "name": "Orde sungai Horton",
            "description": "Menetapkan orde sungai Horton ke sel sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Gunakan penunjuk gaya ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Tetapkan nol pada latar belakang"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "shreve_stream_magnitude": {
            "name": "Magnitudo sungai Shreve",
            "description": "Menghitung magnitudo sungai Shreve.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Gunakan penunjuk gaya ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Tetapkan nol pada latar belakang"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "strahler_order_basins": {
            "name": "Basin orde Strahler",
            "description": "Mendelineasi cekungan DAS yang diberi label berdasarkan orde Horton-Strahler dari ruas sungai yang mengalirkannya.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk D8."
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster jaringan sungai yang sel sungainya bernilai > 0 dan bukan NoData."
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Flag pengodean penunjuk ESRI."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "strahler_stream_order": {
            "name": "Orde sungai Strahler",
            "description": "Menetapkan orde sungai Strahler ke sel sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Raster sungai (nilai positif = sel sungai)"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Gunakan nilai penunjuk gaya ESRI (default: Whitebox)"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Tetapkan nol pada latar belakang alih-alih NoData"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "stream_link_class": {
            "name": "Kelas tautan sungai",
            "description": "Mengklasifikasikan ruas sungai sebagai interior, eksterior, atau sumber.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "stream_link_identifier": {
            "name": "Pengenal tautan sungai",
            "description": "Menetapkan ID unik ke setiap ruas sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "stream_link_length": {
            "name": "Panjang tautan sungai",
            "description": "Menghitung total panjang untuk setiap ruas sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "linkid": {
                "label": "ID tautan",
                "description": "ID tautan"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "stream_link_slope": {
            "name": "Kemiringan tautan sungai",
            "description": "Menghitung kemiringan rata-rata untuk setiap ruas sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "linkid": {
                "label": "ID tautan",
                "description": "ID tautan"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "stream_slope_continuous": {
            "name": "Kemiringan sungai kontinu",
            "description": "Menghitung nilai kemiringan untuk setiap sel sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "dem": {
                "label": "DEM",
                "description": "DEM"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "topological_stream_order": {
            "name": "Orde sungai topologis",
            "description": "Menetapkan orde sungai topologis berdasarkan jumlah ruas.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "tributary_identifier": {
            "name": "Pengenal anak sungai",
            "description": "Menetapkan ID unik ke setiap anak sungai.",
            "params": {
              "d8_pntr": {
                "label": "Penunjuk D8",
                "description": "Raster penunjuk aliran D8"
              },
              "streams": {
                "label": "Sungai",
                "description": "Sungai"
              },
              "esri_pntr": {
                "label": "Penunjuk ESRI",
                "description": "Penunjuk ESRI"
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Latar nol"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "vector_stream_network_analysis": {
            "name": "Analisis jaringan sungai vektor",
            "description": "Analisis jaringan sungai vektor yang komprehensif.",
            "params": {
              "streams": {
                "label": "Sungai",
                "description": "Layer vektor jaringan sungai masukan."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster elevasi masukan (DEM)."
              },
              "max_ridge_cutting_height": {
                "label": "Tinggi pemotongan punggung maksimum",
                "description": "Tinggi pemotongan punggungan maksimum yang diizinkan."
              },
              "snap_distance": {
                "label": "Jarak jepret",
                "description": "Toleransi jarak penjepretan untuk pembersihan jaringan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional."
              }
            }
          },
          "add_point_coordinates_to_table": {
            "name": "Tambah koordinat titik ke tabel",
            "description": "Menyalin layer titik dan menambahkan field atribut XCOORD dan YCOORD.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "clean_vector": {
            "name": "Bersihkan vektor",
            "description": "Menghapus geometri vektor yang null dan tidak valid (misalnya garis/poligon yang terlalu kecil) sambil mempertahankan fitur dan atribut yang valid.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "csv_points_to_vector": {
            "name": "Titik CSV ke vektor",
            "description": "Mengimpor rekaman titik dari file CSV ke layer vektor titik.",
            "params": {
              "input_file": {
                "label": "File masukan",
                "description": "Path file CSV masukan."
              },
              "x_field_num": {
                "label": "Nomor field X",
                "description": "Indeks berbasis nol untuk field koordinat X. Default-nya 0."
              },
              "y_field_num": {
                "label": "Nomor field Y",
                "description": "Indeks berbasis nol untuk field koordinat Y. Default-nya 1."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG opsional untuk CRS keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "export_table_to_csv": {
            "name": "Ekspor tabel ke CSV",
            "description": "Mengekspor tabel atribut vektor ke file CSV.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "output_csv_file": {
                "label": "File CSV keluaran",
                "description": "Path file CSV keluaran."
              },
              "headers": {
                "label": "Header",
                "description": "Sertakan baris header dalam keluaran. Default-nya true."
              }
            }
          },
          "join_tables": {
            "name": "Gabungkan tabel",
            "description": "Menggabungkan atribut dari tabel vektor asing ke tabel vektor utama menggunakan field kunci.",
            "params": {
              "primary_vector": {
                "label": "Vektor utama",
                "description": "Path vektor utama yang menerima field hasil penggabungan."
              },
              "primary_key_field": {
                "label": "Field kunci utama",
                "description": "Field kunci utama dalam vektor utama."
              },
              "foreign_vector": {
                "label": "Vektor asing",
                "description": "Path vektor asing yang berisi field sumber."
              },
              "foreign_key_field": {
                "label": "Field kunci asing",
                "description": "Field kunci asing dalam vektor asing."
              },
              "import_field": {
                "label": "Field impor",
                "description": "Field tunggal opsional yang diimpor; default-nya semua field non-kunci dan non-FID."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Default-nya path GeoJSON turunan di sebelah masukan utama."
              }
            }
          },
          "merge_table_with_csv": {
            "name": "Gabungkan tabel dengan CSV",
            "description": "Menggabungkan atribut dari tabel CSV ke dalam tabel atribut vektor berdasarkan field kunci.",
            "params": {
              "primary_vector": {
                "label": "Vektor utama",
                "description": "Path vektor utama yang menerima field hasil penggabungan."
              },
              "primary_key_field": {
                "label": "Field kunci utama",
                "description": "Field kunci utama dalam vektor utama."
              },
              "foreign_csv_filename": {
                "label": "Nama file CSV asing",
                "description": "File CSV yang berisi tabel asing."
              },
              "foreign_key_field": {
                "label": "Field kunci asing",
                "description": "Nama field kunci asing dalam header CSV."
              },
              "import_field": {
                "label": "Field impor",
                "description": "Field CSV tunggal opsional yang diimpor; default-nya semua field non-kunci."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Default-nya path GeoJSON turunan di sebelah masukan utama."
              }
            }
          },
          "merge_vectors": {
            "name": "Gabungkan vektor",
            "description": "Menggabungkan dua atau lebih vektor masukan dengan jenis geometri yang sama menjadi satu vektor keluaran.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array path vektor masukan (minimal dua diperlukan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "reinitialize_attribute_table": {
            "name": "Inisialisasi ulang tabel atribut",
            "description": "Membuat salinan layer vektor yang hanya berisi atribut FID yang dibuat ulang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Jika dihilangkan, menimpa path masukan."
              }
            }
          },
          "vector_summary_statistics": {
            "name": "Statistik ringkasan vektor",
            "description": "Menghitung count, sum, mean, min, max, dan simpangan baku berdasarkan kelompok kategorikal dan mengekspornya ke CSV.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Nama field pengelompokan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Nama field nilai numerik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "fix_dangling_arcs": {
            "name": "Perbaiki arc menggantung",
            "description": "Memperbaiki busur menggantung yang kurang (undershoot) dan berlebih (overshoot) dalam jaringan garis dengan menjepret titik ujung garis dalam jarak ambang batas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor polyline masukan."
              },
              "snap": {
                "label": "Jepret",
                "description": "Ambang jarak penjepretan dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "lines_to_polygons": {
            "name": "Garis ke poligon",
            "description": "Mengonversi fitur polyline menjadi fitur poligon, memperlakukan bagian pertama sebagai cincin luar dan bagian-bagian berikutnya sebagai lubang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor polyline masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "multipart_to_singlepart": {
            "name": "Multibagian ke bagian tunggal",
            "description": "Mengonversi vektor yang berisi fitur multi-bagian menjadi vektor yang hanya berisi fitur bagian tunggal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan (polyline, poligon, atau multititik)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Default-nya GeoJSON berstempel waktu di sebelah masukan."
              },
              "exclude_holes": {
                "label": "Kecualikan lubang",
                "description": "Jika true, lubang poligon tetap melekat pada cincin luar yang melingkupinya (default: false)."
              }
            }
          },
          "polygons_to_lines": {
            "name": "Poligon ke garis",
            "description": "Mengonversi fitur poligon dan multipoligon menjadi garis yang menelusuri batasnya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "remove_polygon_holes": {
            "name": "Hapus lubang poligon",
            "description": "Menghapus cincin interior dari fitur poligon sambil mempertahankan atribut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "singlepart_to_multipart": {
            "name": "Bagian tunggal ke multibagian",
            "description": "Menggabungkan fitur bagian tunggal menjadi fitur multi-bagian, dikelompokkan berdasarkan field kategorikal opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Default-nya GeoJSON berstempel waktu di sebelah masukan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field atribut opsional untuk mengelompokkan fitur. Jika dihilangkan, semua fitur digabungkan menjadi satu geometri."
              }
            }
          },
          "topology_rule_autofix": {
            "name": "Perbaikan otomatis aturan topologi",
            "description": "Secara otomatis menerapkan perbaikan yang aman dan dapat diaudit untuk pelanggaran topologi yang dideteksi oleh topology_rule_validate: penjepretan titik ujung antarfitur, penjepretan/proyeksi titik ujung menggantung, dan proyeksi titik ke garis. polygon_must_not_have_gaps tidak memiliki perbaikan otomatis dan dilaporkan sebagai nol perubahan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "rule_set": {
                "label": "Set aturan",
                "description": "Konfigurasi aturan sebagai array/objek JSON, string CSV, atau path file. Aturan dengan perbaikan otomatis: line_endpoints_must_snap_within_tolerance, line_must_not_have_dangles, point_must_be_covered_by_line. polygon_must_not_have_gaps diterima tetapi tidak pernah menghasilkan perubahan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Toleransi untuk operasi penjepretan dalam satuan koordinat. Default-nya 0.01."
              },
              "dry_run": {
                "label": "Uji coba",
                "description": "Jika true (DEFAULT), hanya pratinjau: laporan perubahan dihasilkan tetapi tidak ada keluaran yang ditulis. Berikan false untuk menerapkan perbaikan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran untuk fitur yang diperbaiki. Jika dihilangkan, diturunkan di sebelah masukan."
              },
              "change_report": {
                "label": "Laporan perubahan",
                "description": "Path laporan jejak audit perubahan JSON opsional."
              }
            }
          },
          "topology_rule_validate": {
            "name": "Validasi aturan topologi",
            "description": "Memvalidasi topologi vektor terhadap pemeriksaan set aturan (perpotongan diri, tumpang tindih, celah, ujung menggantung, cakupan titik, penjepretan titik ujung) dan mengeluarkan pelanggaran tingkat fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "rule_set": {
                "label": "Set aturan",
                "description": "Konfigurasi aturan sebagai array/objek JSON, string CSV, atau path file. Default-nya seluruh 6 aturan MVP. Didukung: 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": "Toleransi jepret",
                "description": "Toleransi untuk aturan line_endpoints_must_snap_within_tolerance dalam satuan koordinat. Default-nya 1.0."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran untuk pelanggaran. Jika dihilangkan, diturunkan di sebelah masukan."
              },
              "report": {
                "label": "Laporan",
                "description": "Path laporan ringkasan JSON opsional."
              }
            }
          },
          "topology_validation_report": {
            "name": "Laporan validasi topologi",
            "description": "Mengaudit layer vektor untuk masalah topologi dan menulis laporan CSV per fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran."
              }
            }
          },
          "convert_nodata_to_zero": {
            "name": "Konversi nodata ke nol",
            "description": "Mengganti sel nodata raster dengan 0 sambil membiarkan sel valid tidak berubah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "modify_nodata_value": {
            "name": "Ubah nilai nodata",
            "description": "Mengubah nilai nodata raster dan menulis ulang sel nodata yang ada ke nilai baru.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "new_value": {
                "label": "Nilai baru",
                "description": "Nilai nodata baru. Default-nya -32768.0."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "new_raster_from_base_raster": {
            "name": "Raster baru dari basis raster",
            "description": "Membuat raster baru menggunakan cakupan, dimensi, dan CRS dari raster dasar.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Path raster dasar."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              },
              "out_val": {
                "label": "Nilai keluar",
                "description": "Nilai pengisi opsional. Default-nya nodata raster."
              },
              "data_type": {
                "label": "Tipe data",
                "description": "Tipe data opsional: 'float', 'double', atau 'integer'."
              }
            }
          },
          "new_raster_from_base_vector": {
            "name": "Raster baru dari basis vektor",
            "description": "Membuat raster baru dari cakupan vektor dasar dan ukuran sel, diisi dengan nilai opsional.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Path vektor dasar."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel grid keluaran (> 0)."
              },
              "out_val": {
                "label": "Nilai keluar",
                "description": "Nilai pengisi opsional. Default-nya nodata (-32768)."
              },
              "data_type": {
                "label": "Tipe data",
                "description": "Kata kunci tipe data keluaran opsional: integer, float, atau double."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "raster_to_vector_lines": {
            "name": "Raster ke garis vektor",
            "description": "Mengonversi sel garis raster yang bukan nol dan bukan nodata menjadi fitur vektor polyline.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan (band tunggal)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "raster_to_vector_points": {
            "name": "Raster ke titik vektor",
            "description": "Mengonversi sel raster yang bukan nol dan bukan nodata menjadi fitur titik yang terletak di pusat sel.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "raster_to_vector_polygons": {
            "name": "Raster ke poligon vektor",
            "description": "Mengonversi wilayah raster yang bukan nol dan bukan nodata menjadi fitur vektor poligon dengan atribut FID dan VALUE.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan (band tunggal)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran. Jika dihilangkan, path GeoJSON diturunkan di sebelah masukan."
              }
            }
          },
          "remove_raster_polygon_holes": {
            "name": "Hapus lubang poligon raster",
            "description": "Menghapus lubang latar belakang interior (wilayah 0 atau nodata yang dikelilingi latar depan) dari poligon raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan (band tunggal)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ukuran lubang maksimum opsional dalam sel yang dihapus. 0 berarti semua lubang yang terlingkupi."
              },
              "use_diagonals": {
                "label": "Gunakan diagonal",
                "description": "Gunakan keterhubungan 8 tetangga untuk penggumpalan dan konektivitas tepi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "set_nodata_value": {
            "name": "Tetapkan nilai nodata",
            "description": "Menetapkan nilai nodata raster dan memetakan sel nodata yang ada ke nilai latar belakang yang ditentukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "back_value": {
                "label": "Nilai latar",
                "description": "Nilai latar belakang yang ditetapkan sebagai nodata. Default-nya 0.0."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, mengembalikan raster dalam memori."
              }
            }
          },
          "vector_lines_to_raster": {
            "name": "Garis vektor ke raster",
            "description": "Merasterisasi geometri garis dan batas poligon ke grid raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan (garis atau poligon)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              },
              "field": {
                "label": "Field",
                "description": "Nama field numerik opsional yang dibakar. Default-nya FID."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, inisialisasi latar belakang keluaran ke 0 alih-alih nodata."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika 'base' tidak diberikan. Jika dihilangkan dan tidak ada base, ukuran sel otomatis adalah ekstensi maksimum / 500."
              },
              "base": {
                "label": "Basis",
                "description": "Path raster dasar opsional yang mendefinisikan grid dan ekstensi keluaran."
              }
            }
          },
          "vector_points_to_raster": {
            "name": "Titik vektor ke raster",
            "description": "Merasterisasi vektor titik atau multititik ke grid menggunakan operasi penetapan yang dipilih.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor masukan (titik/multititik)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik opsional yang digunakan untuk nilai raster. Default-nya FID."
              },
              "assign": {
                "label": "Tetapkan",
                "description": "Operasi penetapan: last, first, min, max, sum, num, mean."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, inisialisasi latar belakang ke 0; jika tidak, nodata."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran. Wajib jika 'base' tidak diberikan."
              },
              "base": {
                "label": "Basis",
                "description": "Path raster dasar opsional untuk mendefinisikan ekstensi/grid."
              }
            }
          },
          "vector_polygons_to_raster": {
            "name": "Poligon vektor ke raster",
            "description": "Merasterisasi vektor poligon ke grid, mendukung nilai bakar yang ditentukan oleh atribut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path vektor poligon masukan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field numerik opsional untuk nilai yang dibakar (default-nya FID)."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, inisialisasi latar belakang keluaran ke 0 alih-alih nodata."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika 'base' tidak diberikan."
              },
              "base": {
                "label": "Basis",
                "description": "Path raster dasar opsional yang mendefinisikan grid dan ekstensi keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori."
              }
            }
          },
          "local_morans_i_lisa_raster": {
            "name": "Moran's I lokal (LISA) raster",
            "description": "Menghitung analisis klaster LISA dari titik dan mengeluarkan raster kategorikal (HH/LL/HL/LH/NS). Memungkinkan integrasi berbasis raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan dengan titik pengamatan."
              },
              "field": {
                "label": "Field",
                "description": "Field atribut numerik yang akan dianalisis."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk mode k_nearest (default 8)."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak untuk mode distance_band."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Terapkan standardisasi baris pada bobot (default true)."
              },
              "island_policy": {
                "label": "Kebijakan pulau",
                "description": "Penanganan pulau: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ambang signifikansi dalam [0, 1]; default 0.05."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster keluaran (opsional; dihitung otomatis dari ekstensi)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran (klasifikasi: 0=NS, 1=HH, 2=LL, 3=HL, 4=LH)."
              }
            }
          },
          "getis_ord_gi_star_raster": {
            "name": "Getis-Ord Gi* raster",
            "description": "Menghitung klasifikasi hotspot/coldspot Gi* dari titik dan mengeluarkan raster (-1=cold, 0=NS, 1=hot). Untuk analisis berbasis hotspot.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan dengan titik pengamatan."
              },
              "field": {
                "label": "Field",
                "description": "Field atribut numerik yang akan dianalisis."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan: queen, rook, k_nearest, distance_band."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk mode k_nearest (default 8)."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak untuk mode distance_band."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Terapkan standardisasi baris pada bobot (default true)."
              },
              "island_policy": {
                "label": "Kebijakan pulau",
                "description": "Penanganan pulau: drop_with_warning, keep_zero_weight, error."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Ambang signifikansi dalam [0, 1]; default 0.05."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster keluaran (opsional; dihitung otomatis dari ekstensi)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran (klasifikasi: -1=Dingin, 0=NS, 1=Panas)."
              }
            }
          },
          "ordinary_kriging": {
            "name": "Kriging biasa",
            "description": "Melakukan interpolasi ordinary kriging untuk mengestimasi nilai pada sel grid yang tidak terpetakan berdasarkan sampel pengukuran titik. Ordinary kriging adalah metode geostatistik yang memanfaatkan struktur autokorelasi spasial untuk menyediakan prediksi sekaligus varians kriging terkait (ketidakpastian prediksi). Alat ini secara otomatis mengestimasi variogram empiris dari data titik masukan dan mencocokkan model variogram teoretis (Spherical, Exponential, atau Gaussian) untuk menangkap ketergantungan spasial.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field atribut numerik yang berisi nilai untuk diinterpolasi."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan peta (wajib jika tidak ada base_raster)."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "local_kriging": {
            "name": "Kriging lokal",
            "description": "Melakukan interpolasi ordinary kriging lokal menggunakan k tetangga terdekat, menyediakan estimasi spasial yang efisien untuk dataset besar. Pendekatan ini secara komputasi lebih praktis daripada ordinary kriging global untuk dataset dengan ribuan titik.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field atribut numerik yang berisi nilai untuk diinterpolasi."
              },
              "k_neighbors": {
                "label": "K tetangga",
                "description": "Jumlah tetangga terdekat yang digunakan; default-nya 10."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan peta (wajib jika tidak ada base_raster)."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "simple_kriging": {
            "name": "Kriging sederhana",
            "description": "Melakukan interpolasi simple kriging ketika rata-rata medan spasial diketahui sebelumnya. Metode ini mengurangi varians kriging dan memberikan prediksi yang lebih stabil ketika rata-rata diketahui secara andal dari informasi eksternal.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field atribut numerik yang berisi nilai untuk diinterpolasi."
              },
              "known_mean": {
                "label": "Rata-rata diketahui",
                "description": "Rata-rata medan spasial yang diketahui."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan peta (wajib jika tidak ada base_raster)."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "universal_kriging": {
            "name": "Kriging universal",
            "description": "Melakukan interpolasi universal kriging ketika fenomena spasial memiliki tren atau drift sistematis. Menggabungkan kriging dengan estimasi permukaan tren polinomial.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field atribut numerik yang berisi nilai untuk diinterpolasi."
              },
              "trend_order": {
                "label": "Orde tren",
                "description": "Orde tren polinomial (1=linear, 2=kuadratik); default-nya 1."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan peta (wajib jika tidak ada base_raster)."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "spacetime_kriging": {
            "name": "Kriging ruang-waktu",
            "description": "Melakukan interpolasi kriging ruang-waktu untuk memodelkan variasi spasial dan temporal dalam pengukuran titik secara bersama-sama. Ideal untuk data deret waktu yang terdistribusi secara spasial.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field atribut numerik yang berisi nilai untuk diinterpolasi."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field atribut temporal yang berisi nilai waktu."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan peta (wajib jika tidak ada base_raster)."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "spatial_lag_regression_raster": {
            "name": "Regresi spatial lag raster",
            "description": "Mengestimasi model SAR dan mengeluarkan permukaan nilai hasil pencocokan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "response_field": {
                "label": "Field respons",
                "description": "Variabel respons."
              },
              "predictor_fields": {
                "label": "Field prediktor",
                "description": "Field prediktor."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk k_nearest."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Standardisasi baris pada bobot."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran."
              }
            }
          },
          "spatial_error_regression_raster": {
            "name": "Regresi spatial error raster",
            "description": "Mengestimasi model SEM dan mengeluarkan permukaan nilai hasil pencocokan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "response_field": {
                "label": "Field respons",
                "description": "Variabel respons."
              },
              "predictor_fields": {
                "label": "Field prediktor",
                "description": "Field prediktor."
              },
              "weights_mode": {
                "label": "Mode bobot",
                "description": "Mode ketetanggaan."
              },
              "k": {
                "label": "K",
                "description": "Nilai k untuk k_nearest."
              },
              "distance": {
                "label": "Jarak",
                "description": "Ambang jarak."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Standardisasi baris pada bobot."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran."
              }
            }
          },
          "geographically_weighted_regression_raster": {
            "name": "Regresi terboboti geografis raster",
            "description": "Mengestimasi GWR dan mengeluarkan permukaan raster koefisien lokal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "response_field": {
                "label": "Field respons",
                "description": "Variabel respons."
              },
              "predictor_fields": {
                "label": "Field prediktor",
                "description": "Field prediktor."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipe kernel."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster keluaran."
              },
              "output_prefix": {
                "label": "Awalan keluaran",
                "description": "Awalan raster keluaran."
              }
            }
          },
          "inhomogeneous_intensity_raster": {
            "name": "Intensitas inhomogen raster",
            "description": "Menghitung permukaan estimasi kerapatan kernel (KDE) yang memvisualisasikan intensitas titik spasial. Mengungkap hotspot dan coldspot melampaui kerapatan sederhana.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita kernel."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Tipe kernel."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster intensitas keluaran."
              }
            }
          },
          "add": {
            "name": "Tambah",
            "description": "Menjumlahkan dua raster sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "average_overlay": {
            "name": "Tumpang susun rata-rata",
            "description": "Menghitung rata-rata per sel di seluruh tumpukan raster, mengabaikan NoData kecuali semua masukan bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "bool_and": {
            "name": "Boolean AND",
            "description": "Menghitung AND logis dari dua raster sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "bool_not": {
            "name": "Boolean NOT",
            "description": "Menghitung NOT logis dari setiap sel raster, menghasilkan 1 untuk sel bernilai nol dan 0 untuk lainnya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "bool_or": {
            "name": "Boolean OR",
            "description": "Menghitung OR logis dari dua raster sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "bool_xor": {
            "name": "Boolean XOR",
            "description": "Menghitung XOR logis dari dua raster sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "count_if": {
            "name": "Hitung jika",
            "description": "Menghitung jumlah raster masukan yang selnya sama dengan nilai pembanding.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison_value": {
                "label": "Nilai pembanding",
                "description": "Nilai pembanding yang dihitung dalam tumpukan raster."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "divide": {
            "name": "Bagi",
            "description": "Membagi raster pertama dengan raster kedua sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "highest_position": {
            "name": "Posisi tertinggi",
            "description": "Mengembalikan indeks tumpukan raster berbasis nol yang berisi nilai tertinggi di setiap sel.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "lowest_position": {
            "name": "Posisi terendah",
            "description": "Mengembalikan indeks tumpukan raster berbasis nol yang berisi nilai terendah di setiap sel.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "max_absolute_overlay": {
            "name": "Tumpang susun absolut maksimum",
            "description": "Menghitung nilai absolut maksimum per sel di seluruh tumpukan raster, merambatkan NoData jika ada sel masukan yang bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "max_overlay": {
            "name": "Tumpang susun maksimum",
            "description": "Menghitung nilai maksimum per sel di seluruh tumpukan raster, merambatkan NoData jika ada sel masukan yang bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "min_absolute_overlay": {
            "name": "Tumpang susun absolut minimum",
            "description": "Menghitung nilai absolut minimum per sel di seluruh tumpukan raster, merambatkan NoData jika ada sel masukan yang bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "min_overlay": {
            "name": "Tumpang susun minimum",
            "description": "Menghitung nilai minimum per sel di seluruh tumpukan raster, merambatkan NoData jika ada sel masukan yang bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "modulo": {
            "name": "Modulo",
            "description": "Menghitung sisa pembagian raster pertama dengan raster kedua sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "multiply": {
            "name": "Kali",
            "description": "Mengalikan dua raster sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "multiply_overlay": {
            "name": "Tumpang susun perkalian",
            "description": "Menghitung hasil kali per sel di seluruh tumpukan raster, merambatkan NoData jika ada sel masukan yang bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "percent_equal_to": {
            "name": "Persentase sama dengan",
            "description": "Menghitung fraksi raster dalam tumpukan yang nilainya sama dengan raster pembanding di setiap sel.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Perbandingan",
                "description": "Path raster pembanding atau handle raster dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "percent_greater_than": {
            "name": "Persentase lebih besar dari",
            "description": "Menghitung fraksi raster dalam tumpukan yang nilainya lebih besar daripada raster pembanding di setiap sel.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Perbandingan",
                "description": "Path raster pembanding atau handle raster dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "percent_less_than": {
            "name": "Persentase lebih kecil dari",
            "description": "Menghitung fraksi raster dalam tumpukan yang nilainya lebih kecil daripada raster pembanding di setiap sel.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "comparison": {
                "label": "Perbandingan",
                "description": "Path raster pembanding atau handle raster dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "pick_from_list": {
            "name": "Pilih dari daftar",
            "description": "Memilih nilai per sel dari tumpukan raster menggunakan raster posisi berbasis nol.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pos_input": {
                "label": "Masukan posisi",
                "description": "Raster posisi tumpukan berbasis nol."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "power": {
            "name": "Pangkat",
            "description": "Memangkatkan raster pertama dengan raster kedua sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "standard_deviation_overlay": {
            "name": "Tumpang susun simpangan baku",
            "description": "Menghitung simpangan baku per sel di seluruh tumpukan raster, merambatkan NoData jika ada sel masukan yang bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "subtract": {
            "name": "Kurang",
            "description": "Mengurangkan raster kedua dari raster pertama sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "sum_overlay": {
            "name": "Tumpang susun jumlah",
            "description": "Menghitung jumlah per sel di seluruh tumpukan raster, merambatkan NoData jika ada sel masukan yang bernilai NoData.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan sebagai array path atau string yang dipisahkan titik koma/koma."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "update_nodata_cells": {
            "name": "Perbarui sel nodata",
            "description": "Mengisi sel NoData pada input1 dari sel valid yang bersesuaian pada input2.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster utama yang akan diperbarui."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster sekunder yang menyediakan nilai pengganti."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "weighted_overlay": {
            "name": "Tumpang susun terboboti",
            "description": "Menggabungkan raster faktor menggunakan bobot ternormalisasi, penanda biaya opsional, dan batasan biner opsional.",
            "params": {
              "factors": {
                "label": "Faktor",
                "description": "Tumpukan raster faktor masukan."
              },
              "weights": {
                "label": "Bobot",
                "description": "Bobot numerik yang bersesuaian dengan setiap raster faktor."
              },
              "cost": {
                "label": "Biaya",
                "description": "Flag boolean opsional yang menunjukkan faktor biaya."
              },
              "constraints": {
                "label": "Kendala",
                "description": "Tumpukan kendala raster opsional; nilai <= 0 memaksa keluaran menjadi nol."
              },
              "scale_max": {
                "label": "Skala maksimum",
                "description": "Nilai skala maksimum yang digunakan setelah normalisasi faktor."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "weighted_sum": {
            "name": "Jumlah terboboti",
            "description": "Menghitung jumlah berbobot di seluruh tumpukan raster setelah menormalkan bobot agar berjumlah satu.",
            "params": {
              "input_rasters": {
                "label": "Raster masukan",
                "description": "Tumpukan raster masukan."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "weights": {
                "label": "Bobot",
                "description": "Bobot numerik yang bersesuaian dengan setiap raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "image_correlation_neighbourhood_analysis": {
            "name": "Analisis ketetanggaan korelasi citra",
            "description": "Melakukan analisis korelasi jendela bergerak antara dua raster dan mengembalikan raster korelasi dan nilai-p.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster masukan pertama."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan kedua."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran jendela bergerak dalam sel (minimum 3, default 11)."
              },
              "correlation_stat": {
                "label": "Statistik korelasi",
                "description": "Metrik korelasi: pearson, spearman, atau kendall (default pearson)."
              },
              "output1": {
                "label": "Keluaran 1",
                "description": "Path keluaran opsional untuk raster korelasi."
              },
              "output2": {
                "label": "Keluaran 2",
                "description": "Path keluaran opsional untuk raster signifikansi (nilai p)."
              }
            }
          },
          "natural_neighbour_interpolation": {
            "name": "Interpolasi natural neighbour",
            "description": "Menginterpolasi raster dari sampel titik menggunakan pembobotan luas natural-neighbour Sibson sejati.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "clip_to_hull": {
                "label": "Potong ke hull",
                "description": "Batasi interpolasi ke convex hull titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "nearest_neighbour_interpolation": {
            "name": "Interpolasi tetangga terdekat",
            "description": "Menginterpolasi raster dari sampel titik dengan menetapkan nilai sampel terdekat ke setiap sel.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum opsional dalam satuan peta; default-nya tak hingga."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "conditional_evaluation": {
            "name": "Evaluasi bersyarat",
            "description": "Melakukan evaluasi kondisional if-then-else pada sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "statement": {
                "label": "Pernyataan",
                "description": "Ekspresi kondisional yang dievaluasi per sel."
              },
              "true": {
                "label": "Benar",
                "description": "Nilai atau raster/ekspresi yang digunakan jika kondisi bernilai true."
              },
              "false": {
                "label": "Salah",
                "description": "Nilai atau raster/ekspresi yang digunakan jika kondisi bernilai false."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "reclass": {
            "name": "Reklasifikasi",
            "description": "Mereklasifikasi nilai raster menggunakan rentang atau pasangan penetapan eksak.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "reclass_values": {
                "label": "Nilai reklasifikasi",
                "description": "Nilai reklasifikasi sebagai baris [new, from, to_less_than] atau [new, old] jika assign_mode=true."
              },
              "assign_mode": {
                "label": "Mode penetapan",
                "description": "Jika true, gunakan mode penetapan eksak dengan pasangan [new_value, old_value]."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "reclass_equal_interval": {
            "name": "Reklasifikasi interval sama",
            "description": "Mereklasifikasi nilai raster ke dalam interval berlebar sama pada rentang nilai opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "interval_size": {
                "label": "Ukuran interval",
                "description": "Lebar bin interval sama."
              },
              "start_value": {
                "label": "Nilai awal",
                "description": "Batas bawah opsional untuk reklasifikasi; default-nya nilai minimum raster."
              },
              "end_value": {
                "label": "Nilai akhir",
                "description": "Batas atas opsional untuk reklasifikasi; default-nya nilai maksimum raster."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "buffer_raster": {
            "name": "Buffer raster",
            "description": "Membuat zona buffer biner di sekitar sel raster yang bukan nol dan bukan NoData dalam jarak yang ditentukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan yang sel bukan nolnya menjadi target buffer."
              },
              "buffer_size": {
                "label": "Ukuran buffer",
                "description": "Ambang jarak buffer."
              },
              "grid_cell_units": {
                "label": "Satuan sel grid",
                "description": "Jika true, tafsirkan buffer_size dalam satuan sel grid alih-alih satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "cost_allocation": {
            "name": "Alokasi biaya",
            "description": "Menetapkan setiap sel ke wilayah sumber menggunakan raster backlink dari analisis jarak biaya.",
            "params": {
              "source": {
                "label": "Sumber",
                "description": "Raster sumber dengan sel sumber positif."
              },
              "backlink": {
                "label": "Tautan balik",
                "description": "Raster backlink dari cost_distance."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "cost_distance": {
            "name": "Jarak biaya",
            "description": "Menghitung raster biaya perjalanan terakumulasi dan backlink dari permukaan sumber dan biaya.",
            "params": {
              "source": {
                "label": "Sumber",
                "description": "Raster sumber dengan sel sumber positif."
              },
              "cost": {
                "label": "Biaya",
                "description": "Raster biaya/gesekan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran biaya terakumulasi opsional."
              },
              "backlink_output": {
                "label": "Keluaran tautan balik",
                "description": "Path raster keluaran backlink opsional."
              }
            }
          },
          "cost_pathway": {
            "name": "Jalur biaya",
            "description": "Menelusuri jalur biaya terkecil dari sel tujuan menggunakan raster backlink.",
            "params": {
              "destination": {
                "label": "Tujuan",
                "description": "Raster tujuan dengan sel tujuan positif."
              },
              "backlink": {
                "label": "Tautan balik",
                "description": "Raster backlink dari cost_distance."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, latar belakang keluaran bernilai nol alih-alih NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "euclidean_allocation": {
            "name": "Alokasi Euclidean",
            "description": "Menetapkan nilai sel target bukan nol terdekat ke setiap sel valid.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan dengan sel target bukan nol."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "euclidean_distance": {
            "name": "Jarak Euclidean",
            "description": "Menghitung jarak Euclidean ke sel target bukan nol terdekat dalam raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan dengan sel target bukan nol."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "abs": {
            "name": "Abs",
            "description": "Menghitung nilai absolut setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "aggregate_raster": {
            "name": "Agregasi raster",
            "description": "Menurunkan resolusi raster dengan mengagregasi blok menggunakan mean, sum, min, max, atau range.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "aggregation_factor": {
                "label": "Faktor agregasi",
                "description": "Ukuran blok dalam sel sumber."
              },
              "aggregation_type": {
                "label": "Jenis agregasi",
                "description": "Salah satu dari mean, sum, maximum, minimum, atau range."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "anova": {
            "name": "ANOVA",
            "description": "Melakukan ANOVA satu arah pada nilai raster yang dikelompokkan berdasarkan kategori raster kelas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster pengukuran."
              },
              "features": {
                "label": "Fitur",
                "description": "Path raster kelas/kategori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "arccos": {
            "name": "Arccos",
            "description": "Menghitung invers kosinus (arccos) setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "arcosh": {
            "name": "Arcosh",
            "description": "Menghitung invers kosinus hiperbolik setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "arcsin": {
            "name": "Arcsin",
            "description": "Menghitung invers sinus (arcsin) setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "arctan": {
            "name": "Arctan",
            "description": "Menghitung invers tangen (arctan) setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "arsinh": {
            "name": "Arsinh",
            "description": "Menghitung invers sinus hiperbolik setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "artanh": {
            "name": "Artanh",
            "description": "Menghitung invers tangen hiperbolik setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "atan2": {
            "name": "Atan2",
            "description": "Menghitung invers tangen empat kuadran menggunakan dua raster sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "block_maximum": {
            "name": "Maksimum blok",
            "description": "Merasterisasi fitur titik dengan menetapkan nilai maksimum yang teramati di dalam setiap sel keluaran.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional yang akan dirasterisasi; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "block_minimum": {
            "name": "Minimum blok",
            "description": "Merasterisasi fitur titik dengan menetapkan nilai minimum yang teramati di dalam setiap sel keluaran.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional yang akan dirasterisasi; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "boundary_shape_complexity": {
            "name": "Kompleksitas bentuk batas",
            "description": "Menghitung kompleksitas bentuk batas patch raster menggunakan metrik cabang kerangka hasil penipisan garis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster ID petak masukan dengan ID positif bertipe bilangan bulat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "ceil": {
            "name": "Ceil",
            "description": "Membulatkan setiap sel raster ke atas ke bilangan bulat terdekat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "centroid_raster": {
            "name": "Centroid raster",
            "description": "Menghitung sel centroid untuk setiap ID patch bernilai positif dalam raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster petak masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "clip_raster_to_polygon": {
            "name": "Potong raster ke poligon",
            "description": "Memotong raster ke cakupan poligon; sel di luar poligon diatur menjadi NoData.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "polygons": {
                "label": "Poligon",
                "description": "Layer vektor poligon masukan."
              },
              "maintain_dimensions": {
                "label": "Pertahankan dimensi",
                "description": "Pertahankan dimensi raster asli alih-alih memotong ke ekstensi poligon."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "clump": {
            "name": "Pengelompokan (clump)",
            "description": "Mengelompokkan sel raster bersebelahan yang bernilai sama menjadi pengidentifikasi patch unik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kategorikal masukan."
              },
              "diag": {
                "label": "Diagonal",
                "description": "Jika true, sertakan konektivitas diagonal (8 tetangga); jika tidak, gunakan 4 tetangga."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, perlakukan sel bernilai nol sebagai latar belakang dan pertahankan bernilai nol dalam keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "cos": {
            "name": "Cos",
            "description": "Menghitung kosinus setiap nilai sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "cosh": {
            "name": "Cosh",
            "description": "Menghitung kosinus hiperbolik setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "create_plane": {
            "name": "Buat bidang",
            "description": "Membuat raster dari persamaan bidang menggunakan geometri raster dasar.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Raster dasar yang mendefinisikan geometri keluaran."
              },
              "gradient": {
                "label": "Gradien",
                "description": "Gradien kemiringan bidang dalam derajat."
              },
              "aspect": {
                "label": "Aspek",
                "description": "Aspek bidang dalam derajat."
              },
              "constant": {
                "label": "Konstanta",
                "description": "Suku konstanta aditif dalam persamaan bidang."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "crispness_index": {
            "name": "Indeks ketajaman",
            "description": "Menghitung indeks ketajaman (crispness) untuk raster probabilitas keanggotaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "cross_tabulation": {
            "name": "Tabulasi silang",
            "description": "Melakukan tabulasi silang pada dua raster kategorikal.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster masukan 1."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan 2."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "cumulative_distribution": {
            "name": "Distribusi kumulatif",
            "description": "Mengonversi nilai raster menjadi probabilitas distribusi kumulatif.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "dbscan": {
            "name": "DBSCAN",
            "description": "Melakukan pengklasteran berbasis kerapatan DBSCAN tak terbimbing pada tumpukan raster masukan.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar yang dipisahkan koma/titik koma atau array JSON berisi path raster masukan (band fitur)."
              },
              "scaling_method": {
                "label": "Metode penskalaan",
                "description": "Penskalaan fitur: 'none' (default), 'normalize' (rentang 0-1), atau 'standardize' (skor z)."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Epsilon: radius pencarian ketetanggaan dalam ruang fitur (default 1.0)."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Jumlah minimum tetangga dalam epsilon untuk sebuah titik inti (default 5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional untuk label ID klaster."
              }
            }
          },
          "decrement": {
            "name": "Dekremen",
            "description": "Mengurangkan suatu nilai (default 1.0) dari setiap sel raster yang bukan nodata.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "value": {
                "label": "Nilai",
                "description": "Jumlah yang dikurangkan dari setiap sel. Default-nya 1.0."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "edge_proportion": {
            "name": "Proporsi tepi",
            "description": "Menghitung proporsi sel setiap patch yang merupakan sel tepi dan memetakannya kembali ke sel patch.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster ID petak masukan dengan ID positif bertipe bilangan bulat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "equal_to": {
            "name": "Sama dengan",
            "description": "Menguji apakah dua raster sama sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "erase_polygon_from_raster": {
            "name": "Hapus poligon dari raster",
            "description": "Mengatur sel raster di dalam poligon menjadi NoData sambil mempertahankan sel di dalam lubang poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "polygons": {
                "label": "Poligon",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "exp": {
            "name": "Exp",
            "description": "Menghitung e dipangkatkan dengan setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "exp2": {
            "name": "Exp2",
            "description": "Menghitung 2 dipangkatkan dengan setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "fft_random_field": {
            "name": "Medan acak FFT",
            "description": "Membuat medan acak yang berautokorelasi spasial menggunakan sintesis spektral FFT.",
            "params": {
              "base_raster": {
                "label": "Raster dasar",
                "description": "Path raster dasar yang digunakan untuk geometri grid."
              },
              "range": {
                "label": "Rentang",
                "description": "Rentang korelasi perkiraan dalam satuan peta. Default: 1.0."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "filter_raster_features_by_area": {
            "name": "Filter fitur raster berdasarkan luas",
            "description": "Menghapus fitur raster berlabel bilangan bulat yang lebih kecil dari ambang batas jumlah sel.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan yang berisi label kelas bilangan bulat."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ukuran fitur minimum dalam sel yang dipertahankan."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, fitur yang dihapus ditetapkan 0; jika tidak, fitur yang dihapus ditetapkan NoData."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "find_patch_edge_cells": {
            "name": "Temukan sel tepi patch",
            "description": "Mengidentifikasi sel tepi untuk setiap ID patch raster positif; sel patch yang bukan tepi diatur menjadi nol.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster ID petak masukan; nilai positif diperlakukan sebagai sel petak."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "floor": {
            "name": "Floor",
            "description": "Membulatkan setiap sel raster ke bawah ke bilangan bulat terdekat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "greater_than": {
            "name": "Lebih besar dari",
            "description": "Menguji apakah raster pertama lebih besar daripada raster kedua sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "heat_map": {
            "name": "Peta panas",
            "description": "Menghasilkan raster peta panas kerapatan kernel dari kemunculan titik.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field bobot numerik opsional; default-nya kemunculan tanpa bobot."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita kernel dalam satuan peta."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "kernel_function": {
                "label": "Fungsi kernel",
                "description": "Tipe fungsi kernel; default-nya quartic."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "idw_interpolation": {
            "name": "Interpolasi IDW",
            "description": "Menginterpolasi raster dari sampel titik menggunakan pembobotan jarak terbalik.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "weight": {
                "label": "Bobot",
                "description": "Eksponen jarak IDW; default-nya 2.0."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius ketetanggaan opsional dalam satuan peta; <=0 menggunakan cadangan k-terdekat."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Jumlah minimum tetangga yang digunakan; default-nya 0."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "image_autocorrelation": {
            "name": "Autokorelasi citra",
            "description": "Menghitung Moran's I untuk satu atau beberapa citra raster.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar path raster masukan."
              },
              "contiguity": {
                "label": "Kontiguitas",
                "description": "Aturan ketetanggaan: rook, king/queen, atau bishop."
              }
            }
          },
          "image_correlation": {
            "name": "Korelasi citra",
            "description": "Menghitung matriks korelasi Pearson untuk dua atau lebih citra raster.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar path raster masukan."
              }
            }
          },
          "image_regression": {
            "name": "Regresi citra",
            "description": "Melakukan regresi linear bivariat antara dua raster dan mengeluarkan raster residual serta laporan.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster variabel bebas."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster variabel terikat."
              },
              "standardize_residuals": {
                "label": "Standarisasi residu",
                "description": "Apakah residu distandardisasi berdasarkan galat baku model."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster residu."
              }
            }
          },
          "increment": {
            "name": "Inkremen",
            "description": "Menambahkan suatu nilai (default 1.0) ke setiap sel raster yang bukan nodata.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "value": {
                "label": "Nilai",
                "description": "Jumlah yang ditambahkan ke setiap sel. Default-nya 1.0."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "inplace_add": {
            "name": "Tambah di tempat",
            "description": "Melakukan operasi penjumlahan di tempat (input1 += input2).",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan yang akan dimodifikasi."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan atau konstanta numerik."
              }
            }
          },
          "inplace_divide": {
            "name": "Bagi di tempat",
            "description": "Melakukan operasi pembagian di tempat (input1 /= input2).",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan yang akan dimodifikasi."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan atau konstanta numerik bukan nol."
              }
            }
          },
          "inplace_multiply": {
            "name": "Kali di tempat",
            "description": "Melakukan operasi perkalian di tempat (input1 *= input2).",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan yang akan dimodifikasi."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan atau konstanta numerik."
              }
            }
          },
          "inplace_subtract": {
            "name": "Kurang di tempat",
            "description": "Melakukan operasi pengurangan di tempat (input1 -= input2).",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan yang akan dimodifikasi."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan atau konstanta numerik."
              }
            }
          },
          "integer_division": {
            "name": "Pembagian bilangan bulat",
            "description": "Membagi dua raster dan memotong setiap hasil ke arah nol.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "inverse_pca": {
            "name": "PCA invers",
            "description": "Merekonstruksi citra band asli dari raster komponen PCA menggunakan vektor eigen yang disimpan.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path raster komponen."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "pca_report": {
                "label": "Laporan PCA",
                "description": "String laporan JSON dari PCA."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran dasar opsional."
              }
            }
          },
          "is_nodata": {
            "name": "Adalah nodata",
            "description": "Mengeluarkan 1 untuk sel nodata dan 0 untuk semua sel valid.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "kappa_index": {
            "name": "Indeks kappa",
            "description": "Menghitung kappa Cohen dan metrik kesepakatan antara dua raster kategorikal.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster klasifikasi masukan."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster referensi masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "ks_normality_test": {
            "name": "Uji normalitas KS",
            "description": "Mengevaluasi apakah nilai raster berasal dari distribusi normal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Ukuran sampel acak opsional. Hilangkan untuk menggunakan semua sel yang valid."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "less_than": {
            "name": "Lebih kecil dari",
            "description": "Menguji apakah raster pertama lebih kecil daripada raster kedua sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "list_unique_values_raster": {
            "name": "Daftar nilai unik raster",
            "description": "Mencantumkan kategori raster valid yang unik beserta frekuensinya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran opsional."
              },
              "strict_parity": {
                "label": "Paritas ketat",
                "description": "Jika true, kembalikan keluaran frekuensi kategori lengkap (default true)."
              },
              "max_values": {
                "label": "Nilai maksimum",
                "description": "Jumlah maksimum nilai unik yang disertakan jika strict_parity bernilai false (default 10000)."
              }
            }
          },
          "ln": {
            "name": "Ln",
            "description": "Menghitung logaritma natural setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "log10": {
            "name": "Log10",
            "description": "Menghitung logaritma basis 10 setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "log2": {
            "name": "Log2",
            "description": "Menghitung logaritma basis 2 setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "map_features": {
            "name": "Petakan fitur",
            "description": "Memetakan fitur medan tinggi diskret dari raster menggunakan pertumbuhan wilayah berprioritas menurun.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "min_feature_height": {
                "label": "Tinggi fitur minimum",
                "description": "Pemisahan vertikal minimum untuk fitur independen."
              },
              "min_feature_size": {
                "label": "Ukuran fitur minimum",
                "description": "Ukuran fitur minimum dalam sel."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "max": {
            "name": "Maks",
            "description": "Melakukan operasi MAX pada dua raster atau pada raster dan nilai konstanta.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster pertama atau konstanta numerik."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster kedua atau konstanta numerik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "min": {
            "name": "Min",
            "description": "Melakukan operasi MIN pada dua raster atau pada raster dan nilai konstanta.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster pertama atau konstanta numerik."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster kedua atau konstanta numerik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "modified_shepard_interpolation": {
            "name": "Interpolasi Shepard termodifikasi",
            "description": "Menginterpolasi raster dari sampel titik menggunakan pemaduan modified-Shepard berbobot lokal.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "weight": {
                "label": "Bobot",
                "description": "Eksponen bobot Shepard; default-nya 2.0."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius ketetanggaan opsional dalam satuan peta."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Jumlah minimum tetangga; default-nya 8."
              },
              "use_quadratic_basis": {
                "label": "Gunakan basis kuadratik",
                "description": "Terapkan koreksi basis kuadratik lokal (mode kompatibel dengan versi lama)."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "use_data_hull": {
                "label": "Gunakan hull data",
                "description": "Batasi interpolasi ke convex hull titik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "narrowness_index": {
            "name": "Indeks kesempitan",
            "description": "Menghitung indeks kesempitan patch raster sebagai luas dibagi luas lingkaran terbesar yang termuat berdasarkan jarak maksimum ke tepi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster ID petak masukan dengan ID positif bertipe bilangan bulat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "negate": {
            "name": "Negasi",
            "description": "Menegasikan setiap nilai sel raster yang bukan nodata.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "nibble": {
            "name": "Nibble (isi dari tetangga)",
            "description": "Mengisi wilayah latar belakang menggunakan alokasi tetangga terdekat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan yang akan di-nibble."
              },
              "mask": {
                "label": "Masker",
                "description": "Raster masker biner."
              },
              "use_nodata": {
                "label": "Gunakan nodata",
                "description": "Perlakukan nodata masukan sebagai nilai kelas (bukan latar belakang)."
              },
              "nibble_nodata": {
                "label": "Nibble nodata",
                "description": "Nibble juga ke area nodata di luar masker."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "not_equal_to": {
            "name": "Tidak sama dengan",
            "description": "Menguji apakah dua raster tidak sama sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "paired_sample_t_test": {
            "name": "Uji t sampel berpasangan",
            "description": "Melakukan uji-t sampel berpasangan pada dua raster menggunakan sel valid berpasangan.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster masukan pertama."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan kedua."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Ukuran sampel opsional dengan pengembalian."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "phi_coefficient": {
            "name": "Koefisien phi",
            "description": "Melakukan penilaian kesepakatan klasifikasi biner menggunakan koefisien phi.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster biner pertama."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster biner kedua."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              }
            }
          },
          "principal_component_analysis": {
            "name": "Analisis komponen utama",
            "description": "Melakukan PCA pada tumpukan raster, mengembalikan citra komponen dan laporan JSON.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path raster masukan (≥3)."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "num_components": {
                "label": "Jumlah komponen",
                "description": "Jumlah komponen. Default: semua."
              },
              "standardized": {
                "label": "Terstandarisasi",
                "description": "Gunakan matriks korelasi. Default: false."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran dasar opsional."
              }
            }
          },
          "print_geotiff_tags": {
            "name": "Cetak tag GeoTIFF",
            "description": "Menghasilkan laporan teks yang menjelaskan tag TIFF/GeoTIFF dan metadata utama untuk raster keluarga GeoTIFF masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              }
            }
          },
          "quantiles": {
            "name": "Kuantil",
            "description": "Mentransformasikan nilai raster menjadi kelas kuantil.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "num_quantiles": {
                "label": "Jumlah kuantil",
                "description": "Jumlah kuantil (default 5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "radial_basis_function_interpolation": {
            "name": "Interpolasi fungsi basis radial",
            "description": "Menginterpolasi raster dari sampel titik menggunakan pembobotan kemiripan basis radial lokal.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "approximate_mode": {
                "label": "Mode aproksimasi",
                "description": "Jika true, gunakan pembobotan aproksimasi cepat NG; jika false, selesaikan sistem RBF lokal (gaya lama)."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius ketetanggaan opsional dalam satuan peta."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Jumlah minimum tetangga yang digunakan."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "func_type": {
                "label": "Jenis fungsi",
                "description": "Tipe basis radial (thinplatespline, polyharmonic, gaussian, multiquadric, inversemultiquadric)."
              },
              "poly_order": {
                "label": "Orde polinomial",
                "description": "Petunjuk orde polinomial (none, constant, quadratic)."
              },
              "weight": {
                "label": "Bobot",
                "description": "Parameter bentuk/eksponen basis bergantung pada func_type."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "radius_of_gyration": {
            "name": "Radius girasi",
            "description": "Menghitung radius girasi per patch dan memetakan nilainya kembali ke sel patch.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster ID petak masukan dengan ID positif bertipe bilangan bulat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "random_field": {
            "name": "Medan acak",
            "description": "Membuat raster yang berisi nilai acak normal standar.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Path raster dasar yang digunakan untuk geometri grid."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "random_forest_classification_fit": {
            "name": "Fit klasifikasi random forest",
            "description": "Mencocokkan model klasifikasi random forest dan mengembalikan byte model terserialisasi.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik/poligon."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kelas dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "split_criterion": {
                "label": "Kriteria pemisahan",
                "description": "Petunjuk kriteria pemisahan pohon (dipertahankan untuk kompatibilitas versi lama)."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon dalam forest (default 200)."
              },
              "min_samples_leaf": {
                "label": "Sampel minimum per daun",
                "description": "Jumlah sampel minimum yang diperlukan pada node daun (default 1)."
              },
              "min_samples_split": {
                "label": "Sampel minimum pemisahan",
                "description": "Jumlah sampel minimum yang diperlukan untuk memisahkan node internal (default 2)."
              },
              "test_proportion": {
                "label": "Proporsi uji",
                "description": "Argumen kompatibilitas versi lama; dicadangkan untuk diagnostik mendatang."
              }
            }
          },
          "random_forest_classification_predict": {
            "name": "Prediksi klasifikasi random forest",
            "description": "Menerapkan model klasifikasi random forest terserialisasi ke prediktor multi-band.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "model_bytes": {
                "label": "Byte model",
                "description": "Byte model yang dihasilkan oleh random_forest_classification_fit."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "random_forest_regression_fit": {
            "name": "Fit regresi random forest",
            "description": "Mencocokkan model regresi random forest dan mengembalikan byte model terserialisasi.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "training_data": {
                "label": "Data pelatihan",
                "description": "Path data pelatihan vektor titik."
              },
              "field": {
                "label": "Field",
                "description": "Field target numerik dalam atribut training_data."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Mode penskalaan fitur: none (default), normalize, standardize."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon dalam forest (default 200)."
              },
              "min_samples_leaf": {
                "label": "Sampel minimum per daun",
                "description": "Jumlah sampel minimum yang diperlukan pada node daun (default 1)."
              },
              "min_samples_split": {
                "label": "Sampel minimum pemisahan",
                "description": "Jumlah sampel minimum yang diperlukan untuk memisahkan node internal (default 2)."
              },
              "test_proportion": {
                "label": "Proporsi uji",
                "description": "Argumen kompatibilitas versi lama; dicadangkan untuk diagnostik mendatang."
              }
            }
          },
          "random_forest_regression_predict": {
            "name": "Prediksi regresi random forest",
            "description": "Menerapkan model regresi random forest terserialisasi ke prediktor multi-band.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Array raster masukan band tunggal."
              },
              "model_bytes": {
                "label": "Byte model",
                "description": "Byte model yang dihasilkan oleh random_forest_regression_fit."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "random_sample": {
            "name": "Sampel acak",
            "description": "Membuat raster yang berisi sel sampel berlokasi acak dengan ID unik.",
            "params": {
              "base": {
                "label": "Basis",
                "description": "Path raster dasar yang digunakan untuk geometri grid dan masker sel valid."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Jumlah sel sampel yang dihasilkan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "raster_area": {
            "name": "Luas raster",
            "description": "Mengestimasi luas poligon raster per kelas dalam satuan sel grid atau satuan peta dan menulis total kelas ke setiap sel kelas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kategorikal masukan."
              },
              "units": {
                "label": "Satuan",
                "description": "Satuan luas: 'map units' (default) atau 'grid cells'."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, sel bernilai nol dikecualikan dari analisis."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "raster_calculator": {
            "name": "Kalkulator raster",
            "description": "Mengevaluasi ekspresi matematis pada daftar raster masukan sel demi sel.",
            "params": {
              "expression": {
                "label": "Ekspresi",
                "description": "Ekspresi matematika dengan nama variabel raster dalam tanda kutip."
              },
              "inputs": {
                "label": "Masukan",
                "description": "Path raster masukan terurut."
              },
              "auto_reproject": {
                "label": "Reproyeksi otomatis",
                "description": "Jika true (default), secara otomatis mereproyeksi raster tumpukan agar cocok dengan inputs[0] ketika CRS berbeda."
              },
              "auto_reproject_method": {
                "label": "Metode reproyeksi otomatis",
                "description": "Penimpaan metode resampling reproyeksi opsional: nearest, bilinear, cubic, lanczos, average, min, max, mode, median, stddev."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "raster_cell_assignment": {
            "name": "Penetapan sel raster",
            "description": "Membuat raster turunan dari raster dasar yang menetapkan nilai baris, kolom, x, atau y ke setiap sel.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster dasar masukan."
              },
              "what_to_assign": {
                "label": "Yang ditetapkan",
                "description": "Target penetapan: column, row, x, atau y."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "raster_histogram": {
            "name": "Histogram raster",
            "description": "Membangun histogram bin tetap untuk sel raster yang valid.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran laporan HTML opsional (alias: output_html_file)."
              },
              "bins": {
                "label": "Bin",
                "description": "Jumlah bin histogram (default log2(rows*cols)+1)."
              }
            }
          },
          "raster_perimeter": {
            "name": "Keliling raster",
            "description": "Mengestimasi keliling poligon raster per kelas menggunakan tabel pencarian anti-aliasing dan menulis total kelas ke setiap sel kelas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kategorikal masukan."
              },
              "units": {
                "label": "Satuan",
                "description": "Satuan keliling: 'map units' (default) atau 'grid cells'."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Jika true, sel bernilai nol dikecualikan dari analisis."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "raster_summary_stats": {
            "name": "Statistik ringkasan raster",
            "description": "Menghitung statistik ringkasan dasar untuk sel raster yang valid.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan keluaran opsional (.json atau .csv)."
              }
            }
          },
          "reciprocal": {
            "name": "Resiprokal",
            "description": "Menghitung kebalikan (1/x) setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "rescale_value_range": {
            "name": "Skala ulang rentang nilai",
            "description": "Menskalakan ulang nilai raster secara linear ke rentang target.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "out_min": {
                "label": "Keluaran minimum",
                "description": "Nilai keluaran minimum."
              },
              "out_max": {
                "label": "Keluaran maksimum",
                "description": "Nilai keluaran maksimum."
              },
              "clip_min": {
                "label": "Batas bawah potong",
                "description": "Nilai minimum masukan opsional untuk pemotongan sebelum penskalaan ulang."
              },
              "clip_max": {
                "label": "Batas atas potong",
                "description": "Nilai maksimum masukan opsional untuk pemotongan sebelum penskalaan ulang."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "root_mean_square_error": {
            "name": "Akar rata-rata kuadrat galat",
            "description": "Menghitung RMSE dan statistik akurasi terkait antara dua raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster pembanding."
              },
              "base": {
                "label": "Basis",
                "description": "Path raster dasar."
              }
            }
          },
          "round": {
            "name": "Pembulatan",
            "description": "Membulatkan setiap sel raster ke bilangan bulat terdekat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "shape_complexity_index_raster": {
            "name": "Indeks kompleksitas bentuk raster",
            "description": "Menghitung kompleksitas bentuk patch raster dari frekuensi transisi horizontal/vertikal yang dinormalisasi dengan rentang patch.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster ID petak masukan dengan ID positif bertipe bilangan bulat."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "sieve": {
            "name": "Saring (sieve)",
            "description": "Menghapus patch kecil yang terisolasi di bawah ambang batas jumlah sel.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kategorikal masukan."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ukuran petak minimum dalam sel yang dipertahankan."
              },
              "zero_background": {
                "label": "Latar nol",
                "description": "Nolkan sel latar belakang (nilai 0) dalam keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "sin": {
            "name": "Sin",
            "description": "Menghitung sinus setiap nilai sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "sinh": {
            "name": "Sinh",
            "description": "Menghitung sinus hiperbolik setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "sqrt": {
            "name": "Sqrt",
            "description": "Menghitung akar kuadrat setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "square": {
            "name": "Kuadrat",
            "description": "Mengkuadratkan setiap nilai sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "tan": {
            "name": "Tan",
            "description": "Menghitung tangen setiap nilai sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "tanh": {
            "name": "Tanh",
            "description": "Menghitung tangen hiperbolik setiap sel raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "tin_interpolation": {
            "name": "Interpolasi TIN",
            "description": "Menginterpolasi raster dari sampel titik menggunakan triangulasi Delaunay dan interpolasi planar di dalam setiap segitiga.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik masukan."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut numerik opsional; default-nya cadangan FID."
              },
              "use_z": {
                "label": "Gunakan Z",
                "description": "Gunakan nilai Z dari geometri titik alih-alih atribut."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran jika base_raster tidak diberikan."
              },
              "base_raster": {
                "label": "Raster dasar",
                "description": "Raster dasar opsional yang mengendalikan geometri keluaran."
              },
              "max_triangle_edge_length": {
                "label": "Panjang tepi segitiga maksimum",
                "description": "Panjang sisi segitiga maksimum opsional yang diizinkan dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "to_degrees": {
            "name": "Ke derajat",
            "description": "Mengonversi setiap sel raster dari radian ke derajat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "to_radians": {
            "name": "Ke radian",
            "description": "Mengonversi setiap sel raster dari derajat ke radian.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "trend_surface": {
            "name": "Permukaan tren",
            "description": "Mencocokkan permukaan tren polinomial ke raster menggunakan regresi kuadrat terkecil.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "polynomial_order": {
                "label": "Orde polinomial",
                "description": "Orde polinomial 1–10. Default: 1."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "trend_surface_vector_points": {
            "name": "Permukaan tren titik vektor",
            "description": "Mencocokkan permukaan tren polinomial ke data titik vektor menggunakan regresi kuadrat terkecil.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file titik vektor masukan."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster keluaran dalam satuan peta."
              },
              "field_name": {
                "label": "Nama field",
                "description": "Field atribut untuk nilai Z. Default: 'FID'."
              },
              "polynomial_order": {
                "label": "Orde polinomial",
                "description": "Orde polinomial 1–10. Default: 1."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "truncate": {
            "name": "Pemangkasan",
            "description": "Memotong setiap nilai sel raster menjadi bagian bilangan bulatnya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "turning_bands_simulation": {
            "name": "Simulasi turning bands",
            "description": "Membuat medan acak yang berautokorelasi spasial menggunakan algoritme turning bands.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster dasar."
              },
              "range": {
                "label": "Rentang",
                "description": "Rentang korelasi dalam satuan peta. Default: 1.0."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah arah pita. Default: 1000."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "two_sample_ks_test": {
            "name": "Uji KS dua sampel",
            "description": "Melakukan uji Kolmogorov-Smirnov dua sampel pada dua distribusi nilai raster.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster masukan pertama."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan kedua."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Ukuran sampel opsional dengan pengembalian per raster."
              }
            }
          },
          "wilcoxon_signed_rank_test": {
            "name": "Uji peringkat bertanda Wilcoxon",
            "description": "Melakukan uji peringkat bertanda Wilcoxon pada selisih raster berpasangan.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Path raster masukan pertama."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Path raster masukan kedua."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Ukuran sampel opsional dengan pengembalian."
              }
            }
          },
          "z_scores": {
            "name": "Skor Z",
            "description": "Menstandardisasi nilai raster menjadi skor-z menggunakan rata-rata dan simpangan baku global.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "zonal_statistics": {
            "name": "Statistik zonal",
            "description": "Meringkas nilai raster data di dalam zona yang ditentukan oleh raster fitur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster data masukan."
              },
              "features": {
                "label": "Fitur",
                "description": "Path raster pendefinisi zona."
              },
              "stat_type": {
                "label": "Jenis statistik",
                "description": "Statistik: 'mean', 'median', 'min', 'max', 'range', 'standard deviation', 'diversity', 'total'. Default: 'mean'."
              },
              "zero_is_background": {
                "label": "Nol adalah latar",
                "description": "Kecualikan sel zona-0. Default: false."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "assess_route": {
            "name": "Nilai rute",
            "description": "Mensegmentasi garis rute dan mengevaluasi metrik medan per segmen dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "routes": {
                "label": "Rute",
                "description": "Path vektor rute polyline masukan."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius pencarian visibilitas dalam sel grid (default 15, minimum 4)."
              },
              "segment_length": {
                "label": "Panjang segmen",
                "description": "Panjang segmen rute target dalam satuan peta (default 100.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional."
              }
            }
          },
          "breakline_mapping": {
            "name": "Pemetaan breakline",
            "description": "Memetakan garis patahan (breakline) dengan menerapkan ambang batas pada curvedness yang ditransformasi log dan memvektorisasi fitur linear hasil penipisan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ambang log-kelengkungan minimum yang digunakan untuk ekstraksi garis patah (default 0.8)."
              },
              "min_length": {
                "label": "Panjang minimum",
                "description": "Panjang garis keluaran minimum dalam sel grid (default 3)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (default .shp sementara)."
              }
            }
          },
          "convergence_index": {
            "name": "Indeks konvergensi",
            "description": "Konvergensi/divergensi aliran dari keselarasan aspek lokal. Mengidentifikasi lembah (konvergen) dan punggungan (divergen) tanpa perutean aliran penuh. Alternatif yang efisien untuk algoritme arah aliran.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "dem_void_filling": {
            "name": "Pengisian kekosongan DEM",
            "description": "Mengisi kekosongan DEM menggunakan permukaan sekunder dan offset elevasi terinterpolasi untuk fusi yang mulus.",
            "params": {
              "fill": {
                "label": "Isi",
                "description": "Path raster DEM pengisi atau objek raster bertipe yang digunakan untuk mengisi rongga."
              },
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan (dengan rongga) atau objek raster bertipe."
              },
              "edge_treatment": {
                "label": "Perlakuan tepi",
                "description": "Perlakuan tepi rongga: 'dem', 'fill', atau 'average' (default 'dem')."
              },
              "mean_plane_dist": {
                "label": "Jarak bidang rata-rata",
                "description": "Jarak dalam sel dari tepi rongga yang melampauinya offset disetel ke offset rata-rata global (default 20)."
              },
              "weight_value": {
                "label": "Nilai bobot",
                "description": "Pangkat interpolasi jarak terbalik untuk interpolasi offset dekat tepi (default 2.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "deviation_from_mean_elevation": {
            "name": "Deviasi dari elevasi rata-rata",
            "description": "Menghitung skor-z topografis lokal menggunakan rata-rata dan simpangan baku lokal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar filter ganjil dalam sel (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi filter ganjil dalam sel (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "difference_from_mean_elevation": {
            "name": "Selisih dari elevasi rata-rata",
            "description": "Menghitung selisih antara setiap elevasi dan elevasi rata-rata lokal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar filter ganjil dalam sel (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi filter ganjil dalam sel (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "directional_relief": {
            "name": "Relief terarah",
            "description": "Menghitung relief terarah dengan ray-tracing elevasi pada azimut yang ditentukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut arah dalam derajat searah jarum jam dari utara."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak sinar maksimum opsional dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "elev_above_pit": {
            "name": "Elevasi di atas lubang",
            "description": "Menghitung elevasi di atas sel lubang hilir terdekat (atau sink tepi).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "elev_above_pit_dist": {
            "name": "Jarak elevasi di atas lubang",
            "description": "Alias kompatibilitas untuk elev_above_pit.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "elevation_percentile": {
            "name": "Persentil elevasi",
            "description": "Peringkat persentil elevasi lokal di dalam ketetanggaan (0-100). Mengidentifikasi lembah (% rendah), punggungan (% tinggi), dan lereng (% menengah). Metrik klasifikasi bentuk lahan yang tidak bergantung pada elevasi absolut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar filter ganjil dalam sel (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi filter ganjil dalam sel (default filter_size_x). Alias: filtery."
              },
              "sig_digits": {
                "label": "Digit signifikan",
                "description": "Jumlah digit desimal signifikan yang dipertahankan selama pembinan (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "embankment_mapping": {
            "name": "Pemetaan tanggul",
            "description": "Memetakan tanggul transportasi dari DEM dan jaringan jalan, dengan penghapusan permukaan tanggul opsional melalui interpolasi. Ditulis oleh John Lindsay dan Nigel VanNieuwenhuizen.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "roads_vector": {
                "label": "Vektor jalan",
                "description": "Path vektor jalan masukan (geometri polyline)."
              },
              "embankment_max_width": {
                "label": "Lebar tanggul maksimum",
                "description": "Lebar tanggul maksimum dalam satuan peta (default 60.0)."
              },
              "max_upwards_increment": {
                "label": "Inkremen ke atas maksimum",
                "description": "Peningkatan naik lokal maksimum yang diizinkan selama pertumbuhan (default 0.05)."
              },
              "min_road_width": {
                "label": "Lebar jalan minimum",
                "description": "Lebar jalan terpetakan minimum dalam satuan peta (default 6.0)."
              },
              "remove_embankments": {
                "label": "Hapus tanggul",
                "description": "Jika true, juga menghasilkan DEM tanpa tanggul melalui interpolasi lokal."
              },
              "search_dist": {
                "label": "Jarak pencarian",
                "description": "Jarak reposisi seed jalan dalam satuan peta (default 2.5)."
              },
              "spillout_slope": {
                "label": "Kemiringan limpasan",
                "description": "Kemiringan luapan maksimum dalam derajat untuk transisi menanjak (default 4.0)."
              },
              "typical_embankment_max_height": {
                "label": "Tinggi tanggul tipikal maksimum",
                "description": "Tinggi tanggul maksimum tipikal dalam satuan elevasi (default 2.0)."
              },
              "typical_embankment_width": {
                "label": "Lebar tanggul tipikal",
                "description": "Lebar tanggul tipikal dalam satuan peta (default 30.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran masker tanggul opsional."
              },
              "output_dem": {
                "label": "DEM keluaran",
                "description": "Path keluaran DEM tanpa tanggul opsional jika remove_embankments=true."
              }
            }
          },
          "exposure_towards_wind_flux": {
            "name": "Paparan terhadap fluks angin",
            "description": "Menghitung keterpaparan medan relatif terhadap arah angin dominan dan perlindungan cakrawala dari arah datangnya angin.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut angin dominan dalam derajat searah jarum jam dari utara."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum untuk sudut horizon arah angin datang dalam satuan peta."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional untuk DEM terproyeksi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "feature_preserving_smoothing": {
            "name": "Penghalusan pelestari fitur",
            "description": "Menghaluskan kekasaran DEM sambil mempertahankan patahan lereng menggunakan penyaringan vektor normal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran filter ganjil dalam sel (default 11)."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah iterasi penghalusan (default 3)."
              },
              "max_elevation_diff": {
                "label": "Selisih elevasi maksimum",
                "description": "Perubahan vertikal maksimum yang diizinkan dari DEM asli (default inf)."
              },
              "normal_diff_threshold": {
                "label": "Ambang selisih normal",
                "description": "Selisih sudut normal maksimum dalam derajat (default 8.0)."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "feature_preserving_smoothing_multiscale": {
            "name": "Penghalusan pelestari fitur multiskala",
            "description": "Menghaluskan kekasaran DEM dengan kontinuasi multiskala dari kasar ke halus. Setiap skala menurunkan ulang normal, menerapkan difusi medan normal robust adaptif, dan merekonstruksi elevasi dengan penyelesaian screened Poisson.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "smoothing_amount": {
                "label": "Jumlah penghalusan",
                "description": "Tingkat penghalusan keseluruhan dalam [0,1] (default 0.65). Nilai lebih tinggi meningkatkan anggaran difusi, terutama pada skala kasar."
              },
              "edge_preservation": {
                "label": "Pelestarian tepi",
                "description": "Kekuatan pelestarian tepi dalam [0,1] (default 0.75). Nilai lebih tinggi menekan penghalusan melintasi patahan kemiringan besar secara lebih kuat."
              },
              "scale_levels": {
                "label": "Tingkat skala",
                "description": "Jumlah tingkat piramida untuk penghalusan kasar ke halus (default 3)."
              },
              "fidelity": {
                "label": "Fidelitas",
                "description": "Bobot kesetiaan data dalam rekonstruksi Poisson tersaring (default 0.45). Nilai lebih tinggi menjaga hasil lebih dekat ke DEM sumber."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "fetch_analysis": {
            "name": "Analisis fetch",
            "description": "Menghitung jarak dari arah datangnya angin ke hambatan topografis pertama di sepanjang azimut yang ditentukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut angin dalam derajat searah jarum jam dari utara."
              },
              "hgt_inc": {
                "label": "Inkremen tinggi",
                "description": "Ambang peningkatan tinggi dalam m/m (default 0.05)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "fill_missing_data": {
            "name": "Isi data hilang",
            "description": "Mengisi celah NoData menggunakan pembobotan jarak terbalik dari sel tepi celah yang valid.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster masukan atau objek raster bertipe."
              },
              "exclude_edge_nodata": {
                "label": "Kecualikan nodata tepi",
                "description": "Kecualikan wilayah NoData yang terhubung ke tepi dari pengisian (default false). Alias: no_edges."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Radius pencarian dalam sel grid (default 11)."
              },
              "weight": {
                "label": "Bobot",
                "description": "Eksponen pangkat jarak terbalik (default 2.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "find_ridges": {
            "name": "Temukan punggung bukit",
            "description": "Mengidentifikasi sel punggungan dan puncak potensial dalam DEM, dengan penipisan garis opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "line_thin": {
                "label": "Penipisan garis",
                "description": "Terapkan penipisan garis iteratif (default true)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "hillshade": {
            "name": "Bayangan bukit",
            "description": "Visualisasi bayangan bukit terarah dengan satu sumber cahaya (skala abu-abu 0-255). Parameter azimut dan ketinggian mengendalikan arah cahaya. Visualisasi medan cepat untuk inspeksi DEM dan tampilan peta.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster DEM masukan"
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Pembesaran vertikal yang diterapkan pada elevasi"
              },
              "altitude": {
                "label": "Altitud",
                "description": "Ketinggian pencahayaan di atas horizon dalam derajat"
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut pencahayaan dalam derajat searah jarum jam dari utara"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "hypsometrically_tinted_hillshade": {
            "name": "Bayangan bukit berwarna hipsometrik",
            "description": "Membuat rendering medan bergaya Swiss dengan memadukan bayangan bukit multi-azimut dengan pewarnaan hipsometrik dan kabut atmosfer opsional.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan."
              },
              "solar_altitude": {
                "label": "Altitud matahari",
                "description": "Ketinggian matahari dalam derajat [0, 90]."
              },
              "hillshade_weight": {
                "label": "Bobot bayangan bukit",
                "description": "Bobot pencampuran bayangan bukit dalam [0, 1]."
              },
              "brightness": {
                "label": "Kecerahan",
                "description": "Kendali kecerahan dalam [0, 1]."
              },
              "atmospheric_effects": {
                "label": "Efek atmosfer",
                "description": "Jumlah kabut atmosfer dalam [0, 1]."
              },
              "palette": {
                "label": "Palet",
                "description": "Nama palet (atlas, high_relief, arid, soft, muted, viridis, dem, grey, white, dll.)."
              },
              "reverse_palette": {
                "label": "Balik palet",
                "description": "Balikkan urutan palet."
              },
              "full_360_mode": {
                "label": "Mode 360 penuh",
                "description": "Gunakan pencahayaan 8 arah alih-alih mode 4 arah."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Pengali pembesaran vertikal."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran."
              }
            }
          },
          "local_hypsometric_analysis": {
            "name": "Analisis hipsometrik lokal",
            "description": "Menghitung integral hipsometrik lokal minimum di seluruh rentang skala ketetanggaan yang diambil sampelnya secara nonlinear.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 4)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Ukuran langkah dasar dalam sel (default 1). Alias: step."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah skala yang dievaluasi (default 10)."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Nonlinearitas langkah skala dalam [1,4] (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster HI minimum lokal."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster skala HI minimum."
              }
            }
          },
          "low_points_on_headwater_divides": {
            "name": "Titik rendah pada pemisah hulu",
            "description": "Menemukan titik lintasan rendah di sepanjang batas pemisah air antara sub-DAS hulu yang bertetangga.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM tanpa cekungan masukan atau objek raster bertipe."
              },
              "streams": {
                "label": "Sungai",
                "description": "Path raster sungai masukan (nilai positif menunjukkan sel alur)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (default .shp sementara)."
              }
            }
          },
          "max_downslope_elev_change": {
            "name": "Perubahan elevasi hilir maksimum",
            "description": "Menghitung penurunan elevasi maksimum ke sel tetangga yang lebih rendah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "max_upslope_elev_change": {
            "name": "Perubahan elevasi hulu maksimum",
            "description": "Menghitung kenaikan elevasi maksimum ke sel tetangga yang lebih tinggi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "min_downslope_elev_change": {
            "name": "Perubahan elevasi hilir minimum",
            "description": "Menghitung penurunan elevasi non-negatif minimum ke sel tetangga.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "multidirectional_hillshade": {
            "name": "Bayangan bukit multiarah",
            "description": "Bayangan bukit multi-arah (8+ sumber cahaya) yang menghilangkan artefak bayangan cahaya tunggal. Visibilitas fitur yang seimbang untuk medan kompleks; lebih disukai untuk publikasi dan analisis terperinci.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster DEM masukan"
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Pembesaran vertikal yang diterapkan pada elevasi"
              },
              "altitude": {
                "label": "Altitud",
                "description": "Ketinggian pencahayaan di atas horizon dalam derajat"
              },
              "full_360_mode": {
                "label": "Mode 360 penuh",
                "description": "Gabungkan 8 sumber cahaya di seluruh 360 derajat alih-alih 4 default"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran"
              }
            }
          },
          "num_downslope_neighbours": {
            "name": "Jumlah tetangga hilir",
            "description": "Menghitung jumlah sel 8-tetangga yang lebih rendah daripada setiap sel DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "num_upslope_neighbours": {
            "name": "Jumlah tetangga hulu",
            "description": "Menghitung jumlah sel 8-tetangga yang lebih tinggi daripada setiap sel DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "profile": {
            "name": "Profil",
            "description": "Membuat plot profil elevasi HTML untuk satu atau beberapa fitur polyline masukan yang diambil sampelnya dari raster permukaan.",
            "params": {
              "lines_vector": {
                "label": "Vektor garis",
                "description": "Path vektor polyline masukan."
              },
              "surface": {
                "label": "Permukaan",
                "description": "Path raster permukaan masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan HTML keluaran."
              }
            }
          },
          "slope_vs_aspect_plot": {
            "name": "Plot kemiringan vs aspek",
            "description": "Membuat plot analisis radial kemiringan vs. aspek HTML untuk DEM masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "aspect_bin_size": {
                "label": "Ukuran bin aspek",
                "description": "Ukuran bin aspek dalam derajat (default 2.0)."
              },
              "min_slope": {
                "label": "Kemiringan minimum",
                "description": "Abaikan kemiringan di bawah ambang ini dalam derajat (default 0.1)."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal untuk nilai elevasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan HTML keluaran."
              }
            }
          },
          "slope_vs_elev_plot": {
            "name": "Plot kemiringan vs elevasi",
            "description": "Membuat diagram analisis kemiringan vs. elevasi HTML untuk satu atau beberapa DEM.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path DEM masukan sebagai string yang dipisahkan ';' atau ',', atau daftar."
              },
              "watershed": {
                "label": "Daerah aliran sungai",
                "description": "Raster DAS opsional yang bersesuaian dengan setiap DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan HTML keluaran."
              }
            }
          },
          "surface_area_ratio": {
            "name": "Rasio luas permukaan",
            "description": "Rasio luas permukaan 3D / luas planimetrik (metode Jenness). >1.0=medan kasar, ≈1.0=datar. Metrik rugositas tanpa dimensi yang memungkinkan perbandingan medan lintas wilayah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "topographic_hachures": {
            "name": "Hachure topografi",
            "description": "Membuat polyline hachure topografis dari DEM menggunakan garis aliran hilir dan hulu yang berbenih kontur. Atribusi kepengarangan lama sengaja dipertahankan untuk alat ini.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "base": {
                "label": "Basis",
                "description": "Elevasi kontur dasar (default 0.0)."
              },
              "depth": {
                "label": "Kedalaman",
                "description": "Kedalaman pengisian rekursif yang digunakan di area divergen (default 16)."
              },
              "discretization": {
                "label": "Diskretisasi",
                "description": "Panjang langkah garis aliran dalam satuan sel rata-rata (default 0.5)."
              },
              "distmax": {
                "label": "Jarak maksimum",
                "description": "Pengali jarak maksimum yang digunakan untuk menyisipkan hasyur tambahan (default 2.0)."
              },
              "distmin": {
                "label": "Jarak minimum",
                "description": "Pengali jarak minimum yang digunakan untuk memangkas hasyur yang berdekatan (default 0.5)."
              },
              "interval": {
                "label": "Interval",
                "description": "Nilai interval kontur (default 10.0)."
              },
              "separation": {
                "label": "Pemisahan",
                "description": "Pemisahan seed kontur nominal dalam satuan sel rata-rata (default 2.0)."
              },
              "slopemin": {
                "label": "Kemiringan minimum",
                "description": "Sudut kemiringan minimum dalam derajat untuk kelanjutan penelusuran (default 0.5)."
              },
              "smooth": {
                "label": "Haluskan",
                "description": "Ukuran filter penghalusan kontur (sebaiknya bilangan bulat ganjil, default 9)."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Sudut belok kontur minimum dalam derajat yang dipertahankan selama penyederhanaan (default 10.0)."
              },
              "turnmax": {
                "label": "Belokan maksimum",
                "description": "Sudut belok maksimum yang diizinkan dalam derajat saat menelusuri hasyur (default 45.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "map_off_terrain_objects": {
            "name": "Petakan objek non-medan",
            "description": "Memetakan segmen objek di luar medan dalam DSM menggunakan pertumbuhan wilayah yang dibatasi kemiringan dan penyaringan ukuran fitur minimum opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DSM masukan atau objek raster bertipe."
              },
              "max_slope": {
                "label": "Kemiringan maksimum",
                "description": "Kemiringan penghubung maksimum dalam derajat [1, 90] (default inf, dibatasi ke 90)."
              },
              "min_feature_size": {
                "label": "Ukuran fitur minimum",
                "description": "Ukuran segmen minimum yang dipertahankan dalam sel (default 0). Segmen yang lebih kecil ditetapkan ke kelas latar belakang 1."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "remove_off_terrain_objects": {
            "name": "Hapus objek non-medan",
            "description": "Menghapus objek curam di luar medan dari DEM menggunakan normalisasi white top-hat, pertumbuhan wilayah yang dibatasi kemiringan, dan interpolasi lokal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Lebar objek maksimum yang diharapkan dalam sel; dipaksa ke ukuran ganjil >= 3 (default 11)."
              },
              "slope_threshold": {
                "label": "Ambang kemiringan",
                "description": "Kemiringan tepi objek minimum dalam derajat (default 15.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "ridge_and_valley_vectors": {
            "name": "Vektor punggung dan lembah",
            "description": "Mengekstrak vektor garis tengah punggungan dan lembah dari DEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran ketetanggaan untuk persentil elevasi."
              },
              "ep_threshold": {
                "label": "Ambang EP",
                "description": "Ambang persentil elevasi [5, 50]."
              },
              "slope_threshold": {
                "label": "Ambang kemiringan",
                "description": "Ambang kemiringan minimum dalam derajat."
              },
              "min_length": {
                "label": "Panjang minimum",
                "description": "Panjang garis tengah minimum dalam sel."
              },
              "output_ridges": {
                "label": "Keluaran punggung",
                "description": "Path garis tengah punggungan keluaran."
              },
              "output_valleys": {
                "label": "Keluaran lembah",
                "description": "Path garis tengah lembah keluaran."
              }
            }
          },
          "smooth_vegetation_residual": {
            "name": "Haluskan residu vegetasi",
            "description": "Mengurangi kekasaran residual kanopi dengan menyamarkan respons DEV lokal yang tinggi pada skala kecil dan menginterpolasi ulang elevasi yang disamarkan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela DEV maksimum dalam sel (default 30)."
              },
              "dev_threshold": {
                "label": "Ambang deviasi",
                "description": "Magnitudo DEV minimum yang digunakan untuk menandai sel kekasaran (default 1.0)."
              },
              "scale_threshold": {
                "label": "Ambang skala",
                "description": "Skala maksimum yang dianggap kekasaran (default 5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "average_horizon_distance": {
            "name": "Jarak horizon rata-rata",
            "description": "Menghitung jarak rata-rata ke cakrawala di seluruh arah azimut.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM/DSM masukan."
              },
              "az_fraction": {
                "label": "Fraksi azimut",
                "description": "Langkah azimut dalam derajat [1, 45]."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum dalam satuan peta."
              },
              "observer_hgt_offset": {
                "label": "Offset tinggi pengamat",
                "description": "Offset tinggi pengamat di atas medan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran."
              }
            }
          },
          "horizon_angle": {
            "name": "Sudut horizon",
            "description": "Menghitung sudut cakrawala (kemiringan maksimum) di sepanjang arah azimut yang ditentukan.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut dalam derajat [0, 360)."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran."
              }
            }
          },
          "horizon_area": {
            "name": "Luas horizon",
            "description": "Menghitung luas poligon cakrawala (hektare).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM/DSM masukan."
              },
              "az_fraction": {
                "label": "Fraksi azimut",
                "description": "Langkah azimut dalam derajat [1, 45]."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum dalam satuan peta."
              },
              "observer_hgt_offset": {
                "label": "Offset tinggi pengamat",
                "description": "Offset tinggi pengamat di atas medan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran."
              }
            }
          },
          "openness": {
            "name": "Keterbukaan",
            "description": "Keterbukaan topografis Yokoyama: metrik keterpaparan positif (punggungan/puncak terbuka) dan negatif (lembah tertutup). Klasifikasi bentuk lahan dan analisis visibilitas/iklim mikro.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "dist": {
                "label": "Jarak",
                "description": "Jarak pencarian dalam sel (default 20)."
              },
              "neg_output": {
                "label": "Keluaran negatif",
                "description": "Path keluaran opsional untuk keterbukaan negatif."
              },
              "pos_output": {
                "label": "Keluaran positif",
                "description": "Path keluaran opsional untuk keterbukaan positif."
              }
            }
          },
          "shadow_animation": {
            "name": "Animasi bayangan",
            "description": "Membuat penampil HTML interaktif dan GIF animasi yang menunjukkan bayangan medan sepanjang hari.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM/DSM masukan."
              },
              "date": {
                "label": "Tanggal",
                "description": "Tanggal dalam format DD/MM/YYYY."
              },
              "delay": {
                "label": "Jeda",
                "description": "Tundaan GIF per bingkai dalam milidetik."
              },
              "image_height": {
                "label": "Tinggi citra",
                "description": "Tinggi citra yang ditampilkan dalam piksel."
              },
              "label": {
                "label": "Label",
                "description": "Label opsional yang ditampilkan di penampil."
              },
              "location": {
                "label": "Lokasi",
                "description": "String lokasi LAT/LON/UTC_OFFSET, misalnya 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian horizon maksimum dalam satuan peta."
              },
              "palette": {
                "label": "Palet",
                "description": "Nama palet hipsometrik (misalnya soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time_interval": {
                "label": "Interval waktu",
                "description": "Interval bingkai dalam menit [1, 60]."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path HTML keluaran."
              }
            }
          },
          "shadow_image": {
            "name": "Citra bayangan",
            "description": "Menghasilkan raster intensitas bayangan medan untuk tanggal, waktu, dan lokasi yang ditentukan.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM/DSM masukan."
              },
              "date": {
                "label": "Tanggal",
                "description": "Tanggal dalam format DD/MM/YYYY."
              },
              "location": {
                "label": "Lokasi",
                "description": "String lokasi LAT/LON/UTC_OFFSET, misalnya 43.5448/-80.2482/-4."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian horizon maksimum dalam satuan peta."
              },
              "palette": {
                "label": "Palet",
                "description": "Nama palet hipsometrik (misalnya soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "time": {
                "label": "Waktu",
                "description": "Waktu setempat dalam format HH:MM atau HH:MMAM/HH:MMPM."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "sky_view_factor": {
            "name": "Faktor pandangan langit",
            "description": "Menghitung proporsi langit yang terlihat dari DEM/DSM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM/DSM masukan."
              },
              "az_fraction": {
                "label": "Fraksi azimut",
                "description": "Langkah azimut dalam derajat [1, 45]."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum dalam satuan peta."
              },
              "observer_hgt_offset": {
                "label": "Offset tinggi pengamat",
                "description": "Offset tinggi pengamat di atas medan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran."
              }
            }
          },
          "skyline_analysis": {
            "name": "Analisis kaki langit",
            "description": "Melakukan analisis garis cakrawala untuk satu atau beberapa titik pengamatan dan menulis jejak cakrawala vektor serta laporan HTML.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM/DSM masukan."
              },
              "points": {
                "label": "Titik",
                "description": "Path vektor titik masukan."
              },
              "az_fraction": {
                "label": "Fraksi azimut",
                "description": "Langkah azimut dalam derajat [0.01, 45]."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian maksimum dalam satuan peta."
              },
              "observer_hgt_offset": {
                "label": "Offset tinggi pengamat",
                "description": "Offset tinggi pengamat di atas medan."
              },
              "output_as_polygons": {
                "label": "Keluaran sebagai poligon",
                "description": "Tulis horizon poligon alih-alih polyline."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path laporan HTML opsional."
              }
            }
          },
          "time_in_daylight": {
            "name": "Waktu dalam siang hari",
            "description": "Menghitung proporsi siang hari saat setiap sel tersinari (tidak berada dalam bayangan medan/objek).",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM/DSM masukan."
              },
              "az_fraction": {
                "label": "Fraksi azimut",
                "description": "Ukuran bin azimut dalam derajat (0, 360)."
              },
              "end_day": {
                "label": "Hari akhir",
                "description": "Hari ke- dalam tahun akhir (1..366)."
              },
              "end_time": {
                "label": "Waktu akhir",
                "description": "Waktu akhir HH:MM:SS atau 'sunset'."
              },
              "latitude": {
                "label": "Lintang",
                "description": "Penggantian lintang opsional dalam derajat; jika tidak, disimpulkan dari CRS DEM."
              },
              "longitude": {
                "label": "Bujur",
                "description": "Penggantian bujur opsional dalam derajat; jika tidak, disimpulkan dari CRS DEM."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian horizon maksimum dalam satuan peta."
              },
              "start_day": {
                "label": "Hari awal",
                "description": "Hari ke- dalam tahun awal (1..366)."
              },
              "start_time": {
                "label": "Waktu mulai",
                "description": "Waktu awal HH:MM:SS atau 'sunrise'."
              },
              "utc_offset": {
                "label": "Offset UTC",
                "description": "String offset UTC opsional seperti UTC+00:00; jika dihilangkan, diperkirakan dari bujur tengah."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional."
              }
            }
          },
          "viewshed": {
            "name": "Daerah pandang",
            "description": "Menghitung jumlah visibilitas stasiun dari stasiun titik di atas DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "stations": {
                "label": "Stasiun",
                "description": "File vektor titik stasiun pengamatan masukan."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi stasiun pengamatan di atas tanah dalam satuan z DEM (default 2.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "visibility_index": {
            "name": "Indeks visibilitas",
            "description": "Menghitung indeks visibilitas berbasis topografi dari viewshed yang diambil sampelnya.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian visibilitas maksimum dalam satuan peta."
              },
              "resolution_factor": {
                "label": "Faktor resolusi",
                "description": "Faktor resolusi pengambilan sampel [1, 25]."
              },
              "station_height": {
                "label": "Tinggi stasiun",
                "description": "Tinggi pengamat di atas tanah."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran."
              }
            }
          },
          "accumulation_curvature": {
            "name": "Kelengkungan akumulasi",
            "description": "Menghitung kelengkungan akumulasi dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "aspect": {
            "name": "Aspek",
            "description": "Arah kemiringan maksimum (0°=U, 90°=T, 180°=S, 270°=B). Penting untuk analisis radiasi matahari, pola vegetasi, iklim mikro, dan keterpaparan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "casorati_curvature": {
            "name": "Kelengkungan Casorati",
            "description": "Menghitung kelengkungan Casorati dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "curvedness": {
            "name": "Tingkat kelengkungan (curvedness)",
            "description": "Menghitung deskriptor bentuk permukaan curvedness dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "difference_curvature": {
            "name": "Kelengkungan selisih",
            "description": "Menghitung kelengkungan selisih dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "gaussian_curvature": {
            "name": "Kelengkungan Gaussian",
            "description": "Menghitung kelengkungan Gaussian (intrinsik) (hasil kali kelengkungan utama). Menunjukkan topologi permukaan lokal: positif (mangkuk/kubah), negatif (pelana), nol (silindris). Mengklasifikasikan medan ke dalam kategori bentuk lahan: fitur cembung (punggungan), fitur cekung (lembah), fitur pelana (celah/lintasan). Digunakan dalam klasifikasi bentuk lahan tingkat lanjut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional jika satuan vertikal dan horizontal berbeda (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran agar mudah dibaca (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "generating_function": {
            "name": "Fungsi pembangkit",
            "description": "Menghitung fungsi pembangkit dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "horizontal_excess_curvature": {
            "name": "Kelengkungan ekses horizontal",
            "description": "Menghitung kelengkungan kelebihan horizontal dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "maximal_curvature": {
            "name": "Kelengkungan maksimal",
            "description": "Menghitung kelengkungan maksimal (utama maksimum) dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "mean_curvature": {
            "name": "Kelengkungan rata-rata",
            "description": "Menghitung kelengkungan rata-rata (rata-rata kelengkungan utama). Terkait dengan kelengkungan total tetapi menekankan kehalusan permukaan. Nilai mendekati 0 menunjukkan medan yang halus; nilai tinggi menunjukkan perubahan kelengkungan yang tajam. Berguna untuk karakterisasi permukaan dan deteksi garis patahan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional jika satuan vertikal dan horizontal berbeda (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran agar mudah dibaca (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "minimal_curvature": {
            "name": "Kelengkungan minimal",
            "description": "Menghitung kelengkungan minimal (utama minimum) dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "plan_curvature": {
            "name": "Kelengkungan plan",
            "description": "Menghitung kelengkungan plan (kontur) yang mengukur konvergensi/divergensi aliran melintasi garis kontur. Nilai positif (konvergen) menunjukkan pemusatan aliran ke arah pusat (cekung); nilai negatif (divergen) menunjukkan penyebaran aliran menjauhi pusat (cembung). Mengidentifikasi zona pemusatan aliran lateral (lembah) vs. zona penyebaran (punggungan). Penting untuk memprediksi distribusi kelembapan tanah dan kerentanan longsor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional jika satuan vertikal dan horizontal berbeda (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran agar mudah dibaca (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "principal_curvature_direction": {
            "name": "Arah kelengkungan utama",
            "description": "Menghitung sudut arah kelengkungan utama (derajat).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "profile_curvature": {
            "name": "Kelengkungan profil",
            "description": "Menghitung kelengkungan profil (hilir) yang mengukur percepatan/perlambatan aliran di sepanjang arah kemiringan. Nilai positif (cekung) menunjukkan zona percepatan aliran (erosional); nilai negatif (cembung) menunjukkan zona perlambatan aliran (deposisional). Mengungkap bentuk lereng: cekung (dasar lembah, erosi), cembung (punggungan, pemindahan material), linear (transisional).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional jika satuan vertikal dan horizontal berbeda (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran agar mudah dibaca (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "relative_aspect": {
            "name": "Aspek relatif",
            "description": "Menghitung aspek medan relatif terhadap azimut yang ditentukan pengguna (0 hingga 180 derajat).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut referensi dalam derajat searah jarum jam dari utara."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "ring_curvature": {
            "name": "Kelengkungan cincin",
            "description": "Menghitung kelengkungan ring (kuadrat puntiran garis aliran) dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "rotor": {
            "name": "Rotor",
            "description": "Menghitung rotor (puntiran garis aliran) dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "shape_index": {
            "name": "Indeks bentuk",
            "description": "Menghitung deskriptor bentuk permukaan indeks bentuk dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "slope": {
            "name": "Kemiringan",
            "description": "Gradien kemiringan Zevenbergen-Thorne (derajat/radian/persen). Metrik geomorfometrik fundamental; masukan hilir untuk kelengkungan, arah aliran, pembayangan, visibilitas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "units": {
                "label": "Satuan",
                "description": "Satuan keluaran: degrees, radians, percent."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "tangential_curvature": {
            "name": "Kelengkungan tangensial",
            "description": "Menghitung kelengkungan tangensial (komponen arah T-B), serupa dengan kelengkungan plan tetapi terarah. Digunakan untuk karakterisasi kelengkungan komprehensif yang menangkap divergensi aliran lateral yang tegak lurus arah kemiringan. Sering dikombinasikan dengan kelengkungan profil untuk pemahaman kelengkungan 3D yang lengkap.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional jika satuan vertikal dan horizontal berbeda (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran agar mudah dibaca (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "total_curvature": {
            "name": "Kelengkungan total",
            "description": "Menghitung kelengkungan total (rata-rata kuadratik kelengkungan utama). Metrik skalar yang tidak bergantung pada arah. Nilai tinggi menunjukkan medan yang sangat melengkung (puncak, lubang); nilai rendah menunjukkan medan planar. Berguna sebagai metrik kekasaran tanpa dimensi untuk klasifikasi medan dan deteksi anomali.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional jika satuan vertikal dan horizontal berbeda (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran agar mudah dibaca (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "unsphericity": {
            "name": "Ketidakbulatan",
            "description": "Menghitung kelengkungan unsphericity (setengah selisih kelengkungan utama) dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "vertical_excess_curvature": {
            "name": "Kelengkungan ekses vertikal",
            "description": "Menghitung kelengkungan kelebihan vertikal dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi z opsional (default 1.0). Alias: zfactor."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Transformasi log opsional pada nilai keluaran (default false). Alias: log."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "average_normal_vector_angular_deviation": {
            "name": "Deviasi sudut vektor normal rata-rata",
            "description": "Menghitung deviasi sudut rata-rata lokal antara normal permukaan asli dan yang dihaluskan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran ketetanggaan ganjil dalam sel (default 11). Alias: filter."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "circular_variance_of_aspect": {
            "name": "Varians sirkular aspek",
            "description": "Menghitung varians sirkular lokal aspek di dalam ketetanggaan bergerak.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter": {
                "label": "Filter",
                "description": "Ukuran ketetanggaan ganjil dalam sel (default 11)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "edge_density": {
            "name": "Kerapatan tepi",
            "description": "Menghitung kerapatan lokal patahan lereng menggunakan perbedaan sudut vektor normal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran ketetanggaan ganjil dalam sel (default 11). Alias: filter."
              },
              "norm_diff": {
                "label": "Selisih normal",
                "description": "Ambang sudut vektor normal dalam derajat (default 5)."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "ruggedness_index": {
            "name": "Indeks kekasaran",
            "description": "Kekasaran medan melalui TRI Riley (jumlah kuadrat selisih elevasi). Metrik klasifikasi medan yang tidak bergantung pada skala: rendah=dataran halus, tinggi=pegunungan kasar. Pemetaan bentuk lahan ekologis dan geomorfologis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "spherical_std_dev_of_normals": {
            "name": "Simpangan baku sferis normal",
            "description": "Menghitung simpangan baku sferis normal permukaan lokal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran ketetanggaan ganjil dalam sel (default 11). Alias: filter."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "standard_deviation_of_slope": {
            "name": "Simpangan baku kemiringan",
            "description": "Menghitung simpangan baku lokal kemiringan sebagai metrik kekasaran medan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size": {
                "label": "Ukuran filter",
                "description": "Ukuran filter ganjil dalam sel (default 11)."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar filter ganjil dalam sel (default filter_size). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi filter ganjil dalam sel (default filter_size). Alias: filtery."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z jika satuan vertikal dan horizontal berbeda (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil tetap di memori."
              }
            }
          },
          "elev_relative_to_min_max": {
            "name": "Elevasi relatif terhadap min-maks",
            "description": "Menyatakan setiap elevasi sebagai persentase (0–100) dari rentang elevasi raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "geomorphons": {
            "name": "Geomorphon",
            "description": "Mengklasifikasikan bentuk lahan menggunakan pola terner garis pandang 8 arah yang diturunkan dari perbandingan sudut zenit dan nadir, atau 10 bentuk geomorfon umum.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "analyze_residuals": {
                "label": "Analisis residu",
                "description": "Jika true, hilangkan tren DEM menggunakan bidang linear terpasang sebelum klasifikasi."
              },
              "flatness_distance": {
                "label": "Jarak kedataran",
                "description": "Jarak dalam sel setelah mana ambang kedataran meruncing seiring jarak horizon (default 0)."
              },
              "flatness_threshold": {
                "label": "Ambang kedataran",
                "description": "Ambang kedataran dalam derajat (default 1.0), diterapkan pada selisih sudut zenit-nadir."
              },
              "output_forms": {
                "label": "Keluaran bentuk",
                "description": "Jika true, hasilkan 10 kelas bentuk lahan umum; jika tidak, hasilkan kode geomorfon terner mentah yang terurut berlawanan arah jarum jam dari timur."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak pencarian maksimum dalam sel per arah (default 50); sel titik ujung disertakan."
              },
              "skip_distance": {
                "label": "Jarak lewati",
                "description": "Jarak dalam sel yang dilewati sebelum mengevaluasi garis pandang (default 0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "hypsometric_analysis": {
            "name": "Analisis hipsometrik",
            "description": "Membuat laporan HTML kurva hipsometrik (luas-elevasi) untuk satu atau beberapa DEM.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path DEM masukan sebagai string yang dipisahkan ';' atau ',', atau daftar."
              },
              "watershed": {
                "label": "Daerah aliran sungai",
                "description": "Raster DAS opsional yang bersesuaian dengan setiap DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path laporan HTML keluaran."
              }
            }
          },
          "multiscale_topographic_position_class": {
            "name": "Kelas posisi topografi multiskala",
            "description": "Mengklasifikasikan setiap sel DEM ke dalam sistem posisi topografis relatif luas/lokal sembilan kelas menggunakan dua mosaik skala DEVmax.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "local_min_scale": {
                "label": "Skala minimum lokal",
                "description": "Radius setengah jendela minimum dalam sel untuk rentang skala lokal (default 5)."
              },
              "local_max_scale": {
                "label": "Skala maksimum lokal",
                "description": "Radius setengah jendela maksimum dalam sel untuk rentang skala lokal (default 80)."
              },
              "local_step_size": {
                "label": "Ukuran langkah lokal",
                "description": "Peningkatan skala dalam sel untuk rentang skala lokal (default 1). Alias: local_step."
              },
              "broad_min_scale": {
                "label": "Skala minimum luas",
                "description": "Radius setengah jendela minimum dalam sel untuk rentang skala luas (default 500)."
              },
              "broad_max_scale": {
                "label": "Skala maksimum luas",
                "description": "Radius setengah jendela maksimum dalam sel untuk rentang skala luas (default 2000)."
              },
              "broad_step_size": {
                "label": "Ukuran langkah luas",
                "description": "Peningkatan skala dalam sel untuk rentang skala luas (default 20). Alias: broad_step."
              },
              "local_threshold": {
                "label": "Ambang lokal",
                "description": "Ambang DEV yang digunakan untuk mengklasifikasikan mosaik skala lokal menjadi status cekungan, posisi tengah, dan bukit kecil (default 0.5)."
              },
              "broad_threshold": {
                "label": "Ambang luas",
                "description": "Ambang DEV yang digunakan untuk mengklasifikasikan mosaik skala luas menjadi status dataran rendah, menengah, dan dataran tinggi (default 0.5)."
              },
              "min_patch_size": {
                "label": "Ukuran patch minimum",
                "description": "Ukuran petak minimum opsional dalam sel untuk penyaringan petak pascaklasifikasi (default 0, nonaktif)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster kategorikal sembilan kelas."
              },
              "output_confidence": {
                "label": "Keluaran keyakinan",
                "description": "Path keluaran opsional untuk raster keyakinan dalam rentang [0, 1]."
              }
            }
          },
          "pennock_landform_classification": {
            "name": "Klasifikasi bentuk lahan Pennock",
            "description": "Mengklasifikasikan elemen bentuk lahan ke dalam tujuh kelas medan Pennock et al. (1987).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "plan_curv_threshold": {
                "label": "Ambang kelengkungan plan",
                "description": "Ambang kelengkungan denah dalam derajat (default 0.0)."
              },
              "prof_curv_threshold": {
                "label": "Ambang kelengkungan profil",
                "description": "Ambang kelengkungan profil dalam derajat (default 0.1)."
              },
              "slope_threshold": {
                "label": "Ambang kemiringan",
                "description": "Ambang kemiringan dalam derajat (default 3.0)."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor penskalaan vertikal opsional (jika < 0 dan CRS geografis, diperkirakan dari lintang tengah)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "percent_elev_range": {
            "name": "Persentase rentang elevasi",
            "description": "Menghitung posisi topografis lokal sebagai persentase rentang elevasi ketetanggaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar filter ganjil dalam sel (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi filter ganjil dalam sel (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "relative_topographic_position": {
            "name": "Posisi topografi relatif",
            "description": "Menghitung RTP menggunakan nilai elevasi minimum, rata-rata, dan maksimum ketetanggaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "filter_size_x": {
                "label": "Ukuran filter X",
                "description": "Lebar filter ganjil dalam sel (default 11). Alias: filterx."
              },
              "filter_size_y": {
                "label": "Ukuran filter Y",
                "description": "Tinggi filter ganjil dalam sel (default filter_size_x). Alias: filtery."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional."
              }
            }
          },
          "max_anisotropy_dev": {
            "name": "Deviasi anisotropi maksimum",
            "description": "Menghitung anisotropi maksimum dalam deviasi elevasi pada rentang skala ketetanggaan. Ditulis oleh Dan Newman.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 3)."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela maksimum dalam sel (default 100)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 2). Alias: step."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster magnitudo anisotropi."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster yang menyimpan skala respons maksimum."
              }
            }
          },
          "max_anisotropy_dev_signature": {
            "name": "Tanda deviasi anisotropi maksimum",
            "description": "Menghitung tanda tangan anisotropi multiskala untuk situs titik masukan dan menulis laporan HTML. Ditulis oleh Dan Newman.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan."
              },
              "points": {
                "label": "Titik",
                "description": "Path file titik atau multititik vektor masukan."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 1)."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela maksimum dalam sel (default 100)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 1). Alias: step."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk laporan tanda HTML."
              }
            }
          },
          "max_difference_from_mean": {
            "name": "Selisih maksimum dari rata-rata",
            "description": "Menghitung selisih absolut maksimum dari rata-rata pada rentang skala ketetanggaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 1)."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela maksimum dalam sel (default 100)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 1). Alias: step."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster magnitudo selisih maksimum."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster yang menyimpan skala respons maksimum."
              }
            }
          },
          "max_elevation_deviation": {
            "name": "Deviasi elevasi maksimum",
            "description": "Menghitung deviasi elevasi terstandardisasi maksimum (DEVmax) pada rentang skala ketetanggaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 1)."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela maksimum dalam sel (default 100)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 1). Alias: step."
              },
              "min_vertical": {
                "label": "Vertikal minimum",
                "description": "Ambang simpangan baku lokal minimum; respons relief yang lebih lemah ditekan (default 0.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster magnitudo DEVmax."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster yang menyimpan skala respons maksimum."
              }
            }
          },
          "max_elev_dev_signature": {
            "name": "Tanda deviasi elevasi maksimum",
            "description": "Menghitung tanda tangan deviasi elevasi multiskala untuk situs titik masukan dan menulis laporan HTML.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan."
              },
              "points": {
                "label": "Titik",
                "description": "Path file titik atau multititik vektor masukan."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 1)."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela maksimum dalam sel (default 100)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 10). Alias: step."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk laporan tanda HTML."
              }
            }
          },
          "multiscale_curvatures": {
            "name": "Kelengkungan multiskala",
            "description": "Menghitung kelengkungan multiskala dan indeks berbasis kelengkungan dari DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe. Alias: dem."
              },
              "curv_type": {
                "label": "Jenis kelengkungan",
                "description": "Tipe kelengkungan."
              },
              "out_mag": {
                "label": "Keluaran magnitudo",
                "description": "Path magnitudo keluaran opsional. Alias: output."
              },
              "out_scale": {
                "label": "Keluaran skala",
                "description": "Path skala keluaran opsional jika num_steps > 1."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius ketetanggaan pencarian minimum dalam sel grid."
              },
              "step": {
                "label": "Langkah",
                "description": "Ukuran langkah."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah langkah skala yang disampel."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Faktor nonlinearitas langkah."
              },
              "log_transform": {
                "label": "Transformasi log",
                "description": "Terapkan transformasi log bertanda. Alias: log."
              },
              "standardize": {
                "label": "Standarisasi",
                "description": "Standardisasi setiap skala menjadi skor z."
              }
            }
          },
          "multiscale_elevated_index": {
            "name": "Indeks ketinggian multiskala",
            "description": "Menghitung raster indeks elevasi multiskala (MsEI) dan skala kunci menggunakan residual ruang skala Gaussian.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius pencarian minimum dalam sel grid (default 2)."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah skala yang dievaluasi (default 100)."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Nonlinearitas langkah skala dalam [1,4] (default 1.1)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Ukuran langkah dasar dalam sel (default 1). Alias: step."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster indeks."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster skala kunci."
              }
            }
          },
          "multiscale_elevation_percentile": {
            "name": "Persentil elevasi multiskala",
            "description": "Menghitung persentil elevasi lokal paling ekstrem di seluruh rentang skala ketetanggaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 4)."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah skala yang dievaluasi (default 10)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 1). Alias: step."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Eksponen penskalaan nonlinear; >1.0 mengelompokkan skala ke arah resolusi lebih halus (default 1.0)."
              },
              "sig_digits": {
                "label": "Digit signifikan",
                "description": "Digit desimal signifikan yang digunakan selama pembinan persentil (default 3)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster magnitudo persentil."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster yang menyimpan skala respons persentil paling ekstrem."
              }
            }
          },
          "multiscale_low_lying_index": {
            "name": "Indeks dataran rendah multiskala",
            "description": "Menghitung raster indeks dataran rendah multiskala (MsLLI) dan skala kunci menggunakan residual ruang skala Gaussian.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius pencarian minimum dalam sel grid (default 2)."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah skala yang dievaluasi (default 100)."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Nonlinearitas langkah skala dalam [1,4] (default 1.1)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Ukuran langkah dasar dalam sel (default 1). Alias: step."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster indeks."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster skala kunci."
              }
            }
          },
          "multiscale_roughness": {
            "name": "Kekasaran multiskala",
            "description": "Menghitung kekasaran permukaan pada rentang skala ketetanggaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 1)."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela maksimum dalam sel (default 100)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 1). Alias: step."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z jika satuan vertikal dan horizontal berbeda (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster magnitudo kekasaran."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster yang menyimpan skala respons maksimum."
              }
            }
          },
          "multiscale_roughness_signature": {
            "name": "Tanda kekasaran multiskala",
            "description": "Menghitung tanda tangan kekasaran multiskala untuk situs titik masukan dan menulis laporan HTML.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan."
              },
              "points": {
                "label": "Titik",
                "description": "Path file titik atau multititik vektor masukan."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 1)."
              },
              "max_scale": {
                "label": "Skala maksimum",
                "description": "Radius setengah jendela maksimum dalam sel (default 100)."
              },
              "step_size": {
                "label": "Ukuran langkah",
                "description": "Peningkatan skala dalam sel (default 1). Alias: step."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z jika satuan vertikal dan horizontal berbeda (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk laporan tanda HTML."
              }
            }
          },
          "multiscale_std_dev_normals": {
            "name": "Simpangan baku normal multiskala",
            "description": "Menghitung simpangan baku sferis maksimum normal permukaan pada rentang skala yang diambil sampelnya secara nonlinear.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 4)."
              },
              "step": {
                "label": "Langkah",
                "description": "Ukuran langkah dasar dalam sel yang digunakan oleh jadwal skala nonlinear (default 1)."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah skala yang disampel (default 10)."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Eksponen nonlinearitas untuk jadwal skala (default 1.0)."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z jika satuan vertikal dan horizontal berbeda (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster magnitudo simpangan baku sferis."
              },
              "output_scale": {
                "label": "Skala keluaran",
                "description": "Path keluaran opsional untuk raster yang menyimpan skala respons maksimum."
              }
            }
          },
          "multiscale_std_dev_normals_signature": {
            "name": "Tanda simpangan baku normal multiskala",
            "description": "Menghitung tanda tangan skala simpangan baku sferis untuk situs titik masukan dan menulis laporan HTML.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan."
              },
              "points": {
                "label": "Titik",
                "description": "Path file titik atau multititik vektor masukan."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 4)."
              },
              "step": {
                "label": "Langkah",
                "description": "Ukuran langkah dasar dalam sel yang digunakan oleh jadwal skala nonlinear (default 1)."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah skala yang disampel (default 10)."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Eksponen nonlinearitas untuk jadwal skala (default 1.0)."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Faktor konversi Z jika satuan vertikal dan horizontal berbeda (default 1.0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk laporan tanda HTML."
              }
            }
          },
          "multiscale_topographic_position_image": {
            "name": "Citra posisi topografi multiskala",
            "description": "Membuat citra posisi topografis multiskala RGB terkemas dari raster DEVmax lokal, meso, dan luas.",
            "params": {
              "local": {
                "label": "Lokal",
                "description": "Path raster DEVmax skala lokal masukan."
              },
              "meso": {
                "label": "Meso",
                "description": "Path raster DEVmax skala meso masukan."
              },
              "broad": {
                "label": "Luas",
                "description": "Path raster DEVmax skala luas masukan."
              },
              "hillshade": {
                "label": "Bayangan bukit",
                "description": "Path raster bayangan bukit opsional yang digunakan untuk modulasi pencahayaan."
              },
              "lightness": {
                "label": "Kecerahan",
                "description": "Faktor penskalaan kecerahan citra (default 1.2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk raster RGB terpaket."
              }
            }
          },
          "topographic_position_animation": {
            "name": "Animasi posisi topografi",
            "description": "Membuat penampil HTML interaktif dan GIF animasi DEV atau DEVmax di seluruh skala yang diambil sampelnya secara nonlinear.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path raster DEM masukan atau objek raster bertipe."
              },
              "delay": {
                "label": "Jeda",
                "description": "Tundaan GIF per bingkai dalam milidetik."
              },
              "image_height": {
                "label": "Tinggi citra",
                "description": "Tinggi citra yang ditampilkan dalam piksel."
              },
              "label": {
                "label": "Label",
                "description": "Label opsional yang ditampilkan di penampil."
              },
              "min_scale": {
                "label": "Skala minimum",
                "description": "Radius setengah jendela minimum dalam sel (default 1)."
              },
              "num_steps": {
                "label": "Jumlah langkah",
                "description": "Jumlah langkah animasi (default 10)."
              },
              "palette": {
                "label": "Palet",
                "description": "Nama palet yang digunakan untuk mewarnai nilai DEV."
              },
              "step_nonlinearity": {
                "label": "Nonlinearitas langkah",
                "description": "Eksponen skala nonlinear dalam [1, 4] yang mengendalikan jarak kasar ke halus."
              },
              "use_dev_max": {
                "label": "Gunakan deviasi maksimum",
                "description": "Jika true, bingkai mengakumulasi respons DEV absolut terkuat yang ditemui sejauh ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path HTML keluaran."
              }
            }
          },
          "topo_render": {
            "name": "Render topografi",
            "description": "Membuat rendering topografis pseudo-3D menggunakan pewarnaan palet, bayangan bukit, bayangan, dan atenuasi.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Path raster DEM masukan."
              },
              "palette": {
                "label": "Palet",
                "description": "Nama palet (soft, atlas, high_relief, turbo, viridis, dem, grey, white)."
              },
              "reverse_palette": {
                "label": "Balik palet",
                "description": "Balikkan urutan palet."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut sumber cahaya dalam derajat [0, 360]."
              },
              "altitude": {
                "label": "Altitud",
                "description": "Ketinggian sumber cahaya dalam derajat [0, 90]."
              },
              "clipping_polygon": {
                "label": "Poligon pemotong",
                "description": "Path vektor poligon opsional; hanya sel DEM di dalam poligon yang dirender."
              },
              "background_hgt_offset": {
                "label": "Offset tinggi latar",
                "description": "Offset vertikal dari elevasi DEM minimum ke bidang latar belakang."
              },
              "background_clr": {
                "label": "Warna latar",
                "description": "Warna RGBA latar belakang sebagai array [r,g,b,a]."
              },
              "attenuation_parameter": {
                "label": "Parameter atenuasi",
                "description": "Eksponen atenuasi jarak (>= 0)."
              },
              "ambient_light": {
                "label": "Cahaya ambien",
                "description": "Jumlah cahaya ambien dalam [0, 1]."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Pengali pembesaran vertikal."
              },
              "max_dist": {
                "label": "Jarak maksimum",
                "description": "Jarak pencarian bayangan maksimum dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran."
              }
            }
          },
          "add_surface_information": {
            "name": "Tambah informasi permukaan",
            "description": "Tambahkan statistik permukaan per fitur dari raster elevasi — Z, panjang permukaan 3D, luas permukaan 3D, Z min/maks/rata-rata, dan kemiringan min/maks/rata-rata — sebagai field atribut tanpa mengubah geometri masukan, seperti ArcGIS Add Surface Information.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik, garis, atau poligon) yang berbagi CRS dengan permukaan."
              },
              "surface": {
                "label": "Permukaan",
                "description": "Raster elevasi/permukaan yang akan disampel."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "properties": {
                "label": "Properti",
                "description": "Daftar kelompok properti permukaan yang ditambahkan, dipisahkan koma: Z, SURFACE_LENGTH, SURFACE_AREA, MIN_MAX_MEAN_Z, MIN_MAX_AVG_SLOPE. Default: semua yang berlaku untuk geometri layer."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Interval densifikasi dalam satuan CRS untuk pengambilan sampel garis/keliling; segmen panjang dipisah agar mengikuti permukaan. Default: ukuran sel raster."
              },
              "method": {
                "label": "Metode",
                "description": "Pengambilan sampel permukaan verteks: 'bilinear' (default) atau 'nearest'."
              },
              "band": {
                "label": "Band",
                "description": "Band permukaan berbasis 1 yang disampel (default 1)."
              }
            }
          },
          "add_z_information": {
            "name": "Tambah informasi Z",
            "description": "Menambahkan statistik geometri turunan Z ke fitur 3D — Z titik/min/maks/rata-rata, panjang 3D, luas permukaan dan volume mesh, statistik kemiringan, dan jumlah verteks (ArcGIS Add Z Information). vector_summary_statistics dan attribute_histogram meringkas atribut alih-alih geometri, dan polygon_volume / surface_volume mengukur raster terhadap bidang referensi, sehingga saat ini tidak ada yang menganotasi fitur vektor 3D dari Z-nya sendiri.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik, garis, poligon, atau multipatch 3D. Perhatikan bahwa Z bernilai nol tidak dapat dibedakan dari Z yang tidak ada, sehingga 'features_with_z' merupakan petunjuk, bukan jaminan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Fitur masukan dengan field yang diminta ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "properties": {
                "label": "Properti",
                "description": "Subset yang dipisahkan koma dari spot_z, min_z, max_z, mean_z, length_3d, surface_area, volume, min_slope, max_slope, mean_slope, point_count, vertex_count. Default: semuanya (field yang tidak berlaku untuk suatu geometri dibiarkan null)."
              },
              "noise_filtering": {
                "label": "Penyaringan derau",
                "description": "Persentase (0-50) yang dipangkas dari setiap ujung distribusi Z sebelum min_z / max_z, sehingga satu verteks lonjakan tidak menentukan nilai ekstrem yang dilaporkan. Default 0."
              }
            }
          },
          "adjust_3d_z": {
            "name": "Sesuaikan Z 3D",
            "description": "Terapkan konversi satuan Z, offset vertikal, dan/atau faktor pengali pada ordinat Z fitur 3D.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (fitur sebaiknya membawa ordinat Z)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "factor": {
                "label": "Faktor",
                "description": "Faktor pengali yang diterapkan pada Z (default 1.0). Berguna untuk pembesaran vertikal atau skala datum."
              },
              "offset": {
                "label": "Offset",
                "description": "Offset vertikal aditif yang diterapkan setelah faktor, dalam satuan target (default 0.0)."
              },
              "from_unit": {
                "label": "Dari satuan",
                "description": "Praatur satuan Z sumber (meters, feet, us_feet, centimeters, millimeters, kilometers, miles, yards, inches). Memerlukan to_unit."
              },
              "to_unit": {
                "label": "Ke satuan",
                "description": "Praatur satuan Z target. Memerlukan from_unit. Z diskalakan dengan (meter-per-from_unit / meter-per-to_unit)."
              }
            }
          },
          "adjust_stream_to_raster": {
            "name": "Sesuaikan sungai ke raster",
            "description": "Pindahkan verteks polyline sungai ke jalur aliran yang tersirat oleh DEM agar hidrografi vektor dan permukaan elevasi selaras, dengan menjepret node ke sel berakumulasi tinggi dan menelusuri rantai penunjuk D8 di antaranya. Kebalikan dari pembakaran sungai. Seperti ArcGIS Adjust Stream To Raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur polyline sungai yang akan disesuaikan."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster permukaan yang mendefinisikan jalur aliran sebenarnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path sungai tersesuaikan keluaran. Jika dihilangkan, disimpan di memori."
              },
              "snap_distance": {
                "label": "Jarak jepret",
                "description": "Radius pencarian dalam satuan peta untuk menjepret node ke sel berakumulasi tinggi (default: 5 sel)."
              },
              "channel_threshold": {
                "label": "Ambang saluran",
                "description": "Nilai akumulasi aliran (dalam sel) yang sama atau lebih besar darinya sebuah sel dihitung sebagai teralurkan untuk penjepretan (default: 1% dari akumulasi maksimum DEM)."
              },
              "remove_disconnected": {
                "label": "Hapus yang terputus",
                "description": "Buang garis yang sama sekali tidak dapat dirutekan (default true). Jika false, garis tersebut dilewatkan tanpa perubahan dan ditandai."
              },
              "output_stream_raster": {
                "label": "Keluaran raster sungai",
                "description": "Raster opsional yang menandai sel sungai yang telah disesuaikan."
              },
              "output_flow_direction": {
                "label": "Keluaran arah aliran",
                "description": "Raster penunjuk D8 opsional yang diturunkan dari DEM."
              },
              "output_split_points": {
                "label": "Keluaran titik pemisahan",
                "description": "Titik opsional tempat penelusuran penunjuk gagal dan cadangan biaya terkecil digunakan."
              }
            }
          },
          "aggregate_multidimensional_raster": {
            "name": "Agregasi raster multidimensi",
            "description": "Mengelompokkan irisan kubus raster sepanjang dimensinya ke dalam bin dan mereduksi setiap bin menjadi satu band keluaran — adegan harian menjadi komposit bulanan, satu dekade menjadi rata-rata tahunan (ArcGIS Aggregate Multidimensional Raster). cell_statistics dari putaran 17 hanya mereduksi tumpukan menjadi satu layer dan tidak mengenal dimensi, sedangkan multidimensional_anomaly dari putaran 16 melakukan operasi sebaliknya dan mempertahankan jumlah irisan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah irisan) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster multiband keluaran, satu band per bin. Jika dihilangkan, disimpan di memori."
              },
              "dimension": {
                "label": "Dimensi",
                "description": "Nama dimensi, hanya digunakan dalam laporan (default 'slice')."
              },
              "dimension_values": {
                "label": "Nilai dimensi",
                "description": "Koordinat setiap irisan yang dipisahkan koma, meningkat ketat. Default-nya indeks irisan berbasis 1."
              },
              "aggregation_definition": {
                "label": "Definisi agregasi",
                "description": "'all' (default), 'interval_value', 'interval_count', atau 'interval_ranges'."
              },
              "interval_value": {
                "label": "Nilai interval",
                "description": "Lebar bin dalam satuan dimensi, untuk 'interval_value'."
              },
              "interval_count": {
                "label": "Jumlah interval",
                "description": "Jumlah bin berlebar sama, untuk 'interval_count'."
              },
              "interval_ranges": {
                "label": "Rentang interval",
                "description": "Bin eksplisit sebagai 'start:end,start:end', untuk 'interval_ranges'."
              },
              "aggregation_method": {
                "label": "Metode agregasi",
                "description": "'mean' (default), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum', atau 'variety'."
              },
              "percentile_value": {
                "label": "Nilai persentil",
                "description": "Persentil dalam [0, 100] untuk metode 'percentile' (default 50)."
              },
              "ignore_nodata": {
                "label": "Abaikan nodata",
                "description": "Lewati irisan nodata per sel (default true). Jika false, satu irisan nodata membuat seluruh bin menjadi nodata pada sel tersebut."
              }
            }
          },
          "aggregate_points": {
            "name": "Agregasi titik",
            "description": "Kelompokkan titik-titik yang berada dalam jarak agregasi satu sama lain menjadi poligon klaster (convex hull atau gabungan buffer), masing-masing membawa jumlah titik dan jumlah field per klaster opsional, seperti ArcGIS Aggregate Points.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (Point atau MultiPoint)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "aggregation_distance": {
                "label": "Jarak agregasi",
                "description": "Jarak maksimum antar titik agar bergabung ke klaster yang sama (satuan peta)."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Jumlah titik minimum yang dibutuhkan sebuah klaster untuk dihasilkan (default 2; setel 1 untuk mempertahankan tunggalan)."
              },
              "method": {
                "label": "Metode",
                "description": "'convex_hull' (default) atau 'buffer' (gabungan buffer yang dierosi kembali)."
              },
              "sum_fields": {
                "label": "Field penjumlahan",
                "description": "Field numerik yang dipisahkan koma untuk dijumlahkan per klaster (kolom keluaran 'sum_<field>')."
              }
            }
          },
          "aggregate_polygons": {
            "name": "Agregasi poligon",
            "description": "Gabungkan poligon dalam jarak agregasi menjadi poligon yang lebih besar (penutupan morfologi), dengan filter luas minimum dan ukuran lubang minimum serta layer penghalang opsional yang tidak boleh dilintasi agregasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "aggregation_distance": {
                "label": "Jarak agregasi",
                "description": "Poligon dalam jarak ini (satuan CRS) satu sama lain diagregasi. Menetapkan radius penutupan morfologi ke setengah nilai ini."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Buang poligon teragregasi yang luasnya (satuan CRS kuadrat) di bawah nilai ini. Default: pertahankan semua."
              },
              "min_hole_size": {
                "label": "Ukuran lubang minimum",
                "description": "Isi lubang interior yang luasnya (satuan CRS kuadrat) di bawah nilai ini. Default: pertahankan semua lubang."
              },
              "barrier": {
                "label": "Penghalang",
                "description": "Layer vektor penghalang opsional (garis atau poligon) yang tidak boleh dilintasi agregasi; jembatan yang melintasi penghalang diputus. Poligon masukan yang ada tidak pernah dipisah."
              }
            }
          },
          "align_features": {
            "name": "Selaraskan fitur",
            "description": "Sesuaikan tepi garis/poligon sumber ke layer target tepercaya di dekatnya dalam jarak pencarian, menarik seluruh rangkaian tepi (bukan hanya titik ujung) dengan peruncingan halus dan batas bersama yang berimpit, seperti ArcGIS Align Features.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor sumber yang akan diselaraskan (garis atau poligon)."
              },
              "target": {
                "label": "Target",
                "description": "Layer target tepercaya (garis, atau batas poligon) tempat verteks sumber ditarik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak maksimum (satuan CRS) sebuah verteks sumber boleh ditarik ke target. Wajib."
              },
              "match_field": {
                "label": "Field pencocokan",
                "description": "Field atribut sumber opsional; hanya sisi target yang nilai target_match_field-nya cocok yang menjadi kandidat bagi verteks fitur tersebut."
              },
              "target_match_field": {
                "label": "Field pencocokan target",
                "description": "Field atribut target yang dibandingkan dengan match_field. Default-nya nama match_field jika dihilangkan; memerlukan match_field."
              }
            }
          },
          "analyze_changes_ccdc": {
            "name": "Analisis perubahan dengan CCDC",
            "description": "Deteksi perubahan kontinu CCDC pada deret waktu citra rapat (seperti ArcGIS Analyze Changes Using CCDC): regresi OLS harmonik (musiman) per piksel, lalu uji residu bergeser (k×RMSE, anomali berurutan minimum) yang menyatakan patahan dan menyesuaikan ulang segmen. Menghasilkan raster jumlah patahan, tanggal patahan pertama, dan RMSE/kemiringan/amplitudo segmen awal — riwayat perubahan musiman multi-patahan yang tidak dapat dihasilkan oleh landtrendr tahunan dan change_vector_analysis dua tanggal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah irisan waktu) ATAU daftar path raster band tunggal terkoregistrasi yang dipisahkan koma, dalam urutan waktu."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster jumlah patahan keluaran (patahan yang terdeteksi per piksel). Jika dihilangkan, disimpan di memori."
              },
              "dates": {
                "label": "Tanggal",
                "description": "Tanggal numerik yang dipisahkan koma (tahun desimal atau nomor hari) yang bersesuaian dengan irisan. Default 0,1,2,..."
              },
              "period": {
                "label": "Periode",
                "description": "Panjang satu siklus musiman dalam satuan 'dates' (default 1.0 untuk tahun desimal; gunakan 365 untuk nomor hari)."
              },
              "harmonic_order": {
                "label": "Orde harmonik",
                "description": "Jumlah pasangan harmonik sinus/kosinus pada frekuensi tahunan (default 1 = hanya tahunan; 2 menambahkan suku setengah tahunan)."
              },
              "change_threshold": {
                "label": "Ambang perubahan",
                "description": "Ambang anomali sebagai kelipatan k dari RMSE segmen (default 3.0). Residu > k×RMSE menandai suatu pengamatan."
              },
              "min_consecutive": {
                "label": "Berurutan minimum",
                "description": "Jumlah pengamatan bertanda berurutan yang diperlukan untuk menyatakan patahan (default 3)."
              },
              "min_observations": {
                "label": "Pengamatan minimum",
                "description": "Jumlah pengamatan valid minimum yang digunakan untuk menginisialisasi model harmonik suatu segmen (default 12). Piksel dengan pengamatan valid lebih sedikit menjadi nodata."
              },
              "band": {
                "label": "Band",
                "description": "Untuk masukan daftar yang dipisahkan koma: band berbasis 1 yang dibaca dari setiap raster (default 1). Diabaikan untuk masukan multiband tunggal."
              },
              "break_date_output": {
                "label": "Keluaran tanggal patahan",
                "description": "Raster opsional berisi tanggal patahan pertama yang terdeteksi per piksel (nodata jika tidak ada patahan)."
              },
              "rmse_output": {
                "label": "Keluaran RMSE",
                "description": "Raster opsional berisi RMSE model harmonik segmen awal."
              },
              "slope_output": {
                "label": "Keluaran kemiringan",
                "description": "Raster opsional berisi koefisien tren linear (kemiringan) segmen awal."
              },
              "amplitude_output": {
                "label": "Keluaran amplitudo",
                "description": "Raster opsional berisi amplitudo harmonik pertama segmen awal sqrt(a²+b²)."
              }
            }
          },
          "apply_radiometric_calibration": {
            "name": "Terapkan kalibrasi radiometrik",
            "description": "Mengonversi digital number SAR mentah menjadi hamburan balik terkalibrasi — beta nought, sigma nought, atau gamma nought — sehingga akuisisi dapat dibandingkan secara fisik dan ambang batas yang dipublikasikan dapat diterapkan (ArcGIS Apply Radiometric Calibration). Tidak ada alat di kedua registri yang melakukan ini: rescale_value_range adalah peregangan linear tanpa makna radiometrik, dan multilook, sar_coherence, filter speckle Lee, serta compute_sar_indices semuanya memakai nilai apa pun yang diberikan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster SAR dalam digital number, amplitudo, intensitas, atau dB (lihat 'input_units')."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster hamburan balik terkalibrasi keluaran. Jika dihilangkan, disimpan di memori."
              },
              "calibration_type": {
                "label": "Jenis kalibrasi",
                "description": "'sigma0' (default), 'beta0', atau 'gamma0'. sigma0 dan gamma0 memerlukan 'incidence_angle'."
              },
              "calibration_constant": {
                "label": "Konstanta kalibrasi",
                "description": "Konstanta kalibrasi sensor A (default 1.0). Diabaikan jika 'calibration_lut' diberikan."
              },
              "calibration_lut": {
                "label": "LUT kalibrasi",
                "description": "Raster terkoregistrasi opsional berisi konstanta kalibrasi A per sel, menggantikan 'calibration_constant'."
              },
              "incidence_angle": {
                "label": "Sudut datang",
                "description": "Sudut datang lokal dalam derajat: sebuah konstanta, atau path raster terkoregistrasi. Wajib untuk 'sigma0' dan 'gamma0'."
              },
              "input_units": {
                "label": "Satuan masukan",
                "description": "'dn' (default), 'amplitude', 'intensity', atau 'db'. dn dan amplitude dikuadratkan menjadi daya; db dilinearkan kembali terlebih dahulu."
              },
              "output_units": {
                "label": "Satuan keluaran",
                "description": "'linear' (default) atau 'db'."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dikalibrasi (default 1)."
              }
            }
          },
          "apportion_polygon": {
            "name": "Pembagian poligon",
            "description": "Transfer atribut numerik dari layer poligon sumber ke layer poligon target, dibagi berdasarkan luas tumpang tindih (reagregasi dasimetrik antar sistem zona), seperti ArcGIS Apportion Polygon.",
            "params": {
              "target": {
                "label": "Target",
                "description": "Layer poligon target (menerima nilai yang dibagi; fitur dan atributnya dipertahankan)."
              },
              "source": {
                "label": "Sumber",
                "description": "Layer poligon sumber yang membawa nilai untuk didistribusikan."
              },
              "fields": {
                "label": "Field",
                "description": "Nama field numerik pada sumber yang dibagi, dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (salinan target dengan kolom hasil pembagian). Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'area' (default; dibagi berdasarkan luas tumpang tindih) atau 'weight' (dibagi berdasarkan luas tumpang tindih dikali 'weight_field' target)."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik target yang digunakan sebagai bobot tambahan jika method=weight."
              },
              "suffix": {
                "label": "Akhiran",
                "description": "Akhiran untuk kolom keluaran hasil pembagian. Default '_app'."
              }
            }
          },
          "areal_interpolation": {
            "name": "Interpolasi areal",
            "description": "Memprediksi nilai agregat untuk poligon target dari poligon sumber dengan geografi berbeda, dengan menyesuaikan permukaan dasar yang halus dan mengintegrasikannya kembali alih-alih membobot berdasarkan luas (ArcGIS Areal Interpolation Layer To Polygons). apportion_polygon mengasumsikan kuantitas seragam di dalam setiap poligon sumber — kegagalan klasik masalah unit areal yang dapat dimodifikasi — dan tidak memberikan galat baku; rangkaian kriging bawaan sepenuhnya berbasis titik dan tidak dapat menerima pengamatan poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Poligon sumber yang membawa field terukur."
              },
              "target": {
                "label": "Target",
                "description": "Poligon target yang nilainya akan diprediksi."
              },
              "field": {
                "label": "Field",
                "description": "Field nilai numerik pada poligon sumber."
              },
              "output": {
                "label": "Keluaran",
                "description": "Poligon target dengan PREDICTED, PRED_STD_ERR, dan diagnostik yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "field_type": {
                "label": "Jenis field",
                "description": "'count' (default): total ekstensif, diskalakan ulang untuk mempertahankan jumlah sumber. 'average': rata-rata intensif, diprediksi langsung tanpa penskalaan ulang."
              },
              "discretization": {
                "label": "Diskretisasi",
                "description": "Perkiraan jumlah titik interior yang digunakan untuk merepresentasikan dukungan luas setiap poligon (default 25). Nilai lebih tinggi lebih akurat dan jauh lebih lambat."
              },
              "model": {
                "label": "Model",
                "description": "Model variogram: 'exponential' (default), 'spherical', atau 'gaussian'."
              },
              "preserve_total": {
                "label": "Pertahankan total",
                "description": "Skalakan ulang prediksi count agar total target sesuai dengan total sumber (default true untuk 'count', selalu nonaktif untuk 'average'). Hanya diterapkan jika target mencakup sumber — faktor yang diterapkan dilaporkan sebagai 'mass_scale' sehingga proses dengan cakupan parsial terlihat."
              }
            }
          },
          "attribute_uncertainty": {
            "name": "Ketidakpastian atribut",
            "description": "Propagasi galat Monte Carlo berseed pada atribut yang tidak pasti (seperti ArcGIS Attribute Uncertainty): tarik realisasi NORMAL/UNIFORM dari field galat per fitur atau pasangan batas, dan tambahkan statistik mean/std/p5/p50/p95/CV.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor (atau tabel) masukan dengan atribut yang tidak pasti."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang menyimpan estimasi (rata-rata/pusat distribusi) untuk setiap fitur."
              },
              "error_field": {
                "label": "Field galat",
                "description": "Field numerik yang menyimpan ketidakpastian simetris: galat baku untuk NORMAL, atau setengah lebar untuk UNIFORM. Berikan ini ATAU keduanya lower_field/upper_field."
              },
              "lower_field": {
                "label": "Field bawah",
                "description": "Field numerik dengan batas bawah nilai. Gunakan bersama upper_field alih-alih error_field."
              },
              "upper_field": {
                "label": "Field atas",
                "description": "Field numerik dengan batas atas nilai. Gunakan bersama lower_field alih-alih error_field."
              },
              "distribution": {
                "label": "Distribusi",
                "description": "Distribusi galat: NORMAL (default) atau UNIFORM."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah realisasi Monte Carlo per fitur (default 1000)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG deterministik (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran dengan statistik yang ditambahkan. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "band_collection_statistics": {
            "name": "Statistik koleksi band",
            "description": "Min/maks/rata-rata/std per band ditambah matriks kovarians dan korelasi antar band untuk tumpukan raster (seperti ArcGIS Band Collection Statistics) — ringkasan multivariat (prasyarat PCA / klasifikasi) yang tidak dimiliki rangkaian bawaan; berbeda dari cell_statistics per piksel.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah satu layer) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV opsional untuk laporan statistik. Matriks selalu dikembalikan dalam hasil."
              },
              "detail": {
                "label": "Detail",
                "description": "'detailed' (default) menyertakan matriks kovarians/korelasi; 'brief' hanya mengembalikan statistik per band."
              }
            }
          },
          "bivariate_spatial_association": {
            "name": "Asosiasi spasial bivariat",
            "description": "Statistik L Lee global dan lokal yang mengukur di mana dua variabel kontinu berkovariasi secara spasial, dengan nilai p uji permutasi berseed dan kelas Tinggi-Tinggi/Tinggi-Rendah/Rendah-Tinggi/Rendah-Rendah per fitur — seperti ArcGIS Bivariate Spatial Association. Padanan medan kontinu dari colocation_analysis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan dengan dua field numerik."
              },
              "x_field": {
                "label": "Field X",
                "description": "Field variabel numerik pertama."
              },
              "y_field": {
                "label": "Field Y",
                "description": "Field variabel numerik kedua."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer keluaran dengan field L lokal, nilai p, dan kelas. Jika dihilangkan, disimpan di memori."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah tetangga terdekat untuk bobot spasial (default 8)."
              },
              "permutations": {
                "label": "Permutasi",
                "description": "Jumlah permutasi untuk uji signifikansi (default 199; 0 menonaktifkan)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG permutasi (default 1), agar hasil dapat direproduksi."
              }
            }
          },
          "block_statistics": {
            "name": "Statistik blok",
            "description": "Mempartisi raster menjadi blok-blok yang tidak tumpang tindih, mereduksi setiap blok dengan suatu statistik, dan menulis nilai tersebut kembali ke setiap sel dalam blok pada resolusi masukan (ArcGIS Block Statistics). Melengkapi focal_statistics (jendela tumpang tindih), zonal_statistics (berdasarkan layer zona), dan cell_statistics (lintas tumpukan) yang sudah ada; tidak seperti aggregate_raster bawaan, alat ini mempertahankan ukuran sel sehingga masukan - rata-rata blok memberikan permukaan residu lokal, dan menambahkan statistik kategorikal mayoritas/minoritas/median/variasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Salah satu dari mean (default), majority, maximum, median, minimum, minority, range, std, sum, variety."
              },
              "neighborhood": {
                "label": "Ketetanggaan",
                "description": "Bentuk blok: rectangle (default), circle, annulus, atau wedge."
              },
              "size": {
                "label": "Ukuran",
                "description": "Dimensi blok dalam sel: 'width,height' untuk rectangle (default '3,3'), 'radius' untuk circle/wedge, atau 'inner,outer' untuk annulus."
              },
              "start_angle": {
                "label": "Sudut awal",
                "description": "Sudut awal wedge dalam derajat berlawanan arah jarum jam dari timur (default 0)."
              },
              "end_angle": {
                "label": "Sudut akhir",
                "description": "Sudut akhir wedge dalam derajat berlawanan arah jarum jam dari timur (default 90)."
              },
              "ignore_nodata": {
                "label": "Abaikan nodata",
                "description": "Jika true (default), blok dihitung hanya dari sel valid; jika false, sel nodata apa pun membuat seluruh blok menjadi nodata."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "boundary_clean": {
            "name": "Pembersihan batas",
            "description": "Haluskan batas zona raster kategorikal dan hapus bintik melalui penyaringan mayoritas atau pembersihan batas perluas/susutkan, pembersihan standar sebelum poligonisasi — seperti ArcGIS Boundary Clean / Majority Filter.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kategorikal (bernilai bilangan bulat) masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'majority' (penghapusan bintik berdasarkan mayoritas tetangga; default) atau 'expand_shrink' (penghalusan Boundary Clean)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Konektivitas ketetanggaan: 4 (rook) atau 8 (queen; default)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Hanya mode majority: 'majority' (mayoritas mutlak tetangga; default) atau 'half' (setidaknya setengah)."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah tahap yang dijalankan (default 1)."
              },
              "sort": {
                "label": "Urutkan",
                "description": "Hanya mode expand_shrink: prioritas zona berdasarkan jumlah sel — 'descending' (zona lebih besar menang; default), 'ascending' (zona lebih kecil menang), atau 'none'."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "buffer_3d": {
            "name": "Buffer 3D",
            "description": "Buffer titik dan garis 3D menjadi geometri volumetrik (bola dan kapsul) yang dihasilkan sebagai permukaan tertriangulasi, seperti ArcGIS Buffer 3D.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik atau polyline 3D masukan (Z yang tidak ada diperlakukan sebagai 0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "distance": {
                "label": "Jarak",
                "description": "Radius buffer dalam satuan peta."
              },
              "distance_field": {
                "label": "Field jarak",
                "description": "Field radius per fitur opsional, menggantikan 'distance'."
              },
              "shape": {
                "label": "Bentuk",
                "description": "round (default; ujung setengah bola) atau flat (silinder dengan ujung datar)."
              },
              "quality": {
                "label": "Kualitas",
                "description": "Resolusi teselasi: segmen di sekeliling lingkaran (default 12, min 4, maks 64)."
              }
            }
          },
          "buffer_vector": {
            "name": "Buffer vektor",
            "description": "Memperluas geometri dengan jarak tertentu, membuat buffer poligon dengan gaya ujung/sambungan yang dapat disesuaikan. Dissolve opsional menggabungkan buffer yang tumpang tindih menjadi poligon terpadu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "distance": {
                "label": "Jarak",
                "description": "Jarak buffer dalam satuan peta."
              },
              "quadrant_segments": {
                "label": "Segmen kuadran",
                "description": "Resolusi busur dalam segmen per kuadran; default-nya 8."
              },
              "cap_style": {
                "label": "Gaya ujung",
                "description": "Gaya ujung garis: round, flat, atau square."
              },
              "join_style": {
                "label": "Gaya sambungan",
                "description": "Gaya sambungan sudut: round, bevel, atau mitre."
              },
              "mitre_limit": {
                "label": "Batas mitre",
                "description": "Batas sambungan mitre yang digunakan jika join_style=mitre; default-nya 5.0."
              },
              "dissolve": {
                "label": "Lebur (dissolve)",
                "description": "Lebur buffer yang tumpang tindih menjadi satu poligon terpadu; default-nya false."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran."
              }
            }
          },
          "build_balanced_zones": {
            "name": "Bangun zona seimbang",
            "description": "Kelompokkan poligon yang bersebelahan ke dalam sejumlah zona terhubung sesuai target yang menyeimbangkan jumlah fitur, jumlah atribut, atau homogenitas atribut, menggunakan partisi pohon rentang SKATER.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "zones": {
                "label": "Zona",
                "description": "Jumlah zona target yang dibuat."
              },
              "criterion": {
                "label": "Kriteria",
                "description": "Sasaran penyeimbangan: 'homogeneity' (default), 'equal_count', atau 'equal_sum' (dari field pertama)."
              },
              "fields": {
                "label": "Field",
                "description": "Field analisis numerik yang dipisahkan koma. Wajib untuk 'homogeneity' dan 'equal_sum'; menentukan bobot sisi pohon rentang."
              },
              "contiguity": {
                "label": "Kontiguitas",
                "description": "Aturan ketetanggaan: 'rook' (berbagi sisi, default) atau 'queen' (berbagi sisi atau verteks)."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Jarak maksimum agar dua segmen batas dihitung sebagai berbagi (rook). Default 1e-6."
              }
            }
          },
          "build_seamlines": {
            "name": "Bangun seamline",
            "description": "Dengan sekumpulan raster yang tumpang tindih (dan jejak opsional), hitung di mana setiap citra harus dipotong agar mosaik menyatu sepanjang sambungan yang paling tidak terlihat, menghasilkan satu poligon seamline yang tidak tumpang tindih per citra melalui penetapan Voronoi, urutan prioritas, radiometrik, atau sadar tepi. Seperti ArcGIS Build Seamlines.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path raster yang dipisahkan koma/titik koma untuk dimosaik."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path poligon seamline keluaran (satu fitur per raster masukan). Jika dihilangkan, disimpan di memori."
              },
              "footprints": {
                "label": "Jejak",
                "description": "Layer poligon opsional yang memberikan ekstensi valid setiap raster, dalam urutan masukan. Diturunkan dari data valid jika dihilangkan."
              },
              "method": {
                "label": "Metode",
                "description": "'voronoi' (default), 'order', 'radiometry', atau 'edge_detection'."
              },
              "sort_ascending": {
                "label": "Urutkan menaik",
                "description": "Untuk metode 'order': true (default) memberi prioritas pada raster yang lebih awal, false pada yang lebih akhir."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel analisis (default: ukuran sel masukan terhalus)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang digunakan untuk metode radiometrik (default 1)."
              },
              "min_region_size": {
                "label": "Ukuran wilayah minimum",
                "description": "Tetapkan ulang wilayah teralokasi yang lebih kecil dari sekian sel ini ke citra tetangga (default 0, yaitu pertahankan semua)."
              },
              "blend_width": {
                "label": "Lebar pencampuran",
                "description": "Lebar peruncingan dalam satuan peta, ditulis sebagai atribut untuk pemosaikan hilir (default 0)."
              },
              "blend_type": {
                "label": "Jenis pencampuran",
                "description": "'both' (default), 'inside', atau 'outside'; ditulis sebagai atribut."
              }
            }
          },
          "calculate_adjacent_fields": {
            "name": "Hitung field bersebelahan",
            "description": "Isi delapan field lembar tetangga arah (N, NE, E, SE, S, SW, W, NW) pada setiap petak grid indeks seri peta dengan nama halaman yang bersebelahan, untuk label margin 'bersambung di lembar …' — seperti ArcGIS Calculate Adjacent Fields.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Grid indeks seri peta poligon masukan (misalnya keluaran grid_index_features)."
              },
              "page_name_field": {
                "label": "Field nama halaman",
                "description": "Field yang nilainya melabeli setiap halaman (ditulis ke field arah para tetangganya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor poligon keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "include_diagonal": {
                "label": "Sertakan diagonal",
                "description": "Isi juga keempat field diagonal (NE, SE, SW, NW) dari petak yang bersentuhan di sudut. Default true."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Kuantisasi verteks ke grid berukuran ini (satuan CRS) sebelum mencocokkan batas. Default 0 (koordinat eksak)."
              }
            }
          },
          "calculate_central_meridian_and_parallels": {
            "name": "Hitung meridian tengah dan paralel",
            "description": "Hitung meridian tengah dan dua paralel standar per fitur dari ekstensi setiap fitur, untuk halaman seri peta dan atlas, seperti ArcGIS Calculate Central Meridian And Parallels.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur masukan dalam koordinat geografis (bujur/lintang), biasanya grid halaman grid_index_features."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "field": {
                "label": "Field",
                "description": "Nama field meridian tengah yang ditulis (default 'central_meridian')."
              },
              "standard_offset": {
                "label": "Offset standar",
                "description": "Fraksi rentang lintang yang digunakan untuk menggeser setiap paralel standar ke dalam dari tepi fitur (default 0.1667, aturan 1/6 Esri). Harus dalam [0, 0.5)."
              }
            }
          },
          "calculate_composite_index": {
            "name": "Hitung indeks komposit",
            "description": "Gabungkan beberapa atribut numerik menjadi indeks komposit (seperti ArcGIS Calculate Composite Index): penskalaan per variabel (min-maks/skor z/persentil) dengan pembalikan opsional, kombinasi terboboti (rata-rata/jumlah/rata-rata geometrik), dan penskalaan ulang keluaran — saudara sisi vektor dari fuzzy_overlay.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor (atau tabel) masukan dengan field variabel numerik."
              },
              "fields": {
                "label": "Field",
                "description": "Field variabel yang dipisahkan koma; tambahkan ':reverse' pada field yang nilai tingginya seharusnya menurunkan indeks (misalnya 'income:reverse,unemployment')."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran dengan field indeks yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "scaling": {
                "label": "Penskalaan",
                "description": "Penskalaan per variabel: 'minmax' (default), 'zscore', 'percentile', atau 'none'."
              },
              "weights": {
                "label": "Bobot",
                "description": "Bobot yang dipisahkan koma dan bersesuaian dengan 'fields' (default: bobot sama)."
              },
              "combine": {
                "label": "Gabungkan",
                "description": "Cara menggabungkan variabel terskala: 'mean' (default), 'sum', atau 'geometric_mean'."
              },
              "output_range": {
                "label": "Rentang keluaran",
                "description": "Skalakan ulang indeks gabungan: 'minmax' (0–1, default), 'zero_to_100', 'zscore', atau 'none'."
              }
            }
          },
          "calculate_distance_band": {
            "name": "Hitung pita jarak",
            "description": "Laporkan jarak minimum, rata-rata, dan maksimum di mana setiap fitur memiliki setidaknya N tetangga (seperti ArcGIS Calculate Distance Band from Neighbor Count) — diagnostik ambang yang menjamin tidak ada fitur tanpa tetangga sebelum statistik spasial berbasis jarak. generate_spatial_weights_matrix bawaan membangun matriks tetapi tidak pernah melaporkan pita ini.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik/fitur masukan (CRS terproyeksi; jarak dalam satuannya)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah tetangga k (>= 1). Default 1."
              },
              "distance_method": {
                "label": "Metode jarak",
                "description": "'euclidean' (default) atau 'manhattan'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV opsional untuk tabel feature_id,kth_neighbor_distance."
              }
            }
          },
          "calculate_end_time": {
            "name": "Hitung waktu akhir",
            "description": "Mengisi field waktu akhir dari waktu mulai rekaman berikutnya dalam setiap kelompok entitas, mengubah pengamatan sesaat menjadi rekaman rentang waktu (ArcGIS Calculate End Time). transform_fields melakukan transformasi per nilai dan summary_statistics mengagregasi kelompok, tetapi tidak ada yang melakukan pengisian temporal berurutan baris.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor atau tabel masukan."
              },
              "start_field": {
                "label": "Field awal",
                "description": "Field stempel waktu: epoch numerik, atau string tanggal/tanggal-waktu ISO-8601."
              },
              "end_field": {
                "label": "Field akhir",
                "description": "Field yang menerima waktu akhir (default 'END_TIME'). Dibuat jika tidak ada, ditimpa jika ada."
              },
              "id_fields": {
                "label": "Field ID",
                "description": "Field pengelompokan yang dipisahkan koma atau titik koma. Waktu akhir hanya diturunkan di dalam satu kelompok, tidak pernah melintasi batas kelompok."
              },
              "last_record": {
                "label": "Rekaman terakhir",
                "description": "Apa yang ditulis untuk baris terakhir setiap kelompok: 'null' (default), 'same_as_start', atau 'duration' (awal + default_duration)."
              },
              "default_duration": {
                "label": "Durasi default",
                "description": "Detik yang ditambahkan ke waktu awal untuk last_record 'duration'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer keluaran. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "calculate_grid_convergence_angle": {
            "name": "Hitung sudut konvergensi grid",
            "description": "Hitung, per fitur, sudut konvergensi grid antara utara grid dan utara sebenarnya dari bujur/lintang centroid dan meridian tengah (default meridian tengah UTM fitur itu sendiri), menulisnya ke field untuk rotasi simbol/label yang benar pada peta terproyeksi — seperti ArcGIS Calculate Grid Convergence Angle. Konvensi geografis (searah jarum jam dari utara) atau aritmetika (berlawanan arah jarum jam dari timur). Matematika murni, tanpa PROJ; tidak terkait dengan metrik medan convergence_index bawaan. Geometri dibaca sebagai derajat bujur/lintang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (tipe geometri apa pun) dalam koordinat geografis (derajat bujur/lintang, EPSG:4326)."
              },
              "angle_field": {
                "label": "Field sudut",
                "description": "Nama field float yang menyimpan sudut konvergensi dalam derajat. Default 'GRID_CONV'."
              },
              "angle_type": {
                "label": "Jenis sudut",
                "description": "Konvensi sudut: 'geographic' (derajat searah jarum jam dari utara, positif ke timur) atau 'arithmetic' (derajat berlawanan arah jarum jam dari timur, 90 − geographic). Default 'geographic'."
              },
              "central_meridian": {
                "label": "Meridian tengah",
                "description": "Bujur meridian tengah dalam derajat. Jika dihilangkan, setiap fitur menggunakan meridian tengah zona UTM-nya sendiri yang diturunkan dari bujurnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "calculate_missing_z_values": {
            "name": "Hitung nilai Z yang hilang",
            "description": "Isi nilai Z placeholder atau yang tidak ada sepanjang fitur 3D dengan menginterpolasi dari nilai Z valid di kedua sisi, seperti ArcGIS Calculate Missing Z Values.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan dengan verteks 3D."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "placeholder": {
                "label": "Placeholder",
                "description": "Nilai sentinel yang menandai Z yang hilang (misalnya -9999). Verteks yang sama sekali tidak memiliki Z selalu diperlakukan sebagai hilang."
              },
              "method": {
                "label": "Metode",
                "description": "Metode pengisian: 'linear' (default; interpolasi berdasarkan jarak sepanjang fitur) atau 'nearest'."
              },
              "extrapolate": {
                "label": "Ekstrapolasi",
                "description": "Isi celah di awal/akhir dengan memperpanjang verteks valid terdekat (default false; verteks yang tidak terisi dihitung sebagai gantinya)."
              }
            }
          },
          "calculate_motion_statistics": {
            "name": "Hitung statistik gerakan",
            "description": "Anotasi titik jejak berstempel waktu dengan statistik gerakan — kecepatan, percepatan, arah, jarak segmen dan kumulatif, waktu berlalu, dan penanda diam — dikelompokkan berdasarkan jejak dan diurutkan berdasarkan waktu, seperti ArcGIS Calculate Motion Statistics.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan berisi pengamatan berstempel waktu."
              },
              "track_field": {
                "label": "Field jejak",
                "description": "Field yang mengidentifikasi setiap jejak/objek bergerak."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: detik numerik atau stempel waktu ISO-8601."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor titik keluaran (atribut asli + field gerakan). Jika dihilangkan, disimpan di memori."
              },
              "window": {
                "label": "Jendela",
                "description": "Jumlah titik terakhir untuk 'avg_speed' yang dihaluskan (default 1 = sesaat)."
              },
              "idle_distance": {
                "label": "Jarak diam",
                "description": "Radius diam: sebuah titik dianggap diam jika objek bergerak tidak melebihi jarak ini selama idle_duration detik terakhir. Default 0 (deteksi diam nonaktif)."
              },
              "idle_duration": {
                "label": "Durasi diam",
                "description": "Jendela peninjauan ke belakang (detik) untuk deteksi diam. Default 60."
              }
            }
          },
          "calculate_polygon_main_angle": {
            "name": "Hitung sudut utama poligon",
            "description": "Tulis orientasi dominan setiap poligon (arah sisi panjang persegi pembatas berluas minimum, melalui rotating calipers) ke field sudut — seperti ArcGIS Calculate Polygon Main Angle. Orientasi vektor per poligon yang tidak dimiliki patch_orientation bawaan yang hanya untuk raster; menjadi masukan rotasi simbol/label.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon keluaran dengan field sudut yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "angle_field": {
                "label": "Field sudut",
                "description": "Nama field sudut yang ditulis (default 'MainAngle')."
              },
              "convention": {
                "label": "Konvensi",
                "description": "'arithmetic' (berlawanan arah jarum jam dari timur; default), 'geographic' (searah jarum jam dari utara), atau 'graphic' (searah jarum jam dari timur)."
              }
            }
          },
          "calculate_rates": {
            "name": "Hitung laju",
            "description": "Hitung laju yang dihaluskan dari field hitungan dan populasi (seperti ArcGIS Calculate Rates): laju kasar, Bayes empiris global Marshall, atau Bayes empiris spasial atas k tetangga terdekat — langkah stabilisasi standar sebelum analisis hot spot laju penyakit/kejahatan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon atau titik masukan dengan field jumlah dan populasi."
              },
              "count_field": {
                "label": "Field hitungan",
                "description": "Field yang menyimpan jumlah kejadian (pembilang)."
              },
              "population_field": {
                "label": "Field populasi",
                "description": "Field yang menyimpan populasi berisiko (penyebut)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer keluaran dengan field laju yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'crude', 'eb_global' (default), atau 'eb_spatial'."
              },
              "per": {
                "label": "Per (satuan laju)",
                "description": "Pengali laju, misalnya 100000 untuk per 100 ribu (default 100000)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Hanya eb_spatial: jumlah tetangga terdekat untuk laju referensi lokal (default 8)."
              }
            }
          },
          "calculate_transformation_errors": {
            "name": "Hitung galat transformasi",
            "description": "Sesuaikan transformasi kemiripan/affine/projektif dari tautan perpindahan dan laporkan galat residu setiap tautan beserta RMSE keseluruhan, sehingga titik kontrol yang buruk dapat ditemukan dan dihapus sebelum transformasi. Seperti ArcGIS Calculate Transformation Errors.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Garis tautan perpindahan: verteks pertama adalah titik sumber (dari), verteks terakhir titik target (ke)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran untuk tabel tautan dengan field residu yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'affine' (default, 6 parameter), 'similarity' (4), atau 'projective' (8)."
              },
              "keep_geometry": {
                "label": "Pertahankan geometri",
                "description": "Pertahankan geometri setiap tautan pada keluaran (default true). Setel false untuk tabel murni."
              }
            }
          },
          "calculate_transit_service_frequency": {
            "name": "Hitung frekuensi layanan transit",
            "description": "Frekuensi layanan transit GTFS berjendela: untuk tanggal layanan (melalui calendar/calendar_dates) dan jendela waktu, hitung perjalanan yang melayani setiap pemberhentian atau garis rute dan laporkan perjalanan per jam, seperti ArcGIS Calculate Transit Service Frequency.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path ke direktori feed GTFS yang telah diekstrak."
              },
              "target": {
                "label": "Target",
                "description": "'stops' (satu titik per perhentian, default) atau 'lines' (satu polyline per rute)."
              },
              "date": {
                "label": "Tanggal",
                "description": "Tanggal layanan YYYYMMDD, diselesaikan melalui calendar.txt/calendar_dates.txt. Jika dihilangkan, semua layanan dihitung."
              },
              "start_time": {
                "label": "Waktu mulai",
                "description": "Awal jendela HH:MM atau HH:MM:SS (waktu GTFS dapat melebihi 24:00). Jika dihilangkan, seluruh hari dihitung."
              },
              "duration_minutes": {
                "label": "Durasi (menit)",
                "description": "Panjang jendela dalam menit (digunakan dengan start_time; juga menetapkan penyebut per jam)."
              },
              "count": {
                "label": "Hitungan",
                "description": "'departures' (default) atau 'arrivals' — field stop-time mana yang dihitung."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "calculate_utm_zone": {
            "name": "Hitung zona UTM",
            "description": "Hitung zona UTM optimal dan kode EPSG WGS84 untuk setiap fitur dari bujur/lintang centroidnya, menambahkan field zona (1–60) dan EPSG (326##/327##) — untuk seri peta proyeksi adaptif, seperti ArcGIS Calculate UTM Zone. Matematika murni dengan pengecualian Norwegia/Svalbard; tanpa PROJ. Geometri dibaca sebagai derajat bujur/lintang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (tipe geometri apa pun) dalam koordinat geografis (derajat bujur/lintang, EPSG:4326)."
              },
              "zone_field": {
                "label": "Field zona",
                "description": "Nama field bilangan bulat yang menyimpan nomor zona UTM (1–60). Default 'utm_zone'."
              },
              "epsg_field": {
                "label": "Field EPSG",
                "description": "Nama field bilangan bulat yang menyimpan kode EPSG UTM WGS84 (326## utara, 327## selatan). Default 'utm_epsg'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "cartogram": {
            "name": "Kartogram",
            "description": "Distorsi poligon sehingga luas sebanding dengan nilai atribut: non-kontigu (skalakan setiap poligon terhadap centroidnya) atau Dorling (lingkaran proporsional dengan penghapusan tumpang tindih).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang nilainya harus sebanding dengan luas setiap fitur."
              },
              "method": {
                "label": "Metode",
                "description": "'non_contiguous' (default; skalakan poligon di tempatnya) atau 'dorling' (lingkaran proporsional)."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Iterasi penghapusan tumpang tindih Dorling (default 100). Diabaikan oleh non_contiguous."
              }
            }
          },
          "causal_inference_analysis": {
            "name": "Analisis inferensi kausal",
            "description": "Estimasi efek kausal dari perlakuan biner terhadap hasil melalui pencocokan skor kecenderungan, pembobotan probabilitas terbalik, atau penyesuaian regresi, dengan CI bootstrap berseed dan tabel keseimbangan kovariat per perancu sebelum/sesudah penyesuaian (seperti ArcGIS Causal Inference Analysis).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan."
              },
              "outcome_field": {
                "label": "Field hasil",
                "description": "Field hasil (terikat) numerik."
              },
              "treatment_field": {
                "label": "Field perlakuan",
                "description": "Field perlakuan biner (0/1, atau boolean). Perlakuan kontinu tidak didukung pada versi ini."
              },
              "confounding_fields": {
                "label": "Field perancu",
                "description": "Field pembaur numerik yang dipisahkan koma untuk disesuaikan."
              },
              "method": {
                "label": "Metode",
                "description": "'ps_matching' (default, pencocokan caliper tetangga terdekat pada skor propensitas), 'ipw' (pembobotan probabilitas terbalik terstabilkan), atau 'regression_adjustment' (hasil ~ perlakuan + pembaur)."
              },
              "add_spatial_confounders": {
                "label": "Tambah perancu spasial",
                "description": "Jika true, perluas himpunan pembaur dengan koordinat x/y setiap fitur ditambah rata-rata k tetangga terdekat dari setiap pembaur (default false)."
              },
              "balance_threshold": {
                "label": "Ambang keseimbangan",
                "description": "Ambang selisih rata-rata terstandardisasi untuk pemeriksaan keseimbangan pascapenyesuaian (default 0.1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (salinan masukan + kolom skor propensitas / bobot / id pencocokan). Jika dihilangkan, disimpan di memori."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed bilangan bulat untuk selang keyakinan bootstrap deterministik (default 42)."
              }
            }
          },
          "cell_position_statistics": {
            "name": "Statistik posisi sel",
            "description": "Statistik posisi dan peringkat per sel lintas tumpukan raster yang selaras (ArcGIS Highest Position, Lowest Position, Popularity, dan Rank): layer mana yang memuat nilai ekstrem, nilai yang muncul sejumlah kali tertentu, atau nilai terkecil ke-n. cell_statistics mereduksi tumpukan menjadi satu nilai dan tidak pernah dapat melaporkan layer asal nilai tersebut, dan find_argument_statistics bawaan bekerja sepanjang sumbu argumen satu raster multiband tanpa semantik pemilih popularitas/peringkat.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah satu layer) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran. Jika dihilangkan, disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'highest_position' (default), 'lowest_position', 'popularity', atau 'rank'."
              },
              "selector": {
                "label": "Selektor",
                "description": "Wajib untuk 'popularity' dan 'rank': path raster terkoregistrasi, atau angka konstanta, yang memberikan jumlah kemunculan per sel (popularity) atau peringkat berbasis 1 yang dipilih."
              },
              "ignore_nodata": {
                "label": "Abaikan nodata",
                "description": "Lewati pengamatan nodata per sel (default true). Jika false, pengamatan nodata apa pun membuat sel menjadi nodata."
              },
              "process_as_multiband": {
                "label": "Proses sebagai multiband",
                "description": "'single_band' (default): setiap band dari setiap masukan adalah satu layer dari satu tumpukan. 'multi_band': band i dari setiap masukan membentuk tumpukannya sendiri, menghasilkan hasil multiband."
              }
            }
          },
          "cell_records_to_sectors": {
            "name": "Rekaman sel ke sektor",
            "description": "Bangun geometri cakupan antena dari titik menara seluler: poligon baji atau garis sektor bisektor dari azimut, lebar berkas, dan radius per menara — seperti ArcGIS Cell Site Records To Feature Class / Generate Sector Lines.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik antena/menara masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "output_type": {
                "label": "Jenis keluaran",
                "description": "Geometri yang dihasilkan: 'wedge' (poligon cakupan, default) atau 'line' (garis sektor pembagi)."
              },
              "azimuth_field": {
                "label": "Field azimut",
                "description": "Field yang menyimpan azimut setiap antena (derajat kompas, 0 = utara, searah jarum jam). Kembali ke 'azimuth' jika tidak ada."
              },
              "beamwidth_field": {
                "label": "Field lebar berkas",
                "description": "Field yang menyimpan lebar berkas setiap antena dalam derajat. Kembali ke 'beamwidth' jika tidak ada."
              },
              "radius_field": {
                "label": "Field radius",
                "description": "Field yang menyimpan radius cakupan setiap antena dalam satuan CRS. Kembali ke 'radius' jika tidak ada."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Azimut default dalam derajat kompas jika tidak ada field yang diberikan / suatu nilai tidak ada. Default 0."
              },
              "beamwidth": {
                "label": "Lebar berkas",
                "description": "Lebar berkas default dalam derajat (0 < bw ≤ 360; ≥ 360 = omnidireksional). Default 65."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius cakupan default dalam satuan CRS (harus positif). Default 1000."
              },
              "segments": {
                "label": "Segmen",
                "description": "Jumlah segmen lurus yang digunakan untuk mendekati setiap busur sektor (≥ 1). Default 16."
              }
            }
          },
          "cell_statistics": {
            "name": "Statistik sel",
            "description": "Statistik per piksel lintas tumpukan raster yang selaras (seperti ArcGIS Cell Statistics): rata-rata, mayoritas, maksimum, median, minimum, minoritas, persentil, rentang, std, jumlah, atau variasi — pereduksi multi-raster lokal yang tidak disediakan sum_overlay/weighted_sum bawaan (hanya jumlah) dan alat ketetanggaan/zonal.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah satu layer) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster band tunggal keluaran berisi nilai hasil reduksi. Jika dihilangkan, disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'mean' (default), 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'range', 'std', 'sum', atau 'variety'."
              },
              "ignore_nodata": {
                "label": "Abaikan nodata",
                "description": "Lewati pengamatan nodata per sel (default true). Jika false, pengamatan nodata apa pun membuat sel menjadi nodata."
              },
              "percentile_value": {
                "label": "Nilai persentil",
                "description": "Persentil dalam [0, 100] untuk statistik 'percentile' (default 50 = median)."
              }
            }
          },
          "central_feature": {
            "name": "Fitur pusat / rata-rata arah linear",
            "description": "Fitur pusat (fitur masukan dengan total jarak terkecil ke semua fitur lain) atau rata-rata arah linear (arah rata-rata, varians sirkular, dan panjang rata-rata fitur garis) — dua anggota Measuring Geographic Distributions yang tidak dimiliki directional_distribution (ArcGIS Central Feature / Linear Directional Mean).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik untuk central_feature; garis untuk linear_directional_mean)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'central_feature' (default) atau 'linear_directional_mean'."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik opsional yang membobot setiap fitur (hanya central_feature)."
              },
              "case_field": {
                "label": "Field kasus",
                "description": "Field opsional untuk mengelompokkan fitur; satu hasil per nilai berbeda."
              },
              "distance": {
                "label": "Jarak",
                "description": "Metrik jarak untuk central_feature: 'euclidean' (default) atau 'manhattan'."
              },
              "orientation_only": {
                "label": "Hanya orientasi",
                "description": "Perlakukan garis sebagai tak berarah (orientasi mod 180°) untuk linear_directional_mean. Default false."
              }
            }
          },
          "change_point_detection": {
            "name": "Deteksi titik perubahan",
            "description": "Deteksi pergeseran mendadak dalam deret waktu di setiap lokasi kubus ruang-waktu H3 (seperti ArcGIS Change Point Detection): segmentasi biner pada biaya pergeseran rata-rata atau kemiringan dengan penalti berskala sensitivitas (atau jumlah titik perubahan tetap), melaporkan per sel jumlah perubahan, tahun perubahan terbesar, dan rata-rata segmen. Segmentasi temporal yang tidak dapat dilakukan change_vector_analysis dua tanggal dan uji Mann-Kendall monotonik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan berisi peristiwa berstempel waktu (bujur/lintang)."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: sebuah angka atau stempel waktu ISO-8601."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon H3 keluaran dengan atribut titik perubahan. Jika dihilangkan, disimpan di memori."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang diagregasi per bin (default: jumlah titik)."
              },
              "change_type": {
                "label": "Jenis perubahan",
                "description": "'mean' (pergeseran level; default) atau 'slope' (pergeseran tren)."
              },
              "method": {
                "label": "Metode",
                "description": "'auto' (berbasis penalti, default) atau 'defined' (tepat num_change_points)."
              },
              "num_change_points": {
                "label": "Jumlah titik perubahan",
                "description": "Metode defined: jumlah titik perubahan yang dicari per lokasi (default 1)."
              },
              "sensitivity": {
                "label": "Sensitivitas",
                "description": "Metode auto: skala penalti; lebih tinggi = lebih sedikit titik perubahan (default 1.0)."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Lebar satu langkah waktu dalam satuan time_field (default 1)."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 0..15 (default 7)."
              }
            }
          },
          "classification_accuracy_assessment": {
            "name": "Penilaian akurasi klasifikasi",
            "description": "Nilai raster terklasifikasi (atau titik yang sudah membawa kelas prediksi) terhadap titik referensi berlabel data lapangan, menghasilkan matriks konfusi, akurasi keseluruhan, akurasi produsen/pengguna per kelas, dan kappa Cohen — seperti ArcGIS Compute Confusion Matrix.",
            "params": {
              "points": {
                "label": "Titik",
                "description": "Layer titik referensi (penilaian akurasi) yang membawa field kelas kebenaran lapangan."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Atribut pada titik yang menyimpan label kelas kebenaran lapangan (referensi)."
              },
              "input": {
                "label": "Masukan",
                "description": "Raster terklasifikasi yang disampel pada setiap titik referensi (sel terdekat). Berikan ini ATAU 'classified_field'."
              },
              "classified_field": {
                "label": "Field terklasifikasi",
                "description": "Atribut pada titik yang sudah menyimpan kelas prediksi (peta), digunakan alih-alih menyampel raster. Berikan ini ATAU 'input'."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari raster terklasifikasi yang disampel (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran untuk titik referensi yang dianotasi dengan REF_CLASS, MAP_CLASS, CORRECT. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "collapse_dual_lines_to_centerline": {
            "name": "Ciutkan garis ganda ke garis tengah",
            "description": "Deteksi pasangan garis yang kira-kira sejajar dalam toleransi lebar (jalan raya ganda, casing jalan) dan ganti setiap pasangan dengan satu garis tengah, menyambungkan kembali persimpangan — seperti ArcGIS Collapse Dual Lines To Centerline.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor garis masukan (CRS terproyeksi; lebar dalam satuannya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "min_width": {
                "label": "Lebar minimum",
                "description": "Pemisahan minimum antara garis berpasangan, dalam satuan CRS (default 0)."
              },
              "max_width": {
                "label": "Lebar maksimum",
                "description": "Pemisahan maksimum antara garis berpasangan, dalam satuan CRS. Wajib (lebar peruntuhan)."
              },
              "attribute": {
                "label": "Atribut",
                "description": "Field opsional yang harus cocok agar dua garis berpasangan (misalnya nama atau kelas jalan)."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Interval densifikasi untuk pengujian keparalelan, dalam satuan CRS. Default: max_width / 2."
              },
              "min_overlap": {
                "label": "Tumpang tindih minimum",
                "description": "Fraksi minimum suatu garis yang harus sejajar dengan pasangannya agar berpasangan (0-1, default 0.5)."
              }
            }
          },
          "collapse_hydro_polygon": {
            "name": "Ciutkan poligon hidro",
            "description": "Ciutkan poligon air sempit menjadi garis tengah sambil mempertahankan ruas lebar sebagai poligon (seperti ArcGIS Collapse Hydro Polygon): telusuri garis tengah setiap poligon sepanjang sumbu utamanya melalui titik tengah penampang tegak lurus, ukur lebar lokal, dan ciutkan di mana lebar median berada pada atau di bawah ambang. Generalisasi poligon→garis berambang lebar yang tidak dilakukan collapse_dual_lines_to_centerline (casing garis) dan river_centerlines (raster).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon air masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer garis tengah keluaran untuk poligon yang diruntuhkan (sempit). Jika dihilangkan, disimpan di memori."
              },
              "collapse_width": {
                "label": "Lebar ciut",
                "description": "Poligon yang lebar mediannya sama atau di bawah nilai ini diruntuhkan menjadi garis tengah."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Jarak antar stasiun penampang sepanjang sumbu (default: collapse_width / 2)."
              },
              "min_length": {
                "label": "Panjang minimum",
                "description": "Buang garis tengah hasil peruntuhan yang lebih pendek dari nilai ini (default 0)."
              },
              "retained": {
                "label": "Dipertahankan",
                "description": "Layer poligon keluaran opsional untuk ruas lebar (tidak diruntuhkan)."
              }
            }
          },
          "collapse_road_detail": {
            "name": "Ciutkan detail jalan",
            "description": "Ciutkan loop dan jog jalan kecil (bundaran, dogbone, jog offset) di bawah ambang diameter menjadi koneksi tembus tunggal untuk tampilan skala kecil, dengan mempertahankan konektivitas jaringan — seperti ArcGIS Collapse Road Detail.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor jalan (garis) masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "collapse_distance": {
                "label": "Jarak ciut",
                "description": "Diameter detail maksimum yang diruntuhkan. Lingkaran/belokan yang diameter pembatasnya di bawah nilai ini (meter untuk CRS geografis, satuan CRS jika tidak) diruntuhkan; yang lebih besar dipertahankan."
              },
              "road_class_field": {
                "label": "Field kelas jalan",
                "description": "Field kelas jalan opsional. Jika disetel, hanya lingkaran yang semua jalan batasnya berbagi nilai kelas yang sama yang diruntuhkan (persimpangan antar kelas berbeda dipertahankan)."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Jarak yang membuat titik ujung jalan diperlakukan sebagai persimpangan yang sama. Default 1e-6."
              }
            }
          },
          "collect_events": {
            "name": "Kumpulkan kejadian",
            "description": "Ciutkan titik insiden yang berimpit menjadi lokasi unik, masing-masing membawa hitungan ICOUNT dari kejadian di sana, seperti ArcGIS Collect Events.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (Point atau MultiPoint)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi penjepretan dalam satuan peta; titik yang koordinatnya membulat ke sel yang sama diperlakukan sebagai berimpit (default 1e-8, yaitu praktis eksak)."
              }
            }
          },
          "colocation_analysis": {
            "name": "Analisis kolokasi",
            "description": "Kuosien kolokasi lokal (Leslie & Kronenfeld) yang mengukur apakah titik kategori A secara tidak proporsional ditemukan di antara tetangga kategori B, dengan nilai p uji permutasi berseed — seperti ArcGIS Colocation Analysis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan dengan field kategori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (salinan masukan dengan field kolokasi). Jika dihilangkan, disimpan di memori."
              },
              "category_field": {
                "label": "Field kategori",
                "description": "Field yang menyimpan kategori setiap titik."
              },
              "category_a": {
                "label": "Kategori A",
                "description": "Kategori fokal (A): titik-titik yang kolokasinya dengan B diukur."
              },
              "category_b": {
                "label": "Kategori B",
                "description": "Kategori tetangga (B): titik-titik yang menjadi pembanding A."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah tetangga terdekat k (default 8)."
              },
              "weight": {
                "label": "Bobot",
                "description": "Pembobotan tetangga: 'gaussian' (peluruhan jarak, default) atau 'uniform'."
              },
              "permutations": {
                "label": "Permutasi",
                "description": "Jumlah permutasi label untuk uji signifikansi (default 99; 0 menonaktifkan)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG permutasi (default 1), agar hasil dapat direproduksi."
              }
            }
          },
          "color_polygons": {
            "name": "Warnai poligon",
            "description": "Tetapkan indeks warna bilangan bulat kecil pada setiap poligon sehingga tidak ada dua poligon bersebelahan yang berbagi nilai (seperti ArcGIS Calculate Color Theorem Field) — gaya koroplet aman kebersebelahan melalui pewarnaan graf DSATUR atas kontiguitas tepi bersama (atau sudut bersama).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon keluaran dengan field warna yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "field": {
                "label": "Field",
                "description": "Nama field indeks warna yang ditulis (default 'color_id')."
              },
              "adjacency": {
                "label": "Kebersebelahan",
                "description": "'edge' (rook, batas bersama; default) atau 'edge_or_corner' (queen, batas atau verteks bersama)."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Ukuran grid untuk menjepret verteks sebelum mencocokkan batas (default 0 = eksak)."
              }
            }
          },
          "combine": {
            "name": "Gabungkan",
            "description": "Tetapkan ID zona unik untuk setiap kombinasi unik nilai lintas dua atau lebih raster kategorikal yang terkoregistrasi, ditambah tabel atribut nilai (id, hitungan, satu kolom per masukan).",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar yang dipisahkan koma berisi >=2 raster kategorikal/bilangan bulat terkoregistrasi untuk digabungkan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional untuk grid id kondisi unik. Jika dihilangkan, disimpan di memori."
              },
              "csv_output": {
                "label": "Keluaran CSV",
                "description": "Path CSV opsional untuk tabel atribut nilai (nilai, jumlah, satu kolom per raster masukan)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari setiap raster masukan. Default 1."
              }
            }
          },
          "compare_spatial_weights": {
            "name": "Bandingkan bobot spasial",
            "description": "Peringkatkan konseptualisasi bobot spasial kandidat (KNN, pita jarak tetap, kontiguitas tepi / tepi+sudut, Delaunay) berdasarkan seberapa kuat masing-masing menangkap pengelompokan spasial satu atau lebih field analisis, menggunakan Moran's I global terstandarisasi baris dengan skor z dan nilai p dua sisi — seperti ArcGIS Compare Neighborhood Conceptualizations. Menghasilkan tabel perbandingan berperingkat dan metode terbaik tunggal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik/garis/poligon; ketetanggaan memerlukan poligon)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel perbandingan keluaran — sebuah CSV (ekstensi .csv) atau tabel vektor tanpa geometri. Jika dihilangkan, disimpan di memori."
              },
              "input_fields": {
                "label": "Field masukan",
                "description": "Daftar nama field numerik yang dipisahkan koma untuk dianalisis pengelompokan spasialnya."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field yang menyimpan id unik setiap fitur (diterima untuk kompatibilitas; tidak diperlukan untuk menghitung Moran's I)."
              },
              "methods": {
                "label": "Metode",
                "description": "Konseptualisasi kandidat yang dipisahkan koma dari: knn, fixed_distance_band, contiguity_edges, contiguity_edges_corners, delaunay. Default 'knn,contiguity_edges,contiguity_edges_corners'. Metode yang tidak berlaku untuk geometri (atau menghasilkan galat) dilewati."
              },
              "number_of_neighbors": {
                "label": "Jumlah tetangga",
                "description": "Jumlah tetangga terdekat k untuk metode knn. Default 8."
              },
              "threshold_distance": {
                "label": "Jarak ambang",
                "description": "Batas pita jarak dalam satuan peta. Diperlukan hanya jika fixed_distance_band termasuk di antara metode."
              }
            }
          },
          "composite_bands": {
            "name": "Komposit band",
            "description": "Menumpuk beberapa raster band tunggal menjadi satu raster multiband, sesuai urutan yang diberikan (ArcGIS Composite Bands). create_colour_composite bawaan tetap pada tiga band RGB, sehingga tidak ada cara untuk menyusun masukan N band yang dibutuhkan band_collection_statistics, principal_component_analysis, spectral_index, dan rangkaian OBIA.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path raster yang dipisahkan koma atau titik koma, dalam urutan band keluaran. Minimal satu."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang diambil dari setiap masukan jika suatu masukan sendiri bersifat multiband (default 1)."
              },
              "nodata_policy": {
                "label": "Kebijakan nodata",
                "description": "'any' (default): sebuah sel menjadi nodata jika ada band yang nodata. 'all': hanya jika setiap band nodata."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Nilai nodata untuk keluaran (default: nodata masukan pertama)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster multiband keluaran. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "compute_accuracy_for_object_detection": {
            "name": "Hitung akurasi deteksi objek",
            "description": "Nilai fitur terdeteksi terhadap data lapangan menggunakan pencocokan IoU, melaporkan presisi, recall, average precision per kelas, dan mAP keseluruhan, seperti ArcGIS Compute Accuracy For Object Detection.",
            "params": {
              "detected": {
                "label": "Terdeteksi",
                "description": "Fitur terdeteksi (poligon atau kotak pembatas)."
              },
              "ground_truth": {
                "label": "Data lapangan",
                "description": "Fitur referensi sebagai pembanding penilaian."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel akurasi keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "detected_class_field": {
                "label": "Field kelas terdeteksi",
                "description": "Field label kelas pada deteksi. Hilangkan untuk menilai semuanya sebagai satu kelas."
              },
              "ground_truth_class_field": {
                "label": "Field kelas data lapangan",
                "description": "Field label kelas pada kebenaran lapangan. Hilangkan untuk menilai semuanya sebagai satu kelas."
              },
              "confidence_field": {
                "label": "Field keyakinan",
                "description": "Field skor keyakinan pada deteksi, digunakan untuk memeringkat presisi rata-rata. Tanpanya, deteksi dinilai dalam urutan masukan."
              },
              "min_iou": {
                "label": "IoU minimum",
                "description": "Nilai minimum irisan terhadap gabungan agar sebuah deteksi dihitung sebagai kecocokan (default 0.5)."
              }
            }
          },
          "compute_sar_indices": {
            "name": "Hitung indeks SAR",
            "description": "Menurunkan indeks SAR polarimetrik — RVI (Radar Vegetation Index), RFDI (Radar Forest Degradation Index), CSI (Canopy Structure Index), dan DPSVI (Dual-Pol SAR Vegetation Index) — dari hamburan balik multi-polarisasi (ArcGIS Compute SAR Indices). spectral_index hanya mencakup matematika band optik: rumus dan konvensi bandnya berada di domain reflektansi dan tidak mengenal kanal polarisasi, sehingga rantai SAR katalog (multilook, sar_coherence, filter speckle) saat ini tidak memiliki titik akhir analisis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster SAR terkalibrasi multipolarisasi (satu band per polarisasi)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster indeks keluaran. Jika dihilangkan, disimpan di memori."
              },
              "index": {
                "label": "Indeks",
                "description": "'rvi' (default), 'rfdi', 'csi', atau 'dpsvi'."
              },
              "polarization_bands": {
                "label": "Band polarisasi",
                "description": "Pemetaan band berbasis 1, misalnya 'vv=1,vh=2' atau 'hh=1,hv=2,vv=3'. Default berdasarkan jumlah band: 2 band = 'vv=1,vh=2', 3+ band = 'hh=1,hv=2,vv=3'."
              },
              "input_units": {
                "label": "Satuan masukan",
                "description": "'linear' (default) atau 'db'. Masukan dB dikonversi ke daya linear sebelum aritmetika rasio, karena rasio desibel tidak bermakna."
              }
            }
          },
          "construct_sight_lines": {
            "name": "Bangun garis pandang",
            "description": "Bangun fitur garis pandang antara titik pengamat dan fitur target, dengan offset tinggi pengamat/target, pengambilan sampel sepanjang target linear dan areal, field azimut dan sudut vertikal opsional, serta jarak 2D atau 3D. Seperti ArcGIS Construct Sight Lines.",
            "params": {
              "observers": {
                "label": "Pengamat",
                "description": "Fitur titik pengamat."
              },
              "targets": {
                "label": "Target",
                "description": "Fitur titik, garis, atau poligon target."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path garis pandang keluaran. Jika dihilangkan, disimpan di memori."
              },
              "observer_height_field": {
                "label": "Field tinggi pengamat",
                "description": "Field opsional yang memberikan offset tinggi setiap pengamat (ditambahkan ke Z-nya)."
              },
              "target_height_field": {
                "label": "Field tinggi target",
                "description": "Field opsional yang memberikan offset tinggi setiap target (ditambahkan ke Z-nya)."
              },
              "join_field": {
                "label": "Field gabung",
                "description": "Field opsional yang ada pada kedua masukan; hanya pengamat dan target yang berbagi nilai yang dipasangkan. Tanpanya, setiap pengamat dipasangkan dengan setiap target."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Jarak dalam satuan peta untuk titik target yang dihasilkan sepanjang batas garis/poligon (default: satu titik per verteks)."
              },
              "output_direction": {
                "label": "Keluaran arah",
                "description": "Tambahkan field AZIMUTH dan VERT_ANGLE (default false)."
              },
              "distance_method": {
                "label": "Metode jarak",
                "description": "'2d' (default) atau '3d' untuk field DISTANCE."
              }
            }
          },
          "contiguous_cartogram": {
            "name": "Kartogram kontigu",
            "description": "Kartogram penyetara kerapatan (difusi Gastner-Newman): mendistorsi luas poligon sebanding dengan atribut sambil menjaga peta sebagai lembar terhubung dengan batas bersama (ArcGIS Generate Contiguous Cartogram). Alat cartogram yang sudah ada hanya mengimplementasikan metode non-kontigu dan Dorling, yang keduanya merusak kebersebelahan, dan dokumentasi modulnya sendiri menunda bentuk kontigu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon yang bersebelahan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Atribut numerik positif yang totalnya menjadi acuan proporsi luas."
              },
              "grid_size": {
                "label": "Ukuran grid",
                "description": "Resolusi grid kerapatan; harus berupa pangkat dua (default 256). Pengatur akurasi/biaya yang paling menentukan."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Langkah difusi (default 20). Lebih banyak langkah menyetarakan kerapatan lebih jauh dengan biaya distorsi yang lebih besar."
              },
              "blur": {
                "label": "Pengaburan",
                "description": "Prapenghalusan Gaussian pada medan kerapatan, dalam sel grid (default 0.5). Mencegah distorsi ekstrem yang dihasilkan diskontinuitas kerapatan yang tajam."
              },
              "sea_density": {
                "label": "Kerapatan laut",
                "description": "Kerapatan di luar area studi: 'mean' (default) atau 'min'. Ini mengubah hasil secara nyata di tepi peta."
              },
              "densify_spacing": {
                "label": "Jarak perapatan",
                "description": "Panjang segmen sisi maksimum dalam sel grid sebelum verteks disisipkan (default 1.0). Jika tidak, batas lurus panjang akan terpisah dari tetangganya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon keluaran dengan verteks yang tergeser dan atribut asli. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "contour_list": {
            "name": "Daftar kontur",
            "description": "Menghasilkan kontur pada daftar nilai eksplisit alih-alih interval tetap, sebagai polyline berantai atau poligon terisi, masing-masing berlabel tingkatnya (ArcGIS Contour List). contours_from_raster bawaan hanya menerima 'interval' dan 'base', sehingga deret tidak beraturan yang dipakai peta sungguhan — langkah kedalaman IHO, tahap periode ulang banjir, batas kelas yang dipublikasikan — membutuhkan satu eksekusi per nilai dan penggabungan, dan tetap tidak dapat dihasilkan sebagai satu layer berlabel tingkat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster permukaan masukan."
              },
              "contour_values": {
                "label": "Nilai kontur",
                "description": "Daftar aras kontur yang dipisahkan koma, dalam satuan z raster itu sendiri."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer kontur keluaran. Jika dihilangkan, disimpan di memori."
              },
              "geometry_type": {
                "label": "Jenis geometri",
                "description": "'polyline' (default) untuk garis kontur, atau 'polygon' untuk wilayah terisi pada atau di atas setiap aras."
              },
              "min_length": {
                "label": "Panjang minimum",
                "description": "Buang garis kontur yang lebih pendek dari nilai ini, dalam satuan peta, yang menghapus bintik-bintik yang dihasilkan permukaan bernoise."
              },
              "close_rings": {
                "label": "Tutup cincin",
                "description": "Ulangi verteks pertama pada kontur yang menutup pada dirinya sendiri (default true)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dikonturkan (default 1)."
              }
            }
          },
          "contour_with_barriers": {
            "name": "Kontur dengan penghalang",
            "description": "Telusuri garis kontur iso-nilai suatu permukaan yang berakhir pada fitur penghalang alih-alih melintasinya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster permukaan kontinu masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer vektor penghalang opsional (garis atau poligon). Kontur tidak akan melintasi fitur ini."
              },
              "interval": {
                "label": "Interval",
                "description": "Interval kontur dalam satuan permukaan. Aras adalah base + k*interval dalam rentang data. Diabaikan jika 'levels' diberikan."
              },
              "base": {
                "label": "Basis",
                "description": "Nilai dasar tempat interval diukur (default 0)."
              },
              "levels": {
                "label": "Tingkat",
                "description": "Nilai kontur eksplisit yang dipisahkan koma (misalnya \"10,20,30\"). Menggantikan interval/base."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "convert_coordinate_notation": {
            "name": "Konversi notasi koordinat",
            "description": "Konversi koordinat setiap fitur antar notasi — derajat desimal (DD), derajat-menit-detik (DMS), derajat-menit desimal (DDM), UTM, dan MGRS/USNG — menulis field baru dalam notasi target, seperti ArcGIS Convert Coordinate Notation. Matematika grid murni (Mercator transversal Krüger + penghurufan MGRS pada WGS84); tanpa PROJ.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik (atau tabel) masukan."
              },
              "input_notation": {
                "label": "Notasi masukan",
                "description": "Notasi koordinat masukan: DD, DMS, DDM, UTM, atau MGRS."
              },
              "output_notation": {
                "label": "Notasi keluaran",
                "description": "Notasi target yang ditulis: DD, DMS, DDM, UTM, atau MGRS."
              },
              "coord_field": {
                "label": "Field koordinat",
                "description": "Field yang menyimpan string koordinat masukan. Jika dihilangkan, geometri titik digunakan (hanya valid jika input_notation=DD; geometri x=bujur, y=lintang)."
              },
              "output_field": {
                "label": "Field keluaran",
                "description": "Nama field yang ditulis. Default: notasi keluaran dalam huruf kecil (misalnya 'utm')."
              },
              "precision": {
                "label": "Presisi",
                "description": "Digit MGRS per sumbu (1=10km … 5=1m, hingga 9). Default 5. Diabaikan oleh notasi lain."
              },
              "update_geometry": {
                "label": "Perbarui geometri",
                "description": "Jika true, bangun ulang geometri setiap fitur sebagai titik bujur/lintang dalam EPSG:4326 dari koordinat yang diurai. Default false (pertahankan geometri/CRS masukan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "convert_sar_units": {
            "name": "Konversi satuan SAR",
            "description": "Mengonversi raster SAR antar representasi amplitudo, intensitas, daya linear, desibel, kompleks-ke-intensitas, dan fase terbuka-ke-perpindahan (ArcGIS Convert SAR Units). raster_calculator dapat mengevaluasi aritmetikanya tetapi tidak membawa semantik atau pengaman — ia mengembalikan -inf untuk sel bernilai nol pada konversi log, dan tidak ada di katalog yang mencatat satuan raster SAR, sehingga filter speckle dan indeks rasio sering diterapkan pada representasi yang salah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster SAR masukan. Untuk 'complex_to_intensity' ini adalah raster I/Q dua band (konvensi multilook / sar_coherence)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran. Jika dihilangkan, disimpan di memori."
              },
              "conversion": {
                "label": "Konversi",
                "description": "'linear_to_db', 'db_to_linear', 'amplitude_to_intensity', 'intensity_to_amplitude', 'complex_to_intensity', atau 'phase_to_displacement'."
              },
              "wavelength": {
                "label": "Panjang gelombang",
                "description": "Panjang gelombang radar dalam meter untuk 'phase_to_displacement' (default 0.05546576, Sentinel-1 band C)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1). Diabaikan untuk 'complex_to_intensity', yang selalu membaca band 1 dan 2 sebagai I dan Q."
              }
            }
          },
          "coregister_rasters": {
            "name": "Koregistrasi raster",
            "description": "Secara otomatis menyelaraskan raster sekunder ke referensi melalui korelasi silang ternormalisasi pada grid petak, penghalusan puncak subpiksel, penyesuaian transformasi kuadrat terkecil dengan pemangkasan pencilan, dan resampling (ArcGIS Apply Coregistration). Ini adalah prasyarat yang hilang untuk seluruh rantai InSAR katalog: sar_coherence, flatten_interferogram, dan goldstein_phase_filter semuanya membutuhkan masukan terkoregistrasi dan tidak ada yang menghasilkannya. georeference_raster_from_control_points membutuhkan titik kontrol pilihan manual, image_correlation hanya menilai kemiripan, dan warp_raster membutuhkan transformasi yang disediakan.",
            "params": {
              "reference": {
                "label": "Referensi",
                "description": "Raster referensi. Keluaran ditulis pada grid raster ini."
              },
              "secondary": {
                "label": "Sekunder",
                "description": "Raster yang diselaraskan ke referensi. Semua band-nya diresampling."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster sekunder teresampling keluaran pada grid referensi. Jika dihilangkan, disimpan di memori."
              },
              "tie_points": {
                "label": "Titik ikat",
                "description": "Layer titik keluaran berisi titik ikat yang diterima beserta pergeseran dan korelasi terukurnya. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang digunakan untuk pencocokan (default 1). Masukan dua band dicocokkan pada magnitudo kompleksnya kecuali nilai ini diberikan."
              },
              "transform": {
                "label": "Transformasi",
                "description": "'translation', 'affine' (default), atau 'polynomial2'."
              },
              "tile_size": {
                "label": "Ukuran petak",
                "description": "Sisi setiap petak pencocokan dalam sel (default 32)."
              },
              "grid_size": {
                "label": "Ukuran grid",
                "description": "Jumlah petak per sumbu (default 8, sehingga 64 petak)."
              },
              "max_shift": {
                "label": "Pergeseran maksimum",
                "description": "Setengah lebar jendela pencarian bilangan bulat dalam sel (default 8)."
              },
              "min_correlation": {
                "label": "Korelasi minimum",
                "description": "Tolak titik ikat yang korelasi ternormalisasi puncaknya di bawah nilai ini (default 0.3)."
              },
              "outlier_sigma": {
                "label": "Sigma pencilan",
                "description": "Pangkas titik ikat yang residu penyesuaiannya melebihi sekian simpangan baku ini (default 3.0). Setel 0 untuk menonaktifkan pemangkasan."
              },
              "resample": {
                "label": "Resampling",
                "description": "'bilinear' (default) atau 'nearest'."
              }
            }
          },
          "corridor": {
            "name": "Koridor",
            "description": "Koridor biaya terkecil antara dua permukaan biaya terakumulasi (ArcGIS Corridor): jumlahkan dua raster jarak biaya menjadi permukaan koridor yang minimumnya adalah jalur biaya terkecil, lalu secara opsional terapkan ambang ke pita mendekati optimal. Mode langsung (dua raster biaya) atau mode praktis (satu raster friksi + dua raster sumber).",
            "params": {
              "cost1": {
                "label": "Biaya 1",
                "description": "Raster biaya terakumulasi pertama (dari sumber A). Mode langsung."
              },
              "cost2": {
                "label": "Biaya 2",
                "description": "Raster biaya terakumulasi kedua (dari sumber B). Mode langsung."
              },
              "cost": {
                "label": "Biaya",
                "description": "Raster gesekan/biaya lintasan. Mode praktis (dengan source1/source2)."
              },
              "source1": {
                "label": "Sumber 1",
                "description": "Raster sumber pertama (sel positif adalah sumber). Mode praktis."
              },
              "source2": {
                "label": "Sumber 2",
                "description": "Raster sumber kedua (sel positif adalah sumber). Mode praktis."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster koridor keluaran. Jika dihilangkan, disimpan di memori."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Pertahankan hanya sel yang biaya koridornya sama atau di bawah nilai absolut ini (sisanya dimasker menjadi nodata)."
              },
              "percent": {
                "label": "Persen",
                "description": "Pertahankan hanya sel dalam sekian persen ini di atas biaya koridor minimum (misalnya 5 = dalam 5%). Diabaikan jika 'threshold' disetel."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari raster masukan. Default 1."
              }
            }
          },
          "cost_back_link": {
            "name": "Tautan balik biaya",
            "description": "Menghasilkan raster pengkodean arah tetangga 0-8 yang, untuk setiap sel, menunjukkan langkah berikutnya sepanjang rute biaya terkecil kembali ke sumber terdekat, ditambah permukaan biaya terakumulasi (ArcGIS Cost Back Link dan Path Back Link). cost_distance, cost_pathway, dan cost_allocation semuanya menghitung ini secara internal lalu membuangnya, sehingga menelusuri ulang N tujuan saat ini membutuhkan N penyelesaian biaya penuh alih-alih satu lintasan akumulasi ditambah N penelusuran murah.",
            "params": {
              "source": {
                "label": "Sumber",
                "description": "Sel sumber: sebuah raster (setiap sel bukan nol dan bukan nodata adalah sumber) atau layer vektor titik/multititik."
              },
              "cost": {
                "label": "Biaya",
                "description": "Raster biaya per satuan jarak. Opsional jika 'surface' diberikan (maka biaya default-nya 1 di mana-mana, menghasilkan jarak permukaan murni)."
              },
              "surface": {
                "label": "Permukaan",
                "description": "Raster elevasi opsional yang mengaktifkan varian Path Back Link: jarak horizontal digantikan oleh jarak permukaan sebenarnya sqrt(dxy^2 + dz^2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster backlink keluaran (0 = sumber, 1-8 = arah menuju sumber, 1 = timur berlawanan arah jarum jam). Jika dihilangkan, disimpan di memori."
              },
              "out_distance": {
                "label": "Keluaran jarak",
                "description": "Raster biaya terakumulasi. Selalu dihasilkan; kembali ke handle dalam memori jika tidak ada path yang diberikan."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Batas akumulasi opsional: sel yang biayanya melebihi nilai ini dibiarkan tidak terjangkau."
              }
            }
          },
          "cost_connectivity": {
            "name": "Konektivitas biaya",
            "description": "Jaringan biaya terkecil yang menghubungkan beberapa lokasi di atas permukaan biaya (seperti ArcGIS Cost Connectivity / Optimal Region Connections): alokasi Dijkstra multi-sumber, jalur biaya terkecil berpasangan antar wilayah bersebelahan, dan pohon rentang minimumnya — jaringan biaya terkecil yang tidak dapat dibangun cost_distance dan path_distance bawaan yang bersumber tunggal.",
            "params": {
              "sources": {
                "label": "Sumber",
                "description": "Layer titik lokasi/wilayah yang akan dihubungkan."
              },
              "cost": {
                "label": "Biaya",
                "description": "Raster biaya/gesekan (biaya penelusuran per sel; sel nodata adalah penghalang)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer polyline keluaran berisi jalur biaya terkecil. Jika dihilangkan, disimpan di memori."
              },
              "connections": {
                "label": "Koneksi",
                "description": "'mst' (pohon rentang minimum yang menghubungkan semua lokasi; default) atau 'all_neighbors' (setiap jalur wilayah bersebelahan)."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field opsional untuk melabeli sumber (default: indeks berbasis 1)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari raster biaya (default 1)."
              }
            }
          },
          "count_overlapping_features": {
            "name": "Hitung fitur tumpang tindih",
            "description": "Ratakan poligon yang tumpang tindih menjadi wilayah terpisah, masing-masing beratribut jumlah (dan opsional ID) fitur masukan yang menutupinya, seperti ArcGIS Count Overlapping Features.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan (fitur boleh tumpang tindih)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran (driver dari ekstensi) dengan field 'count'. Jika dihilangkan, disimpan di memori."
              },
              "min_count": {
                "label": "Hitungan minimum",
                "description": "Pertahankan hanya wilayah yang tertutupi setidaknya sekian fitur ini (default 1; gunakan 2 untuk hanya tumpang tindih)."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field opsional yang mengidentifikasi setiap fitur masukan (digunakan dalam kolom ids / laporan). Default: indeks fitur."
              },
              "report_ids": {
                "label": "ID laporan",
                "description": "Path CSV opsional untuk tabel penggabungan region_id,feature_id (satu baris per fitur yang menutupi)."
              }
            }
          },
          "create_accuracy_assessment_points": {
            "name": "Buat titik penilaian akurasi",
            "description": "Menghasilkan titik referensi terdistribusi acak yang distratifikasi berdasarkan kelas raster terklasifikasi atau layer poligon, terisi awal dengan kelas peta dan siap untuk pelabelan data lapangan (ArcGIS Create Accuracy Assessment Points). classification_accuracy_assessment memakai titik semacam itu tetapi tidak ada yang menghasilkannya, dan create_spatial_sampling_locations menstratifikasi berdasarkan fitur atau field poligon alih-alih kelas raster dan tidak memiliki alokasi tersetarakan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster terklasifikasi, atau layer poligon terklasifikasi dengan 'class_field'."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Atribut kelas, wajib jika 'input' adalah layer vektor. Diabaikan untuk masukan raster, yang menggunakan nilai sel."
              },
              "num_points": {
                "label": "Jumlah titik",
                "description": "Jumlah total titik referensi (default 500)."
              },
              "sampling_strategy": {
                "label": "Strategi pengambilan sampel",
                "description": "Salah satu dari 'stratified_random' (default, alokasi proporsional terhadap luas kelas), 'equalized_stratified' (jumlah sama per kelas), 'random' (abaikan kelas)."
              },
              "min_points_per_class": {
                "label": "Titik minimum per kelas",
                "description": "Batas bawah yang diterapkan pada 'stratified_random' agar kelas langka tidak terbuang (default 1)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari masukan raster (default 1)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG deterministik (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer titik keluaran dengan CLASSVALUE (kelas peta), GrndTruth (-1 hingga dikumpulkan), dan Stratum. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "create_cartographic_partitions": {
            "name": "Buat partisi kartografis",
            "description": "Hasilkan poligon partisi adaptif yang tidak tumpang tindih yang masing-masing memuat kira-kira sejumlah fitur target (lebih rapat di mana data mengelompok) sehingga pekerjaan generalisasi / masking besar dapat dipetak dengan aman cakupannya — padanan Rust murni dari ArcGIS Create Cartographic Partitions.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (geometri apa pun). Setiap fitur direduksi menjadi titik representatif dan ditetapkan ke satu partisi."
              },
              "feature_count": {
                "label": "Jumlah fitur",
                "description": "Jumlah fitur maksimum target per partisi. Sebuah sel dipisah selama masih menampung lebih dari sekian fitur ini. Default 1000."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor poligon partisi keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "create_overpass": {
            "name": "Buat jalan layang",
            "description": "Bangun poligon masker knockout (dan garis dekorasi tanda sayap opsional) di mana garis 'atas' melintasi garis 'bawah', sehingga garis bawah dimasker pada persilangan.",
            "params": {
              "above": {
                "label": "Di atas",
                "description": "Vektor garis berisi fitur yang lewat DI ATAS persilangan (masker diorientasikan sepanjang garis ini). Format terdeteksi otomatis, atau handle dalam memori."
              },
              "below": {
                "label": "Di bawah",
                "description": "Vektor garis berisi fitur yang dimasker DI BAWAH persilangan (garis yang akan dihilangkan). Format terdeteksi otomatis, atau handle dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk poligon masker (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "output_decoration": {
                "label": "Keluaran dekorasi",
                "description": "Path keluaran opsional untuk garis dekorasi tanda sayap. Jika dihilangkan, disimpan di memori (tetap dikembalikan sebagai 'output_decoration')."
              },
              "margin_along": {
                "label": "Margin memanjang",
                "description": "Setengah panjang setiap masker sepanjang garis atas, dalam satuan CRS (panjang masker adalah 2x nilai ini). Default 1.0."
              },
              "margin_across": {
                "label": "Margin melintang",
                "description": "Setengah lebar setiap masker melintang garis atas, dalam satuan CRS (lebar masker adalah 2x nilai ini). Default 1.0."
              },
              "wing_type": {
                "label": "Jenis sayap",
                "description": "Gaya dekorasi: 'none', 'perpendicular' (default; sebuah tanda melintang di setiap ujung masker) atau 'parallel' (garis selubung sepanjang setiap sisi)."
              }
            }
          },
          "create_routes": {
            "name": "Buat rute",
            "description": "Lebur fitur garis berdasarkan field pengenal rute, urutkan segmennya menjadi satu polyline per rute, dan tetapkan ukuran linear (nilai m) dari panjang geometris atau dari field ukuran awal/akhir.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor garis masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Atribut yang mengidentifikasi setiap rute; garis masukan dikelompokkan berdasarkan atribut ini, satu rute keluaran per nilai berbeda."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor rute keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "measure_source": {
                "label": "Sumber ukuran",
                "description": "Cara ukuran ditetapkan: LENGTH (0..panjang geometris), ONE_FIELD (mulai dari suatu field, akhir = awal + panjang), atau TWO_FIELDS (awal/akhir dari field, diinterpolasi). Default LENGTH."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field numerik yang memberikan ukuran awal setiap rute (digunakan oleh ONE_FIELD dan TWO_FIELDS). Dibaca dari segmen pertama rute."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field numerik yang memberikan ukuran akhir setiap rute (digunakan oleh TWO_FIELDS). Dibaca dari segmen pertama rute."
              },
              "measure_factor": {
                "label": "Faktor ukuran",
                "description": "Pengali yang diterapkan pada ukuran alami (berbasis panjang), misalnya 0.001 untuk mengubah meter menjadi kilometer. Default 1.0."
              },
              "measure_offset": {
                "label": "Offset ukuran",
                "description": "Nilai yang ditambahkan ke setiap ukuran sepanjang rute (menggeser seluruh nilai m rute). Default 0.0."
              },
              "ignore_gaps": {
                "label": "Abaikan celah",
                "description": "Untuk LENGTH/ONE_FIELD, kecualikan lompatan lurus antara segmen terpisah dari ukuran terakumulasi agar celah tidak menggelembungkan jarak. Default false."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Titik ujung dalam jarak ini (satuan CRS) diperlakukan sebagai berimpit saat menjahit segmen. Default 1e-6."
              }
            }
          },
          "create_spatial_sampling_locations": {
            "name": "Buat lokasi pengambilan sampel spasial",
            "description": "Hasilkan titik sampel di atas area studi poligon dengan desain acak sederhana, terstratifikasi, sistematis (persegi/heksagon/segitiga), atau klaster, dengan keacakan berseed yang dapat direproduksi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon area studi (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'simple_random' (default), 'stratified', 'systematic', atau 'cluster'."
              },
              "num_samples": {
                "label": "Jumlah sampel",
                "description": "Jumlah total titik sampel untuk simple_random, stratified, dan cluster. Default 100."
              },
              "strata_field": {
                "label": "Field strata",
                "description": "Untuk stratified: kelompokkan fitur masukan menjadi strata berdasarkan atribut ini. Jika dihilangkan, setiap fitur masukan menjadi stratanya sendiri."
              },
              "allocation": {
                "label": "Alokasi",
                "description": "Untuk stratified: 'proportional' terhadap luas strata (default), 'equal' per strata, atau 'population_field' proporsional terhadap total suatu field."
              },
              "population_field": {
                "label": "Field populasi",
                "description": "Untuk allocation=population_field: field numerik yang total per stratanya menentukan alokasi."
              },
              "bin_shape": {
                "label": "Bentuk bin",
                "description": "Untuk systematic: kisi 'square' (default), 'hexagon', atau 'triangle'."
              },
              "bin_size": {
                "label": "Ukuran bin",
                "description": "Jarak (satuan CRS) untuk kisi systematic dan bin cluster. Wajib untuk metode tersebut."
              },
              "num_clusters": {
                "label": "Jumlah klaster",
                "description": "Untuk cluster: berapa banyak bin yang dipilih secara acak. Default 10."
              },
              "min_distance": {
                "label": "Jarak minimum",
                "description": "Jarak minimum antar titik simple_random / stratified / cluster (satuan CRS). Default 0 (tanpa kendala)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG deterministik (default 1)."
              }
            }
          },
          "create_spatially_balanced_points": {
            "name": "Buat titik seimbang spasial",
            "description": "Hasilkan titik sampel yang tersebar baik secara spasial (kuasi-acak Halton) di dalam poligon kendala, secara opsional dibobot oleh raster probabilitas inklusi, masing-masing ditandai dengan urutan sampel seimbang, seperti ArcGIS Create Spatially Balanced Points.",
            "params": {
              "constraint": {
                "label": "Kendala",
                "description": "Layer poligon kendala; titik dihasilkan di dalam poligon ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "num_points": {
                "label": "Jumlah titik",
                "description": "Jumlah titik sampel yang dihasilkan."
              },
              "probability": {
                "label": "Probabilitas",
                "description": "Raster probabilitas inklusi opsional; sel bernilai lebih tinggi lebih mungkin disampel (dinormalisasi terhadap nilai maksimumnya)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed acak untuk pengambilan sampel yang dapat direproduksi (default 1)."
              }
            }
          },
          "create_underpass": {
            "name": "Buat terowongan",
            "description": "Pada persilangan garis, membangun poligon masker yang berorientasi sepanjang fitur atas dan memotong celah yang sesuai dari fitur bawah sehingga terbaca sebagai melintas di bawahnya (ArcGIS Create Underpass). Saudara dari create_overpass yang sudah ada, yang memasker garis bawah agar garis atas terbaca menerus; terowongan justru membutuhkan putus dekoratif, yang membedakan portal terowongan dari jembatan. Menghasilkan masker dan garis bawah yang terpangkas.",
            "params": {
              "above": {
                "label": "Di atas",
                "description": "Vektor garis berisi fitur yang lewat DI ATAS persilangan (masker diorientasikan sepanjang garis ini). Format terdeteksi otomatis, atau handle dalam memori."
              },
              "below": {
                "label": "Di bawah",
                "description": "Vektor garis berisi fitur yang lewat DI BAWAH persilangan (garis yang mendapat celah). Format terdeteksi otomatis, atau handle dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk poligon masker underpass. Jika dihilangkan, disimpan di memori."
              },
              "output_lines": {
                "label": "Keluaran garis",
                "description": "Path keluaran opsional untuk layer bawah dengan celah underpass yang telah dipotong. Jika dihilangkan, disimpan di memori (tetap dikembalikan sebagai 'output_lines')."
              },
              "margin_along": {
                "label": "Margin memanjang",
                "description": "Setengah panjang setiap masker yang diukur SEPANJANG garis atas, dalam satuan CRS; masker membentang 2x nilai ini pada arah tersebut. Default 1.0."
              },
              "margin_across": {
                "label": "Margin melintang",
                "description": "Setengah lebar setiap masker MELINTANG garis atas, dalam satuan CRS. Untuk persilangan tegak lurus, nilai inilah yang membatasi celah yang dipotong pada garis bawah, sehingga panjang yang dihapus adalah 2x nilai ini. Default 1.0."
              },
              "min_angle": {
                "label": "Sudut minimum",
                "description": "Lewati persilangan yang kedua garisnya bertemu pada sudut kurang dari nilai ini dalam derajat, karena masker yang hampir sejajar tidak stabil. Default 15."
              }
            }
          },
          "cul_de_sac_masks": {
            "name": "Masker cul-de-sac",
            "description": "Hasilkan poligon masker knockout sadar skala pada bulatan cul-de-sac dalam jaringan jalan, seperti ArcGIS Cul-De-Sac Masks.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis tengah jalan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path poligon masker keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "reference_scale": {
                "label": "Skala referensi",
                "description": "Penyebut skala peta yang menjadi acuan ukuran masker (misalnya 24000 untuk 1:24.000)."
              },
              "symbol_width": {
                "label": "Lebar simbol",
                "description": "Lebar selubung jalan dalam satuan halaman (lihat 'page_unit') pada skala referensi."
              },
              "margin": {
                "label": "Margin",
                "description": "Margin tambahan di sekitar simbol, dalam satuan halaman (default 0)."
              },
              "page_unit": {
                "label": "Satuan halaman",
                "description": "Satuan 'symbol_width' dan 'margin': points (default, 1/72 inci), mm, atau inci."
              },
              "map_units_per_meter": {
                "label": "Satuan peta per meter",
                "description": "Satuan CRS per meter (default 1, benar untuk CRS terproyeksi berbasis meter). Untuk layer dalam derajat gunakan sekitar 0.000008983."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi penjepretan koordinat untuk menyatukan titik ujung garis menjadi node jaringan (default 0.001 satuan peta)."
              },
              "attributes": {
                "label": "Atribut",
                "description": "ids_only (default) | all — apakah atribut fitur sumber dibawa ke masker."
              }
            }
          },
          "cut_fill": {
            "name": "Galian dan timbunan",
            "description": "Perubahan volumetrik antara dua permukaan DEM (sebelum/sesudah) atau satu permukaan dan bidang referensi: raster perubahan elevasi bertanda ditambah volume galian, timbunan, dan neto, dengan pelabelan volume per wilayah opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster 'sebelum' (atau permukaan tunggal untuk mode bidang)."
              },
              "after": {
                "label": "Setelah",
                "description": "Raster 'sesudah' (mode dua permukaan). Harus berbagi grid dengan 'input'. Berikan ini atau 'plane'."
              },
              "plane": {
                "label": "Bidang",
                "description": "Elevasi bidang referensi (mode volume permukaan): perubahan diukur sebagai masukan dikurangi nilai ini. Berikan ini atau 'after'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional untuk perubahan elevasi bertanda (Δz). Jika dihilangkan, disimpan di memori."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari raster masukan. Default 1."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Sel dengan |Δz| sama atau di bawah nilai ini (satuan z CRS) dihitung tidak berubah. Default 0."
              },
              "region_output": {
                "label": "Keluaran wilayah",
                "description": "Path raster opsional untuk label wilayah galian/timbunan yang bersebelahan (id wilayah >= 1; sel tak berubah menjadi nodata)."
              },
              "csv_output": {
                "label": "Keluaran CSV",
                "description": "Path CSV opsional untuk tabel volume per wilayah (region_id, type, cell_count, volume)."
              }
            }
          },
          "darcy_flow": {
            "name": "Aliran Darcy",
            "description": "Medan kecepatan Darcy air tanah keadaan tunak dari raster head, transmisivitas, dan porositas — raster magnitudo aliran (kecepatan Darcy) dan raster arah aliran menuruni gradien (v = -(T/n)·∇head), dengan pelacakan partikel adveksi opsional (RK2) dari titik seed menjadi polyline garis aliran — seperti ArcGIS Darcy Flow / Particle Track.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster tinggi muka air tanah (elevasi muka air tanah). Ukuran sel diambil dari raster ini."
              },
              "transmissivity": {
                "label": "Transmisivitas",
                "description": "Raster transmisivitas (terkoregistrasi dengan raster tinggi muka air)."
              },
              "porosity": {
                "label": "Porositas",
                "description": "Raster porositas efektif (terkoregistrasi dengan raster tinggi muka air; nilai harus > 0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster magnitudo kecepatan Darcy keluaran. Jika dihilangkan, disimpan di memori."
              },
              "direction": {
                "label": "Arah",
                "description": "Path raster arah aliran keluaran opsional (derajat azimut, dari utara searah jarum jam, menurun gradien). Jika dihilangkan, disimpan di memori."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari setiap raster masukan (default 1)."
              },
              "seeds": {
                "label": "Seed",
                "description": "Vektor titik seed partikel opsional. Jika diberikan, garis alir ditelusuri dari setiap seed."
              },
              "streamlines": {
                "label": "Garis aliran",
                "description": "Path vektor garis keluaran opsional untuk garis alir partikel yang ditelusuri (memerlukan 'seeds')."
              },
              "step": {
                "label": "Langkah",
                "description": "Panjang langkah pelacakan partikel dalam satuan CRS (default: ukuran sel raster tinggi muka air)."
              },
              "max_steps": {
                "label": "Langkah maksimum",
                "description": "Jumlah langkah integrasi maksimum per partikel (default 1000)."
              }
            }
          },
          "delineate_built_up_areas": {
            "name": "Delineasi area terbangun",
            "description": "Generalisasi jejak bangunan yang rapat menjadi poligon permukiman / luasan perkotaan yang halus dengan mengelompokkan bangunan berdekatan (penutupan morfologi), dengan filter jumlah bangunan minimum dan luas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon jejak bangunan masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "grouping_distance": {
                "label": "Jarak pengelompokan",
                "description": "Bangunan yang jejaknya berada dalam jarak ini (satuan CRS) dikelompokkan menjadi satu area terbangun. Menetapkan radius penutupan morfologi ke setengah nilai ini."
              },
              "min_building_count": {
                "label": "Jumlah bangunan minimum",
                "description": "Buang area terbangun yang berisi kurang dari sekian bangunan ini (default 1 — pertahankan setiap kelompok)."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Buang area terbangun yang luasnya (satuan CRS kuadrat) di bawah nilai ini, dan isi lubang interior yang lebih kecil darinya. Default: pertahankan semua."
              },
              "simplify_tolerance": {
                "label": "Toleransi penyederhanaan",
                "description": "Toleransi Douglas–Peucker (satuan CRS) yang diterapkan pada batas area terbangun untuk menipiskan buffer membulat yang padat verteks. Default 0 (tanpa penyederhanaan)."
              }
            }
          },
          "delineate_depressions": {
            "name": "Delineasi cekungan",
            "description": "Delineasi cekungan bersarang dari raster sink menggunakan metode level-set (lidar slicing.py).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster sink masukan (misalnya keluaran extract_sinks)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster id cekungan opsional. Jika dihilangkan, disimpan di memori."
              },
              "level_output": {
                "label": "Keluaran tingkat",
                "description": "Path keluaran opsional untuk raster aras cekungan."
              },
              "csv_output": {
                "label": "Keluaran CSV",
                "description": "Path keluaran opsional untuk CSV atribut cekungan."
              },
              "vector_output": {
                "label": "Keluaran vektor",
                "description": "Path keluaran opsional untuk poligon cekungan sebagai GeoJSON (atribut digabungkan)."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Jumlah piksel minimum untuk sebuah cekungan (default 10)."
              },
              "min_depth": {
                "label": "Kedalaman minimum",
                "description": "Kedalaman cekungan minimum (diterima untuk kompatibilitas; tidak digunakan, menyesuaikan lidar)."
              },
              "interval": {
                "label": "Interval",
                "description": "Interval pengirisan untuk metode level-set (default 0.3)."
              }
            }
          },
          "delineate_mounts": {
            "name": "Delineasi gundukan",
            "description": "Delineasi hierarki bersarang fitur yang meninggi (gundukan) dalam DEM (lidar mounts.py).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster id gundukan opsional. Jika dihilangkan, disimpan di memori."
              },
              "level_output": {
                "label": "Keluaran tingkat",
                "description": "Path keluaran opsional untuk raster aras gundukan."
              },
              "csv_output": {
                "label": "Keluaran CSV",
                "description": "Path keluaran opsional untuk CSV atribut gundukan."
              },
              "vector_output": {
                "label": "Keluaran vektor",
                "description": "Path keluaran opsional untuk poligon gundukan sebagai GeoJSON (atribut digabungkan)."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Jumlah piksel minimum untuk sebuah gundukan (default 10)."
              },
              "min_height": {
                "label": "Tinggi minimum",
                "description": "Tinggi gundukan minimum (diterima untuk kompatibilitas; tidak digunakan, menyesuaikan lidar)."
              },
              "interval": {
                "label": "Interval",
                "description": "Interval pengirisan untuk metode level-set (default 0.3)."
              },
              "delta": {
                "label": "Delta",
                "description": "Nilai dasar yang ditambahkan saat membalik DEM (default 100)."
              }
            }
          },
          "dem_filter": {
            "name": "Filter DEM",
            "description": "Haluskan DEM dengan filter rata-rata, median, atau Gaussian (lidar filtering.py).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "filter": {
                "label": "Filter",
                "description": "Tipe filter: 'mean', 'median', atau 'gaussian' (default 'mean')."
              },
              "kernel_size": {
                "label": "Ukuran kernel",
                "description": "Ukuran jendela dalam piksel untuk filter mean/median (default 3)."
              },
              "sigma": {
                "label": "Sigma",
                "description": "Simpangan baku untuk filter Gaussian (default 1.0)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang difilter (default 1)."
              }
            }
          },
          "dendrogram": {
            "name": "Dendrogram",
            "description": "Bangun pohon penggabungan hierarkis atas tanda kelas untuk menunjukkan seberapa terpisahkan kelas-kelasnya, seperti ArcGIS Dendrogram.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur terklaster yang membawa field kelas dan field numerik yang mendefinisikan ruang fitur."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field yang menyimpan pengenal kelas / klaster."
              },
              "fields": {
                "label": "Field",
                "description": "Field numerik yang dipisahkan koma yang mendefinisikan ruang fitur."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel penggabungan keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "distance": {
                "label": "Jarak",
                "description": "Jarak antar tanda: 'variance' (default; dinormalisasi terhadap sebaran dalam kelas) atau 'mean_only'."
              },
              "standardize": {
                "label": "Standarisasi",
                "description": "Standardisasi z setiap field sebelum menghitung jarak agar field berentang besar tidak mendominasi (default true)."
              },
              "output_text": {
                "label": "Keluaran teks",
                "description": "Path opsional untuk rendering pohon dalam teks polos berindentasi."
              }
            }
          },
          "densify_sampling_network": {
            "name": "Rapatkan jaringan pengambilan sampel",
            "description": "Usulkan lokasi sampel baru pada sel dengan permukaan prediksi kriging (galat baku) tertinggi, dengan menghormati jarak inhibisi jarak antar minimum, seperti ArcGIS Densify Sampling Network.",
            "params": {
              "prediction_error": {
                "label": "Galat prediksi",
                "description": "Raster galat baku prediksi masukan (misalnya permukaan varians/galat kriging). Sampel baru menyasar sel bergalat tertinggi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "count": {
                "label": "Hitungan",
                "description": "Jumlah lokasi sampel baru yang diusulkan."
              },
              "inhibition_distance": {
                "label": "Jarak inhibisi",
                "description": "Jarak minimum antar sampel usulan dalam satuan peta (default 0 = tanpa inhibisi; sekadar sel bergalat tertinggi)."
              },
              "mask": {
                "label": "Masker",
                "description": "Layer poligon opsional; hanya sel yang pusatnya berada di dalamnya yang memenuhi syarat sebagai kandidat."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari raster galat prediksi yang dibaca (default 1)."
              }
            }
          },
          "detect_bright_ocean_objects": {
            "name": "Deteksi objek laut terang",
            "description": "Menemukan kapal dan target titik terang lainnya di atas air pada citra SAR dengan detektor CFAR dua parameter, dan menghasilkannya sebagai kotak pembatas berorientasi dengan panjang, lebar, haluan, dan hamburan balik puncak (ArcGIS Detect Bright Ocean Objects). Kedua registri tidak memiliki detektor clutter lokal: ambang global tidak dapat bekerja karena clutter laut menjadi lebih terang seiring angin dan sudut datang, matched_filter_target_detection adalah detektor optik spektral, dan detect_image_anomalies menggunakan model global alih-alih jendela bergeser.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster hamburan balik SAR."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon keluaran berisi objek terdeteksi. Jika dihilangkan, disimpan di memori."
              },
              "geometry_type": {
                "label": "Jenis geometri",
                "description": "'bounding_box' (default) untuk persegi minimum terorientasi, atau 'perimeter' untuk garis luar deteksi yang ditelusuri."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ambang deteksi CFAR dalam simpangan baku latar belakang (default 5.0)."
              },
              "guard_size": {
                "label": "Ukuran guard",
                "description": "Setengah lebar dalam sel dari pita penjaga yang dikecualikan dari estimasi latar belakang (default 3). Harus lebih kecil dari background_size."
              },
              "background_size": {
                "label": "Ukuran latar",
                "description": "Setengah lebar dalam sel dari cincin latar belakang (default 12)."
              },
              "mask_features": {
                "label": "Fitur masker",
                "description": "Layer poligon yang memasker darat atau air. Sel yang dikecualikan oleh masker tidak diuji maupun digunakan sebagai latar belakang."
              },
              "mask_type": {
                "label": "Jenis masker",
                "description": "'land_polygon' (default; analisis di luar poligon) atau 'water_polygon' (analisis di dalamnya)."
              },
              "min_object_length": {
                "label": "Panjang objek minimum",
                "description": "Buang objek yang lebih pendek dari nilai ini, dalam satuan peta."
              },
              "max_object_length": {
                "label": "Panjang objek maksimum",
                "description": "Buang objek yang lebih panjang dari nilai ini, dalam satuan peta."
              },
              "min_object_width": {
                "label": "Lebar objek minimum",
                "description": "Buang objek yang lebih sempit dari nilai ini, dalam satuan peta."
              },
              "max_object_width": {
                "label": "Lebar objek maksimum",
                "description": "Buang objek yang lebih lebar dari nilai ini, dalam satuan peta."
              },
              "min_cells": {
                "label": "Sel minimum",
                "description": "Buang deteksi yang lebih kecil dari sekian sel ini (default 2), yang menekan lonjakan speckle terisolasi."
              },
              "input_units": {
                "label": "Satuan masukan",
                "description": "'intensity' (default), 'dn', 'amplitude', atau 'db'. Deteksi dijalankan pada daya linear, tempat statistik derau bermakna."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dicari (default 1)."
              }
            }
          },
          "detect_dark_ocean_areas": {
            "name": "Deteksi area laut gelap",
            "description": "Menemukan bercak gelap anomali di atas air pada citra SAR — tumpahan minyak, rembesan alami, lapisan alga, zona angin rendah — sebagai wilayah yang berada sejumlah simpangan baku di bawah latar laut lokal, dilaporkan dengan kontras dB-nya (ArcGIS Detect Dark Ocean Areas). Pelengkap detect_bright_ocean_objects, dan berbeda dari extract_water_sar: adegan yang seluruhnya air bersifat unimodal, sehingga pemisahan Otsu hanya akan membagi dua clutter laut dan melaporkan separuh lautan sebagai tumpahan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster hamburan balik SAR di atas perairan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon keluaran berisi area gelap. Jika dihilangkan, disimpan di memori."
              },
              "output_raster": {
                "label": "Raster keluaran",
                "description": "Masker biner keluaran (1 gelap, 0 latar belakang). Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "method": {
                "label": "Metode",
                "description": "'statistical' (default; sejumlah simpangan baku tertentu di bawah rata-rata latar belakang), 'otsu', atau 'fixed'."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Untuk 'statistical', berapa simpangan baku di bawah rata-rata yang dihitung sebagai gelap (default 2.0). Untuk 'fixed', aras dB yang pada atau di bawahnya sebuah sel dianggap gelap."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Buang area gelap yang lebih kecil dari luas ini dalam satuan peta kuadrat. Tumpahan bersifat luas dan bersambung; speckle tidak."
              },
              "min_contrast_db": {
                "label": "Kontras minimum (dB)",
                "description": "Buang wilayah yang berada kurang dari sekian dB ini di bawah latar belakang. Tumpahan minyak mineral biasanya lebih dari 5 dB di bawahnya."
              },
              "mask_features": {
                "label": "Fitur masker",
                "description": "Layer poligon yang membatasi analisis pada perairan. Daratan tampak cerah dan akan menggelembungkan estimasi latar belakang."
              },
              "mask_type": {
                "label": "Jenis masker",
                "description": "'land_polygon' (default; analisis di luar poligon) atau 'water_polygon' (analisis di dalamnya)."
              },
              "histogram_bins": {
                "label": "Bin histogram",
                "description": "Bin yang digunakan untuk histogram Otsu (default 256)."
              },
              "input_units": {
                "label": "Satuan masukan",
                "description": "'intensity' (default), 'dn', 'amplitude', atau 'db'."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dicari (default 1)."
              }
            }
          },
          "detect_feature_changes": {
            "name": "Deteksi perubahan fitur",
            "description": "Cocokkan dua set data garis berdasarkan jarak Hausdorff dan klasifikasikan masing-masing sebagai tidak berubah / spasial / atribut / spatial_attribute / baru, ditambah fitur dasar yang terhapus — titik masuk deteksi perubahan vektor dan konflasi, seperti ArcGIS Detect Feature Changes.",
            "params": {
              "update": {
                "label": "Perbarui",
                "description": "Layer vektor garis terbarui (keadaan baru)."
              },
              "base": {
                "label": "Basis",
                "description": "Layer vektor garis dasar (keadaan sebelumnya) sebagai pembanding."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor garis keluaran (fitur pembaruan terklasifikasi, ditambah fitur dasar yang dihapus). Jika dihilangkan, disimpan di memori."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak maksimum (satuan CRS) untuk mencocokkan garis pembaruan dengan garis dasar. Wajib."
              },
              "spatial_tolerance": {
                "label": "Toleransi spasial",
                "description": "Jarak Hausdorff yang di bawahnya geometri tercocokkan dihitung tidak berubah (satuan CRS). Default: search_distance / 5."
              },
              "compare_fields": {
                "label": "Field pembanding",
                "description": "Field yang ada pada kedua layer, dipisahkan koma, untuk dibandingkan perubahan atributnya."
              }
            }
          },
          "detect_graphic_conflict": {
            "name": "Deteksi konflik grafis",
            "description": "Temukan di mana luasan tersimbolkan (lebar gambar) dari dua layer fitur — atau satu layer terhadap dirinya sendiri — tumpang tindih atau berdesakan dalam pemisahan minimum, menghasilkan satu poligon konflik per pasangan yang berkonflik yang ditandai dengan kedua ID fitur sumber dan luas tumpang tindih, seperti ArcGIS Detect Graphic Conflict.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik, garis, atau poligon)."
              },
              "conflict": {
                "label": "Konflik",
                "description": "Layer vektor kedua yang dibandingkan dengan 'input'. Hilangkan untuk membandingkan 'input' dengan dirinya sendiri."
              },
              "symbol_width": {
                "label": "Lebar simbol",
                "description": "Lebar/diameter tersimbolkan dari fitur 'input', dalam satuan peta."
              },
              "conflict_symbol_width": {
                "label": "Lebar simbol konflik",
                "description": "Lebar/diameter tersimbolkan dari fitur 'conflict', dalam satuan peta. Default: sama dengan 'symbol_width'. Diabaikan jika 'conflict' dihilangkan."
              },
              "conflict_distance": {
                "label": "Jarak konflik",
                "description": "Pemisahan tambahan yang diwajibkan di luar bersentuhan, dalam satuan peta. Default 0."
              },
              "line_connection_allowance": {
                "label": "Kelonggaran sambungan garis",
                "description": "Radius di sekitar titik ujung bersama dari dua fitur garis dalam layer yang sama, yang di dalamnya tumpang tindih keduanya diperlakukan sebagai konektivitas ujung-ke-ujung normal, bukan konflik. Default 0 (tanpa kelonggaran)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran dengan field 'input_fid', 'conflict_fid', dan 'overlap_area'. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "detect_image_anomalies": {
            "name": "Deteksi anomali citra",
            "description": "Nilai setiap piksel citra multiband berdasarkan jarak Mahalanobis-nya terhadap statistik band adegan (atau jendela bergerak) — detektor anomali Reed–Xiaoli (RX) — dengan masker ambang persentil opsional, seperti ArcGIS Detect Image Anomalies.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster multiband masukan (2+ band)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster skor anomali keluaran (F32). Jika dihilangkan, disimpan di memori."
              },
              "mode": {
                "label": "Mode",
                "description": "'global' (statistik seluruh adegan, default) atau 'local' (statistik jendela bergerak)."
              },
              "window": {
                "label": "Jendela",
                "description": "Ukuran jendela ganjil (piksel) untuk mode lokal (default 15)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Persentil opsional (0-100) dari distribusi skor yang di atasnya masker anomali biner ditulis."
              },
              "mask_output": {
                "label": "Keluaran masker",
                "description": "Path keluaran untuk masker anomali biner (memerlukan 'threshold'). Jika dihilangkan padahal ambang diberikan, disimpan di memori."
              }
            }
          },
          "detect_incidents": {
            "name": "Deteksi insiden",
            "description": "Tandai di mana suatu kondisi dimulai dan berakhir sepanjang setiap jejak: kelompokkan titik berstempel waktu berdasarkan jejak, urutkan berdasarkan waktu, evaluasi perbandingan awal (dan akhir opsional) atas atribut numerik, dan hasilkan episode insiden sebagai titik bertanda atau segmen garis per episode dengan ID dan durasi — seperti ArcGIS Detect Incidents.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan berisi pengamatan berstempel waktu."
              },
              "track_field": {
                "label": "Field jejak",
                "description": "Field yang mengidentifikasi setiap jejak/objek bergerak (misalnya id kendaraan atau hewan)."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: detik numerik atau stempel waktu ISO-8601."
              },
              "start_condition": {
                "label": "Kondisi awal",
                "description": "Kondisi yang membuka sebuah insiden, misalnya 'speed > 30'. Tata bahasa: '<field> <op> <angka>' dengan op salah satu dari > >= < <= == != , secara opsional dua klausa yang digabung dengan AND."
              },
              "end_condition": {
                "label": "Kondisi akhir",
                "description": "Kondisi opsional yang menutup sebuah insiden (tata bahasa sama). Jika dihilangkan, insiden berakhir saat kondisi awal tidak lagi terpenuhi."
              },
              "mode": {
                "label": "Mode",
                "description": "Mode keluaran: 'points' (default, setiap titik disalin beserta field insiden) atau 'segments' (satu polyline per insiden)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "dice": {
            "name": "Pecah (dice)",
            "description": "Pisahkan poligon atau polyline yang melebihi batas verteks menjadi grid potongan yang lebih kecil (seperti ArcGIS Dice), sehingga tumpang susun dan pemetakan hilir tetap cepat — quadtree adaptif mengiriskan geometri dengan setiap kuadran hingga setiap potongan berada di bawah batas.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon atau polyline masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer keluaran berisi potongan hasil pemotongan. Jika dihilangkan, disimpan di memori."
              },
              "vertex_limit": {
                "label": "Batas verteks",
                "description": "Jumlah verteks maksimum per fitur keluaran (default 10000). Fitur yang berada pada atau di bawah nilai ini dilewatkan tanpa perubahan."
              }
            }
          },
          "difference_3d": {
            "name": "Selisih 3D",
            "description": "Mengurangkan sekumpulan padatan 3D dari kumpulan lain, melaporkan volume yang dihapus dari dan yang tersisa di setiap fitur minuend (ArcGIS Difference 3D). union_3d adalah satu-satunya tumpang susun 3D di kedua registri dan erase hanya 2D untuk poligon, sehingga tidak ada cara menghitung volume galian yang tersisa setelah tubuh potongan atau volume gumpalan di luar amplop pengecualian. Volume minuend eksak; volume yang dihapus diestimasi dari okupansi voksel pada resolusi yang dilaporkan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Solid 3D tertutup yang dikurangi (MultiPolygon mesh segitiga dengan Z)."
              },
              "subtract": {
                "label": "Kurang",
                "description": "Solid 3D tertutup pengurang yang dihapus dari setiap solid yang dikurangi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Tabel keluaran, satu baris per solid yang dikurangi. Jika dihilangkan, disimpan di memori."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Sel voksel sepanjang sumbu terpanjang kotak pembatas setiap solid yang dikurangi (default 64). Nilai lebih tinggi lebih akurat dan lebih lambat."
              },
              "keep_geometry": {
                "label": "Pertahankan geometri",
                "description": "Bawa geometri asli setiap solid yang dikurangi ke baris keluarannya (default false: tabel atribut saja). Geometri tersebut adalah solid yang BELUM dipotong — tidak ada mesh gabungan eksak yang dihasilkan."
              }
            }
          },
          "diffusion_interpolation_with_barriers": {
            "name": "Interpolasi difusi dengan penghalang",
            "description": "Interpolasi pengukuran titik tersebar ke raster dengan mensimulasikan difusi panas yang mengalir MENGELILINGI penghalang absolut (tanpa fluks) alih-alih menembusnya (seperti ArcGIS Diffusion Interpolation With Barriers). Sampel dikunci sebagai sel tetap; setiap sel lain merelaksasi menuju rata-rata tetangga non-penghalangnya selama `number_iterations` sapuan Jacobi persamaan Laplace/panas, sehingga pengaruh meluruh dengan jarak difusi. Berbeda dari kernel jalur non-penghalang terpendek interpolate_with_barriers dan dari penghalus raster anisotropic_diffusion_filter.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan berisi pengukuran sampel (Point / MultiPoint)."
              },
              "z_field": {
                "label": "Field Z",
                "description": "Field numerik pada titik yang menyimpan nilai untuk diinterpolasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster terinterpolasi keluaran (GeoTIFF). Jika dihilangkan, disimpan di memori."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel / resolusi keluaran dalam satuan peta (meter untuk CRS geografis, satuan CRS jika tidak). Wajib."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer vektor penghalang opsional (polyline atau poligon) yang menghambat difusi. Polyline menghambat sel yang dilintasi segmennya; poligon menghambat sel yang pusatnya berada di dalamnya. Hilangkan untuk kontrol tanpa penghalang."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Bobot relaksasi lambda per iterasi dalam (0, 0.25] (default 0.2): setiap sel bebas bergerak sebesar fraksi ini menuju rata-rata tetangganya per sapuan."
              },
              "number_iterations": {
                "label": "Jumlah iterasi",
                "description": "Jumlah sapuan relaksasi Jacobi pada persamaan panas (default 100). Lebih banyak iterasi menyebarkan pengaruh lebih jauh."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik opsional yang memberikan bobot per titik (default 1), hanya digunakan untuk merata-ratakan sampel berimpit yang jatuh pada sel keluaran yang sama."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Gantikan kode EPSG CRS masukan (misalnya jika layer tidak berlabel). Nilai 4326 memicu proyeksi meter lokal."
              }
            }
          },
          "dimension_reduction": {
            "name": "Reduksi dimensi",
            "description": "Analisis komponen utama atas atribut fitur numerik (seperti ArcGIS Dimension Reduction): standarisasi field terpilih, dekomposisi eigen matriks korelasi/kovarians dengan rotasi Jacobi buatan sendiri, dan tulis skor komponen PC1..PCk kembali ke fitur ditambah laporan nilai eigen/varians/loading — padanan atribut vektor dari principal_component_analysis bawaan yang hanya untuk band.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor (atau tabel) masukan dengan field atribut numerik."
              },
              "fields": {
                "label": "Field",
                "description": "Daftar berisi setidaknya dua field numerik yang dipisahkan koma untuk direduksi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran dengan field skor PC yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "table": {
                "label": "Tabel",
                "description": "Path CSV opsional untuk laporan komponen (nilai eigen, varians terjelaskan, kumulatif, muatan per variabel). Selalu dikembalikan dalam hasil."
              },
              "num_components": {
                "label": "Jumlah komponen",
                "description": "Jumlah komponen terdepan yang dipertahankan. Default: cukup untuk mencapai 'min_variance', jika tidak semua field."
              },
              "min_variance": {
                "label": "Varians minimum",
                "description": "Pertahankan komponen paling sedikit yang varians kumulatif terjelaskannya mencapai fraksi ini (0-1). Diabaikan jika 'num_components' disetel."
              },
              "standardize": {
                "label": "Standarisasi",
                "description": "Standardisasi setiap field (skor z) sebelum PCA agar skala sebanding — menganalisis matriks korelasi. Default true; false menganalisis matriks kovarians."
              }
            }
          },
          "dimensional_moving_statistics": {
            "name": "Statistik bergerak dimensional",
            "description": "Menjalankan jendela bergerak sepanjang dimensi kubus raster, menulis satu irisan terhaluskan per irisan masukan — rata-rata atau median bergulir di tempat yang mengubah deret waktu satelit berderau menjadi dapat digunakan (ArcGIS Dimensional Moving Statistics). time_series_smoothing putaran 17 hanya untuk vektor, filter fokal bawaan menggerakkan jendela secara spasial dalam satu irisan, dan aggregate_multidimensional_raster memendekkan kubus menjadi bin. Menyertakan rata-rata sirkular, yang tanpanya merata-ratakan aspek atau fase melintasi titik pembungkus tidak bermakna.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah irisan) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster multiband keluaran dengan satu band per irisan masukan. Jika dihilangkan, disimpan di memori."
              },
              "dimension": {
                "label": "Dimensi",
                "description": "Nama dimensi, hanya digunakan dalam laporan (default 'slice')."
              },
              "backward_window": {
                "label": "Jendela mundur",
                "description": "Irisan sebelum irisan saat ini yang disertakan (default 1)."
              },
              "forward_window": {
                "label": "Jendela maju",
                "description": "Irisan setelah irisan saat ini yang disertakan (default 1)."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'mean' (default), 'circular_mean', 'majority', 'maximum', 'median', 'minimum', 'minority', 'percentile', 'std', atau 'sum'."
              },
              "percentile_value": {
                "label": "Nilai persentil",
                "description": "Persentil dalam [0, 100] untuk statistik 'percentile' (default 50)."
              },
              "period": {
                "label": "Periode",
                "description": "Periode pembungkus untuk 'circular_mean' (default 360, yaitu derajat; gunakan 6.283185307179586 untuk radian)."
              },
              "min_valid": {
                "label": "Valid minimum",
                "description": "Jumlah minimum pengamatan bukan nodata dalam jendela sebelum sebuah nilai ditulis (default 1)."
              },
              "nodata_handling": {
                "label": "Penanganan nodata",
                "description": "'data' (default; lewati nodata dan hitung dari sisanya), 'nodata' (nodata apa pun dalam jendela membuat keluaran menjadi nodata), atau 'fill_nodata' (juga menulis nilai jika irisan pusat itu sendiri nodata)."
              }
            }
          },
          "directional_distribution": {
            "name": "Distribusi arah",
            "description": "Statistik distribusi geografis deskriptif: pusat rata-rata, pusat median, fitur pusat, jarak standar (lingkaran), dan elips deviasi standar — dengan pembobotan dan pengelompokan opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik lebih disukai; geometri lain menggunakan titik representatif rata-rata verteksnya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Ukuran yang dihitung: 'mean_center', 'median_center', 'central_feature', 'standard_distance', atau 'standard_deviational_ellipse'."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik opsional untuk membobot setiap fitur (misalnya populasi). Default: setiap fitur berbobot 1."
              },
              "case_field": {
                "label": "Field kasus",
                "description": "Field opsional untuk mengelompokkan fitur; satu fitur keluaran dihasilkan per nilai berbeda."
              },
              "n_std": {
                "label": "N simpangan baku",
                "description": "Pengali simpangan baku (1, 2, atau 3) untuk lingkaran jarak baku dan elips deviasional. Default 1."
              }
            }
          },
          "directional_trend": {
            "name": "Tren arah",
            "description": "Proyeksikan titik sampel ke azimut terpilih dan sesuaikan polinomial orde 1-3 dari nilai-vs-jarak untuk mendeteksi tren global/anisotropik sebelum variografi (seperti Directional Trend di ArcGIS). 'determine' menyapu azimut untuk arah varians terjelaskan maksimum.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik lebih disukai; geometri lain menggunakan titik representatif rata-rata verteksnya)."
              },
              "field": {
                "label": "Field",
                "description": "Field atribut numerik yang akan dianalisis trennya."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "Arah kompas dalam derajat (0 = utara, searah jarum jam) untuk proyeksi, atau 'determine' (default) untuk menyapu 0-179° mencari arah dengan varians terjelaskan maksimum."
              },
              "order": {
                "label": "Orde",
                "description": "Orde polinomial 1, 2, atau 3 (default 2)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori. Titik membawa proj_dist, value, fitted, dan residual."
              }
            }
          },
          "directional_variogram": {
            "name": "Analisis variogram arah",
            "description": "Menghitung variogram dalam berbagai arah untuk mendeteksi anisotropi spasial. Mengungkap pola kontinuitas arah yang penting untuk kriging yang realistis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik dengan nilai pengukuran"
              },
              "field": {
                "label": "Field",
                "description": "Field yang berisi nilai pengukuran"
              },
              "directions": {
                "label": "Arah",
                "description": "Daftar azimut (0-180°) yang dipisahkan koma untuk dianalisis"
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi arah dalam derajat (default 22.5)"
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Jarak lag maksimum yang dihitung (default 1000)"
              },
              "bin_size": {
                "label": "Ukuran bin",
                "description": "Ukuran bin lag (default 50)"
              },
              "output_json": {
                "label": "Keluaran JSON",
                "description": "Path file keluaran untuk hasil variogram terarah"
              },
              "output_html": {
                "label": "Keluaran HTML",
                "description": "Path keluaran opsional untuk visualisasi diagram mawar HTML"
              }
            }
          },
          "disperse_markers": {
            "name": "Sebarkan penanda",
            "description": "Sebarkan simbol titik yang berimpit atau tumpang tindih hingga jarak pusat-ke-pusat minimum (pola diperluas/cincin/silang/persegi) sehingga titik yang bertumpuk tetap terlihat satu per satu, seperti ArcGIS Disperse Markers.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "min_spacing": {
                "label": "Jarak antar minimum",
                "description": "Jarak antar pusat minimum yang diberlakukan antara titik-titik terklaster, dalam satuan peta."
              },
              "pattern": {
                "label": "Pola",
                "description": "'expanded' (default, cincin konsentris + tolakan lokal), 'ring' (lingkaran tunggal), 'cross' (empat lengan), atau 'square' (grid)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed bilangan bulat untuk pemecahan seri deterministik jika anggota mula-mula tepat berimpit (default 0)."
              }
            }
          },
          "dissolve_route_events": {
            "name": "Lebur kejadian rute",
            "description": "Gabungkan kejadian rute yang bersentuhan atau tumpang tindih sepanjang rute yang sama menjadi satu rentang ukuran, baik hanya ketika field lebur cocok ('dissolve') maupun dengan menggabungkan nilai yang berbeda ('concatenate'). Seperti ArcGIS Dissolve Route Events.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Tabel kejadian masukan (kejadian garis dengan ukuran dari/ke)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel kejadian keluaran. Jika dihilangkan, disimpan di memori."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field yang menyimpan pengenal rute."
              },
              "from_measure_field": {
                "label": "Field ukuran awal",
                "description": "Field yang menyimpan ukuran-dari setiap kejadian."
              },
              "to_measure_field": {
                "label": "Field ukuran akhir",
                "description": "Field yang menyimpan ukuran-ke setiap kejadian. Untuk kejadian titik, gunakan field yang sama dengan 'from_measure_field'."
              },
              "dissolve_fields": {
                "label": "Field lebur",
                "description": "Nama field yang dipisahkan koma/titik koma yang harus sesuai agar dua rentang digabungkan (atau yang nilainya digabungkan)."
              },
              "mode": {
                "label": "Mode",
                "description": "'dissolve' (default) atau 'concatenate'."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Celah ukuran yang di bawahnya dua rentang dihitung bersebelahan (default 0)."
              },
              "separator": {
                "label": "Pemisah",
                "description": "Pemisah yang digunakan untuk menyatukan nilai dalam mode 'concatenate' (default ', ')."
              }
            }
          },
          "edgematch_features": {
            "name": "Pencocokan tepi fitur",
            "description": "Hubungkan set data garis melintasi batas petak/lembar (seperti ArcGIS Generate Edgematch Links + Edgematch Features): cocokkan titik ujung menggantung satu-ke-satu dalam toleransi dan rekonsiliasikan (titik tengah atau jepret), dengan layer tautan pencocokan opsional. Pencocokan satu-ke-satu lintas fitur yang tidak dimiliki snap_endnodes yang buta.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis masukan (misalnya dua petak bersebelahan yang digabungkan) untuk dicocokkan tepinya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer garis tersesuaikan keluaran. Jika dihilangkan, disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Jarak maksimum antara titik ujung menggantung agar dapat dicocokkan."
              },
              "method": {
                "label": "Metode",
                "description": "'midpoint' (pindahkan kedua ujung ke titik tengahnya; default) atau 'move_endpoint' (jepret ujung kedua ke ujung pertama)."
              },
              "match_fields": {
                "label": "Field pencocokan",
                "description": "Field opsional yang dipisahkan koma; pasangan tercocokkan harus sesuai pada field ini (memperjelas kandidat)."
              },
              "links": {
                "label": "Tautan",
                "description": "Layer garis keluaran opsional berisi tautan kecocokan (untuk QA)."
              }
            }
          },
          "eighty_twenty_analysis": {
            "name": "Analisis delapan puluh dua puluh",
            "description": "Jepret titik insiden ke lokasi terboboti dan hitung konsentrasi Pareto ('X% insiden terjadi di Y% lokasi'), menandai setiap lokasi dengan peringkatnya, persen insiden kumulatif, dan pita kepala/ekor, seperti ArcGIS Eighty Twenty Analysis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik insiden masukan (Point atau MultiPoint)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "cluster_tolerance": {
                "label": "Toleransi klaster",
                "description": "Jarak yang di dalamnya insiden dijepret menjadi satu lokasi (satuan peta, default 0 = hanya titik yang tepat berimpit)."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik opsional yang memberikan bobot setiap insiden (default: setiap insiden dihitung 1)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Persentase ambang konsentrasi yang mendefinisikan 'kepala' Pareto (default 80)."
              }
            }
          },
          "eliminate_polygon_part": {
            "name": "Hilangkan bagian poligon",
            "description": "Hapus lubang interior (dan opsional bagian luar kecil) dari poligon yang luasnya di bawah ambang luas absolut atau persentase, dengan mempertahankan atribut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "condition": {
                "label": "Kondisi",
                "description": "Uji ukuran: 'AREA' (default) dibandingkan dengan 'min_area'; 'PERCENT' membandingkan luas bagian/lubang sebagai persentase dari total luas luar fitur terhadap 'percentage'."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Kondisi AREA: hapus bagian/lubang yang luasnya (dalam satuan CRS kuadrat) di bawah nilai ini. Wajib jika condition = AREA."
              },
              "percentage": {
                "label": "Persentase",
                "description": "Kondisi PERCENT: hapus bagian/lubang yang luasnya, sebagai persentase (0-100) dari total luas luar fitur, di bawah nilai ini. Wajib jika condition = PERCENT."
              },
              "part_option": {
                "label": "Opsi bagian",
                "description": "Apa yang memenuhi syarat untuk dihapus: 'CONTAINED_ONLY' (default) hanya menghapus cincin interior (lubang); 'ANY' juga menghapus bagian eksterior kecil kecuali satu bagian terbesar."
              }
            }
          },
          "eliminate_polygons": {
            "name": "Hilangkan poligon",
            "description": "Gabungkan poligon sliver (berdasarkan luas maksimum dan/atau kueri atribut) ke poligon tetangga, dipilih berdasarkan batas bersama terpanjang atau luas terbesar.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "max_area": {
                "label": "Luas maksimum",
                "description": "Pilih poligon yang luasnya (dalam satuan CRS kuadrat) sama atau di bawah nilai ini. Dapat digabungkan dengan 'where' (keduanya harus cocok)."
              },
              "where": {
                "label": "Klausa where",
                "description": "Pilih poligon yang cocok dengan kondisi atribut sederhana 'FIELD OP VALUE', dengan OP salah satu dari = != < <= > >= (misalnya \"class = 0\"). Dapat digabungkan dengan 'max_area'."
              },
              "exclude": {
                "label": "Kecualikan",
                "description": "Lindungi fitur yang cocok dengan kondisi ini (sintaks 'FIELD OP VALUE' yang sama) dari eliminasi; fitur tersebut dipertahankan dan dapat menerima penggabungan."
              },
              "strategy": {
                "label": "Strategi",
                "description": "Tetangga mana yang menerima penggabungan sliver: 'longest_border' (default) atau 'largest_area'."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Jarak tegak lurus maksimum (dalam satuan CRS) agar dua segmen batas dihitung sebagai sisi bersama. Default 1e-6."
              }
            }
          },
          "emerging_hot_spot_analysis": {
            "name": "Analisis hot spot berkembang",
            "description": "Tren hot spot ruang-waktu pada kubus ruang-waktu H3: kelompokkan titik berstempel waktu ke dalam sel H3 x langkah waktu, hitung Getis-Ord Gi* per bin, dan klasifikasikan setiap sel (hot atau cold spot baru/menguat/persisten/melemah/...) melalui uji tren Mann-Kendall, seperti ArcGIS Emerging Hot Spot Analysis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (bujur/lintang geografis, EPSG:4326). Geometri lain menggunakan titik representatif rata-rata verteksnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Satu poligon H3 per sel. Jika dihilangkan, disimpan di memori."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: field numerik (dalam satuannya sendiri) atau string tanggal/tanggal-waktu ISO-8601."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Lebar satu langkah waktu: angka biasa (time_field numerik) atau durasi seperti '1w', '7d', '12h', '1M' untuk field tanggal. Default '1w'."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik opsional yang dijumlahkan ke setiap bin. Default: jumlah titik per bin."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 dari 0 (paling kasar) hingga 15 (paling halus); default 7 (sel ~5 km²)."
              },
              "neighborhood": {
                "label": "Ketetanggaan",
                "description": "Radius ketetanggaan spasial dalam k-ring H3 (default 1)."
              },
              "time_window": {
                "label": "Jendela waktu",
                "description": "Radius ketetanggaan temporal dalam langkah waktu (default 1)."
              }
            }
          },
          "empirical_bayesian_kriging": {
            "name": "Kriging Bayesian empiris",
            "description": "Interpolasi medan titik melalui banyak subset lokal yang tumpang tindih, masing-masing menyesuaikan semivariogramnya sendiri yang ketidakpastiannya ditangkap dengan mensimulasikan semivariogram terganggu dari RNG berseed, lalu memadukan prediksi/varians kriging subset berdasarkan jarak (seperti Empirical Bayesian Kriging di ArcGIS) — berbeda dari kriging biasa/universal/sederhana/co-kriging bawaan, yang semuanya menyesuaikan satu semivariogram global (atau jendela bergerak tunggal) yang diterima secara manual.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik pada layer masukan yang akan diinterpolasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster prediksi keluaran. Jika dihilangkan, disimpan di memori."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS. Default: diukur agar sumbu grid yang lebih panjang sekitar 150 sel."
              },
              "subset_size": {
                "label": "Ukuran subset",
                "description": "Jumlah titik target per subset lokal (default 40, minimum 4)."
              },
              "overlap": {
                "label": "Tumpang tindih",
                "description": "Fraksi lebar/tinggi petak subset yang tumpang tindih dengan petak tetangga (default 0.25)."
              },
              "simulations": {
                "label": "Simulasi",
                "description": "Jumlah semivariogram tersimulasi yang ditarik per subset untuk merepresentasikan ketidakpastian model (default 5, maks 50)."
              },
              "semivariogram": {
                "label": "Semivariogram",
                "description": "Keluarga model semivariogram: 'power' (default), 'linear', atau 'exponential'."
              },
              "transform": {
                "label": "Transformasi",
                "description": "Transformasi data sebelum kriging: 'none' (default) atau 'log_empirical' (log natural; mengharuskan field > 0 di mana-mana)."
              },
              "error_output": {
                "label": "Keluaran galat",
                "description": "Raster galat baku prediksi keluaran opsional."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG simulasi semivariogram deterministik (default 42)."
              }
            }
          },
          "enclose_multipatch": {
            "name": "Tutup multipatch",
            "description": "Mengonversi permukaan mesh segitiga 3D terbuka menjadi padatan tertutup kedap air dengan menutup loop batasnya, sehingga menjadi masukan valid untuk analisis volumetrik (ArcGIS Enclose Multipatch). is_closed_3d dapat mendiagnosis mesh terbuka tetapi tidak ada yang dapat memperbaikinya, dan union_3d / intersect_3d / difference_3d / inside_3d semuanya menolak atau salah melaporkan mesh terbuka — yang merupakan keadaan normal dari jejak terekstrusi, cangkang medan, dan permukaan bangunan impor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur permukaan 3D (MultiPolygon mesh segitiga dengan Z)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Fitur solid tertutup keluaran. Jika dihilangkan, disimpan di memori."
              },
              "drop_failed": {
                "label": "Buang yang gagal",
                "description": "Hilangkan fitur yang tidak dapat dibuat kedap (default false: fitur tersebut dihasilkan dengan CAP_FAILED = true sehingga kegagalannya terlihat alih-alih senyap)."
              }
            }
          },
          "enforce_river_monotonicity": {
            "name": "Terapkan monotonisitas sungai",
            "description": "Pahat DEM sehingga elevasi menurun secara monoton ke hilir sepanjang polyline sungai terpetakan — langkah penegakan hidro untuk pemodelan hidraulik dan banjir, seperti ArcGIS Enforce River Monotonicity. Tidak seperti fill_depressions/fill_burn (yang menghapus lubang tertutup), alat ini menegakkan profil monoton sepanjang vektor sungai yang diketahui.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer polyline sungai masukan (LineString / MultiLineString) yang berbagi CRS dengan DEM."
              },
              "surface": {
                "label": "Permukaan",
                "description": "Raster elevasi (DEM) yang akan dikoreksi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path DEM terkoreksi keluaran (format dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Penurunan elevasi minimum yang diberlakukan per langkah densifikasi, dalam satuan Z (default 0 = tidak meningkat). Nilai positif memaksa profil yang menurun ketat."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Interval densifikasi dalam satuan CRS sepanjang setiap garis sungai. Default: ukuran sel raster (≈ satu sampel per sel)."
              },
              "band": {
                "label": "Band",
                "description": "Band DEM berbasis 1 yang dikoreksi (default 1)."
              }
            }
          },
          "estimate_time_to_event": {
            "name": "Estimasi waktu ke kejadian",
            "description": "Estimasi waktu hingga suatu kejadian melalui kurva survival Kaplan-Meier (seperti ArcGIS Estimate Time To Event): dari field durasi dan field kejadian/penyensoran, hitung probabilitas survival setiap fitur dan median waktu-ke-kejadian stratumnya, secara opsional distratifikasi berdasarkan field kategorikal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik atau poligon masukan dengan field durasi dan field peristiwa/penyensoran."
              },
              "age_field": {
                "label": "Field usia",
                "description": "Field yang menyimpan durasi teramati setiap fitur (waktu hingga peristiwa atau waktu hingga penyensoran), berupa angka non-negatif."
              },
              "event_field": {
                "label": "Field kejadian",
                "description": "Field yang menunjukkan apakah peristiwa terjadi (bernilai benar: 1/true) atau pengamatan disensor (bernilai salah: 0/false)."
              },
              "stratify_field": {
                "label": "Field stratifikasi",
                "description": "Field kategorikal opsional untuk menyesuaikan kurva ketahanan terpisah per kelompok."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer keluaran dengan field km_survival, km_median, dan km_stratum yang ditambahkan. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "estimate_variogram": {
            "name": "Estimasi variogram",
            "description": "Menghitung semivariogram empiris dari pengamatan titik untuk mengkarakterisasi struktur korelasi spasial. Langkah pertama yang esensial dalam alur kerja geostatistik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik vektor masukan dengan nilai"
              },
              "field": {
                "label": "Field",
                "description": "Field yang berisi nilai pengukuran"
              },
              "lag_distance": {
                "label": "Jarak lag",
                "description": "Ukuran bin lag dalam satuan peta (default: 100.0)"
              },
              "lag_tolerance": {
                "label": "Toleransi lag",
                "description": "Toleransi untuk pembinan lag (default: 50.0)"
              },
              "max_lag_count": {
                "label": "Jumlah lag maksimum",
                "description": "Jumlah lag maksimum yang dipertahankan (default: 20)"
              }
            }
          },
          "euclidean_direction": {
            "name": "Arah Euclidean",
            "description": "Menghitung azimut kompas dari setiap sel menuju sel sumber terdekatnya, ditambah raster jarak dan arah balik opsional (ArcGIS Euclidean Direction). Melengkapi keluarga Euclidean bawaan, yang menyertakan euclidean_distance (seberapa jauh) dan euclidean_allocation (sumber mana) tetapi bukan arahnya. Menggunakan transformasi jarak eksak yang membawa koordinat sumber terdekat; dengan raster penghalang, alat ini merutekan mengelilingi rintangan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster sumber: sel yang bukan nodata dan bukan nol adalah sumber."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster arah keluaran opsional (derajat searah jarum jam dari utara). Jika dihilangkan, disimpan di memori."
              },
              "output_distance": {
                "label": "Keluaran jarak",
                "description": "Path opsional untuk raster jarak pendamping."
              },
              "output_back_direction": {
                "label": "Keluaran arah balik",
                "description": "Path opsional untuk raster arah balik: arah perjalanan dari sel ini kembali menuju sumber terdekat. Sama dengan raster arah jika tidak ada penghalang; dengan penghalang, ini adalah langkah pertama jalur kembali."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Raster penghalang opsional; sel bukan nol dan bukan nodata menghambat jalur garis lurus, memaksa perutean mengitarinya."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Sel yang lebih jauh dari nilai ini terhadap sumber mana pun ditulis sebagai nodata."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari raster sumber yang dibaca (default 1)."
              }
            }
          },
          "evaluate_bin_sizes": {
            "name": "Evaluasi ukuran bin",
            "description": "Sapu ukuran bin agregasi kandidat dan laporkan diagnostik yang mengidentifikasi ukuran mana yang paling baik mengungkap struktur, seperti ArcGIS Evaluate Bin Sizes.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik yang akan diagregasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel diagnostik keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "bin_shape": {
                "label": "Bentuk bin",
                "description": "hexagon (default; aproksimasi offset baris, lihat dokumentasi) | square."
              },
              "sizes": {
                "label": "Ukuran",
                "description": "Ukuran bin kandidat yang dipisahkan koma (satuan peta). Jika dihilangkan, sapuan geometrik dihasilkan dari jarak tetangga terdekat rata-rata."
              },
              "steps": {
                "label": "Langkah",
                "description": "Jumlah kandidat dalam sapuan yang dihasilkan (default 8, maks 64)."
              },
              "analysis_field": {
                "label": "Field analisis",
                "description": "Field numerik opsional yang dijumlahkan per bin alih-alih menghitung titik."
              }
            }
          },
          "evaluate_variable_influence": {
            "name": "Evaluasi pengaruh variabel",
            "description": "Melaporkan kepentingan permutasi dan kurva dependensi parsial untuk model forest yang disesuaikan dari tabel, menjawab variabel penjelas mana yang benar-benar digunakan model dan bentuk setiap efeknya (ArcGIS Evaluate Variable Influence). Katalog dapat menyesuaikan model — generalized_linear_regression, exploratory_regression, geographically_weighted_regression, forest_based_forecast, random forest whitebox — tetapi tidak satu pun melaporkan kedua ukuran tersebut. ArcGIS membaca file model .ssm terlatih; tumpukan ini tidak memiliki format model portabel, sehingga alat ini menyesuaikan forest-nya sendiri lalu menjelaskannya. Sepenuhnya deterministik: bagging berlangkah dan permutasi tetap, tanpa RNG.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer atau tabel yang menyimpan pengamatan pelatihan."
              },
              "dependent_field": {
                "label": "Field dependen",
                "description": "Field yang diprediksi."
              },
              "explanatory_fields": {
                "label": "Field penjelas",
                "description": "Field numerik yang dipisahkan koma untuk dievaluasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Tabel keluaran berisi kepentingan per variabel. Jika dihilangkan, disimpan di memori."
              },
              "output_partial_dependence": {
                "label": "Keluaran dependensi parsial",
                "description": "Tabel keluaran berisi kurva dependensi parsial, satu baris per variabel dan titik grid. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "model_type": {
                "label": "Jenis model",
                "description": "'regression' (default) untuk target kontinu, atau 'classification' untuk target kategorikal."
              },
              "number_of_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon dalam ensemble (default 50)."
              },
              "max_depth": {
                "label": "Kedalaman maksimum",
                "description": "Kedalaman pohon maksimum (default 8)."
              },
              "min_samples_leaf": {
                "label": "Sampel minimum per daun",
                "description": "Jumlah pengamatan paling sedikit yang boleh dimiliki sebuah daun (default 3)."
              },
              "grid_points": {
                "label": "Titik grid",
                "description": "Jumlah titik per kurva dependensi parsial (default 12)."
              },
              "permutation_repeats": {
                "label": "Pengulangan permutasi",
                "description": "Jumlah permutasi berbeda yang dirata-ratakan per variabel (default 3). Lebih banyak lebih stabil dan lebih lambat."
              }
            }
          },
          "excel_to_table": {
            "name": "Excel ke tabel",
            "description": "Baca lembar kerja dari workbook .xlsx/.xls/.xlsb/.ods ke tabel atribut, dengan menyimpulkan kolom numerik vs teks.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path buku kerja Excel/OpenDocument masukan (.xlsx, .xls, .xlsb, atau .ods)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran opsional (driver dari ekstensinya; GeoParquet .parquet disarankan). Jika dihilangkan, disimpan di memori."
              },
              "sheet": {
                "label": "Lembar",
                "description": "Lembar kerja yang dibaca, berdasarkan nama atau indeks berbasis 0. Default: lembar pertama."
              },
              "cell_range": {
                "label": "Rentang sel",
                "description": "Rentang notasi A1 opsional yang diimpor, misalnya 'B2:E40'. Default: seluruh rentang terpakai pada lembar tersebut."
              },
              "field_names_row": {
                "label": "Baris nama field",
                "description": "Baris berbasis 1 dalam rentang terpilih yang menyimpan nama kolom (default 1). Baris di atasnya dilewati; 0 berarti tidak ada baris header (Field1, Field2, ... dibuat otomatis)."
              }
            }
          },
          "expand_shrink": {
            "name": "Perluas / Susutkan",
            "description": "Perluas (expand) atau susutkan kelas terpilih dari raster kategorikal sejumlah sel, dengan membiarkan kelas lain utuh — pembersihan standar untuk tutupan lahan terklasifikasi sebelum poligonisasi, seperti ArcGIS Expand / Shrink.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kategorikal (bernilai bilangan bulat) masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran. Jika dihilangkan, disimpan di memori."
              },
              "classes": {
                "label": "Kelas",
                "description": "Nilai kelas yang dipisahkan koma untuk diperluas atau disusutkan."
              },
              "cells": {
                "label": "Sel",
                "description": "Jumlah sel untuk memperluas atau menyusutkan (>= 1)."
              },
              "mode": {
                "label": "Mode",
                "description": "'expand' (tumbuhkan kelas terpilih; default) atau 'shrink' (erosi kelas tersebut)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "exploratory_interpolation": {
            "name": "Interpolasi eksploratif",
            "description": "Jalankan beberapa metode interpolasi (IDW, tetangga terdekat, permukaan tren orde pertama/kedua), lakukan validasi silang leave-one-out pada masing-masing, dan peringkatkan berdasarkan akurasi prediksi (RMSE/MAE) atau bias (ME) — seperti ArcGIS Exploratory Interpolation. Melaporkan tabel perbandingan per metode berperingkat dan dapat menghasilkan raster prediksi metode terbaik. Mencakup permintaan validasi silang mandiri.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik pengukuran masukan."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik pada titik yang menyimpan nilai untuk diinterpolasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Tabel perbandingan berperingkat keluaran — sebuah CSV (ekstensi .csv) atau tabel vektor tanpa geometri. Jika dihilangkan, disimpan di memori."
              },
              "methods": {
                "label": "Metode",
                "description": "Subset metode yang dipisahkan koma/pipa untuk dibandingkan: 'idw', 'nearest', 'trend1', 'trend2'. Default: keempatnya."
              },
              "criterion": {
                "label": "Kriteria",
                "description": "Kriteria pemeringkatan: 'rmse' (default, galat terendah), 'mae' (galat absolut terendah), atau 'me' (bias terkecil, |galat rata-rata| terkecil)."
              },
              "power": {
                "label": "Pangkat",
                "description": "Eksponen peluruhan jarak IDW (default 2)."
              },
              "output_raster": {
                "label": "Raster keluaran",
                "description": "GeoTIFF keluaran opsional: metode berperingkat terbaik yang disesuaikan pada semua sampel, dievaluasi pada grid yang mencakup ekstensi sampel."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel raster pemenang dalam satuan CRS (derajat untuk CRS geografis). Default: diukur agar sumbu yang lebih panjang mencakup ~256 sel."
              }
            }
          },
          "exploratory_regression": {
            "name": "Regresi eksploratif",
            "description": "Enumerasi model OLS atas setiap kombinasi field penjelas kandidat dan saring masing-masing berdasarkan R2 tersesuaikan, signifikansi koefisien, multikolinearitas VIF, normalitas residu Jarque-Bera, dan autokorelasi spasial Moran's I residu, melaporkan setiap model ditambah set lolos berperingkat dan ringkasan signifikansi per variabel — seperti ArcGIS Exploratory Regression.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan dengan geometri (digunakan untuk ketetanggaan Moran's I residu)."
              },
              "dependent_field": {
                "label": "Field dependen",
                "description": "Field numerik terikat (respons)."
              },
              "explanatory_fields": {
                "label": "Field penjelas",
                "description": "Field numerik penjelas kandidat yang dipisahkan koma untuk dicari."
              },
              "min_vars": {
                "label": "Variabel minimum",
                "description": "Jumlah variabel penjelas minimum per model kandidat (default 1)."
              },
              "max_vars": {
                "label": "Variabel maksimum",
                "description": "Jumlah variabel penjelas maksimum per model kandidat (default: min(jumlah kandidat, 6))."
              },
              "max_coef_p": {
                "label": "P koefisien maksimum",
                "description": "Nilai p maksimum yang diizinkan untuk setiap koefisien penjelas (default 0.05)."
              },
              "min_adj_r2": {
                "label": "R2 tersesuaikan minimum",
                "description": "R-kuadrat terkoreksi minimum (default 0.5)."
              },
              "max_vif": {
                "label": "VIF maksimum",
                "description": "Faktor inflasi varians maksimum yang diizinkan per suku (default 7.5)."
              },
              "min_jb_p": {
                "label": "P JB minimum",
                "description": "Nilai p Jarque-Bera minimum untuk normalitas residu (default 0.1)."
              },
              "min_moran_p": {
                "label": "P Moran minimum",
                "description": "Nilai p minimum untuk autokorelasi spasial residu (Moran's I); di atas nilai ini residu tidak terkelompok secara signifikan (default 0.1)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah tetangga terdekat yang mendefinisikan bobot spasial untuk uji Moran's I residu (default 8)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel laporan keluaran — sebuah CSV (ekstensi .csv) atau tabel vektor tanpa geometri."
              }
            }
          },
          "extract_locations_from_text": {
            "name": "Ekstrak lokasi dari teks",
            "description": "Pindai teks bebas untuk koordinat tertanam — derajat desimal (DD), derajat-menit desimal (DDM), derajat-menit-detik (DMS), dan referensi grid MGRS/USNG — dan hasilkan satu titik WGS84 per temuan, seperti ArcGIS Extract Locations From Text (cabang koordinat). Pemindaian pola murni; tanpa layanan geocoding.",
            "params": {
              "input_text": {
                "label": "Teks masukan",
                "description": "Teks bebas yang akan dipindai. Berupa teks harfiah, atau path ke file teks UTF-8 (dibaca jika nilainya mengacu ke file yang ada)."
              },
              "notations": {
                "label": "Notasi",
                "description": "Subset notasi yang dipisahkan koma/spasi untuk dipindai: DD, DDM, DMS, MGRS (USNG adalah alias dari MGRS). Default: keempatnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "extract_ocean_winds": {
            "name": "Ekstrak angin laut",
            "description": "Mengambil kecepatan angin laut setara-netral 10 m dari hamburan balik SAR terkalibrasi dengan membalik fungsi model geofisika CMOD5.N (ArcGIS Extract Ocean Winds). Seluruh rantai SAR yang ada tetap berada di domain radiometrik dan tidak ada yang mengonversi hamburan balik menjadi kuantitas geofisika, yang juga membedakan bercak angin rendah dari tumpahan minyak.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster hamburan balik terkalibrasi (sigma0)."
              },
              "units": {
                "label": "Satuan",
                "description": "Satuan 'input': 'dn', 'amplitude', 'intensity', atau 'db' (default 'db')."
              },
              "incidence_angle": {
                "label": "Sudut datang",
                "description": "Sudut datang per sel dalam derajat: sebuah path raster, atau angka konstanta."
              },
              "wind_direction": {
                "label": "Arah angin",
                "description": "Arah angin meteorologis dalam derajat (arah datangnya angin), sebagai path raster atau konstanta. Prasyarat wajib: CMOD memiliki dua besaran tak diketahui dan satu pengamatan."
              },
              "look_direction": {
                "label": "Arah pandang",
                "description": "Azimut pandang radar dalam derajat, sebagai path raster atau konstanta. Digunakan untuk mengonversi arah angin menjadi sudut relatif yang dipakai CMOD."
              },
              "polarization": {
                "label": "Polarisasi",
                "description": "'vv' (default, CMOD5.N asli) atau 'hh' (menerapkan rasio polarisasi perkiraan)."
              },
              "polarization_ratio_alpha": {
                "label": "Alpha rasio polarisasi",
                "description": "Alfa dalam rasio polarisasi HH-ke-VV (default 0.6). Hanya digunakan jika polarisasi 'hh'."
              },
              "water_mask": {
                "label": "Masker air",
                "description": "Layer poligon atau raster opsional yang membatasi keluaran pada perairan; return dari daratan tidak bermakna di sini."
              },
              "max_wind": {
                "label": "Angin maksimum",
                "description": "Batas atas rentang inversi, m/s (default 50)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster kecepatan angin keluaran dalam m/s. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "extract_scanned_features": {
            "name": "Ekstrak fitur hasil pindai",
            "description": "Vektorisasi raster biner (hasil pindai/ambang) menjadi garis bersih (penelusuran kerangka) atau poligon, dengan penghapusan derau, pengisian lubang, penutupan celah, dan penyederhanaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster biner/terklasifikasi masukan yang akan divektorisasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "feature_type": {
                "label": "Jenis fitur",
                "description": "'lines' (default): skeletonisasi dan telusuri garis tengah. 'polygons': vektorisasi wilayah terisi."
              },
              "foreground_value": {
                "label": "Nilai latar depan",
                "description": "Nilai sel yang menandai latar depan. Jika dihilangkan, sel >= 'threshold' (atau, jika itu pun tidak ada, setiap sel valid bukan nol) menjadi latar depan."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Latar depan adalah sel dengan nilai >= nilai ini (digunakan jika 'foreground_value' tidak diberikan)."
              },
              "noise_size": {
                "label": "Ukuran derau",
                "description": "Hapus komponen latar depan yang lebih kecil dari sekian sel ini (default 4)."
              },
              "hole_size": {
                "label": "Ukuran lubang",
                "description": "Isi lubang latar belakang yang lebih kecil dari sekian sel ini (default 4)."
              },
              "gap_distance": {
                "label": "Jarak celah",
                "description": "Untuk lines: jembatani celah hingga jarak ini (satuan CRS) antara titik ujung garis yang hampir segaris. Default 0 (nonaktif)."
              },
              "simplify_tolerance": {
                "label": "Toleransi penyederhanaan",
                "description": "Toleransi Douglas-Peucker (satuan CRS) untuk geometri keluaran. Default ~1 sel."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "extract_sinks": {
            "name": "Ekstrak sink",
            "description": "Ekstrak sink (luasan cekungan maksimum) dari DEM (lidar filling.py).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster DEM masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster sink opsional. Jika dihilangkan, disimpan di memori."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Jumlah piksel minimum untuk sebuah sink (dipertahankan jika lebih besar secara ketat; default 10)."
              },
              "region_output": {
                "label": "Keluaran wilayah",
                "description": "Path keluaran opsional untuk raster wilayah berlabel."
              },
              "depth_output": {
                "label": "Keluaran kedalaman",
                "description": "Path keluaran opsional untuk raster kedalaman pengisian."
              },
              "filled_output": {
                "label": "Keluaran terisi",
                "description": "Path keluaran opsional untuk DEM dengan cekungan terisi."
              },
              "csv_output": {
                "label": "Keluaran CSV",
                "description": "Path keluaran opsional untuk CSV atribut per wilayah."
              },
              "vector_output": {
                "label": "Keluaran vektor",
                "description": "Path keluaran opsional untuk poligon wilayah sebagai GeoJSON (atribut digabungkan)."
              },
              "flat_increment": {
                "label": "Inkremen datar",
                "description": "Peningkatan datar yang ditambahkan selama pengisian untuk memberlakukan drainase (default 0)."
              }
            }
          },
          "extract_spectra_from_image": {
            "name": "Ekstrak spektrum dari citra",
            "description": "Menurunkan pustaka spektral dari citra multiband dan wilayah pelatihan, satu spektrum per kelas, dalam tata letak CSV yang dibaca spectral_library_matching (ArcGIS Extract Spectra From Image). spectral_library_matching, spectral_angle_mapper, dan matched_filter_target_detection semuanya memakai pustaka dan tidak ada yang membuatnya, sehingga rangkaian spektral hanya dapat digunakan terhadap pustaka terbitan yang sudah ada.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Citra multiband."
              },
              "training_features": {
                "label": "Fitur pelatihan",
                "description": "Layer poligon atau titik yang mendelineasi setiap kelas atau target."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Atribut yang menyimpan label kelas. Fitur yang berbagi label digabungkan menjadi satu spektrum."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV pustaka spektral keluaran ('name,b1,b2,...' per kelas), siap untuk 'library_csv' pada spectral_library_matching."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Reduksi pada sel yang tertutupi: 'mean' (default), 'median', 'max', 'min'."
              },
              "trim_percent": {
                "label": "Persen pangkas",
                "description": "Persentase yang dibuang dari setiap ekor per band sebelum reduksi, untuk menekan piksel tepi campuran (default 0, maks 49)."
              },
              "min_cells": {
                "label": "Sel minimum",
                "description": "Kelas yang menutupi sel lebih sedikit dari nilai ini dilaporkan dan dilewati alih-alih menghasilkan 'spektrum' satu piksel (default 1)."
              },
              "wavelengths": {
                "label": "Panjang gelombang",
                "description": "Panjang gelombang per band opsional yang dipisahkan koma, dicatat sebagai header komentar dalam pustaka dan dalam output_stats."
              },
              "output_stats": {
                "label": "Keluaran statistik",
                "description": "CSV opsional yang menerima simpangan baku dan jumlah sel per kelas, per band. Dipisah agar pustaka tetap dapat diurai."
              }
            }
          },
          "extract_water_sar": {
            "name": "Ekstrak air (SAR)",
            "description": "Delineasi air terbuka dan luasan banjir dari hamburan balik SAR dengan ambang Otsu per adegan pada desibel, ditambah filter kemiringan DEM dan tinggi-di-atas-minimum opsional yang menolak bayangan radar dan permukaan gelap kering (ArcGIS Extract Water). Kedua registri tidak dapat melakukan ini dari radar: NDWI/MNDWI di spectral_index membutuhkan band reflektansi hijau/NIR/SWIR yang tidak dimiliki SAR, depth_to_water memodelkan di mana air seharusnya berada dari medan alih-alih mengamatinya, dan ambang raster_calculator yang ditetapkan manual tidak dapat dipindahkan antar adegan karena pemisah air/darat bergeser seiring angin dan sudut datang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster hamburan balik SAR."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon air keluaran. Jika dihilangkan, disimpan di memori."
              },
              "output_raster": {
                "label": "Raster keluaran",
                "description": "Masker air biner keluaran (1 air, 0 darat). Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "dem": {
                "label": "DEM",
                "description": "DEM opsional, terkoregistrasi dengan masukan, yang mengaktifkan filter kemiringan dan tinggi."
              },
              "threshold_db": {
                "label": "Ambang (dB)",
                "description": "Ambang tetap dalam dB; sel pada atau di bawahnya adalah air. Menggantikan ambang Otsu otomatis."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Buang badan air yang lebih kecil dari luas ini dalam satuan peta kuadrat."
              },
              "max_slope": {
                "label": "Kemiringan maksimum",
                "description": "Dengan DEM, tolak air pada medan yang lebih curam dari sekian derajat ini (default 5). Air tergenang tidak dapat menempati lereng curam, tetapi bayangan radar di sana sama gelapnya."
              },
              "max_height_above_min": {
                "label": "Tinggi maksimum di atas minimum",
                "description": "Dengan DEM, tolak sel kandidat yang berada lebih dari sekian satuan z ini di atas sel DEM terendah dalam wilayah terhubungnya sendiri."
              },
              "mask_features": {
                "label": "Fitur masker",
                "description": "Layer poligon yang membatasi area analisis."
              },
              "mask_type": {
                "label": "Jenis masker",
                "description": "'land_polygon' (default; analisis di luar poligon) atau 'water_polygon' (analisis di dalamnya)."
              },
              "histogram_bins": {
                "label": "Bin histogram",
                "description": "Bin yang digunakan untuk histogram Otsu (default 256)."
              },
              "input_units": {
                "label": "Satuan masukan",
                "description": "'intensity' (default), 'dn', 'amplitude', atau 'db'."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang diambang (default 1)."
              }
            }
          },
          "extrude_between": {
            "name": "Ekstrusi di antara",
            "description": "Membangun padatan tertutup kedap air yang membentang di ruang antara dua permukaan di dalam setiap poligon masukan, dengan volume eksak per fitur (ArcGIS Extrude Between). cut_fill memberikan perubahan volume per sel antara dua raster tetapi menghasilkan raster, tidak dapat dibatasi pada jejak, dan tidak membawa atribut; buffer_3d dan minimum_bounding_volume membangun padatan dari fitur alih-alih dari pasangan permukaan. Keluarannya langsung menjadi masukan union_3d, intersect_3d, difference_3d, dan inside_3d.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Jejak poligon yang mendefinisikan ekstensi lateral setiap solid. Hanya cincin PERTAMA dari bagian pertama yang digunakan: lubang interior dan bagian tambahan dari MultiPolygon diabaikan, jadi pisahkan jejak multibagian dan isi lubang sebelum mengekstrusi."
              },
              "surface_upper": {
                "label": "Permukaan atas",
                "description": "Raster permukaan pembatas atas."
              },
              "surface_lower": {
                "label": "Permukaan bawah",
                "description": "Raster permukaan pembatas bawah, terkoregistrasi dengan yang atas."
              },
              "output": {
                "label": "Keluaran",
                "description": "Fitur solid tertutup (MultiPolygon mesh segitiga dengan Z). Jika dihilangkan, disimpan di memori."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Jarak pengambilan sampel jejak dan densifikasi batas dalam satuan CRS. Default: ukuran sel permukaan yang lebih halus."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari setiap raster permukaan (default 1)."
              }
            }
          },
          "feature_outline_masks": {
            "name": "Masker garis luar fitur",
            "description": "Hasilkan poligon masker kartografis pada margin di sekitar fitur (garis luar eksak, convex hull, atau kotak pembatas), secara opsional dipotong ke layer kedua (Intersecting Layers Masks).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (geometri apa pun), format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "margin": {
                "label": "Margin",
                "description": "Jarak margin masker. Meter untuk CRS geografis (EPSG:4326 atau tidak diketahui, dikonversi ke derajat), jika tidak dalam satuan CRS layer. Harus positif."
              },
              "mask_kind": {
                "label": "Jenis masker",
                "description": "Bentuk masker: 'exact' (default, garis luar fitur yang dibuffer), 'convex_hull' (convex hull yang didilasi), atau 'box' (envelope pembatas + margin)."
              },
              "masked_layer": {
                "label": "Layer termasker",
                "description": "Layer poligon kedua opsional. Jika diberikan, masker dipotong ke irisannya dengan layer tersebut (Intersecting Layers Masks); masker yang tidak tumpang tindih dibuang."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field sumber opsional yang nilainya disalin ke setiap masker sebagai 'source_id'. Default-nya indeks fitur sumber."
              }
            }
          },
          "feature_to_line": {
            "name": "Fitur ke garis",
            "description": "Planarisasi fitur garis/batas poligon menjadi segmen garis ber-node yang tidak tumpang tindih yang dipisah pada setiap perpotongan bersama dan perpotongan diri, seperti ArcGIS Feature To Line — prasyarat pembangunan topologi yang tidak disediakan polygons_to_lines dan split_vector_lines bawaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor garis atau poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "cluster_tolerance": {
                "label": "Toleransi klaster",
                "description": "Jepret titik pemisah ke grid satuan peta ini untuk menggabungkan node yang hampir berimpit (default 1e-9)."
              },
              "attributes": {
                "label": "Atribut",
                "description": "Jika true (default), tandai setiap segmen keluaran dengan 'src_fid', yaitu id fitur sumber."
              }
            }
          },
          "feature_vertices_to_points": {
            "name": "Verteks fitur ke titik",
            "description": "Buat layer titik dari verteks fitur terpilih — ALL, START, END, BOTH_ENDS, MID (titik tengah panjang busur), atau DANGLE (titik ujung garis tidak bersama) — dengan field FID induk, seperti ArcGIS Feature Vertices To Points.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor garis, poligon, atau titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "point_location": {
                "label": "Lokasi titik",
                "description": "Verteks mana yang diekstrak: ALL | START | END | BOTH_ENDS | MID | DANGLE. Default ALL."
              }
            }
          },
          "features_to_gpx": {
            "name": "Fitur ke GPX",
            "description": "Tulis fitur titik sebagai waypoint GPX dan fitur garis sebagai track GPX, memetakan field atribut ke name/description/elevation/time.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik atau garis yang akan diekspor (diasumsikan WGS84 / EPSG:4326)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file .gpx keluaran."
              },
              "name_field": {
                "label": "Field nama",
                "description": "Field atribut yang dipetakan ke elemen GPX <name> (opsional)."
              },
              "description_field": {
                "label": "Field deskripsi",
                "description": "Field atribut yang dipetakan ke elemen GPX <desc> (opsional)."
              },
              "z_field": {
                "label": "Field Z",
                "description": "Field atribut yang dipetakan ke elevasi GPX <ele> (opsional; kembali ke Z geometri jika ada)."
              },
              "date_field": {
                "label": "Field tanggal",
                "description": "Field atribut yang dipetakan ke stempel waktu GPX <time>, berupa string ISO-8601 (opsional)."
              }
            }
          },
          "features_to_gtfs": {
            "name": "Fitur ke GTFS",
            "description": "Ekspor fitur titik ke stops.txt GTFS dan fitur garis ke shapes.txt GTFS, melengkapi siklus bolak-balik GTFS.",
            "params": {
              "stops_input": {
                "label": "Masukan pemberhentian",
                "description": "Layer vektor titik yang ditulis sebagai stops.txt (menggunakan field atribut stop_id/stop_name jika ada)."
              },
              "shapes_input": {
                "label": "Masukan bentuk",
                "description": "Layer vektor garis yang ditulis sebagai shapes.txt (menggunakan field atribut shape_id jika ada)."
              },
              "output_dir": {
                "label": "Direktori keluaran",
                "description": "Direktori tempat file teks GTFS (stops.txt / shapes.txt) ditulis. Dibuat jika belum ada."
              }
            }
          },
          "features_to_kml": {
            "name": "Fitur ke KML",
            "description": "Menulis layer vektor ke dokumen KML 2.2 (atau KMZ terkompresi), dengan atribut sebagai ExtendedData dan gaya bersama opsional (ArcGIS Layer To KML / Map To KML). kml_to_features sudah dapat membaca KML tetapi tidak ada yang menulisnya, tidak seperti pasangan simetris GPX, GTFS, dan GeoParquet.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan. Harus dalam bujur/lintang EPSG:4326, satu-satunya CRS yang didefinisikan KML."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file .kml atau .kmz keluaran."
              },
              "name_field": {
                "label": "Field nama",
                "description": "Atribut yang digunakan untuk <name> setiap Placemark."
              },
              "description_field": {
                "label": "Field deskripsi",
                "description": "Atribut yang digunakan untuk <description>. Jika dihilangkan, semua atribut ditulis sebagai <ExtendedData>."
              },
              "z_field": {
                "label": "Field Z",
                "description": "Atribut yang menyediakan elevasi, ditulis sebagai koordinat ketiga."
              },
              "altitude_mode": {
                "label": "Mode altitud",
                "description": "'clampToGround' (default), 'relativeToGround', atau 'absolute'."
              },
              "color": {
                "label": "Warna",
                "description": "Warna garis/garis luar sebagai heksa KML aabbggrr (misalnya 'ff0000ff' untuk merah pekat)."
              },
              "line_width": {
                "label": "Lebar garis",
                "description": "Lebar garis dalam piksel (default 1.0)."
              },
              "fill_color": {
                "label": "Warna isian",
                "description": "Warna isian poligon sebagai heksa KML aabbggrr. Hilangkan untuk tanpa isian."
              }
            }
          },
          "fence_diagram": {
            "name": "Diagram pagar",
            "description": "Menghasilkan panel penampang vertikal 3D di mana jejak garis melintasi tumpukan permukaan — cara standar memvisualisasikan stratigrafi bawah permukaan atau pelapisan atmosfer (ArcGIS Fence Diagram). profile, long_profile, dan stack_profile mengambil sampel permukaan sepanjang garis tetapi mengembalikan garis profil 2D atau tabel, tanpa geometri untuk ruang DI ANTARA permukaan berurutan, dan voxel_isosurface mengekstrak permukaan tingkat dari volume alih-alih penampang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur garis yang mendefinisikan jejak penampang."
              },
              "surfaces": {
                "label": "Permukaan",
                "description": "Daftar raster permukaan terkoregistrasi yang dipisahkan koma, terurut dari ATAS ke BAWAH."
              },
              "output": {
                "label": "Keluaran",
                "description": "Panel penampang 3D, satu per jejak per pasangan permukaan. Jika dihilangkan, disimpan di memori."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Jarak pengambilan sampel sepanjang jejak dalam satuan CRS. Default: ukuran sel permukaan terhalus."
              },
              "floor_height": {
                "label": "Tinggi lantai",
                "description": "Batas bawah konstanta opsional: permukaan dasar sintetis pada elevasi ini, yang menutup panel terdalam."
              },
              "ceiling_height": {
                "label": "Tinggi langit-langit",
                "description": "Batas atas konstanta opsional: permukaan puncak sintetis pada elevasi ini."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari setiap raster permukaan (default 1)."
              }
            }
          },
          "fill_missing_values": {
            "name": "Isi nilai hilang",
            "description": "Estimasi dan isi nilai null dalam field atribut numerik menggunakan tetangga spasial (k terdekat atau pita jarak), secara opsional dibatasi pada jendela temporal, dengan estimator yang dapat dipilih (mean/median/min/max/temporal_trend). Baris yang diimputasi ditandai dengan field penanda (ArcGIS Fill Missing Values).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan dengan field yang akan diisi."
              },
              "fill_field": {
                "label": "Field isian",
                "description": "Field numerik yang nilai null-nya akan diestimasi dan diisi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "estimator": {
                "label": "Estimator",
                "description": "Cara menggabungkan nilai tetangga: 'mean' (default), 'median', 'min', 'max', atau 'temporal_trend' (kuadrat terkecil terhadap waktu; memerlukan time_field)."
              },
              "neighbourhood": {
                "label": "Ketetanggaan",
                "description": "Pemilihan spasial: 'knn' (default, k terdekat) atau 'distance_band' (semua dalam search_radius)."
              },
              "k": {
                "label": "K",
                "description": "Jumlah tetangga terdekat untuk 'knn' (default 8)."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius (satuan CRS) untuk pemilihan 'distance_band'."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field numerik opsional yang memberikan waktu/urutan setiap fitur (wajib untuk 'temporal_trend')."
              },
              "time_window": {
                "label": "Jendela waktu",
                "description": "Opsional: batasi tetangga hanya pada yang berada dalam jarak waktu ini dari target (memerlukan time_field)."
              },
              "flag_field": {
                "label": "Field penanda",
                "description": "Nama field boolean yang menandai baris hasil imputasi (default 'imputed')."
              }
            }
          },
          "fill_spill_merge": {
            "name": "Fill-Spill-Merge",
            "description": "Rutekan volume terbatas air permukaan melintasi DEM untuk menghasilkan luasan danau/genangan yang realistis (pengisian cekungan parsial dengan limpasan dan penggabungan), mengimplementasikan ulang Fill-Spill-Merge dari RichDEM.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan (elevasi)."
              },
              "water_level": {
                "label": "Muka air",
                "description": "Kedalaman air permukaan seragam yang diterapkan pada setiap sel. Berikan ini atau 'surface_water'."
              },
              "surface_water": {
                "label": "Air permukaan",
                "description": "Raster kedalaman air permukaan per sel (selaras dengan DEM). Menggantikan 'water_level' jika keduanya diberikan."
              },
              "ocean_level": {
                "label": "Muka laut",
                "description": "Muka laut opsional: sel pada atau di bawah elevasi ini yang terhubung ke tepi grid menjadi laut (dasar genangan pesisir)."
              },
              "edge_outlet": {
                "label": "Outlet tepi",
                "description": "Perlakukan setiap sel tepi grid sebagai outlet bebas (default true). Air yang mencapai tepi meninggalkan DEM."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster kedalaman air tergenang opsional. Jika dihilangkan, disimpan di memori."
              },
              "water_surface": {
                "label": "Permukaan air",
                "description": "Path keluaran opsional untuk permukaan hidraulik (DEM + kedalaman air)."
              },
              "flood_extent": {
                "label": "Luasan banjir",
                "description": "Path keluaran opsional untuk masker ekstensi banjir (1 jika ada air tergenang, jika tidak 0)."
              }
            }
          },
          "find_argument_statistics": {
            "name": "Temukan statistik argumen",
            "description": "Statistik argumen per piksel atas tumpukan raster (seperti ArcGIS Find Argument Statistics): indeks irisan (atau tanggal) dari maks/min, posisi median, jumlah irisan yang melewati ambang (durasi), atau rangkaian berurutan terpanjang — jawaban posisi argumen yang tidak dapat diberikan agregat nilai cell-statistics dan image_stack_profile bawaan.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah irisan) atau daftar raster terkoregistrasi yang dipisahkan koma, dalam urutan waktu."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster band tunggal keluaran berisi indeks irisan / tanggal / jumlah. Jika dihilangkan, disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'argmax' (default), 'argmin', 'median_position', 'duration', atau 'longest_run'."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Ambang numerik untuk 'duration'/'longest_run' (wajib untuk keduanya)."
              },
              "comparison": {
                "label": "Perbandingan",
                "description": "Pembanding untuk 'duration'/'longest_run': '>' (default), '>=', '<', atau '<='."
              },
              "dates": {
                "label": "Tanggal",
                "description": "Tanggal numerik opsional yang dipisahkan koma (misalnya hari ke- dalam tahun) per irisan; argmax/argmin/median menghasilkan tanggal yang bersesuaian alih-alih indeks irisan."
              },
              "min_valid": {
                "label": "Valid minimum",
                "description": "Jumlah minimum pengamatan bukan nodata per piksel (default 1)."
              }
            }
          },
          "find_dwell_locations": {
            "name": "Temukan lokasi persinggahan",
            "description": "Deteksi di mana entitas bergerak berdiam: rangkaian titik jejak dalam toleransi jarak selama setidaknya toleransi waktu, dihasilkan sebagai titik, pusat rata-rata, atau convex hull, seperti ArcGIS Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik berstempel waktu (fix jejak)."
              },
              "track_field": {
                "label": "Field jejak",
                "description": "Field yang mengidentifikasi jejak tempat setiap fix berada."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field stempel waktu (detik numerik atau teks ISO-8601)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "distance_tolerance": {
                "label": "Toleransi jarak",
                "description": "Jarak maksimum (satuan peta) sebuah fix boleh berada dari centroid berjalan dari persinggahan."
              },
              "time_tolerance": {
                "label": "Toleransi waktu",
                "description": "Durasi minimum (satuan sama dengan time_field) agar rangkaian diam dihitung sebagai persinggahan."
              },
              "output_type": {
                "label": "Jenis keluaran",
                "description": "dwell_features (default) | mean_centers | convex_hulls | all_features."
              }
            }
          },
          "find_identical": {
            "name": "Temukan identik",
            "description": "Temukan fitur yang identik pada geometri dan/atau field terpilih, mengelompokkan duplikat; 'report' menambahkan kolom dup_group/dup_seq, 'delete' hanya mempertahankan yang pertama dari setiap kelompok, seperti ArcGIS Find Identical / Delete Identical.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan yang akan dideduplikasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "fields": {
                "label": "Field",
                "description": "Field yang dipisahkan koma untuk dibandingkan. Hilangkan untuk membandingkan geometri saja; gabungkan dengan 'compare_geometry'."
              },
              "compare_geometry": {
                "label": "Bandingkan geometri",
                "description": "Apakah geometri menjadi bagian dari uji identitas (default true; setel false untuk membandingkan field saja)."
              },
              "xy_tolerance": {
                "label": "Toleransi XY",
                "description": "Toleransi penjepretan untuk perbandingan geometri (verteks dibulatkan ke grid ini sebelum di-hash). Default 0 (eksak)."
              },
              "mode": {
                "label": "Mode",
                "description": "'report' (default; menambahkan dup_group/dup_seq) atau 'delete' (mempertahankan yang pertama dari setiap kelompok)."
              }
            }
          },
          "find_meeting_locations": {
            "name": "Temukan lokasi pertemuan",
            "description": "Deteksi perkumpulan di mana beberapa jejak berbeda berada bersama dalam suatu jarak selama setidaknya durasi minimum (seperti ArcGIS Find Meeting Locations) — ko-okurensi N jejak yang tidak dicakup trace_proximity_events (berpasangan) dan reconstruct_tracks (persinggahan jejak tunggal). Menghasilkan hull area dan titik representatif dengan jumlah peserta, waktu mulai/akhir, dan durasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik jejak berstempel waktu (CRS terproyeksi; jarak dalam satuan peta)."
              },
              "track_field": {
                "label": "Field jejak",
                "description": "Field yang mengidentifikasi setiap jejak/entitas."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: detik numerik atau stempel waktu ISO-8601."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak maksimum (satuan peta) agar jejak dihitung berada bersama."
              },
              "min_meeting_duration": {
                "label": "Durasi pertemuan minimum",
                "description": "Durasi minimum (satuan waktu) sebuah pertemuan harus berlangsung untuk dilaporkan."
              },
              "max_meeting_duration": {
                "label": "Durasi pertemuan maksimum",
                "description": "Durasi maksimum opsional; pertemuan yang lebih lama dibuang."
              },
              "min_participants": {
                "label": "Peserta minimum",
                "description": "Jumlah minimum jejak berbeda dalam sebuah pertemuan (default 2)."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Lebar satu irisan waktu (satuan waktu). Default: min_meeting_duration."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer titik representatif keluaran (satu titik per pertemuan). Jika dihilangkan, disimpan di memori."
              },
              "output_area": {
                "label": "Keluaran luas",
                "description": "Layer area keluaran opsional (poligon convex hull per pertemuan). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "find_space_time_matches": {
            "name": "Temukan kecocokan ruang-waktu",
            "description": "Cocokkan fitur antara dua layer titik berstempel waktu yang berada dalam jarak pencarian spasial DAN jendela waktu satu sama lain (sebelum/sesudah/keduanya), menghasilkan pasangan tercocokkan dengan jarak dan offset waktu, seperti ArcGIS Find Space Time Matches.",
            "params": {
              "primary": {
                "label": "Utama",
                "description": "Layer titik utama (setiap fitur dicocokkan dengan layer sekunder)."
              },
              "secondary": {
                "label": "Sekunder",
                "description": "Layer titik sekunder sebagai pembanding pencocokan."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field stempel waktu yang ada di KEDUA layer (numerik atau ISO-8601)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer kecocokan keluaran (satu garis tautan per pasangan yang cocok). Jika dihilangkan, disimpan di memori."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak spasial maksimum antara fitur utama dan sekunder (satuan peta)."
              },
              "time_window": {
                "label": "Jendela waktu",
                "description": "Pemisahan waktu maksimum: jumlah detik atau durasi seperti '2h', '30m', '7d'."
              },
              "temporal_relationship": {
                "label": "Hubungan temporal",
                "description": "'either' (default), 'before' (sekunder sebelum utama), atau 'after' (sekunder setelah utama)."
              },
              "primary_id_field": {
                "label": "Field ID utama",
                "description": "Field yang menamai setiap fitur utama dalam keluaran (default: indeks fitur)."
              },
              "secondary_id_field": {
                "label": "Field ID sekunder",
                "description": "Field yang menamai setiap fitur sekunder dalam keluaran (default: indeks fitur)."
              }
            }
          },
          "fit_variogram": {
            "name": "Fit model variogram",
            "description": "Menyesuaikan model variogram teoretis (Spherical, Exponential, Gaussian) ke data semivariogram empiris untuk digunakan dalam kriging.",
            "params": {
              "lags_json": {
                "label": "JSON lag",
                "description": "Array JSON berisi bin lag dari estimate_variogram"
              },
              "model_family": {
                "label": "Famili model",
                "description": "Model: spherical, exponential, atau gaussian"
              }
            }
          },
          "flatten_interferogram": {
            "name": "Ratakan interferogram",
            "description": "Menghapus komponen fase topografi dari interferogram terbungkus menggunakan DEM dan baseline interferometrik, menyisakan sinyal deformasi dan atmosfer (mode perataan TOPO dari ArcGIS Generate Interferogram). sar_coherence sudah menghasilkan interferogram itu sendiri melalui output_phase, tetapi tidak ada di kedua registri yang dapat mensimulasikan dan mengurangkan fase topografi — dan di atas relief apa pun komponen itu mendominasi, sehingga interferogram yang tidak diratakan tidak dapat digunakan untuk pekerjaan deformasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster fase interferometrik terbungkus dalam radian (seperti yang dihasilkan output_phase pada sar_coherence), atau interferogram I/Q dua band."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster elevasi terkoregistrasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster fase terbungkus yang telah diratakan, dibungkus ulang ke (-pi, pi]. Jika dihilangkan, disimpan di memori."
              },
              "perpendicular_baseline": {
                "label": "Baseline tegak lurus",
                "description": "Baseline tegak lurus B_perp dalam meter. Wajib: nilai ini menetapkan sensitivitas tinggi terhadap fase, dan tidak ada default yang dapat dipertanggungjawabkan."
              },
              "wavelength": {
                "label": "Panjang gelombang",
                "description": "Panjang gelombang radar dalam meter (default 0.05546576, Sentinel-1 band C)."
              },
              "incidence_angle": {
                "label": "Sudut datang",
                "description": "Sudut datang dalam derajat: sebuah konstanta (default 39.0, tipikal tengah sapuan Sentinel-1 IW) atau path raster terkoregistrasi."
              },
              "slant_range": {
                "label": "Slant range",
                "description": "Jarak miring sensor ke tanah R dalam meter (default 800000)."
              },
              "reference_elevation": {
                "label": "Elevasi referensi",
                "description": "Elevasi yang diperlakukan sebagai fase topografis nol. Default: rata-rata DEM, sehingga keluaran tidak membawa offset global sembarang."
              },
              "out_topographic_phase": {
                "label": "Keluaran fase topografi",
                "description": "Raster fase topografis tersimulasi, DIBUNGKUS ke (-pi, pi] seperti keluaran yang diratakan — bukan fase simulasi absolut. Selalu dihasilkan; kembali ke handle dalam memori jika tidak ada path yang diberikan."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang menyimpan fase. Hilangkan untuk raster fase band tunggal atau interferogram I/Q dua band (yang kemudian terdeteksi otomatis); berikan untuk membaca fase riil dari band tertentu pada tumpukan multiband. Raster dengan lebih dari dua band MEMERLUKAN parameter ini, karena tiga band atau lebih bukan pasangan I/Q dan menebak akan menghasilkan fase yang tampak masuk akal tetapi salah."
              }
            }
          },
          "flip_line": {
            "name": "Balik garis",
            "description": "Balik urutan verteks (awal↔akhir) fitur polyline untuk membalik arah digitasinya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor garis masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "focal_flow": {
            "name": "Aliran fokal",
            "description": "Mengodekan tetangga mana dari delapan tetangga sel yang mengalir ke dalamnya sebagai masker 8-bit (ArcGIS Focal Flow). Tidak seperti alat akumulasi D8/D-infinity bawaan, yang merutekan setiap sel menuruni lereng sepanjang satu arah, alat ini mencatat setiap tetangga yang mengalir masuk — menangkap konvergensi ke lubang, sink, dan sadel. Bobot bit berjalan berlawanan arah jarum jam dari timur (1, 2, 4, 8, 16, 32, 64, 128); 0 adalah titik tinggi lokal, 255 adalah lubang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster permukaan masukan (elevasi atau permukaan kontinu apa pun)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Sebuah tetangga dihitung mengalir masuk hanya jika melebihi sel pusat lebih dari nilai ini (default 0)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "focal_statistics": {
            "name": "Statistik fokal",
            "description": "Statistik ketetanggaan jendela bergerak (persegi/lingkaran/anulus/baji; numerik dan kategorikal).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "statistics": {
                "label": "Statistik",
                "description": "Statistik: mean, majority, maximum, median, minimum, minority, percentile, range, std, sum, atau variety (default mean)."
              },
              "neighborhood": {
                "label": "Ketetanggaan",
                "description": "Bentuk ketetanggaan: rectangle, circle, annulus, atau wedge (default rectangle)."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar persegi panjang dalam sel (default 3)."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi persegi panjang dalam sel (default 3)."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius dalam sel untuk circle / wedge, dan radius luar untuk annulus (default 1)."
              },
              "inner_radius": {
                "label": "Radius dalam",
                "description": "Radius dalam, dalam sel, untuk ketetanggaan annulus (default 0)."
              },
              "start_angle": {
                "label": "Sudut awal",
                "description": "Sudut awal wedge dalam derajat (0 = timur, berlawanan arah jarum jam; default 0)."
              },
              "end_angle": {
                "label": "Sudut akhir",
                "description": "Sudut akhir wedge dalam derajat (0 = timur, berlawanan arah jarum jam; default 90)."
              },
              "percentile_value": {
                "label": "Nilai persentil",
                "description": "Persentil dalam [0, 100] untuk statistik persentil (default 90)."
              },
              "ignore_nodata": {
                "label": "Abaikan nodata",
                "description": "Jika true (default), reduksi hanya pada sel valid; jika false, sel nodata apa pun dalam jendela menghasilkan nodata."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang diproses (default 1)."
              }
            }
          },
          "forest_based_forecast": {
            "name": "Peramalan berbasis forest",
            "description": "Ramalkan nilai ke depan di setiap lokasi dengan random forest yang dilatih pada jendela lag bergeser dari riwayat lokasi itu sendiri, seperti ArcGIS Forest-based Forecast.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur berstempel waktu yang membawa id lokasi, field waktu, dan field nilai."
              },
              "location_field": {
                "label": "Field lokasi",
                "description": "Field yang mengidentifikasi lokasi tempat setiap pengamatan berada."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field waktu numerik yang digunakan untuk mengurutkan deret setiap lokasi."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang akan diramalkan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel ramalan keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "forecast_steps": {
                "label": "Langkah peramalan",
                "description": "Jumlah langkah yang diramalkan ke depan (default 3)."
              },
              "time_window": {
                "label": "Jendela waktu",
                "description": "Jumlah nilai sebelumnya yang digunakan sebagai prediktor (default: seperempat panjang deret, minimal 2)."
              },
              "validation_steps": {
                "label": "Langkah validasi",
                "description": "Langkah terakhir yang disisihkan untuk menilai RMSE (default 0, tanpa validasi)."
              },
              "n_trees": {
                "label": "Jumlah pohon",
                "description": "Jumlah pohon dalam forest (default 50, maks 500)."
              },
              "min_leaf_size": {
                "label": "Ukuran daun minimum",
                "description": "Jumlah baris pelatihan minimum dalam sebuah daun (default 2)."
              },
              "max_depth": {
                "label": "Kedalaman maksimum",
                "description": "Kedalaman pohon maksimum (default 8)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG deterministik yang menggerakkan bootstrapping dan pemilihan subset fitur (default 42)."
              }
            }
          },
          "frequency_comparison": {
            "name": "Perbandingan frekuensi",
            "description": "Menghitung, per sel, berapa banyak raster dalam tumpukan yang sama dengan / lebih besar dari / lebih kecil dari sel yang bersesuaian pada raster nilai referensi (ArcGIS Equal To Frequency, Greater Than Frequency, dan Less Than Frequency, ditambah operator inklusif dan negasi). Kedua registri tidak dapat mengagregasi perbandingan lintas tumpukan: cell_statistics tidak memiliki masukan referensi, raster_calculator mengekspresikan satu perbandingan tetapi tidak dapat menghitung lintas tumpukan dengan panjang sembarang, dan conditional_evaluation adalah pemilih satu kondisi.",
            "params": {
              "value_raster": {
                "label": "Raster nilai",
                "description": "Raster referensi sebagai pembanding setiap layer tumpukan, terkoregistrasi dengan masukan. Referensi band tunggal disiarkan ke setiap kelompok band; referensi multiband harus memiliki satu band per kelompok dan bergerak bersamanya."
              },
              "inputs": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah satu layer) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster jumlah keluaran (0..n). Jika dihilangkan, disimpan di memori."
              },
              "comparison": {
                "label": "Perbandingan",
                "description": "'equal' (default), 'greater', 'less', 'greater_equal', 'less_equal', atau 'not_equal'."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi absolut untuk 'equal'/'not_equal' pada data titik mengambang (default 0 = eksak)."
              },
              "ignore_nodata": {
                "label": "Abaikan nodata",
                "description": "Lewati pengamatan nodata per sel (default true). Jika false, pengamatan nodata apa pun membuat sel menjadi nodata."
              },
              "process_as_multiband": {
                "label": "Proses sebagai multiband",
                "description": "'single_band' (default): setiap band dari setiap masukan adalah satu layer dari satu tumpukan. 'multi_band': band i dari setiap masukan membentuk tumpukannya sendiri, menghasilkan hasil multiband."
              }
            }
          },
          "fuzzy_overlay": {
            "name": "Tumpang susun fuzzy",
            "description": "Skalakan ulang raster menjadi permukaan keanggotaan fuzzy 0..1 (linear/gaussian/small/large/ms_small/ms_large), atau gabungkan beberapa raster keanggotaan dengan fuzzy AND/OR/PRODUCT/SUM/GAMMA, seperti ArcGIS Fuzzy Membership + Fuzzy Overlay.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Mode keanggotaan: raster masukan yang ditransformasi menjadi permukaan 0..1."
              },
              "inputs": {
                "label": "Masukan",
                "description": "Mode tumpang susun: daftar yang dipisahkan koma berisi ≥2 raster keanggotaan untuk digabungkan. Lebih diutamakan daripada 'input'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran. Jika dihilangkan, hasil disimpan di memori."
              },
              "function": {
                "label": "Fungsi",
                "description": "Fungsi keanggotaan: 'linear' (default), 'gaussian', 'small', 'large', 'ms_small', 'ms_large'."
              },
              "overlay": {
                "label": "Tumpang susun",
                "description": "Operator tumpang susun: 'and' (min, default), 'or' (maks), 'product', 'sum', 'gamma'."
              },
              "midpoint": {
                "label": "Titik tengah",
                "description": "linear: nilai yang dipetakan ke 0.5 diabaikan (gunakan min/maks); gaussian/small/large: titik tengah fungsi; ms_small/ms_large: pengali rata-rata (default dari statistik band)."
              },
              "spread": {
                "label": "Sebaran",
                "description": "gaussian/small/large: sebaran (default gaussian 0.1, small/large 5); ms_small/ms_large: pengali simpangan baku (default 1)."
              },
              "min": {
                "label": "Min",
                "description": "linear: nilai yang dipetakan ke keanggotaan 0 (default nilai minimum band). Jika min>maks, rampa menurun."
              },
              "max": {
                "label": "Maks",
                "description": "linear: nilai yang dipetakan ke keanggotaan 1 (default nilai maksimum band)."
              },
              "gamma": {
                "label": "Gamma",
                "description": "Eksponen tumpang susun gamma dalam [0,1] (default 0.9)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang ditransformasi dalam mode keanggotaan (default 1)."
              }
            }
          },
          "gaussian_geostatistical_simulations": {
            "name": "Simulasi geostatistik Gaussian",
            "description": "Simulasi Gaussian sekuensial: N realisasi bersyarat berpeluang sama dari suatu medan yang menghormati data sampel (seperti ArcGIS Gaussian Geostatistical Simulations) — keluaran multi-realisasi bersyarat yang tidak disediakan empirical_bayesian_kriging / kriging biasa berpermukaan tunggal dan turning_bands_simulation tak bersyarat. Berseed dan deterministik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan dengan nilai pengondisi (CRS terproyeksi)."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang menyimpan nilai untuk disimulasikan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster multiband keluaran (satu band per realisasi). Jika dihilangkan, disimpan di memori."
              },
              "num_realizations": {
                "label": "Jumlah realisasi",
                "description": "Jumlah realisasi / band keluaran (default 10)."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS. Default: sisi terpanjang ekstensi / 100."
              },
              "variogram_model": {
                "label": "Model variogram",
                "description": "'exponential' (default), 'spherical', atau 'gaussian'."
              },
              "nugget": {
                "label": "Nugget",
                "description": "Nugget manual; hilangkan untuk menyesuaikannya dari data."
              },
              "sill": {
                "label": "Sill",
                "description": "Sill parsial manual; hilangkan untuk menyesuaikannya dari data."
              },
              "range": {
                "label": "Rentang",
                "description": "Rentang manual; hilangkan untuk menyesuaikannya dari data."
              },
              "max_neighbors": {
                "label": "Tetangga maksimum",
                "description": "Jumlah maksimum titik diketahui yang digunakan per kriging sel (default 16)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG deterministik (default 1)."
              },
              "output_mean": {
                "label": "Keluaran rata-rata",
                "description": "Path raster opsional untuk rata-rata ensemble."
              },
              "output_std": {
                "label": "Keluaran simpangan baku",
                "description": "Path raster opsional untuk simpangan baku ensemble."
              }
            }
          },
          "generalized_linear_regression": {
            "name": "Regresi linear tergeneralisasi",
            "description": "Regresi global (gaussian/OLS, poisson, atau logistik) dari field dependen terhadap field penjelas melalui IRLS, dengan field keluaran nilai suai + residu dan diagnostik lengkap: koefisien per suku, galat baku, t/z, probabilitas, dan VIF, ditambah AICc, R²/devians, dan uji heteroskedastisitas Koenker terstudentisasi (Breusch–Pagan) — seperti ArcGIS Generalized Linear Regression.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan (titik, atau geometri lain — geometri dilewatkan tanpa perubahan)."
              },
              "dependent_field": {
                "label": "Field dependen",
                "description": "Field numerik terikat (respons). Untuk 'logistic' nilainya harus 0/1."
              },
              "explanatory_fields": {
                "label": "Field penjelas",
                "description": "Field numerik penjelas yang dipisahkan koma."
              },
              "family": {
                "label": "Famili",
                "description": "Keluarga model: 'gaussian' (OLS, default), 'poisson' (tautan log, cacahan) atau 'logistic' (tautan logit, 0/1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "report": {
                "label": "Laporan",
                "description": "Path CSV opsional untuk laporan koefisien + diagnostik model."
              }
            }
          },
          "generate_breach_lines": {
            "name": "Buat garis bobol",
            "description": "Dengan poligon cekungan dan DEM, hasilkan polyline di sepanjang mana setiap cekungan akan dibobol agar terdrainase, menggunakan kriteria biaya pembobolan minimum, jalur terpendek, atau perubahan elevasi minimum, dengan kedalaman potongan dan volume galian per bobolan. Seperti ArcGIS Generate Breach Lines.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Poligon cekungan (misalnya keluaran delineate_depressions)."
              },
              "dem": {
                "label": "DEM",
                "description": "Raster permukaan tempat pembobolan diukir."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path garis pembobolan keluaran. Jika dihilangkan, disimpan di memori."
              },
              "connection_points": {
                "label": "Titik koneksi",
                "description": "Fitur titik opsional yang membatasi tempat sebuah pembobolan boleh berakhir."
              },
              "method": {
                "label": "Metode",
                "description": "'minimum_breaching_cost' (default), 'shortest_path', atau 'minimum_elevation_change'."
              },
              "max_length": {
                "label": "Panjang maksimum",
                "description": "Buang pembobolan yang lebih panjang dari nilai ini (satuan peta); cekungan tersebut dibiarkan tanpa pembobolan."
              }
            }
          },
          "generate_near_table": {
            "name": "Buat tabel terdekat",
            "description": "Untuk setiap fitur masukan, daftar k fitur layer terdekat (atau semua dalam radius pencarian) dengan jarak, peringkat, sudut arah opsional, dan XY terdekat — tabel kedekatan multi-tetangga, seperti ArcGIS Generate Near Table.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik, garis, atau poligon) yang kedekatannya diukur."
              },
              "near_features": {
                "label": "Fitur terdekat",
                "description": "Layer vektor terdekat sebagai pembanding pencarian (titik, garis, atau poligon)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (satu Point per kecocokan terdekat). Jika dihilangkan, disimpan di memori."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Pertahankan hanya fitur terdekat dalam jarak ini (satuan peta). Wajib jika closest_count = 0 (semua dalam radius)."
              },
              "closest_count": {
                "label": "Jumlah terdekat",
                "description": "Jumlah fitur terdekat per fitur masukan (k, default 1). Gunakan 0 untuk mengembalikan setiap fitur terdekat dalam search_radius."
              },
              "angle": {
                "label": "Sudut",
                "description": "Tambahkan NEAR_ANGLE (arah aritmetika dalam derajat, timur = 0, berlawanan arah jarum jam). Default false."
              },
              "location": {
                "label": "Lokasi",
                "description": "Tambahkan kolom NEAR_X / NEAR_Y untuk lokasi terdekat. Default false."
              }
            }
          },
          "generate_network_swm": {
            "name": "Buat SWM jaringan",
            "description": "Membangun matriks bobot spasial di mana tetangga dan bobot berasal dari jarak perjalanan sepanjang jaringan garis alih-alih geometri garis lurus (ArcGIS Generate Network Spatial Weights). generate_spatial_weights_matrix hanya menawarkan konseptualisasi Euclidean dan topologis (knn, pita jarak tetap, jarak terbalik, kontiguitas, Delaunay), sehingga untuk fenomena terkendala jaringan ia menautkan fitur yang tidak dapat saling menjangkau dan membiaskan setiap statistik hilir. Keluaran menggunakan skema tabel yang sama, sehingga global_morans_i, local_morans_i_lisa, getis_ord_gi_star, dan compare_spatial_weights memakainya tanpa perubahan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik yang akan dibobot."
              },
              "network": {
                "label": "Jaringan",
                "description": "Jaringan garis tempat jarak perjalanan diukur."
              },
              "output": {
                "label": "Keluaran",
                "description": "Tabel bobot (CSV berdasarkan ekstensi, atau tabel vektor tanpa geometri), dalam skema origin/neighbor/weight yang sama seperti yang dihasilkan generate_spatial_weights_matrix. Jika dihilangkan, disimpan di memori."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field yang menyimpan id unik setiap fitur. Default: indeks fitur berbasis 0, sesuai dengan generate_spatial_weights_matrix."
              },
              "impedance_field": {
                "label": "Field impedansi",
                "description": "Field biaya jaringan. Default: panjang geometris setiap segmen."
              },
              "distance_cutoff": {
                "label": "Batas jarak",
                "description": "Impedansi jaringan maksimum tempat sebuah tetangga boleh berada. Default: tak terbatas."
              },
              "max_neighbors": {
                "label": "Tetangga maksimum",
                "description": "Batas jumlah tetangga per titik asal, mempertahankan yang terdekat. Default: tak terbatas."
              },
              "conceptualization": {
                "label": "Konseptualisasi",
                "description": "'fixed' (default, bobot biner 1 dalam batas) atau 'inverse' (bobot = 1 / impedansi^eksponen)."
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Eksponen peluruhan untuk 'inverse' (default 1)."
              },
              "row_standardization": {
                "label": "Standarisasi baris",
                "description": "Bagi bobot setiap titik asal dengan jumlah barisnya sehingga setiap titik asal bertotal 1. Default false, sesuai dengan generate_spatial_weights_matrix."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Jarak yang di dalamnya dua verteks jaringan dilebur menjadi satu node, dalam satuan CRS (default 1e-6). Jaringan yang segmennya hampir bertemu jika tidak akan terputus secara senyap, dan setiap titik asal yang terdampak akan menghasilkan nol baris."
              },
              "search_tolerance": {
                "label": "Toleransi pencarian",
                "description": "Jarak penjepretan maksimum dari sebuah titik ke jaringan. Titik yang lebih jauh dilaporkan sebagai tidak terjepret alih-alih diam-diam dilekatkan ke node yang jauh."
              }
            }
          },
          "generate_od_links": {
            "name": "Buat tautan asal-tujuan",
            "description": "Gambar garis keinginan lurus dari titik asal ke titik tujuan — dicocokkan berdasarkan ID bersama, dalam suatu jarak, dan/atau ke k terdekat — masing-masing membawa ID asal/tujuan dan panjang, seperti ArcGIS Generate Origin-Destination Links.",
            "params": {
              "origins": {
                "label": "Asal",
                "description": "Layer titik asal (Point atau MultiPoint)."
              },
              "destinations": {
                "label": "Tujuan",
                "description": "Layer titik tujuan (Point atau MultiPoint)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "num_nearest": {
                "label": "Jumlah terdekat",
                "description": "Pertahankan hanya k tujuan terdekat per titik asal (setelah filter id/jarak apa pun)."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Pertahankan hanya tujuan dalam jarak ini dari titik asal (satuan peta)."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field yang ada di KEDUA layer; hanya pasangan yang nilainya cocok yang ditautkan. Juga ditulis sebagai 'link_id'."
              },
              "origin_id_field": {
                "label": "Field ID asal",
                "description": "Field pada titik asal yang ditulis sebagai 'origin_id' (default: indeks fitur)."
              },
              "dest_id_field": {
                "label": "Field ID tujuan",
                "description": "Field pada tujuan yang ditulis sebagai 'dest_id' (default: indeks fitur)."
              }
            }
          },
          "generate_points_along_3d_lines": {
            "name": "Buat titik sepanjang garis 3D",
            "description": "Hasilkan titik berjarak seragam sepanjang garis 3D yang diukur dalam jarak 3D sebenarnya (bukan panjang denah 2D yang digunakan points_along_lines bawaan), dengan Z terinterpolasi, titik ujung opsional, dan field chainage 3D kumulatif. Seperti ArcGIS Generate Points Along 3D Lines.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur polyline 3D masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path titik keluaran. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'distance' (default), 'percentage', atau 'distance_field'."
              },
              "distance": {
                "label": "Jarak",
                "description": "Jarak dalam satuan peta untuk metode 'distance'."
              },
              "percentage": {
                "label": "Persentase",
                "description": "Jarak sebagai persentase (0-100) dari panjang 3D setiap garis untuk metode 'percentage'."
              },
              "distance_field": {
                "label": "Field jarak",
                "description": "Field yang memberikan jarak per fitur untuk metode 'distance_field'."
              },
              "include_end_points": {
                "label": "Sertakan titik ujung",
                "description": "Hasilkan juga verteks awal dan akhir setiap garis (default false)."
              },
              "add_chainage": {
                "label": "Tambah chainage",
                "description": "Tulis field CHAINAGE yang menyimpan jarak 3D kumulatif dari awal garis (default false)."
              }
            }
          },
          "generate_spatial_weights_matrix": {
            "name": "Buat matriks bobot spasial",
            "description": "Hasilkan tabel tetangga/bobot format panjang yang dapat digunakan kembali (origin_id, neighbor_id, weight) dari konseptualisasi terpilih — KNN, pita jarak tetap, jarak terbalik, kontiguitas (tepi / tepi+sudut), atau Delaunay — dengan standarisasi baris opsional, seperti ArcGIS Generate Spatial Weights Matrix.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik/garis/poligon; ketetanggaan memerlukan poligon)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran — sebuah CSV (ekstensi .csv) atau tabel vektor tanpa geometri. Jika dihilangkan, disimpan di memori."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field yang menyimpan id unik setiap fitur. Default: indeks fitur berbasis 0."
              },
              "method": {
                "label": "Metode",
                "description": "Konseptualisasi hubungan spasial: 'knn', 'fixed_distance_band', 'inverse_distance', 'contiguity_edges', 'contiguity_edges_corners', atau 'delaunay'. Default 'knn'."
              },
              "number_of_neighbors": {
                "label": "Jumlah tetangga",
                "description": "Jumlah tetangga terdekat k (method = knn). Default 8."
              },
              "threshold_distance": {
                "label": "Jarak ambang",
                "description": "Batas pita jarak dalam satuan peta. Wajib untuk fixed_distance_band; batas opsional untuk inverse_distance (tidak disetel = semua fitur lain)."
              },
              "exponent": {
                "label": "Eksponen",
                "description": "Eksponen peluruhan jarak p untuk inverse_distance (bobot = 1/d^p). Default 1."
              },
              "row_standardization": {
                "label": "Standarisasi baris",
                "description": "Bagi bobot setiap titik asal dengan jumlah barisnya sehingga bobot setiap titik asal bertotal 1. Default false."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Kuantisasi verteks ke grid berukuran ini (satuan CRS) sebelum mencocokkan batas untuk ketetanggaan. Default 0 (koordinat eksak)."
              }
            }
          },
          "generate_subset_polygons": {
            "name": "Buat poligon subset",
            "description": "Mempartisi layer titik rapat menjadi poligon kompak yang tidak tumpang tindih yang memetak luasan titik, masing-masing memuat antara jumlah titik minimum dan maksimum (ArcGIS Generate Subset Polygons). Langkah prapemrosesan standar untuk menginterpolasi set titik yang sangat besar. Tidak seperti grid tetap bawaan, alat ini beradaptasi dengan kerapatan (pemisahan k-d median), tidak seperti voronoi_diagram ia mengelompokkan titik alih-alih membuat satu sel per titik, dan tidak seperti group_by_proximity ia menghasilkan poligon dan menghormati batas ukuran.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path poligon keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "output_points": {
                "label": "Keluaran titik",
                "description": "Path opsional untuk titik masukan yang ditandai dengan id subsetnya. Jika dihilangkan, disimpan di memori (tetap dikembalikan)."
              },
              "min_points_per_subset": {
                "label": "Titik minimum per subset",
                "description": "Batas bawah jumlah titik per subset (default 50)."
              },
              "max_points_per_subset": {
                "label": "Titik maksimum per subset",
                "description": "Batas atas jumlah titik per subset (default 200)."
              },
              "coincident_points": {
                "label": "Titik berimpit",
                "description": "'single' (default; titik yang tepat berimpit dihitung sekali saat penentuan ukuran) atau 'all' (masing-masing dihitung tersendiri)."
              },
              "clip_to_hull": {
                "label": "Potong ke hull",
                "description": "Potong poligon subset ke convex hull titik agar hasilnya mengikuti data alih-alih kotak pembatasnya (default true)."
              }
            }
          },
          "generate_transects_along_lines": {
            "name": "Buat transek sepanjang garis",
            "description": "Telusuri setiap garis pada interval tetap dan hasilkan garis transek tegak lurus dengan panjang tertentu (terpusat atau offset), untuk pengambilan sampel perubahan garis pantai, riparian, dan penampang melintang — seperti ArcGIS Generate Transects Along Lines.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor garis masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "interval": {
                "label": "Interval",
                "description": "Jarak antar transek sepanjang setiap garis, dalam satuan CRS. Wajib."
              },
              "length": {
                "label": "Panjang",
                "description": "Panjang total transek, dalam satuan CRS. Wajib."
              },
              "offset": {
                "label": "Offset",
                "description": "Offset bertanda dari pusat transek terhadap garis, dalam satuan CRS (0 = di tengah; +/- menggeser ke kiri/kanan). Default 0."
              },
              "include_ends": {
                "label": "Sertakan ujung",
                "description": "Tempatkan juga transek tepat di awal dan akhir setiap garis. Default false."
              }
            }
          },
          "generate_trend_raster": {
            "name": "Buat raster tren",
            "description": "Sesuaikan tren temporal per piksel lintas deret waktu raster terkoregistrasi (seperti ArcGIS Generate Trend Raster): kemiringan/intersep/R² OLS atau Mann-Kendall non-parametrik + kemiringan Sen dengan nilai p — tren temporal per piksel yang tidak dapat dihasilkan trend_surface (spasial) dan change_vector_analysis (dua tanggal) bawaan.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar path raster band tunggal terkoregistrasi yang dipisahkan koma, dalam urutan waktu (>= 3)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster kemiringan keluaran (kemiringan Sen untuk mann_kendall). Jika dihilangkan, disimpan di memori."
              },
              "times": {
                "label": "Waktu",
                "description": "Waktu numerik yang dipisahkan koma (misalnya tahun) yang bersesuaian dengan 'inputs'. Default 0,1,2,..."
              },
              "method": {
                "label": "Metode",
                "description": "'linear' (OLS; default) atau 'mann_kendall' (nonparametrik + kemiringan Sen)."
              },
              "intercept_output": {
                "label": "Keluaran intersep",
                "description": "Hanya linear: raster keluaran opsional berisi intersep OLS."
              },
              "significance_output": {
                "label": "Keluaran signifikansi",
                "description": "Raster keluaran opsional: R² (linear) atau nilai p dua sisi Mann-Kendall (mann_kendall)."
              },
              "min_valid": {
                "label": "Valid minimum",
                "description": "Jumlah minimum pengamatan bukan nodata per piksel (default 3)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari setiap masukan (default 1)."
              }
            }
          },
          "geodetic_densify": {
            "name": "Rapatkan geodetik",
            "description": "Sisipkan verteks sepanjang jalur geodesik atau rhumb (arah konstan) sebenarnya antara verteks yang ada pada layer garis atau poligon geografis (bujur/lintang), seperti Geodetic Densify di ArcGIS — sehingga segmen panjang mengikuti kelengkungan bumi alih-alih tali busur planar.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor garis atau poligon masukan, diasumsikan geografis (bujur/lintang, bergaya EPSG:4326)."
              },
              "geodetic_type": {
                "label": "Jenis geodetik",
                "description": "Tipe jalur antar verteks: 'geodesic' (default; jalur terpendek pada elipsoid WGS84) atau 'rhumb'/'loxodrome' (arah sebenarnya yang konstan)."
              },
              "max_segment_length": {
                "label": "Panjang segmen maksimum",
                "description": "Jarak maksimum target, dalam meter, antara verteks berurutan setelah densifikasi. Tepat satu dari max_segment_length / vertices_per_segment harus diberikan."
              },
              "vertices_per_segment": {
                "label": "Verteks per segmen",
                "description": "Alternatif dari max_segment_length: sisipkan tepat sekian verteks berjarak sama ini ke setiap segmen asli, tanpa memandang panjangnya. Tepat satu dari max_segment_length / vertices_per_segment harus diberikan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional; jika dihilangkan, disimpan di memori."
              }
            }
          },
          "geotagged_photos_to_points": {
            "name": "Foto bergeotag ke titik",
            "description": "Baca folder foto bergeotag dan bangun layer titik WGS-84 dengan path setiap foto, waktu pengambilan, altitud, arah kamera (arah citra GPS), dan merek/model — diuraikan hanya dari metadata EXIF (tanpa mendekode piksel), seperti ArcGIS GeoTagged Photos To Points.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path folder yang berisi foto (JPEG/TIFF) untuk dibaca metadata GPS EXIF-nya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "recursive": {
                "label": "Rekursif",
                "description": "Telusuri subfolder saat memindai foto. Default false."
              },
              "only_geotagged": {
                "label": "Hanya bergeotag",
                "description": "Lewati citra yang tidak membawa posisi GPS (default true). Jika false, citra tanpa geotag dihasilkan dengan geometri null."
              }
            }
          },
          "getis_ord_general_g": {
            "name": "Klasterisasi tinggi/rendah (General G Getis-Ord)",
            "description": "Hitung statistik General G Getis-Ord global — satu skor z dan nilai p yang memberi tahu apakah nilai TINGGI atau RENDAH mengelompok secara global, seperti ArcGIS High/Low Clustering (Getis-Ord General G).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan. Titik menggunakan koordinatnya; geometri lain menggunakan titik representatif rata-rata verteksnya (bobot ketetanggaan memerlukan poligon)."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik non-negatif yang diuji untuk pengelompokan tinggi/rendah."
              },
              "weights": {
                "label": "Bobot",
                "description": "Skema bobot spasial: 'distance_band' (default), 'k_nearest', 'queen', atau 'rook'."
              },
              "distance_band": {
                "label": "Pita jarak",
                "description": "Jarak ambang (satuan CRS) untuk skema 'distance_band'. Default: jarak tetangga terdekat maksimum (setiap fitur memiliki >=1 tetangga)."
              },
              "k": {
                "label": "K",
                "description": "Jumlah tetangga untuk skema 'k_nearest' (default 8)."
              },
              "row_standardize": {
                "label": "Standarisasi baris",
                "description": "Standardisasi baris pada matriks bobot sehingga setiap baris berjumlah 1 (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV opsional untuk laporan satu baris. Selalu dikembalikan dalam hasil."
              }
            }
          },
          "goldstein_phase_filter": {
            "name": "Filter fase Goldstein",
            "description": "Penyaringan spektral adaptif (Goldstein) pada fase SAR interferometrik, langkah yang membuat pembukaan fase menjadi layak (ArcGIS Apply Complex Data Filter). unwrap_phase putaran 17 gagal pada interferogram mentah karena residu derau memaksa pemotongan cabang; seluruh keluarga filter lee/frost/kuan/wiener/gaussian bawaan bekerja pada intensitas bernilai riil dan tidak dapat dipakai di sini, karena merata-ratakan fase terbungkus melintasi diskontinuitas +/-pi akan merusaknya. Menyaring sinyal kompleks patch demi patch dalam domain frekuensi dan melaporkan jumlah residu sebelum dan sesudah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Interferogram: raster I/Q dua band, atau raster fase terbungkus band tunggal dalam radian (amplitudo satuan diasumsikan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster kompleks terfilter dua band (I, Q) keluaran. Jika dihilangkan, disimpan di memori."
              },
              "output_phase": {
                "label": "Keluaran fase",
                "description": "Fase terbungkus terfilter band tunggal keluaran dalam radian, dalam (-pi, pi]. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "alpha": {
                "label": "Alpha",
                "description": "Kekuatan filter dalam [0, 1] (default 0.5). Nilai 0 membiarkan fase tak tersentuh; 1 paling agresif."
              },
              "outer_window_size": {
                "label": "Ukuran jendela luar",
                "description": "Ukuran petak FFT dalam sel (default 32). Dibulatkan ke atas menjadi pangkat dua."
              },
              "inner_window_size": {
                "label": "Ukuran jendela dalam",
                "description": "Langkah antar petak dalam sel (default = luar/4). Lebih kecil berarti lebih banyak tumpang tindih dan pencampuran lebih halus; tidak boleh melebihi jendela luar."
              },
              "spectrum_smoothing": {
                "label": "Penghalusan spektrum",
                "description": "Lebar dalam bin dari rata-rata bergerak yang diterapkan pada spektrum petak sebelum eksponensiasi (default 3, harus ganjil)."
              }
            }
          },
          "gpx_to_features": {
            "name": "GPX ke fitur",
            "description": "Uraikan file GPX menjadi titik waypoint dan/atau polyline track/route, membawa ele/time/name.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path ke file .gpx (XML GPS Exchange Format)."
              },
              "points_output": {
                "label": "Keluaran titik",
                "description": "Path vektor titik keluaran opsional untuk waypoint (driver dari ekstensinya). Jika tidak ada keluaran yang diberikan, waypoint disimpan di memori."
              },
              "lines_output": {
                "label": "Keluaran garis",
                "description": "Path vektor garis keluaran opsional untuk jejak dan rute (driver dari ekstensinya)."
              }
            }
          },
          "graphic_buffer": {
            "name": "Buffer grafis",
            "description": "Buffer fitur dengan pilihan gaya ujung (round/square/butt) dan sambungan sudut (round/miter/bevel), dengan batas miter — geometri buffer persegi/bermiter yang tidak dapat dihasilkan buffer yang hanya bulat.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "distance": {
                "label": "Jarak",
                "description": "Jarak buffer dalam satuan CRS layer. Harus positif."
              },
              "cap": {
                "label": "Ujung",
                "description": "Gaya ujung untuk ujung garis/titik: 'round' (default), 'square', atau 'butt' (alias 'flat')."
              },
              "join": {
                "label": "Gabung",
                "description": "Gaya sambungan sudut: 'round' (default), 'miter', atau 'bevel'."
              },
              "miter_limit": {
                "label": "Batas miter",
                "description": "Rasio panjang miter terhadap jarak buffer yang melampauinya sudut miter dibevel (default ArcGIS/JTS 10). Harus >= 1. Hanya digunakan jika join='miter'."
              },
              "dissolve": {
                "label": "Lebur (dissolve)",
                "description": "Jika true, gabungkan semua buffer menjadi satu fitur (multi)poligon yang dilebur. Default false (satu buffer per fitur masukan, atribut dipertahankan)."
              }
            }
          },
          "greater_than_or_equal_to": {
            "name": "Lebih besar atau sama dengan",
            "description": "Menguji apakah raster pertama lebih besar dari atau sama dengan raster kedua sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "grid_index_features": {
            "name": "Fitur indeks grid",
            "description": "Bangun grid indeks seri peta dari persegi berukuran halaman dengan nama halaman (A1, B3, ... atau berurutan), ukuran turunan skala, dan filter perpotongan data opsional — seperti ArcGIS Grid Index Features, ditambah mode strip yang mengikuti rute dengan halaman terotasi seperti ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan. Menyediakan ekstensi jika tidak ada ekstensi eksplisit yang diberikan, rute untuk mode strip, dan fitur yang diuji oleh intersect_only."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor poligon keluaran berisi halaman indeks (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "mode": {
                "label": "Mode",
                "description": "grid (default): memetak ekstensi persegi panjang. strip: mengikuti garis rute dengan halaman terotasi yang tumpang tindih."
              },
              "x_min": {
                "label": "X minimum",
                "description": "X minimum ekstensi eksplisit (satuan CRS). Berikan keempatnya x_min/y_min/x_max/y_max untuk menggantikan ekstensi masukan."
              },
              "y_min": {
                "label": "Y minimum",
                "description": "Y minimum ekstensi eksplisit (satuan CRS)."
              },
              "x_max": {
                "label": "X maksimum",
                "description": "X maksimum ekstensi eksplisit (satuan CRS)."
              },
              "y_max": {
                "label": "Y maksimum",
                "description": "Y maksimum ekstensi eksplisit (satuan CRS)."
              },
              "tile_width": {
                "label": "Lebar petak",
                "description": "Lebar halaman dalam satuan CRS. Berikan keduanya tile_width dan tile_height, atau gunakan page_size + map_scale."
              },
              "tile_height": {
                "label": "Tinggi petak",
                "description": "Tinggi halaman dalam satuan CRS (panjang halaman sepanjang rute dalam mode strip)."
              },
              "page_size": {
                "label": "Ukuran halaman",
                "description": "Praatur halaman kertas (a0..a4, letter, legal, tabloid) yang dimensi metriknya dikalikan dengan map_scale untuk menentukan ukuran setiap halaman. Memerlukan map_scale."
              },
              "map_scale": {
                "label": "Skala peta",
                "description": "Penyebut skala peta (misalnya 24000 untuk 1:24.000). Dengan page_size, ukuran petak = meter kertas × map_scale (CRS metrik diasumsikan)."
              },
              "origin_x": {
                "label": "Asal X",
                "description": "X titik asal grid tempat batas petak diselaraskan. Default: X minimum ekstensi."
              },
              "origin_y": {
                "label": "Asal Y",
                "description": "Y titik asal grid tempat batas petak diselaraskan. Default: Y minimum ekstensi."
              },
              "naming": {
                "label": "Penamaan",
                "description": "Skema penamaan halaman: alphanumeric (default; huruf kolom + nomor baris, misalnya A1) atau sequential (nomor urut baca)."
              },
              "intersect_only": {
                "label": "Hanya berpotongan",
                "description": "Jika true, buang halaman yang tidak beririsan dengan fitur masukan mana pun. Memerlukan input. Default false."
              },
              "route": {
                "label": "Rute",
                "description": "Mode strip: layer vektor garis yang diikuti. Default-nya fitur garis pertama dalam input."
              },
              "overlap": {
                "label": "Tumpang tindih",
                "description": "Mode strip: fraksi [0,1) tumpang tindih halaman berurutan sepanjang rute. Default 0.05."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG keluaran jika ekstensi diberikan secara eksplisit dan tidak ada layer masukan untuk mewarisi CRS."
              }
            }
          },
          "group_by_proximity": {
            "name": "Kelompokkan berdasarkan kedekatan",
            "description": "Tandai fitur dengan GROUP_ID untuk komponen terhubung spasial single-linkage — fitur dalam suatu jarak ('near') atau bersentuhan ('intersects'), secara opsional berbagi nilai atribut — seperti ArcGIS Group By Proximity.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (tipe geometri apa pun)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "relationship": {
                "label": "Hubungan",
                "description": "'near' (dalam 'spatial_near_distance', default) atau 'intersects' (bersentuhan, jarak 0)."
              },
              "spatial_near_distance": {
                "label": "Jarak dekat spasial",
                "description": "Jarak pencarian dalam satuan peta untuk 'near' (default 0)."
              },
              "attribute_field": {
                "label": "Field atribut",
                "description": "Field opsional; fitur hanya dikelompokkan jika berbagi nilai atribut ini."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Nama field id kelompok keluaran (default 'GROUP_ID')."
              }
            }
          },
          "gtfs_to_features": {
            "name": "GTFS ke fitur",
            "description": "Uraikan feed transit GTFS menjadi titik pemberhentian dan garis rute, secara opsional dengan hitungan frekuensi layanan per pemberhentian.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path ke direktori feed GTFS yang telah diekstrak (folder berisi file *.txt: stops.txt, shapes.txt, trips.txt, ...)."
              },
              "stops_output": {
                "label": "Keluaran pemberhentian",
                "description": "Path vektor titik keluaran opsional untuk perhentian (driver dari ekstensinya). Jika tidak ada keluaran yang diberikan, perhentian disimpan di memori."
              },
              "shapes_output": {
                "label": "Keluaran bentuk",
                "description": "Path vektor garis keluaran opsional untuk bentuk rute (driver dari ekstensinya)."
              },
              "frequency": {
                "label": "Frekuensi",
                "description": "Jika true, hitung keberangkatan terjadwal setiap perhentian dari stop_times.txt ke dalam field n_departures. Default false."
              },
              "start_time": {
                "label": "Waktu mulai",
                "description": "Batas bawah HH:MM:SS opsional untuk jendela frekuensi (waktu GTFS dapat melebihi 24:00:00)."
              },
              "end_time": {
                "label": "Waktu akhir",
                "description": "Batas atas HH:MM:SS opsional untuk jendela frekuensi."
              }
            }
          },
          "h3_polyfill": {
            "name": "Polyfill H3",
            "description": "Tutupi poligon masukan dengan sel grid global diskret H3 pada resolusi terpilih.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan (harus bujur/lintang geografis, EPSG:4326) atau handle dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran; driver diambil dari ekstensinya (.geojson, .fgb, .parquet, ...). Jika dihilangkan, layer disimpan di memori."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 dari 0 (paling kasar) hingga 15 (paling halus); default 8 (sel ~0,7 km²)."
              }
            }
          },
          "h3_to_vector": {
            "name": "Sel H3 ke poligon",
            "description": "Ubah kolom ID sel H3 menjadi poligon batas sel, dengan menyalin atribut lainnya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan (atau handle dalam memori) dengan field berisi id sel H3."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran; driver diambil dari ekstensinya (.geojson, .fgb, .parquet, ...). Jika dihilangkan, layer disimpan di memori."
              },
              "field": {
                "label": "Field",
                "description": "Nama field teks yang menyimpan id sel H3; default 'h3'."
              }
            }
          },
          "hdbscan": {
            "name": "Klasterisasi HDBSCAN",
            "description": "Klasterisasi berbasis kerapatan hierarkis (HDBSCAN*): MST keterjangkauan timbal balik, pohon klaster terkondensasi, dan pemilihan excess-of-mass, dengan probabilitas keanggotaan dan skor pencilan per titik — menangani kerapatan variabel tanpa epsilon, seperti opsi HDBSCAN pada ArcGIS Density-based Clustering.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (CRS terproyeksi; jarak dalam satuannya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (salinan masukan dengan field klaster). Jika dihilangkan, disimpan di memori."
              },
              "min_cluster_size": {
                "label": "Ukuran klaster minimum",
                "description": "Pengelompokan terkecil yang dianggap sebagai klaster (>= 2). Default 5."
              },
              "min_samples": {
                "label": "Sampel minimum",
                "description": "Ukuran ketetanggaan untuk estimasi kerapatan jarak inti (lebih tinggi = lebih banyak titik disebut derau). Default: min_cluster_size."
              }
            }
          },
          "hot_spot_analysis_comparison": {
            "name": "Perbandingan analisis hot spot",
            "description": "Bandingkan dua layer hasil hot spot Getis-Ord: cocokkan lokasinya, klasifikasikan setiap transisi (hot_to_hot, hot_to_cold, none_to_hot, ...), dan jalankan uji permutasi berseed atas kesepakatan keseluruhan — seperti ArcGIS Hot Spot Analysis Comparison.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Layer hasil hotspot pertama (titik atau poligon)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Layer hasil hotspot kedua."
              },
              "bin_field": {
                "label": "Field bin",
                "description": "Field signifikansi yang ada pada kedua masukan (positif = panas, negatif = dingin)."
              },
              "significance": {
                "label": "Signifikansi",
                "description": "Ambang nilai absolut yang di bawahnya sebuah lokasi dianggap 'none' (default 0)."
              },
              "match_field": {
                "label": "Field pencocokan",
                "description": "Field id opsional yang ada pada kedua masukan, digunakan untuk menggabungkan lokasi; jika tidak, centroid terdekat."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Jarak centroid maksimum untuk pencocokan lokasi terdekat (satuan peta). Tak terbatas jika dihilangkan."
              },
              "permutations": {
                "label": "Permutasi",
                "description": "Jumlah permutasi untuk uji kesesuaian global (default 499)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG permutasi deterministik (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "identify_narrow_polygons": {
            "name": "Identifikasi poligon sempit",
            "description": "Tandai poligon yang lebih sempit dari toleransi lebar di suatu tempat (sliver dan leher tipis), menganotasi masing-masing dengan penanda is_narrow dan perkiraan lebar minimum.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "width_tolerance": {
                "label": "Toleransi lebar",
                "description": "Ambang lebar dalam satuan CRS. Sebuah poligon dianggap sempit di tempat yang lebih tipis dari nilai ini. Wajib."
              },
              "min_narrow_area": {
                "label": "Luas sempit minimum",
                "description": "Luas bagian sempit minimum (satuan CRS kuadrat) yang diperlukan untuk menandai sebuah poligon; area sempit yang lebih kecil diabaikan sebagai derau. Default width_tolerance kuadrat, yang juga menyerap pembulatan sudut minor dari operasi pembukaan."
              },
              "narrow_only": {
                "label": "Hanya yang sempit",
                "description": "Jika true, buang fitur yang tidak sempit dan hasilkan hanya poligon sempit yang ditandai. Default false (anotasi dan pertahankan semua fitur)."
              }
            }
          },
          "idw_3d": {
            "name": "IDW 3D",
            "description": "Interpolasi jarak terbalik volumetrik dari pengamatan titik 3D ke tumpukan tingkat elevasi (satu band raster per tingkat), dengan faktor inflasi elevasi yang menangani anisotropi vertikal-vs-horizontal dan titik validasi silang leave-one-out opsional. Seperti ArcGIS IDW3D.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik 3D masukan."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang menyimpan nilai untuk diinterpolasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster multiband keluaran (satu band per aras elevasi). Jika dihilangkan, disimpan di memori."
              },
              "z_field": {
                "label": "Field Z",
                "description": "Field yang menyediakan elevasi; default-nya Z geometri."
              },
              "power": {
                "label": "Pangkat",
                "description": "Eksponen jarak terbalik (default 2)."
              },
              "elev_inflation_factor": {
                "label": "Faktor inflasi elevasi",
                "description": "Pengali yang diterapkan pada pemisahan vertikal sebelum jarak 3D dihitung (default 1). Nilai > 1 membuat jarak vertikal lebih berpengaruh, sesuai dengan skala korelasi vertikal yang lebih pendek pada sebagian besar data volumetrik."
              },
              "x_spacing": {
                "label": "Jarak antar X",
                "description": "Ukuran sel keluaran pada X (default: ekstensi / 100)."
              },
              "y_spacing": {
                "label": "Jarak antar Y",
                "description": "Ukuran sel keluaran pada Y (default: sama dengan x_spacing)."
              },
              "z_spacing": {
                "label": "Jarak antar Z",
                "description": "Jarak vertikal antar aras keluaran (default: rentang z / 10)."
              },
              "z_min": {
                "label": "Z minimum",
                "description": "Aras keluaran terendah (default: nilai minimum data)."
              },
              "z_max": {
                "label": "Z maksimum",
                "description": "Aras keluaran tertinggi (default: nilai maksimum data)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah sampel maksimum per prediksi (default 12)."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Jarak pencarian 3D (yang telah diinflasi) maksimum opsional; sampel di luarnya diabaikan."
              },
              "output_cv_features": {
                "label": "Keluaran fitur CV",
                "description": "Path opsional untuk titik validasi silang leave-one-out yang membawa nilai teramati, prediksi, dan residu."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG yang dicantumkan pada raster keluaran (default: CRS layer masukan)."
              }
            }
          },
          "incremental_spatial_autocorrelation": {
            "name": "Autokorelasi spasial inkremental",
            "description": "Hitung Moran's I global lintas serangkaian pita jarak yang meningkat dan laporkan kurva skor z dengan puncak pertama dan maksimumnya — cara yang dapat dipertanggungjawabkan untuk memilih jarak pengelompokan, seperti ArcGIS Incremental Spatial Autocorrelation.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (geometri lain menggunakan titik representatif rata-rata verteksnya). Gunakan CRS terproyeksi."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik yang diuji autokorelasi spasialnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV opsional untuk tabel per pita. Selalu dikembalikan dalam hasil."
              },
              "begin_distance": {
                "label": "Jarak awal",
                "description": "Jarak pita pertama, dalam satuan CRS. Default: jarak tetangga terdekat maksimum (setiap fitur memiliki >=1 tetangga)."
              },
              "increment": {
                "label": "Inkremen",
                "description": "Jarak yang ditambahkan pada setiap pita, dalam satuan CRS. Default: jarak awal."
              },
              "num_bands": {
                "label": "Jumlah band",
                "description": "Jumlah pita jarak yang dievaluasi (default 10)."
              }
            }
          },
          "inside_3d": {
            "name": "Di dalam 3D",
            "description": "Menentukan fitur 3D mana (titik, polyline, atau padatan) yang berada di dalam kontainer volumetrik tertutup, secara opsional melaporkan panjang atau fraksi verteks yang tercakup (ArcGIS Inside 3D). Setiap predikat pencakupan di kedua registri memproyeksikan ke bidang XY, sehingga sensor di atas jejak atau pipa di bawah persil saat ini teruji sebagai di dalamnya. Kontainer mengikuti konvensi mesh segitiga dari buffer_3d dan minimum_bounding_volume yang sudah ada.",
            "params": {
              "target": {
                "label": "Target",
                "description": "Fitur 3D yang diuji: titik, polyline, atau solid mesh segitiga."
              },
              "container": {
                "label": "Kontainer",
                "description": "Fitur 3D tertutup (solid mesh segitiga) yang bertindak sebagai wadah."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran opsional berisi pasangan target/wadah. Jika dihilangkan, disimpan di memori."
              },
              "mode": {
                "label": "Mode",
                "description": "'simple' (default) melaporkan apakah target berada di dalam; 'complex' menambahkan panjang yang termuat dan fraksi di dalam."
              },
              "output_features": {
                "label": "Fitur keluaran",
                "description": "Path opsional untuk bagian dalam target garis yang telah dipotong (mode complex). Jika dihilangkan, disimpan di memori (tetap dikembalikan)."
              }
            }
          },
          "integrate": {
            "name": "Integrasi",
            "description": "Jepret semua verteks lintas semua fitur dalam toleransi klaster ke lokasi bersama sehingga batas bersama yang hampir berimpit menjadi tepat berimpit, secara opsional menyisipkan verteks persimpangan T ke tepi terdekat — seperti ArcGIS Integrate.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (tipe geometri apa pun)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Jarak pengklasteran dalam satuan CRS: verteks dalam jarak ini dijepret ke lokasi bersama. Wajib."
              },
              "snap_to_edges": {
                "label": "Jepret ke tepi",
                "description": "Sisipkan juga verteks di tempat verteks suatu fitur jatuh dalam toleransi dari segmen fitur lain (persimpangan T). Default true."
              }
            }
          },
          "interpolate_from_spatiotemporal_points": {
            "name": "Interpolasi dari titik spasiotemporal",
            "description": "Kelompokkan pengamatan titik berstempel waktu ke dalam irisan waktu teratur dan interpolasikan masing-masing ke satu grid bersama, menghasilkan raster multidimensi terkoregistrasi, seperti ArcGIS Interpolate From Spatiotemporal Points.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik berstempel waktu."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang akan diinterpolasi."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field stempel waktu: detik numerik sejak epoch, atau teks ISO-8601."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran untuk irisan pertama. Irisan berikutnya ditulis di sebelahnya dengan akhiran _t<index>. Jika dihilangkan, semua irisan disimpan di memori."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "daily | weekly | monthly (default) | quarterly | yearly."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan peta. Default-nya 1/50 dari dimensi ekstensi yang lebih besar."
              },
              "method": {
                "label": "Metode",
                "description": "idw (default) | nearest | mean | median."
              },
              "power": {
                "label": "Pangkat",
                "description": "Eksponen jarak IDW (default 2)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah pengamatan terdekat yang digunakan per sel (default 8)."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Jumlah pengamatan minimum yang diperlukan agar suatu irisan diinterpolasi; irisan yang lebih jarang menghasilkan seluruhnya nodata alih-alih permukaan yang menyesatkan (default 3)."
              }
            }
          },
          "interpolate_shape": {
            "name": "Interpolasi bentuk",
            "description": "Drape titik/garis/poligon pada raster permukaan: rapatkan, sampel Z per verteks (bilinear atau terdekat), tulis geometri 3D, dan tambahkan metrik permukaan (z_min/z_max/z_mean, panjang permukaan 3D, kemiringan rata-rata), seperti ArcGIS Interpolate Shape / Add Surface Information.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik, garis, atau poligon) yang berbagi CRS dengan permukaan."
              },
              "surface": {
                "label": "Permukaan",
                "description": "Raster elevasi/permukaan yang akan disampel."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Interval densifikasi dalam satuan CRS; segmen panjang dipisah agar mengikuti permukaan. Default: ukuran sel raster."
              },
              "method": {
                "label": "Metode",
                "description": "Pengambilan sampel permukaan: 'bilinear' (default) atau 'nearest'."
              },
              "attributes": {
                "label": "Atribut",
                "description": "Daftar kolom metrik yang ditambahkan, dipisahkan koma: z_min,z_max,z_mean,surf_len,avg_slope. Default: semua."
              },
              "band": {
                "label": "Band",
                "description": "Band permukaan berbasis 1 yang disampel (default 1)."
              }
            }
          },
          "interpolate_with_barriers": {
            "name": "Interpolasi dengan penghalang",
            "description": "Interpolasi pengukuran titik ke raster sambil menghormati penghalang absolut (garis pantai, punggung bukit, patahan, dinding): pengaruh berjalan mengelilingi penghalang melalui jarak biaya/geodesik, bukan melintasinya — IDW atau kernel polinomial lokal orde pertama, seperti ArcGIS Kernel Interpolation With Barriers / Spline With Barriers. Alat idw/kriging/natural-neighbour/spline bawaan semuanya buta penghalang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik pengukuran masukan."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik pada titik yang menyimpan nilai untuk diinterpolasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster terinterpolasi keluaran (GeoTIFF). Jika dihilangkan, disimpan di memori."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer vektor penghalang opsional (polyline atau poligon). Dirasterisasi sebagai sel tak terlewati sehingga pengaruh harus dirutekan mengitarinya. Hilangkan untuk kontrol tanpa penghalang."
              },
              "method": {
                "label": "Metode",
                "description": "'idw' (default) atau 'local_polynomial' (penyesuaian bidang terboboti orde pertama dengan kernel jarak geodesik Gaussian)."
              },
              "power": {
                "label": "Pangkat",
                "description": "Eksponen peluruhan jarak IDW (default 2)."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita kernel Gaussian untuk local_polynomial (satuan jarak). Default: radius pencarian, atau ekstensi grid jika tidak ada."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius pencarian sebagai jarak geodesik (biaya): sampel di luarnya tidak memengaruhi suatu sel, dan sel yang tidak terjangkau dalam radius tersebut menjadi nodata. Meter untuk CRS geografis, satuan CRS jika tidak. Default: tak terbatas."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS (derajat untuk CRS geografis). Default: diukur agar sumbu yang lebih panjang mencakup ~256 sel."
              }
            }
          },
          "intersect_3d": {
            "name": "Irisan 3D",
            "description": "Menghitung volume yang dibagi oleh padatan 3D tertutup yang tumpang tindih, pasangan demi pasangan, dengan padatan pembatas opsional untuk setiap irisan (ArcGIS Intersect 3D). union_3d adalah satu-satunya tumpang susun 3D di kedua registri dan hanya menjawab pertanyaan volume gabungan; inside_3d adalah predikat pencakupan untuk titik dan garis, dan polygon_volume / surface_volume mengukur terhadap bidang referensi. Volume per padatan eksak; irisan diestimasi dari okupansi voksel pada resolusi yang dilaporkan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur solid 3D tertutup (MultiPolygon mesh segitiga dengan Z, seperti yang dihasilkan buffer_3d dan minimum_bounding_volume)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Layer solid kedua opsional. Jika dihilangkan, setiap pasangan dalam 'input' diiriskan (mode masukan tunggal ArcGIS)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Tabel keluaran berisi pasangan yang beririsan, satu baris per irisan tidak kosong. Jika dihilangkan, disimpan di memori."
              },
              "mode": {
                "label": "Mode",
                "description": "'table' (default): atribut saja. 'solid': juga menghasilkan solid pembatas setiap irisan sebagai geometri. Volume terukur selalu berupa atribut — tidak ada klaim mesh gabungan eksak."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Sel voksel sepanjang sumbu terpanjang kotak pembatas bersama setiap pasangan (default 64). Nilai lebih tinggi lebih akurat dan lebih lambat."
              }
            }
          },
          "intersect_3d_line_with_surface": {
            "name": "Irisan garis 3D dengan permukaan",
            "description": "Memisahkan garis 3D di setiap titik di mana garis tersebut melintasi permukaan elevasi atau multipatch, menandai setiap potongan di atas atau di bawah dan menghasilkan titik persilangan (ArcGIS Intersect 3D Line With Surface / Intersect 3D Line With Multi Patch). intersect_3d putaran 17 menerima padatan tertutup alih-alih garis, inside_3d adalah predikat pencakupan yang tidak memotong geometri maupun menemukan persilangan, dan interpolate_shape men-drape garis ke permukaan, membuang z garis yang menjadi dasar perbandingan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis 3D, dengan verteks bernilai z."
              },
              "surface": {
                "label": "Permukaan",
                "description": "Raster elevasi sebagai acuan pemotongan. Wajib kecuali 'multipatch' diberikan."
              },
              "multipatch": {
                "label": "Multipatch",
                "description": "Layer multipatch (multipoligon segitiga) sebagai acuan pemotongan, alih-alih permukaan raster."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer garis keluaran yang dipisah pada setiap persilangan. Jika dihilangkan, disimpan di memori."
              },
              "output_points": {
                "label": "Keluaran titik",
                "description": "Layer titik keluaran berisi persilangan itu sendiri. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "spacing": {
                "label": "Jarak antar",
                "description": "Langkah densifikasi tampak denah dalam satuan peta (default: satu sel permukaan). Nilai lebih kecil menyelesaikan persilangan lebih halus dengan biaya lebih besar."
              },
              "keep_above": {
                "label": "Pertahankan di atas",
                "description": "Pertahankan potongan di atas permukaan (default true)."
              },
              "keep_below": {
                "label": "Pertahankan di bawah",
                "description": "Pertahankan potongan di bawah permukaan (default true)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari raster permukaan (default 1)."
              }
            }
          },
          "intersecting_layers_masks": {
            "name": "Masker layer berpotongan",
            "description": "Hasilkan poligon masker kartografis pada margin di sekitar fitur layer termasker, tetapi hanya di tempat fitur tersebut berpotongan dengan layer masker kedua (garis luar eksak, convex hull, atau kotak pembatas).",
            "params": {
              "masked_layer": {
                "label": "Layer termasker",
                "description": "Layer vektor yang dimasker (geometri apa pun): setiap fitur yang beririsan dengan layer pemasker mendapat masker. Format terdeteksi otomatis (atau handle dalam memori)."
              },
              "masking_layer": {
                "label": "Layer masker",
                "description": "Layer vektor pemasker (geometri apa pun): sebuah fitur yang dimasker hanya dimasker di tempat ia beririsan dengan fitur layer ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "margin": {
                "label": "Margin",
                "description": "Jarak margin masker. Meter untuk CRS geografis (EPSG:4326 atau tidak diketahui, dikonversi ke derajat), jika tidak dalam satuan CRS layer. Harus positif."
              },
              "mask_kind": {
                "label": "Jenis masker",
                "description": "Bentuk masker: 'exact' (default, garis luar fitur yang dibuffer), 'convex_hull' (convex hull yang didilasi), atau 'box' (envelope pembatas + margin)."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field opsional pada layer yang dimasker yang nilainya disalin ke setiap masker sebagai 'source_id'. Default-nya indeks fitur sumber."
              }
            }
          },
          "intervisibility": {
            "name": "Intervisibilitas",
            "description": "Menguji setiap garis pandang terhadap penghalang vektor 3D dan menandainya terlihat atau terhalang, melaporkan penghalang mana yang menghalanginya dan di mana (ArcGIS Intervisibility). line_of_sight, visibility_index, viewshed, dan skyline_analysis semuanya bekerja terhadap raster permukaan; tidak ada yang dapat menguji terhadap penghalang multipatch 3D seperti bangunan, yang overhang dan arkadenya hilang ketika dibakar ke DEM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Garis pandang: polyline 3D yang verteks pertamanya adalah pengamat dan verteks terakhirnya target."
              },
              "obstructions": {
                "label": "Penghalang pandang",
                "description": "Satu atau lebih layer penghalang 3D yang dipisahkan koma (MultiPolygon mesh segitiga dengan Z)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Garis pandang keluaran dengan field visibilitas yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "visible_field": {
                "label": "Field visibilitas",
                "description": "Nama field visibilitas boolean (default 'VISIBLE'), sesuai parameter ArcGIS."
              },
              "observer_offset": {
                "label": "Offset pengamat",
                "description": "Tinggi yang ditambahkan ke titik ujung pengamat sebelum pengujian, dalam satuan CRS (default 0). Memodelkan tinggi mata atau instrumen."
              },
              "target_offset": {
                "label": "Offset target",
                "description": "Tinggi yang ditambahkan ke titik ujung target sebelum pengujian, dalam satuan CRS (default 0)."
              },
              "visible_only": {
                "label": "Hanya yang terlihat",
                "description": "Hasilkan hanya garis pandang yang tidak terhalang (default false)."
              }
            }
          },
          "is_closed_3d": {
            "name": "Tertutup 3D",
            "description": "Menandai fitur multipatch 3D mana yang merupakan padatan tertutup kedap air dan mana yang merupakan permukaan terbuka, dengan hitungan diagnostik tepi batas tidak berpasangan, tepi non-manifold, dan konsistensi arah putaran (ArcGIS Is Closed 3D). Setiap alat volumetrik dalam katalog — union_3d, inside_3d, minimum_bounding_volume, buffer_3d — mengasumsikan masukan tertutup dan mengembalikan angka tak bermakna untuk mesh terbuka, dan tidak ada yang memungkinkan Anda memeriksa prasyarat itu terlebih dahulu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur 3D (MultiPolygon mesh segitiga dengan Z, seperti yang dihasilkan buffer_3d, minimum_bounding_volume, dan voxel_isosurface)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran: fitur masukan dengan field diagnostik yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "closed_only": {
                "label": "Hanya yang tertutup",
                "description": "Hasilkan hanya fitur yang berupa solid tertutup (default false: setiap fitur dihasilkan beserta putusannya)."
              }
            }
          },
          "kernel_density_ratio": {
            "name": "Rasio kerapatan kernel",
            "description": "Rasio risiko relatif dari dua permukaan kerapatan kernel: evaluasi layer titik pembilang (kasus) dan layer titik penyebut (populasi berisiko) dengan kernel kuartik yang sama dan bandwidth bersama, lalu bagi sel demi sel — seperti ArcGIS Calculate Kernel Density Ratio. Batas bawah penyebut menulis no-data di mana populasi terlalu tipis (tanpa kebocoran inf/NaN), dan transformasi log alami opsional membuat representasi berlebih/kurang menjadi simetris. Rasio kerapatan yang tidak dapat diekspresikan heat_map satu layer.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik pembilang (misalnya kasus / insiden)."
              },
              "denominator": {
                "label": "Penyebut",
                "description": "Layer titik penyebut (misalnya populasi / paparan berisiko)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster rasio keluaran. Jika dihilangkan, disimpan di memori."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik yang membobot titik pembilang (default: setiap titik dihitung 1)."
              },
              "denominator_weight_field": {
                "label": "Field bobot penyebut",
                "description": "Field numerik yang membobot titik penyebut (default: setiap titik dihitung 1)."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita kernel / radius pencarian bersama (meter untuk CRS geografis, satuan CRS jika tidak). Default: aturan Silverman dari sebaran titik gabungan."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS (default: sisi ekstensi yang lebih besar / 200)."
              },
              "log_ratio": {
                "label": "Rasio log",
                "description": "Jika true, hasilkan log natural dari rasio (simetris di sekitar 0). Default false."
              },
              "denominator_floor": {
                "label": "Batas bawah penyebut",
                "description": "Sel yang kerapatan penyebutnya di bawah nilai ini (atau nol) menjadi nodata, menghindari pembagian yang meledak. Default 0 (hanya penyebut tepat nol yang dimasker)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG yang dicantumkan pada keluaran (default: dari layer pembilang)."
              }
            }
          },
          "kernel_interpolation_with_barriers": {
            "name": "Interpolasi kernel dengan penghalang",
            "description": "Menginterpolasi pengamatan titik dengan penyesuaian polinomial terboboti kernel jendela bergerak di mana jarak diukur sebagai jalur terpendek MENGELILINGI penghalang absolut alih-alih langsung menembusnya (ArcGIS Kernel Interpolation With Barriers). Melengkapi diffusion_interpolation_with_barriers yang sudah ada, yang menyelesaikan persamaan panas alih-alih menerapkan kernel eksplisit. Setiap interpolator lain di kedua registri menggunakan jarak Euclidean, sehingga semuanya menginterpolasi langsung melintasi tanjung dan patahan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan yang membawa pengamatan."
              },
              "z_field": {
                "label": "Field Z",
                "description": "Field numerik yang akan diinterpolasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional untuk nilai prediksi. Jika dihilangkan, disimpan di memori."
              },
              "output_error": {
                "label": "Keluaran galat",
                "description": "Path opsional untuk raster RMS residu terboboti lokal — sebaran terboboti dari residu tetangga di sekitar penyesuaian lokal. Ini adalah ukuran kecocokan model, BUKAN galat baku prediksi bergaya ArcGIS (tidak memperhitungkan derajat kebebasan efektif maupun leverage). Jika dihilangkan, disimpan di memori (tetap dikembalikan)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer polyline opsional berisi penghalang absolut. Jika tidak ada yang diberikan, alat ini merosot menjadi interpolasi kernel biasa."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS. Default-nya sekitar 1/100 dari sisi ekstensi yang lebih besar."
              },
              "kernel": {
                "label": "Kernel",
                "description": "exponential, gaussian, quartic, epanechnikov, polynomial5 (default) atau constant."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita kernel dalam satuan CRS. Default-nya nilai berbasis data dari jarak tetangga terdekat rata-rata."
              },
              "power": {
                "label": "Pangkat",
                "description": "Orde polinomial lokal: 0 (rata-rata terboboti) atau 1 (default, penyesuaian bidang)."
              },
              "ridge": {
                "label": "Punggung",
                "description": "Parameter ridge yang menstabilkan penyesuaian kuadrat terkecil lokal jika suatu ketetanggaan bersifat degenerat (default 1e-6)."
              },
              "max_neighbors": {
                "label": "Tetangga maksimum",
                "description": "Batas jumlah pengamatan yang berkontribusi pada setiap penyesuaian lokal (default 32)."
              }
            }
          },
          "kml_to_features": {
            "name": "KML ke fitur",
            "description": "Baca Placemark .kml/.kmz menjadi layer titik, garis, dan poligon dengan atribut name/description.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path ke file .kml atau arsip .kmz (KML terkompresi)."
              },
              "points_output": {
                "label": "Keluaran titik",
                "description": "Path vektor titik keluaran opsional (driver dari ekstensinya). Ditulis hanya jika KML memiliki placemark titik."
              },
              "lines_output": {
                "label": "Keluaran garis",
                "description": "Path vektor garis keluaran opsional (driver dari ekstensinya). Ditulis hanya jika KML memiliki placemark garis."
              },
              "polygons_output": {
                "label": "Keluaran poligon",
                "description": "Path vektor poligon keluaran opsional (driver dari ekstensinya). Ditulis hanya jika KML memiliki placemark poligon."
              }
            }
          },
          "landtrendr": {
            "name": "LandTrendr",
            "description": "Segmentasi temporal LandTrendr dari deret citra tahunan (seperti ArcGIS Analyze Changes Using LandTrendr): penghilangan lonjakan, penyesuaian linear sepotong-sepotong berbasis verteks secara greedy, dan ekstraksi gangguan terbesar (tahun, magnitudo, durasi) per piksel. Segmentasi riwayat perubahan per piksel yang tidak dapat dilakukan change_vector_analysis dua tanggal dan generate_trend_raster tren tunggal.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path raster tahunan yang dipisahkan koma dalam urutan waktu (misalnya keluaran NBR spectral_index; >= 4)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran: tahun gangguan terbesar per piksel. Jika dihilangkan, disimpan di memori."
              },
              "years": {
                "label": "Tahun",
                "description": "Tahun yang dipisahkan koma dan bersesuaian dengan 'inputs' (default 0,1,2,...)."
              },
              "magnitude_output": {
                "label": "Keluaran magnitudo",
                "description": "Raster opsional berisi magnitudo gangguan (perubahan indeks)."
              },
              "duration_output": {
                "label": "Keluaran durasi",
                "description": "Raster opsional berisi durasi gangguan (tahun)."
              },
              "direction": {
                "label": "Arah",
                "description": "Arah gangguan dalam indeks: 'loss' (penurunan; default) atau 'gain' (kenaikan)."
              },
              "max_segments": {
                "label": "Segmen maksimum",
                "description": "Jumlah segmen maksimum (default 6)."
              },
              "spike_threshold": {
                "label": "Ambang lonjakan",
                "description": "Kekuatan penghilangan lonjakan 0..1 (fraksi dari rentang deret; default 0.75; 1 menonaktifkan)."
              },
              "min_valid": {
                "label": "Valid minimum",
                "description": "Jumlah minimum pengamatan valid per piksel (default 4)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari setiap masukan (default 1)."
              }
            }
          },
          "las_height_metrics": {
            "name": "Metrik ketinggian LAS",
            "description": "Rasterisasi metrik tinggi tajuk per sel dari tinggi lidar (seperti ArcGIS LAS Height Metrics): rata-rata, std, skewness, kurtosis, MAD, dan persentil tinggi sebagai grid multi-band — rangkaian momen/persentil kehutanan yang tidak dihasilkan height_above_ground dan lidar_point_stats bawaan dalam satu lintasan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Awan titik LAS/LAZ masukan berisi tinggi di atas tanah (normalisasi dahulu dengan height_above_ground)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster multiband keluaran. Jika dihilangkan, disimpan di memori."
              },
              "metrics": {
                "label": "Metrik",
                "description": "Subset yang dipisahkan koma dari mean,std,skewness,kurtosis,mad (default 'mean,std,skewness,kurtosis,mad')."
              },
              "height_percentiles": {
                "label": "Persentil tinggi",
                "description": "Persentil yang dipisahkan koma dalam [0,100], misalnya '50,95,99' (default '50,95,99'; kosongkan untuk tidak ada)."
              },
              "min_height": {
                "label": "Tinggi minimum",
                "description": "Kecualikan titik dengan tinggi di bawah nilai ini (batas tanah/derau). Default 0."
              },
              "min_points": {
                "label": "Titik minimum",
                "description": "Sel dengan titik valid lebih sedikit menjadi nodata. Default 4."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS. Default 10."
              }
            }
          },
          "less_than_or_equal_to": {
            "name": "Lebih kecil atau sama dengan",
            "description": "Menguji apakah raster pertama lebih kecil dari atau sama dengan raster kedua sel demi sel.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Raster masukan pertama (string path atau objek raster bertipe)."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Raster masukan kedua (string path atau objek raster bertipe)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file raster keluaran opsional. Jika dihilangkan, keluaran tetap di memori dan dikembalikan sebagai handle raster memory://."
              }
            }
          },
          "line_density": {
            "name": "Kerapatan garis",
            "description": "Kerapatan fitur linear (panjang per satuan luas) dalam ketetanggaan lingkaran di sekitar setiap sel raster — kerapatan jalan, sungai, atau patahan — dengan memotong setiap segmen garis ke lingkaran radius pencarian (bentuk tertutup) dan membagi jumlah panjang terboboti dengan pi*r^2. Seperti ArcGIS Line Density; padanan garis vektor yang tidak dimiliki heat_map bawaan (hanya titik) dan edge_density kategorikal.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor polyline masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster kerapatan keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik yang membobot setiap garis (misalnya lajur, lalu lintas, populasi). Default: setiap garis berbobot 1."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan (meter untuk CRS geografis, satuan CRS jika tidak). Default: sisi ekstensi yang lebih pendek / 25."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran (satuan sama dengan search_radius). Default: search_radius / 10."
              },
              "area_units": {
                "label": "Satuan luas",
                "description": "Satuan luas dari nilai kerapatan: 'square_map_units' (default), 'square_meters', 'square_kilometers', 'square_miles', atau 'square_feet'."
              }
            }
          },
          "line_of_sight": {
            "name": "Garis pandang",
            "description": "Visibilitas titik-ke-titik di atas DEM: untuk setiap pasangan pengamat-target, hasilkan garis pandang yang dipisah menjadi segmen terlihat dan terhalang ditambah penanda target-terlihat, seperti ArcGIS Line Of Sight.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster elevasi masukan (CRS terproyeksi; jarak/tinggi dalam satuannya)."
              },
              "observers": {
                "label": "Pengamat",
                "description": "Layer vektor titik pengamat."
              },
              "targets": {
                "label": "Target",
                "description": "Layer vektor titik target."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "observer_offset": {
                "label": "Offset pengamat",
                "description": "Tinggi pengamat di atas tanah, dalam satuan DEM (default 1.75)."
              },
              "target_offset": {
                "label": "Offset target",
                "description": "Tinggi target di atas tanah, dalam satuan DEM (default 0)."
              },
              "pair_field": {
                "label": "Field pasangan",
                "description": "Field opsional yang ada pada kedua layer; pengamat dan target dipasangkan jika field ini cocok (alih-alih semua ke semua)."
              },
              "band": {
                "label": "Band",
                "description": "Band DEM yang disampel (default 1)."
              }
            }
          },
          "line_statistics": {
            "name": "Statistik garis",
            "description": "Rasterisasi statistik ketetanggaan atribut garis (rata-rata, mayoritas, median, min/maks, rentang, variasi, atau panjang total) dengan memotong setiap segmen ke lingkaran radius pencarian dan membobot nilai berdasarkan panjang — seperti ArcGIS Line Statistics; pelengkap permukaan atribut untuk line_density yang tidak dimiliki rangkaian bawaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor polyline masukan."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik yang diringkas. Wajib untuk setiap statistik kecuali 'length'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "'mean' (default), 'majority', 'maximum', 'median', 'minimum', 'minority', 'range', 'variety', atau 'length'."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Radius ketetanggaan dalam satuan CRS. Default: sisi ekstensi yang lebih pendek / 25."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS. Default: search_radius / 10."
              }
            }
          },
          "local_bivariate_relationships": {
            "name": "Hubungan bivariat lokal",
            "description": "Untuk setiap fitur, klasifikasikan bagaimana dua variabel berhubungan dalam ketetanggaan lokalnya (tidak signifikan, linear positif/negatif, cekung, cembung, tak terdefinisi) dari penyesuaian linear dan kuadratik lokal, statistik dependensi reduksi entropi, dan nilai p uji permutasi berseed — seperti ArcGIS Local Bivariate Relationships.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan yang menyimpan kedua field variabel."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (salinan masukan dengan field hubungan). Jika dihilangkan, disimpan di memori."
              },
              "field1": {
                "label": "Field 1",
                "description": "Nama field variabel pertama (penjelas)."
              },
              "field2": {
                "label": "Field 2",
                "description": "Nama field variabel kedua (terikat)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah tetangga terdekat k yang mendefinisikan setiap sampel lokal (default 12; harus >= 5)."
              },
              "permutations": {
                "label": "Permutasi",
                "description": "Jumlah permutasi untuk uji signifikansi (default 199; 0 menonaktifkan)."
              },
              "significance": {
                "label": "Signifikansi",
                "description": "Ambang nilai p semu untuk menyatakan suatu hubungan signifikan (default 0.05)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG permutasi (default 1), agar hasil dapat direproduksi."
              }
            }
          },
          "local_outlier_analysis": {
            "name": "Analisis pencilan lokal",
            "description": "Analisis pencilan lokal ruang-waktu (Moran's I lokal Anselin pada kubus ruang-waktu H3): klasifikasikan setiap sel x bin waktu sebagai klaster Tinggi-Tinggi/Rendah-Rendah atau pencilan Tinggi-Rendah/Rendah-Tinggi dengan nilai p permutasi berseed, lalu ringkas per sel sepanjang waktu — seperti ArcGIS Local Outlier Analysis. Perluasan ruang-waktu dari local_morans_i_lisa bawaan yang hanya spasial.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan berisi peristiwa berstempel waktu (bujur/lintang)."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: sebuah angka atau stempel waktu ISO-8601."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer ringkasan poligon H3 keluaran. Jika dihilangkan, disimpan di memori."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang diagregasi per bin (default: jumlah titik)."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Lebar satu langkah waktu dalam satuan time_field (default 1)."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 0..15 (default 7)."
              },
              "kring": {
                "label": "K cincin",
                "description": "Radius k-ring ketetanggaan spasial (default 1)."
              },
              "time_window": {
                "label": "Jendela waktu",
                "description": "Setengah lebar ketetanggaan temporal dalam langkah (default 1)."
              },
              "permutations": {
                "label": "Permutasi",
                "description": "Permutasi untuk uji signifikansi (default 99; 0 menonaktifkan)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG permutasi (default 1)."
              }
            }
          },
          "local_polynomial_interpolation": {
            "name": "Interpolasi polinomial lokal",
            "description": "Sesuaikan polinomial orde 1/2/3 dalam ketetanggaan bergerak terboboti kernel di setiap sel, menghasilkan permukaan prediksi, permukaan galat baku prediksi, atau permukaan bilangan kondisi. Tidak seperti trend_surface global bawaan, polinomial disesuaikan ulang secara lokal. Seperti ArcGIS Local Polynomial Interpolation.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik masukan yang membawa nilai untuk diinterpolasi."
              },
              "z_field": {
                "label": "Field Z",
                "description": "Field numerik yang menyimpan nilai untuk diinterpolasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran. Jika dihilangkan, disimpan di memori."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan peta (default: ekstensi masukan / 200)."
              },
              "order": {
                "label": "Orde",
                "description": "Orde polinomial: 1 (default), 2, atau 3."
              },
              "kernel": {
                "label": "Kernel",
                "description": "'exponential' (default), 'gaussian', 'quartic', 'epanechnikov', 'fifth_order', atau 'constant'."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "Lebar pita kernel tetap dalam satuan peta. Jika dihilangkan, lebar pita adaptif digunakan: jarak ke sampel terdekat ke-'neighbors'."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah sampel per penyesuaian lokal untuk lebar pita adaptif (default: 3x jumlah suku polinomial)."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field bobot pengukuran per pengamatan opsional."
              },
              "condition_number": {
                "label": "Bilangan kondisi",
                "description": "Tolak melakukan prediksi jika bilangan kondisi desain lokal melebihi ambang ini (default: tanpa batas)."
              },
              "output_type": {
                "label": "Jenis keluaran",
                "description": "'prediction' (default), 'standard_error', atau 'condition_number'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG yang dicantumkan pada raster keluaran (default: CRS layer masukan)."
              }
            }
          },
          "locate_lines_along_routes": {
            "name": "Tentukan lokasi garis sepanjang rute",
            "description": "Tumpang susun fitur garis atau poligon pada rute terukur untuk menghasilkan kejadian garis ukuran awal/akhir (RID, FMEAS, TMEAS), seperti ArcGIS Locate Features Along Routes (kejadian garis/poligon).",
            "params": {
              "input_features": {
                "label": "Fitur masukan",
                "description": "Layer vektor garis atau poligon masukan yang akan dilokasikan sepanjang rute."
              },
              "routes": {
                "label": "Rute",
                "description": "Layer vektor rute (garis) yang menyediakan ukuran referensi linear."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field pada layer rute yang menyimpan pengenal setiap rute (RID). Jika dihilangkan, indeks fitur berbasis 0 dari rute digunakan."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Radius pencarian dalam satuan CRS. Verteks fitur dalam jarak ini dari suatu rute diperlakukan sebagai berimpit. Wajib (> 0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor kejadian garis keluaran (driver dari ekstensi). Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "locate_regions": {
            "name": "Tentukan lokasi wilayah",
            "description": "Temukan wilayah kontigu terbaik dari luas target dari raster kesesuaian (seperti ArcGIS Locate Regions): penumbuhan wilayah best-first dari puncak kesesuaian dengan kontrol bentuk/kekompakan dan jarak antar wilayah — langkah penentuan lokasi yang mengubah permukaan fuzzy_overlay/weighted_overlay menjadi wilayah nyata, yang tidak dapat dilakukan clump dan pengambangan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kesesuaian (lebih tinggi = lebih sesuai)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran berisi id wilayah berbasis 1 (nodata di tempat lain). Jika dihilangkan, disimpan di memori."
              },
              "total_area": {
                "label": "Luas total",
                "description": "Total luas target di seluruh wilayah, dalam satuan luas CRS (default: 5% dari luas valid)."
              },
              "num_regions": {
                "label": "Jumlah wilayah",
                "description": "Jumlah wilayah yang dilokasikan (default 1). Masing-masing menyasar total_area / num_regions."
              },
              "shape": {
                "label": "Bentuk",
                "description": "Bobot kekompakan 0..1: 0 = kesesuaian murni, 1 = sangat mengutamakan wilayah membulat (default 0.3)."
              },
              "min_distance": {
                "label": "Jarak minimum",
                "description": "Jarak minimum antar wilayah, dalam satuan CRS (default 0)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "matched_filter_target_detection": {
            "name": "Deteksi target matched filter (CEM/ACE)",
            "description": "Nilai setiap piksel citra multiband terhadap spektrum target yang diketahui menggunakan statistik adegan untuk menekan latar — Constrained Energy Minimization (CEM) atau Adaptive Coherence Estimator (ACE) — dengan masker ambang persentil opsional, seperti ArcGIS Detect Target Using Spectra.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster multiband masukan (2+ band)."
              },
              "target_spectrum": {
                "label": "Spektrum target",
                "description": "Spektrum target: satu nilai per band, sebagai array JSON atau daftar yang dipisahkan koma/spasi (panjangnya harus sama dengan jumlah band)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster skor deteksi keluaran (F32). Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'cem' (Constrained Energy Minimization, default) atau 'ace' (Adaptive Coherence Estimator, skor dalam 0..1)."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Persentil opsional (0-100) dari distribusi skor yang di atasnya masker deteksi biner ditulis."
              },
              "mask_output": {
                "label": "Keluaran masker",
                "description": "Path keluaran untuk masker deteksi biner (memerlukan 'threshold'). Jika dihilangkan padahal ambang diberikan, disimpan di memori."
              }
            }
          },
          "maximum_likelihood_classification": {
            "name": "Klasifikasi maximum likelihood",
            "description": "Pengklasifikasi terbimbing maximum likelihood Gaussian: memodelkan setiap kelas pelatihan sebagai normal multivariat (rata-rata + kovarians per kelas), mengklasifikasikan setiap piksel citra multiband berdasarkan log-likelihood Gaussian terbesar dengan bobot a-priori sama/sampel opsional, dan dapat menghasilkan raster probabilitas/keyakinan per piksel serta menolak sel yang paling kurang meyakinkan, seperti ArcGIS Maximum Likelihood Classification.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster multiband masukan yang akan diklasifikasikan (1+ band; setiap band adalah sebuah fitur)."
              },
              "training": {
                "label": "Pelatihan",
                "description": "Raster pelatihan berlabel bilangan bulat pada grid yang sama dengan 'input': setiap bilangan bulat positif berbeda adalah satu kelas; sel nodata / non-positif / non-hingga tidak berlabel."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster terklasifikasi keluaran yang membawa id kelas pelatihan. Jika dihilangkan, disimpan di memori."
              },
              "prob_output": {
                "label": "Keluaran probabilitas",
                "description": "Raster F32 keluaran opsional berisi probabilitas posterior (keyakinan) kelas pemenang dalam [0,1]."
              },
              "a_priori": {
                "label": "A priori",
                "description": "Bobot kelas apriori: 'equal' (default, 1/K) atau 'sample' (proporsional terhadap jumlah piksel pelatihan setiap kelas)."
              },
              "reject_fraction": {
                "label": "Fraksi penolakan",
                "description": "Fraksi dalam [0,1) dari sel terklasifikasi yang paling tidak yakin untuk dibiarkan tidak terklasifikasi (nodata). Default 0."
              }
            }
          },
          "median_center": {
            "name": "Pusat median",
            "description": "Median geometrik (titik Weiszfeld yang meminimalkan jumlah jarak Euclidean, secara opsional terboboti, ke semua titik masukan) — satu titik pusat robust per kelompok kasus, dengan atribut median per field opsional (ArcGIS Median Center).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik opsional yang membobot tarikan setiap titik pada median."
              },
              "case_field": {
                "label": "Field kasus",
                "description": "Field opsional untuk mengelompokkan titik; satu median per nilai berbeda."
              },
              "attribute_fields": {
                "label": "Field atribut",
                "description": "Field numerik opsional yang dipisahkan koma; median per kelompok dari masing-masing ditambahkan sebagai '<field>_med'."
              }
            }
          },
          "merge_divided_roads": {
            "name": "Gabungkan jalan terbagi",
            "description": "Ganti pasangan lajur jalan terbagi yang tercocokkan dengan garis tengah tunggal sambil mempertahankan konektivitas persimpangan, hanya memasangkan lajur yang berbagi field penggabungan dan berjalan anti-paralel dalam jarak pemisahan, dan menghasilkan poligon perpindahan untuk propagate_displacement. Seperti ArcGIS Merge Divided Roads.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur garis tengah jalan."
              },
              "merge_field": {
                "label": "Field penggabungan",
                "description": "Field yang nilai cocoknya menjadikan dua garis sebagai pasangan jalur kandidat (misalnya nama atau kelas jalan)."
              },
              "merge_distance": {
                "label": "Jarak penggabungan",
                "description": "Pemisahan maksimum antara jalur berpasangan, dalam satuan peta."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path garis tengah tergabung keluaran. Jika dihilangkan, disimpan di memori."
              },
              "output_displacement_features": {
                "label": "Keluaran fitur perpindahan",
                "description": "Poligon opsional yang menunjukkan tempat geometri bergerak, untuk propagate_displacement."
              },
              "character_field": {
                "label": "Field karakter",
                "description": "Field opsional; fitur dengan nilai bukan nol / tidak kosong dikecualikan dari penggabungan."
              },
              "output_table": {
                "label": "Tabel keluaran",
                "description": "Tabel silsilah opsional yang memetakan fitur keluaran kembali ke fitur sumbernya."
              }
            }
          },
          "merge_lines_by_pseudo_node": {
            "name": "Gabungkan garis berdasarkan pseudo node",
            "description": "Lebur rantai segmen garis yang bertemu di pseudo-node berderajat 2 menjadi polyline tunggal, mempertahankan perpotongan sebenarnya dan (opsional) batas atribut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor garis masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "dissolve_fields": {
                "label": "Field lebur",
                "description": "Nama field atribut yang dipisahkan koma; dua segmen digabungkan hanya jika sesuai pada semua field tersebut. Jika dihilangkan, segmen digabungkan pada setiap node berderajat 2 tanpa memandang atribut."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Titik ujung dalam jarak ini (satuan CRS) diperlakukan sebagai node yang sama. Default 1e-6."
              }
            }
          },
          "merge_multidimensional_rasters": {
            "name": "Gabungkan raster multidimensi",
            "description": "Menggabungkan beberapa kubus raster terkoregistrasi menjadi satu, diurutkan berdasarkan koordinat dimensi, menyelesaikan koordinat duplikat per sel (ArcGIS Merge Multidimensional Rasters). aggregate_multidimensional_raster mereduksi kubus dan composite_bands menumpuk raster band tunggal menjadi band, tetapi tidak ada yang menggabungkan kubus sepanjang dimensi bersamanya.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Path kubus yang dipisahkan koma atau titik koma (raster multiband). Minimal dua."
              },
              "dimension_values": {
                "label": "Nilai dimensi",
                "description": "Koordinat per irisan opsional yang mencakup setiap irisan dari setiap masukan, dalam urutan masukan. Tidak perlu terurut atau unik — justru itulah yang diselesaikan alat ini. Tanpa koordinat tersebut, masukan digabungkan dalam urutan yang diberikan."
              },
              "dimension": {
                "label": "Dimensi",
                "description": "Nama dimensi, hanya digunakan dalam pelaporan (default 'slice')."
              },
              "resolve_overlap": {
                "label": "Selesaikan tumpang tindih",
                "description": "Aturan koordinat ganda: 'first' (default), 'last', 'mean', 'min', 'max', atau 'error'."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi relatif untuk menganggap dua koordinat sama (default 1e-9)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster kubus keluaran, satu band per irisan tergabung, dalam urutan dimensi. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "mgwr": {
            "name": "Regresi terboboti geografis multiskala",
            "description": "GWR di mana setiap suku penjelas mendapat bandwidth-nya sendiri melalui back-fitting AICc (MGWR): koefisien per fitur, R2 lokal, residu, bilangan kondisi, ditambah bandwidth optimal setiap suku dengan interpretasi lokal/regional/global dan diagnostik AICc / R2 global.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan (titik, atau geometri lain melalui titik representatifnya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "dependent_field": {
                "label": "Field dependen",
                "description": "Field numerik terikat (respons)."
              },
              "explanatory_fields": {
                "label": "Field penjelas",
                "description": "Field numerik penjelas yang dipisahkan koma, masing-masing disesuaikan dengan lebar pitanya sendiri."
              },
              "kernel": {
                "label": "Kernel",
                "description": "Kernel peluruhan jarak: 'gaussian' (default) atau 'bisquare'."
              },
              "bandwidth_type": {
                "label": "Jenis bandwidth",
                "description": "'adaptive' (default; lebar pita = k tetangga terdekat) atau 'fixed' (lebar pita = suatu jarak). Berlaku untuk pencarian lebar pita setiap suku."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi konvergensi back-fitting: berhenti jika perubahan relatif RSS antar sapuan turun di bawah nilai ini (default 0.001)."
              },
              "max_iterations": {
                "label": "Iterasi maksimum",
                "description": "Jumlah sapuan back-fitting maksimum pada semua suku (default 30)."
              }
            }
          },
          "minimum_bounding_volume": {
            "name": "Volume pembatas minimum",
            "description": "Hitung volume pembatas minimum (convex hull, bola, atau amplop) di sekitar fitur 3D, per fitur, per kelompok, atau atas seluruh masukan, menghasilkan padatan sebagai wajah segitiga bernilai Z dengan atribut volume dan luas permukaan. Seperti ArcGIS Minimum Bounding Volume.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur titik, multititik, atau garis 3D masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran untuk permukaan volume. Jika dihilangkan, disimpan di memori."
              },
              "z_value": {
                "label": "Nilai Z",
                "description": "'geometry' (default) untuk mengambil Z dari geometri, atau nama field numerik yang menyediakan Z."
              },
              "geometry_type": {
                "label": "Jenis geometri",
                "description": "'convex_hull' (default), 'sphere', atau 'envelope'. ('concave_hull' tidak diimplementasikan pada versi ini.)"
              },
              "group_option": {
                "label": "Opsi pengelompokan",
                "description": "'none' (satu volume per fitur, default), 'all' (satu volume tunggal untuk seluruh masukan) atau 'list' (satu per nilai 'group_field')."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Field yang mendefinisikan kelompok jika 'group_option' bernilai 'list'."
              },
              "mbv_fields": {
                "label": "Field MBV",
                "description": "Tambahkan field MBV_VOLUME dan MBV_AREA (default false)."
              }
            }
          },
          "multicriteria_overlay": {
            "name": "Tumpang susun multikriteria",
            "description": "Gabungkan tumpukan raster kriteria menjadi satu permukaan kesesuaian dengan MCDA berbasis peringkat: weighted_sum, weighted_geometric_mean, OWA (ordered weighted averaging), atau TOPSIS (kedekatan dengan titik ideal), dengan bobot per raster dan penskalaan ulang from_scale/to_scale, seperti ArcGIS Multicriteria Overlay.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Daftar yang dipisahkan koma berisi ≥2 raster kriteria terkoregistrasi (nilai lebih tinggi = lebih sesuai; masing-masing diskalakan ulang min-maks ke 0..1 sebelum digabungkan)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran. Jika dihilangkan, hasil disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "Metode penggabungan: 'weighted_sum' (default), 'weighted_geometric_mean', 'owa', 'topsis'."
              },
              "weights": {
                "label": "Bobot",
                "description": "Bobot kepentingan per raster yang dipisahkan koma, satu per masukan (default sama). Dinormalisasi hingga berjumlah 1."
              },
              "order_weights": {
                "label": "Bobot orde",
                "description": "Hanya OWA: bobot urutan yang dipisahkan koma, satu per masukan, diterapkan pada kriteria yang diurutkan tinggi→rendah per sel (default sama, yang membuat OWA == rata-rata terboboti). Dinormalisasi hingga berjumlah 1."
              },
              "from_scale": {
                "label": "Dari skala",
                "description": "Batas bawah skala evaluasi keluaran (default 0)."
              },
              "to_scale": {
                "label": "Ke skala",
                "description": "Batas atas skala evaluasi keluaran (default 1)."
              }
            }
          },
          "multidimensional_anomaly": {
            "name": "Buat anomali multidimensi",
            "description": "Kubus anomali temporal per irisan dari tumpukan waktu raster (seperti ArcGIS Generate Multidimensional Anomaly): untuk setiap piksel hitung baseline temporal (rata-rata/std atau median lintas dimensi irisan) dan tulis ulang setiap irisan waktu sebagai deviasinya dari baseline tersebut — selisih dari rata-rata, persen dari rata-rata, skor z, atau selisih dari median — menghasilkan tumpukan anomali dengan satu irisan per irisan masukan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah irisan waktu) atau daftar raster terkoregistrasi yang dipisahkan koma, dalam urutan waktu."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster anomali multiband keluaran (satu band per irisan masukan). Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "Perhitungan anomali: 'difference_from_mean' (default), 'percent_of_mean', 'z_score', atau 'difference_from_median'."
              },
              "reference_range": {
                "label": "Rentang referensi",
                "description": "Rentang irisan inklusif berbasis 1 opsional 'start-end' yang digunakan untuk menghitung dasar per piksel (default: semua irisan)."
              },
              "min_valid": {
                "label": "Valid minimum",
                "description": "Jumlah minimum pengamatan bukan nodata per piksel di dalam rentang referensi (default 1); di bawahnya piksel menjadi nodata."
              }
            }
          },
          "multidimensional_principal_components": {
            "name": "Komponen utama multidimensi",
            "description": "Mendekomposisi kubus raster menjadi beberapa mode riil yang mendasari deret waktu panjang, menghasilkan raster komponen, loading, dan nilai eigen, dalam bentuk reduksi dimensi atau reduksi spasial (ArcGIS Multidimensional Principal Components). principal_component_analysis bawaan mendekomposisi ruang band dalam satu adegan, sehingga komponennya mencampur band spektral alih-alih waktu; dimension_reduction bekerja pada tabel atribut vektor. Kedua reduksi berasal dari satu kovarians ruang irisan, karena padanan ruang pikselnya akan berukuran jutaan baris persegi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Satu raster multiband (setiap band adalah irisan) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster multiband keluaran: skor komponen untuk 'dimension_reduction', muatan komponen untuk 'spatial_reduction'. Jika dihilangkan, disimpan di memori."
              },
              "output_loadings": {
                "label": "Keluaran loading",
                "description": "Tabel keluaran berisi muatan per irisan (atau deret komponen per irisan pada 'spatial_reduction'). Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "output_eigenvalues": {
                "label": "Keluaran nilai eigen",
                "description": "Tabel keluaran berisi nilai eigen dan varians yang dijelaskan masing-masing. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "mode": {
                "label": "Mode",
                "description": "'dimension_reduction' (default; komponen berupa pola spasial) atau 'spatial_reduction' (komponen berupa deret sepanjang dimensi)."
              },
              "dimension": {
                "label": "Dimensi",
                "description": "Nama dimensi, hanya digunakan dalam laporan (default 'slice')."
              },
              "dimension_values": {
                "label": "Nilai dimensi",
                "description": "Koordinat setiap irisan yang dipisahkan koma, meningkat ketat. Default-nya indeks irisan berbasis 1."
              },
              "number_of_pc": {
                "label": "Jumlah PC",
                "description": "Berapa banyak komponen yang dipertahankan (default: semua irisan)."
              },
              "correlation": {
                "label": "Korelasi",
                "description": "Dekomposisi matriks korelasi alih-alih kovarians (default false). Gunakan jika irisan berada pada skala berbeda."
              }
            }
          },
          "multidimensional_raster_correlation": {
            "name": "Korelasi raster multidimensi",
            "description": "Mengorelasikan dua kubus raster sel demi sel sepanjang dimensi bersamanya, menghasilkan peta koefisien Pearson, Spearman, atau Kendall dan — dalam mode korelasi silang — lag di mana asosiasi setiap sel memuncak (ArcGIS Multidimensional Raster Correlation). Tidak ada di kedua registri yang memetakan ini: image_correlation meringkas pasangan citra menjadi satu skalar, time_series_cross_correlation putaran 17 hanya untuk vektor, attribute_correlation adalah operasi tabel, dan bivariate_spatial_association membandingkan dua raster band tunggal tanpa sumbu waktu.",
            "params": {
              "input1": {
                "label": "Masukan 1",
                "description": "Kubus pertama: satu raster multiband (setiap band satu irisan) atau daftar raster terkoregistrasi yang dipisahkan koma."
              },
              "input2": {
                "label": "Masukan 2",
                "description": "Kubus kedua, terkoregistrasi dengan yang pertama dan dengan jumlah irisan yang sama."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster korelasi keluaran dalam [-1, 1]. Jika dihilangkan, disimpan di memori."
              },
              "output_lag": {
                "label": "Keluaran lag",
                "description": "Raster keluaran berisi lag terbaik per sel (mode korelasi silang); lag tetap di mana-mana jika tidak. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "output_count": {
                "label": "Keluaran hitungan",
                "description": "Raster keluaran berisi jumlah sampel berpasangan di balik setiap koefisien. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "method": {
                "label": "Metode",
                "description": "'pearson' (default), 'spearman', atau 'kendall'."
              },
              "lag": {
                "label": "Lag",
                "description": "Jumlah irisan tetap untuk menggeser kubus kedua ke depan sebelum dipasangkan (default 0). Diabaikan dalam mode korelasi silang."
              },
              "cross_correlation": {
                "label": "Korelasi silang",
                "description": "Cari setiap lag dalam -max_lag..=max_lag dan pertahankan koefisien terkuat (default false)."
              },
              "max_lag": {
                "label": "Lag maksimum",
                "description": "Setengah lebar pencarian lag dalam irisan (default 3). Hanya mode korelasi silang."
              },
              "use_absolute": {
                "label": "Gunakan absolut",
                "description": "Dalam mode korelasi silang, peringkatkan lag berdasarkan korelasi absolut sehingga asosiasi negatif yang kuat menang (default true)."
              },
              "min_valid": {
                "label": "Valid minimum",
                "description": "Jumlah minimum sampel berpasangan sebelum sebuah koefisien ditulis (default 3)."
              }
            }
          },
          "multilook": {
            "name": "Multilook",
            "description": "Mengurangi speckle SAR dengan merata-ratakan secara inkoheren look yang berdekatan dalam range dan azimut, menghasilkan citra intensitas berpiksel persegi (ArcGIS Multilook). Kedua registri tidak menyertakan alat SAR apa pun; keluarga lee_filter bawaan bekerja pada intensitas yang sudah terdeteksi, sehingga alat ini menyediakan langkah hulu yang mengubah data look tunggal kompleks menjadi citra terdeteksi yang diharapkan filter tersebut. Masukan kompleks dibaca sebagai pasangan I/Q dua band; deteksi terjadi sebelum perata-rataan, dan jumlah look setara dilaporkan untuk penyaringan speckle hilir.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster SAR masukan: pasangan I/Q dua band untuk data kompleks (SLC), atau satu band data yang sudah terdeteksi (lihat 'input_domain')."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "input_domain": {
                "label": "Domain masukan",
                "description": "Untuk masukan non-kompleks, apa yang sudah disimpan band 1: 'intensity' (default) atau 'amplitude'. Amplitudo dikuadratkan menjadi intensitas sebelum dirata-ratakan, karena perata-rataan tak koheren hanya benar dalam domain intensitas."
              },
              "complex": {
                "label": "Kompleks",
                "description": "Perlakukan masukan sebagai pasangan I/Q kompleks (default: true jika raster memiliki 2+ band, false jika tidak)."
              },
              "range_looks": {
                "label": "Look rentang",
                "description": "Jumlah look pada arah range (x). Default 1, atau diturunkan jika auto_looks disetel."
              },
              "azimuth_looks": {
                "label": "Look azimut",
                "description": "Jumlah look pada arah azimut (y). Default 1, atau diturunkan jika auto_looks disetel."
              },
              "auto_looks": {
                "label": "Look otomatis",
                "description": "Jika true (default) dan jumlah look tidak diberikan secara eksplisit, turunkan dari rasio jarak piksel sehingga piksel tanah keluaran kira-kira persegi."
              },
              "output_units": {
                "label": "Satuan keluaran",
                "description": "amplitude, intensity (default), atau db."
              },
              "statistic": {
                "label": "Statistik",
                "description": "mean (default) atau median; median lebih tahan di tempat penghambur kuat mendominasi jendela look."
              }
            }
          },
          "multipatch_footprint": {
            "name": "Jejak multipatch",
            "description": "Memproyeksikan fitur multipatch 3D ke bidang XY dan meleburnya menjadi poligon jejak 2D, satu per fitur atau per field kelompok (ArcGIS Multipatch Footprint). layer_footprint_vector mengembalikan satu persegi luasan untuk seluruh layer, bukan garis luar per fitur, sehingga saat ini tidak ada cara untuk memasukkan buffer_3d / voxel_isosurface / padatan bangunan impor ke dalam pipeline regularize_building_footprints.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur multipatch 3D (MultiPolygon mesh segitiga dengan Z)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Jejak poligon 2D keluaran. Jika dihilangkan, disimpan di memori."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Field opsional yang nilainya melebur jejak menjadi satu (satu poligon keluaran per nilai berbeda). Default: satu keluaran per fitur masukan."
              },
              "simplify_tolerance": {
                "label": "Toleransi penyederhanaan",
                "description": "Toleransi Douglas-Peucker opsional (satuan CRS) yang diterapkan pada jejak yang telah dilebur. Dihilangkan secara default agar garis luar mentah dipertahankan untuk regularize_building_footprints."
              }
            }
          },
          "multipatch_to_mesh": {
            "name": "Multipatch ke mesh",
            "description": "Mengekspor geometri multipatch dan padatan 3D ke OBJ atau glTF 2.0 / GLB untuk penampil 3D atau web apa pun (ArcGIS Multipatch To Collada). Rangkaian union_3d / difference_3d / enclose_multipatch / voxel_isosurface sama sekali tidak memiliki jalur ekspor — tidak ada format mesh di mana pun dalam registri — sehingga hasil 3D hanya dapat dibaca kembali oleh katalog ini.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer multipatch / poligon 3D."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file .glb, .gltf, atau .obj keluaran. Ekstensi menentukan format kecuali 'format' diberikan."
              },
              "format": {
                "label": "Format",
                "description": "'glb' (default untuk .glb), 'gltf' (JSON dengan buffer base64 tertanam), atau 'obj'. Default-nya dari ekstensi keluaran."
              },
              "origin": {
                "label": "Asal",
                "description": "Translasi titik asal lokal: 'centroid' (default), 'min_corner', atau 'none'. Diperlukan demi presisi — posisi glTF berupa float 32-bit."
              },
              "y_up": {
                "label": "Y ke atas",
                "description": "Beralih ke konvensi Y-atas glTF dari Z-atas geospasial (default true untuk glTF/GLB, false untuk OBJ)."
              },
              "name_field": {
                "label": "Field nama",
                "description": "Atribut yang menamai mesh setiap fitur dalam keluaran."
              }
            }
          },
          "multiple_ring_buffer": {
            "name": "Buffer cincin ganda",
            "description": "Buffer fitur pada daftar jarak menjadi pita konsentris — cakram bersarang atau cincin yang tidak tumpang tindih — secara opsional dilebur per jarak, dengan jarak pita disimpan sebagai atribut.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik, garis, atau poligon), format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "distances": {
                "label": "Jarak",
                "description": "Daftar jarak buffer yang dipisahkan koma dalam satuan CRS, misalnya \"100,250,500\". Diurutkan menaik; duplikat dan nilai non-positif dibuang."
              },
              "ring_type": {
                "label": "Jenis cincin",
                "description": "'rings' (default) untuk pita donat yang tidak tumpang tindih, atau 'disks' untuk buffer kumulatif bersarang."
              },
              "dissolve": {
                "label": "Lebur (dissolve)",
                "description": "'none' (default) mempertahankan satu pita per fitur sumber; 'per_ring' menggabungkan pita semua fitur pada setiap jarak menjadi satu poligon."
              },
              "distance_field": {
                "label": "Field jarak",
                "description": "Nama atribut keluaran yang menyimpan jarak setiap pita. Default 'distance'."
              }
            }
          },
          "multitemporal_coherence": {
            "name": "Koherensi multitemporal",
            "description": "Menghitung koherensi interferometrik lintas tumpukan akuisisi SAR terkoregistrasi dan mereduksinya menjadi rata-rata/min/maks/std dan kemiringan dekorelasi temporal, secara opsional menghasilkan kubus koherensi per pasangan (ArcGIS Generate Multitemporal Coherence). sar_coherence menangani tepat dua adegan, sehingga pemilihan persistent scatterer dan penentuan waktu perubahan koherensi tidak dapat dijangkau.",
            "params": {
              "inputs": {
                "label": "Masukan",
                "description": "Raster SLC kompleks terkoregistrasi yang dipisahkan koma atau titik koma (masing-masing dua band: I lalu Q). Minimal dua."
              },
              "dates": {
                "label": "Tanggal",
                "description": "Waktu akuisisi opsional, satu per masukan, sebagai angka dalam satuan yang konsisten (misalnya hari). Diperlukan oleh statistik 'decorrelation_slope'."
              },
              "pairs": {
                "label": "Pasangan",
                "description": "'consecutive' (default, i dengan i+1), 'all' (setiap pasangan tak terurut), atau 'reference' (setiap adegan terhadap reference_index)."
              },
              "reference_index": {
                "label": "Indeks referensi",
                "description": "Indeks berbasis 0 dari adegan referensi untuk pairs='reference' (default 0)."
              },
              "window_size": {
                "label": "Ukuran jendela",
                "description": "Jendela estimasi dalam sel; sebuah nilai tunggal atau 'range,azimuth' (default 5). Nilai genap dibulatkan ke atas menjadi ganjil."
              },
              "bias_correction": {
                "label": "Koreksi bias",
                "description": "Terapkan koreksi bias koherensi sampel kecil (default true)."
              },
              "statistics": {
                "label": "Statistik",
                "description": "Dipisahkan koma: 'mean' (default), 'min', 'max', 'std', 'decorrelation_slope'. Satu band keluaran per statistik, dalam urutan ini."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran, satu band per statistik yang diminta. Jika dihilangkan, disimpan di memori."
              },
              "output_pairs": {
                "label": "Keluaran pasangan",
                "description": "Raster opsional yang menerima kubus koherensi per pasangan, satu band per pasangan."
              }
            }
          },
          "multivariate_clustering": {
            "name": "Klasterisasi multivariat",
            "description": "Klasterisasi fitur vektor berdasarkan kemiripan nilai atribut terstandarisasinya (k-means atau k-medoids berseed), secara otomatis memilih jumlah klaster dengan pseudo-F Calinski-Harabasz bila tidak diberikan, seperti ArcGIS Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "fields": {
                "label": "Field",
                "description": "Field analisis numerik yang dipisahkan koma (ruang atribut yang diklaster)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (salinan masukan dengan cluster_id/silhouette). Jika dihilangkan, disimpan di memori."
              },
              "num_clusters": {
                "label": "Jumlah klaster",
                "description": "Jumlah klaster k. Hilangkan atau berikan 0 untuk mengevaluasi k = 2..15 secara otomatis dengan pseudo-F Calinski-Harabasz."
              },
              "method": {
                "label": "Metode",
                "description": "Metode pengklasteran: 'kmeans' (default) atau 'kmedoids' (PAM; cocok untuk jumlah fitur yang lebih kecil)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed acak untuk inisialisasi k-means++ / medoid deterministik (default 1)."
              }
            }
          },
          "near_3d": {
            "name": "Terdekat 3D",
            "description": "Temukan fitur terdekat dalam jarak 3D sebenarnya, melaporkan jarak, lokasi terdekat, sudut, dan delta per sumbu, seperti ArcGIS Near 3D.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan (verteks 3D; Z yang tidak ada diperlakukan sebagai 0)."
              },
              "near_features": {
                "label": "Fitur terdekat",
                "description": "Daftar layer yang dipisahkan koma sebagai pembanding pencarian. Hilangkan untuk menggabungkan layer masukan dengan dirinya sendiri."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Hanya pertimbangkan fitur terdekat dalam jarak 3D ini (satuan peta). Tak terbatas jika dihilangkan."
              },
              "location": {
                "label": "Lokasi",
                "description": "Tambahkan koordinat titik terdekat sebagai near_x / near_y / near_z (default false)."
              },
              "angle": {
                "label": "Sudut",
                "description": "Tambahkan arah horizontal (near_bearing, derajat dari utara) dan sudut vertikal (near_vert_angle, derajat dari horizontal) ke titik terdekat (default false)."
              },
              "delta": {
                "label": "Delta",
                "description": "Tambahkan offset per sumbu near_dx / near_dy / near_dz (default false)."
              }
            }
          },
          "neighborhood_summary_statistics": {
            "name": "Statistik ringkasan ketetanggaan",
            "description": "Untuk setiap fitur, ringkas field numerik terpilih atas tetangganya (k terdekat, dalam suatu jarak, atau kontiguitas tepi bersama), menambahkan <field>_nbr_mean/median/std/min/max/sum dan jumlah tetangga, seperti ArcGIS Neighborhood Summary Statistics.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik, garis, atau poligon)."
              },
              "fields": {
                "label": "Field",
                "description": "Field numerik yang dipisahkan koma untuk diringkas pada tetangga."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (salinan masukan + kolom statistik tetangga). Jika dihilangkan, disimpan di memori."
              },
              "neighborhood": {
                "label": "Ketetanggaan",
                "description": "'knn' (default), 'distance_band', atau 'contiguity' (poligon yang berbagi sisi)."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Nilai k untuk knn (default 8)."
              },
              "distance": {
                "label": "Jarak",
                "description": "Jarak pita untuk distance_band (satuan peta)."
              },
              "weights": {
                "label": "Bobot",
                "description": "'uniform' (default) atau 'inverse_distance' (membobot rata-rata dan simpangan baku)."
              }
            }
          },
          "non_maximum_suppression": {
            "name": "Supresi non-maksimum",
            "description": "Pertahankan deteksi dengan keyakinan tertinggi di setiap klaster tumpang tindih dan buang poligon berskor lebih rendah yang intersection-over-union-nya melebihi ambang (seperti ArcGIS Non Maximum Suppression) — deduplikator berbasis skor untuk keluaran deteksi objek/OBIA yang tidak disediakan count_overlapping_features (menghitung, mempertahankan semua), resolve_building_conflicts (memindahkan), dan find_identical (hanya eksak).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Deteksi poligon masukan (boleh tumpang tindih)."
              },
              "confidence_score_field": {
                "label": "Field skor keyakinan",
                "description": "Field numerik yang menyimpan keyakinan/skor setiap deteksi; yang lebih tinggi menang."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path poligon keluaran berisi deteksi yang bertahan. Jika dihilangkan, disimpan di memori."
              },
              "max_overlap_ratio": {
                "label": "Rasio tumpang tindih maksimum",
                "description": "IoU yang di atasnya deteksi berskor lebih rendah ditekan (0-1, default 0.5)."
              },
              "class_value_field": {
                "label": "Field nilai kelas",
                "description": "Field opsional; hanya deteksi dari kelas yang sama yang saling menekan."
              }
            }
          },
          "observer_points": {
            "name": "Titik pengamat",
            "description": "Mengidentifikasi pengamat mana dari hingga 32 pengamat yang dapat melihat setiap sel, sebagai masker bit per pengamat, dan menulis raster di atas permukaan tanah yang memberikan tinggi yang diperlukan agar target dapat terlihat (ArcGIS Observer Points / Viewshed 2 dalam mode OBSERVERS). viewshed bawaan hanya mengembalikan jumlah stasiun yang terlihat, yang darinya kedua jawaban tidak dapat dipulihkan: hitungan 1 tidak memberi tahu menara mana yang mencakup suatu persil, dan hitungan 0 tidak membedakan kurang dua meter dari berada di balik gunung.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster elevasi masukan (DEM atau DSM)."
              },
              "observers": {
                "label": "Pengamat",
                "description": "Layer titik posisi pengamat, paling banyak 32."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster visibilitas keluaran: masker bit pengamat, atau jumlah pada analysis_type 'frequency'. Jika dihilangkan, disimpan di memori."
              },
              "output_agl": {
                "label": "Keluaran AGL",
                "description": "Raster tinggi di atas permukaan tanah keluaran: tinggi yang harus dicapai sebuah target agar terlihat. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "output_table": {
                "label": "Tabel keluaran",
                "description": "Tabel keluaran dengan satu baris per pengamat beserta sel dan luas yang dilihatnya. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "analysis_type": {
                "label": "Jenis analisis",
                "description": "'observers' (default; masker bit) atau 'frequency' (jumlah, sesuai viewshed bawaan)."
              },
              "observer_offset": {
                "label": "Offset pengamat",
                "description": "Tinggi setiap pengamat di atas permukaan, dalam satuan z (default 2.0)."
              },
              "observer_offset_field": {
                "label": "Field offset pengamat",
                "description": "Atribut yang menyimpan tinggi per pengamat, menggantikan 'observer_offset'."
              },
              "target_offset": {
                "label": "Offset target",
                "description": "Tinggi target di atas permukaan, dalam satuan z (default 0.0)."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Abaikan sel yang lebih jauh dari nilai ini terhadap pengamat, dalam satuan peta. Tak terbatas secara default."
              },
              "curvature": {
                "label": "Kelengkungan",
                "description": "Terapkan koreksi kelengkungan bumi dan refraksi (default false, yaitu bumi datar)."
              },
              "refractivity_coefficient": {
                "label": "Koefisien refraktivitas",
                "description": "Koefisien refraksi atmosfer yang digunakan bersama 'curvature' (default 0.13)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari raster elevasi (default 1)."
              }
            }
          },
          "optics_clustering": {
            "name": "Klasterisasi OPTICS",
            "description": "Klasterisasi berbasis kerapatan multiskala melalui OPTICS (seperti opsi OPTICS pada ArcGIS Density-based Clustering): membangun urutan keterjangkauan dan mengekstrak klaster dengan kerapatan bervariasi menggunakan metode ξ-steep — anggota multiskala dari trio DBSCAN/HDBSCAN/OPTICS yang tidak dicakup dbscan dan hdbscan yang sudah ada.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (CRS terproyeksi; jarak dalam satuannya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (salinan masukan dengan field klaster). Jika dihilangkan, disimpan di memori."
              },
              "min_features_cluster": {
                "label": "Fitur minimum per klaster",
                "description": "Jumlah titik minimum untuk estimasi kerapatan jarak inti dan klaster terkecil (>= 2). Default 5."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak keterjangkauan maksimum opsional (epsilon maksimum). Default: tak terbatas (semua skala)."
              },
              "cluster_sensitivity": {
                "label": "Sensitivitas klaster",
                "description": "0-100; lebih tinggi mendeteksi lebih banyak/lebih rapat klaster. Dipetakan ke xi = 1 - sensitivity/100. Default 95 (xi = 0.05)."
              }
            }
          },
          "optimal_corridor_connections": {
            "name": "Koneksi koridor optimal",
            "description": "Hitung jaringan poligon koridor biaya terkecil berlebar tetap yang secara optimal menghubungkan setiap wilayah masukan melintasi permukaan biaya, ditambah garis tengah koridor. Tidak seperti cost_connectivity (garis berlebar nol) atau corridor (permukaan biaya pasangan tunggal), alat ini menghasilkan poligon koridor siap pakai untuk seluruh jaringan wilayah. Seperti ArcGIS Optimal Corridor Connections.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur poligon wilayah yang akan dihubungkan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path poligon koridor keluaran. Jika dihilangkan, disimpan di memori."
              },
              "cost_raster": {
                "label": "Raster biaya",
                "description": "Permukaan biaya opsional. Tanpanya, biaya bersifat seragam (Euclidean)."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Fitur poligon opsional yang diperlakukan sebagai tak terlewati."
              },
              "corridor_width": {
                "label": "Lebar koridor",
                "description": "Lebar koridor dalam satuan peta (default: 10 sel)."
              },
              "output_lines": {
                "label": "Keluaran garis",
                "description": "Path opsional untuk garis tengah koridor."
              },
              "neighbor_option": {
                "label": "Opsi tetangga",
                "description": "'spanning_tree' (default) hanya mempertahankan koridor yang diperlukan untuk menghubungkan setiap wilayah; 'all_pairs' menghasilkan satu koridor untuk setiap pasangan wilayah."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel analisis jika tidak ada raster biaya yang diberikan (default: ekstensi wilayah / 200)."
              }
            }
          },
          "optimal_interpolation": {
            "name": "Interpolasi optimal",
            "description": "Koreksi medan raster latar dengan pengamatan titik melalui langkah analisis interpolasi optimal / asimilasi data x_a = x_b + B Hᵀ (H B Hᵀ + R)⁻¹ (y − H x_b), menggunakan korelasi spasial Gaussian dengan panjang korelasi tertentu dan varians galat per pengamatan/latar (seperti Optimal Interpolation di ArcGIS). Tidak seperti IDW/kriging/EBK, yang menginterpolasi dari titik saja, alat ini memadukan medan grid prior dengan pengamatan dan dapat menghasilkan raster varians galat analisis.",
            "params": {
              "background": {
                "label": "Latar",
                "description": "Medan raster latar belakang (prior) yang akan dikoreksi."
              },
              "observations": {
                "label": "Pengamatan",
                "description": "Layer titik pengamatan."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik pada layer pengamatan yang menyimpan nilai teramati."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster terkoreksi (analisis) keluaran. Jika dihilangkan, disimpan di memori."
              },
              "correlation_length": {
                "label": "Panjang korelasi",
                "description": "Panjang korelasi spasial L dalam satuan CRS (Gaussian). Default: 5% dari sisi latar belakang yang lebih panjang."
              },
              "background_error_variance": {
                "label": "Varians galat latar",
                "description": "Varians galat latar belakang σ_b² (default 1.0). Lebih besar => lebih memercayai pengamatan."
              },
              "obs_error_variance": {
                "label": "Varians galat pengamatan",
                "description": "Varians galat pengamatan σ_o² (default 1.0), digunakan jika tidak ada field galat per titik yang diberikan. Lebih besar => lebih memercayai latar belakang."
              },
              "error_field": {
                "label": "Field galat",
                "description": "Field opsional pada layer pengamatan yang memberikan varians galat setiap titik (menggantikan obs_error_variance jika ada dan > 0)."
              },
              "band": {
                "label": "Band",
                "description": "Band latar belakang berbasis 1 yang dikoreksi (default 1)."
              },
              "max_obs": {
                "label": "Pengamatan maksimum",
                "description": "Jumlah maksimum pengamatan terdekat yang digunakan dalam penyelesaian lokal setiap sel (default 50, rentang 1..=200)."
              },
              "analysis_error": {
                "label": "Galat analisis",
                "description": "Raster keluaran opsional berisi varians galat analisis σ_a² (≤ σ_b²)."
              }
            }
          },
          "optimal_path_as_line": {
            "name": "Jalur optimal sebagai garis",
            "description": "Menelusuri raster tautan balik biaya dari setiap tujuan kembali ke sumbernya dan menghasilkan rute biaya terkecil sebagai polyline (ArcGIS Optimal Path As Line / Cost Path As Polyline). cost_pathway hanya menandai rute sebagai sel raster dan cost_connectivity hanya mencakup kasus jaringan N lokasi, sehingga jalur sumber-ke-tujuan biasa tidak memiliki bentuk vektor.",
            "params": {
              "destination": {
                "label": "Tujuan",
                "description": "Tujuan tempat penelusuran dimulai: sebuah raster (setiap sel bukan nol dan bukan nodata) atau layer vektor titik/multititik."
              },
              "backlink": {
                "label": "Tautan balik",
                "description": "Raster arah backlink dari cost_back_link (0 = sumber, 1-8 = arah menuju sumber, 1 = timur berlawanan arah jarum jam)."
              },
              "accumulation": {
                "label": "Akumulasi",
                "description": "Raster biaya terakumulasi opsional (out_distance dari cost_back_link). Menyediakan total biaya setiap jalur dan diperlukan oleh path_type 'each_zone' dan 'best_single'."
              },
              "path_type": {
                "label": "Jenis jalur",
                "description": "Salah satu dari 'each_cell' (default, satu jalur per sel tujuan), 'each_zone' (satu jalur per zona tujuan, dari selnya yang termurah), 'best_single' (satu jalur termurah tunggal)."
              },
              "zone_field": {
                "label": "Field zona",
                "description": "Atribut yang menyimpan id zona untuk tujuan vektor pada path_type 'each_zone'. Tujuan raster menggunakan nilai sel sebagai zona."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer polyline keluaran. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "optimized_hot_spot_analysis": {
            "name": "Analisis hot spot teroptimasi",
            "description": "Agregasi insiden secara otomatis, pilih pita jarak analisis secara otomatis, jalankan Getis-Ord Gi*, dan laporkan bin hot/cold spot terkoreksi FDR (seperti ArcGIS Optimized Hot Spot Analysis) — pembungkus alur kerja yang tidak dimiliki getis_ord_gi_star bawaan yang mentah.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan (titik insiden, atau fitur dengan field analisis)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer titik keluaran dengan hasil Gi*. Jika dihilangkan, disimpan di memori."
              },
              "analysis_field": {
                "label": "Field analisis",
                "description": "Field numerik yang akan dianalisis (terboboti, tanpa agregasi). Hilangkan untuk menghitung insiden."
              },
              "aggregation": {
                "label": "Agregasi",
                "description": "Agregasi insiden jika tidak ada analysis_field: 'fishnet' (jumlah per grid; default) atau 'snap' (gabungkan yang berimpit)."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel agregasi/penjepretan dalam satuan CRS. Default: sisi ekstensi yang lebih panjang / 30."
              },
              "distance_band": {
                "label": "Pita jarak",
                "description": "Pita jarak analisis dalam satuan CRS. Default: dipilih otomatis berdasarkan intensitas pengelompokan puncak."
              }
            }
          },
          "optimized_outlier_analysis": {
            "name": "Analisis pencilan teroptimasi",
            "description": "Agregasi insiden secara otomatis, pilih pita jarak analisis secara otomatis, jalankan Moran's I lokal Anselin, dan laporkan jenis klaster/pencilan terkoreksi FDR (HH/LL/HL/LH) — seperti ArcGIS Optimized Outlier Analysis; pembungkus Moran lokal non-temporal yang tidak disediakan local_morans_i_lisa bawaan yang mentah dan local_outlier_analysis ruang-waktu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan (titik insiden, atau fitur dengan field analisis)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer titik keluaran dengan hasil Local Moran. Jika dihilangkan, disimpan di memori."
              },
              "analysis_field": {
                "label": "Field analisis",
                "description": "Field numerik yang akan dianalisis (terboboti, tanpa agregasi). Hilangkan untuk menghitung insiden."
              },
              "aggregation": {
                "label": "Agregasi",
                "description": "Agregasi insiden jika tidak ada analysis_field: 'fishnet' (jumlah per grid; default) atau 'snap' (gabungkan yang berimpit)."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel agregasi/penjepretan dalam satuan CRS. Default: sisi ekstensi yang lebih panjang / 30."
              },
              "distance_band": {
                "label": "Pita jarak",
                "description": "Pita jarak analisis dalam satuan CRS. Default: dipilih otomatis berdasarkan intensitas pengelompokan puncak."
              },
              "fdr_alpha": {
                "label": "Alpha FDR",
                "description": "Taraf False Discovery Rate untuk signifikansi COType (default 0.05)."
              }
            }
          },
          "ordinary_cokriging": {
            "name": "Interpolasi co-kriging biasa",
            "description": "Melakukan interpolasi spasial multivariat menggunakan variabel tambahan untuk meningkatkan prediksi variabel utama. Ideal ketika data utama jarang tetapi data sekunder yang berkorelasi melimpah.",
            "params": {
              "primary_points": {
                "label": "Titik utama",
                "description": "Layer vektor dengan titik pelatihan variabel utama"
              },
              "primary_field": {
                "label": "Field utama",
                "description": "Field yang berisi nilai variabel utama"
              },
              "auxiliary_inputs": {
                "label": "Masukan tambahan",
                "description": "Daftar path file variabel bantu yang dipisahkan koma"
              },
              "auxiliary_fields": {
                "label": "Field tambahan",
                "description": "Nama field yang dipisahkan koma untuk variabel bantu (kosongkan untuk raster)"
              },
              "template_raster": {
                "label": "Raster templat",
                "description": "Templat raster yang mendefinisikan grid dan CRS keluaran"
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster hasil kriging keluaran"
              },
              "output_variance": {
                "label": "Keluaran varians",
                "description": "Path raster varians kriging keluaran opsional"
              },
              "neighborhood_size": {
                "label": "Ukuran ketetanggaan",
                "description": "Jumlah tetangga terdekat untuk cokriging lokal (default: semua)"
              }
            }
          },
          "pairwise_comparison_weights": {
            "name": "Bobot perbandingan berpasangan",
            "description": "Turunkan bobot kriteria dari matriks perbandingan berpasangan AHP (skala Saaty 1-9) sebagai vektor eigen utama ternormalisasi, dengan pemeriksaan konsistensi (lambda_max, indeks konsistensi, rasio konsistensi) — seperti ArcGIS Assign Weights By Pairwise Comparison.",
            "params": {
              "matrix": {
                "label": "Matriks",
                "description": "Matriks perbandingan resiprokal n x n sebagai array JSON 2 dimensi, misalnya [[1,3,5],[0.333,1,2],[0.2,0.5,1]]. Berikan ini atau `input`."
              },
              "input": {
                "label": "Masukan",
                "description": "File CSV yang menyimpan matriks perbandingan (baris numerik polos, atau berlabel dengan baris header dan kolom nama di depan). Berikan ini atau `matrix`."
              },
              "criteria": {
                "label": "Kriteria",
                "description": "Nama kriteria yang dipisahkan koma (harus sesuai dengan urutan matriks). Menggantikan label CSV; default-nya C1..Cn."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran — sebuah CSV (ekstensi .csv) atau tabel vektor tanpa geometri (kriteria, bobot, peringkat). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "path_distance": {
            "name": "Jarak jalur",
            "description": "Jarak biaya terkecil terakumulasi di mana setiap langkah membayar jarak permukaan 3D sebenarnya (dari DEM) dikalikan faktor vertikal bergantung kemiringan (Tobler hiking, linear, biner) dikalikan friksi, seperti ArcGIS Path Distance.",
            "params": {
              "source": {
                "label": "Sumber",
                "description": "Raster sumber; sel dengan nilai positif dan bukan nodata adalah titik asal (biaya terakumulasi 0)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster biaya terakumulasi keluaran. Jika dihilangkan, disimpan di memori."
              },
              "cost": {
                "label": "Biaya",
                "description": "Raster gesekan/biaya lintasan opsional (default seragam 1)."
              },
              "surface": {
                "label": "Permukaan",
                "description": "Raster elevasi (DEM) opsional; mengaktifkan jarak permukaan 3D dan faktor vertikal berbasis kemiringan."
              },
              "vertical_factor": {
                "label": "Faktor vertikal",
                "description": "'tobler' (default), 'linear', 'sym_linear', 'inverse_linear', atau 'binary'."
              },
              "slope_factor": {
                "label": "Faktor kemiringan",
                "description": "Koefisien penalti kemiringan untuk faktor linear (default 1)."
              },
              "zero_factor": {
                "label": "Faktor nol",
                "description": "Batas bawah faktor vertikal minimum (menurun) untuk linear/inverse_linear (default 0.1)."
              },
              "max_slope": {
                "label": "Kemiringan maksimum",
                "description": "Untuk 'binary': kemiringan yang lebih curam dari sekian derajat ini tak terlewati (default 30)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 untuk semua raster (default 1)."
              }
            }
          },
          "percentile_contours": {
            "name": "Kontur persentil",
            "description": "Hasilkan poligon bersarang yang melingkupi sel paling ekstrem dari suatu permukaan, diambangkan berdasarkan persentil nilai atau persentil massa kumulatif (volume).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster permukaan kontinu masukan (kerapatan, kesesuaian, elevasi)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "percentiles": {
                "label": "Persentil",
                "description": "Persentil yang dipisahkan koma dalam [0,100] (misalnya \"50,90,95\"). Default \"90\"."
              },
              "mode": {
                "label": "Mode",
                "description": "'value' (default): sel pada/di atas nilai persentil ke-p. 'volume': sel tertinggi yang membawa (100-p)% teratas dari nilai kumulatif."
              },
              "ignore_negative": {
                "label": "Abaikan negatif",
                "description": "Kecualikan nilai sel negatif dari pemeringkatan dan keluaran. Default false."
              },
              "smooth": {
                "label": "Haluskan",
                "description": "Sederhanakan poligon tepi sel dengan Douglas-Peucker (toleransi ~1.5 sel) untuk melunakkan efek tangga. Default false."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "pivot_table": {
            "name": "Tabel pivot",
            "description": "Bentuk ulang tabel atribut format panjang menjadi lebar: satu baris keluaran per kombinasi unik field identitas, dan satu kolom per nilai berbeda dari field pivot, diisi dari field nilai. Seperti ArcGIS Pivot Table.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor atau tabel atribut masukan dalam bentuk panjang."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "fields": {
                "label": "Field",
                "description": "Nama field yang dipisahkan koma/titik koma yang mengidentifikasi satu baris keluaran; dilewatkan tanpa perubahan."
              },
              "pivot_field": {
                "label": "Field pivot",
                "description": "Field yang nilai berbedanya menjadi kolom baru."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field yang menyediakan nilai sel."
              },
              "aggregate": {
                "label": "Agregat",
                "description": "Diterapkan jika satu sel baris/kolom memiliki beberapa rekaman sumber: 'first' (default), 'sum', 'mean', 'min', 'max', 'count'."
              }
            }
          },
          "pmtiles_extract": {
            "name": "Ekstrak PMTiles",
            "description": "Ekstrak subset bbox/zoom dari arsip PMTiles ke arsip baru (mis. peta dasar luring dari build planet Protomaps).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file .pmtiles masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file .pmtiles keluaran."
              },
              "bbox": {
                "label": "Bbox",
                "description": "Kotak pembatas WGS84 sebagai 'min_lon,min_lat,max_lon,max_lat'."
              },
              "min_zoom": {
                "label": "Zoom minimum",
                "description": "Aras zum terendah yang disertakan (default 0, sehingga peta tetap dapat digunakan saat diperkecil)."
              },
              "max_zoom": {
                "label": "Zoom maksimum",
                "description": "Aras zum tertinggi yang disertakan (default: zum maksimum arsip sumber)."
              },
              "max_tiles": {
                "label": "Petak maksimum",
                "description": "Batalkan jika pilihan menyangkut lebih banyak petak dari nilai ini (default 2000000)."
              },
              "url": {
                "label": "URL",
                "description": "URL PMTiles HTTP(S). Berikan url atau input; sumber HTTP menggunakan permintaan byte-range (host harus mengizinkan pembacaan Range lintas asal)."
              },
              "bbox_crs": {
                "label": "CRS bbox",
                "description": "Kode EPSG dari koordinat bbox. Default-nya 4326 (bujur/lintang WGS84); CRS lain diproyeksikan ulang ke 4326."
              }
            }
          },
          "point_statistics": {
            "name": "Statistik titik",
            "description": "Rasterisasi statistik jendela bergerak dari atribut fitur titik: untuk setiap sel keluaran, suatu ketetanggaan (lingkaran atau persegi) mengumpulkan nilai field numerik terpilih dari titik-titik di dalamnya dan mereduksinya menjadi rata-rata/mayoritas/maksimum/median/minimum/minoritas/rentang/std/jumlah/variasi. Seperti ArcGIS Point Statistics; melengkapi line_density/heat_map yang hanya kerapatan dan neighborhood_summary_statistics yang hanya vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (Point / MultiPoint)."
              },
              "field": {
                "label": "Field",
                "description": "Field atribut numerik yang akan diringkas."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "statistic": {
                "label": "Statistik",
                "description": "Statistik per ketetanggaan: mean (default), majority, maximum, median, minimum, minority, range, std, sum, atau variety."
              },
              "neighborhood": {
                "label": "Ketetanggaan",
                "description": "Bentuk ketetanggaan: 'circle' (default, menggunakan 'radius') atau 'rectangle' (persegi bersisi 2*radius)."
              },
              "radius": {
                "label": "Radius",
                "description": "Radius ketetanggaan / setengah sisi persegi (meter untuk CRS geografis, satuan CRS jika tidak). Default: sisi ekstensi yang lebih pendek / 20."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran (satuan sama dengan radius). Default: radius / 5."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Gantikan kode EPSG CRS masukan (misalnya jika layer tidak berlabel). Nilai 4326 memicu proyeksi meter."
              }
            }
          },
          "points_to_line": {
            "name": "Titik ke garis",
            "description": "Bangun fitur polyline dari titik: satu garis per nilai line_field berbeda, verteks diurutkan berdasarkan sort_field, dengan penanda tutup garis opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor titik masukan (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "line_field": {
                "label": "Field garis",
                "description": "Atribut yang nilai berbedanya memartisi titik menjadi garis terpisah (satu polyline per nilai). Jika dihilangkan, semua titik membentuk satu garis."
              },
              "sort_field": {
                "label": "Field pengurutan",
                "description": "Atribut yang menetapkan urutan verteks dalam setiap garis. Nilai numerik diurutkan secara numerik, teks secara leksikografis. Jika dihilangkan, urutan fitur masukan digunakan."
              },
              "close_line": {
                "label": "Tutup garis",
                "description": "Tambahkan verteks pertama ke akhir setiap garis, menutupnya menjadi cincin. Default false."
              }
            }
          },
          "points_to_path": {
            "name": "Titik ke jalur",
            "description": "Hubungkan titik menjadi fitur polyline, diurutkan berdasarkan field dan (opsional) dikelompokkan menjadi satu jalur per nilai, dengan pengurutan alami dan penutupan jalur opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor titik masukan (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "order_field": {
                "label": "Field urutan",
                "description": "Atribut yang menetapkan urutan penyambungan titik dalam setiap jalur. Nilai numerik diurutkan secara numerik, teks secara leksikografis. Jika dihilangkan, urutan fitur masukan digunakan."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Atribut yang memartisi titik menjadi jalur terpisah (satu garis per nilai berbeda). Jika dihilangkan, semua titik membentuk satu jalur."
              },
              "natural_sort": {
                "label": "Pengurutan alami",
                "description": "Urutkan nilai urutan teks secara alami sehingga 'a9' datang sebelum 'a10'. Default false."
              },
              "close_path": {
                "label": "Tutup jalur",
                "description": "Tambahkan verteks pertama ke akhir setiap jalur, menutupnya menjadi cincin. Default false."
              }
            }
          },
          "polygon_neighbors": {
            "name": "Tetangga poligon",
            "description": "Bangun tabel kebersebelahan (kontiguitas) poligon: pasangan bertetangga dengan panjang batas bersamanya dan hitungan sentuhan titik, seperti ArcGIS Polygon Neighbors.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran — sebuah CSV (ekstensi .csv) atau tabel vektor tanpa geometri. Jika dihilangkan, disimpan di memori."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field yang mengidentifikasi setiap poligon dalam tabel. Default: indeks fitur."
              },
              "both_sides": {
                "label": "Kedua sisi",
                "description": "Hasilkan setiap pasangan tetangga dua kali (src→nbr dan nbr→src). Default false (sekali per pasangan)."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Kuantisasi verteks ke grid berukuran ini (satuan CRS) sebelum mencocokkan batas. Default 0 (koordinat eksak)."
              }
            }
          },
          "polygon_volume": {
            "name": "Volume poligon",
            "description": "Volume dan luas permukaan 3D per poligon dari raster permukaan di atas/di bawah tinggi bidang referensi setiap fitur, seperti ArcGIS Polygon Volume — padanan zonal dari surface_volume.",
            "params": {
              "surface": {
                "label": "Permukaan",
                "description": "Raster permukaan elevasi masukan."
              },
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon (zona)."
              },
              "height_field": {
                "label": "Field tinggi",
                "description": "Field atribut yang memberikan elevasi bidang referensi setiap poligon."
              },
              "direction": {
                "label": "Arah",
                "description": "Sisi mana dari setiap bidang yang diintegrasikan: 'above' (default), 'below', atau 'both'."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari permukaan (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "porous_puff": {
            "name": "Porous puff",
            "description": "Adveksi-dispersi analitik dari slug kontaminan sesaat melalui air tanah (seperti ArcGIS Porous Puff): gerakkan pusat puff dari titik pelepasan sepanjang medan kecepatan Darcy (magnitudo+arah, seperti yang dihasilkan darcy_flow), lalu evaluasi konsentrasi puff Gaussian 2D bentuk tertutup dalam koordinat selaras jalur, diskalakan oleh porositas, ketebalan, retardasi, dan peluruhan orde pertama.",
            "params": {
              "magnitude": {
                "label": "Magnitudo",
                "description": "Raster magnitudo kecepatan Darcy, seperti yang dihasilkan oleh 'output' darcy_flow. Ukuran sel/ekstensi diambil dari raster ini."
              },
              "direction": {
                "label": "Arah",
                "description": "Raster arah aliran Darcy (derajat azimut dari utara, searah jarum jam, menurun gradien), seperti yang dihasilkan oleh 'direction' darcy_flow. Harus terkoregistrasi dengan 'magnitude'."
              },
              "x": {
                "label": "X",
                "description": "Koordinat X titik pelepasan (satuan peta, CRS sama dengan raster kecepatan)."
              },
              "y": {
                "label": "Y",
                "description": "Koordinat Y titik pelepasan (satuan peta)."
              },
              "mass": {
                "label": "Massa",
                "description": "Massa kontaminan yang dilepaskan (harus positif)."
              },
              "porosity": {
                "label": "Porositas",
                "description": "Porositas efektif: berupa konstanta numerik (0, 1] atau path raster yang terkoregistrasi dengan 'magnitude'."
              },
              "thickness": {
                "label": "Ketebalan",
                "description": "Ketebalan akuifer: berupa konstanta numerik positif atau path raster yang terkoregistrasi dengan 'magnitude'."
              },
              "dispersivity_long": {
                "label": "Dispersivitas longitudinal",
                "description": "Dispersivitas longitudinal (satuan panjang; harus positif)."
              },
              "dispersivity_trans": {
                "label": "Dispersivitas transversal",
                "description": "Dispersivitas transversal (satuan panjang; harus positif)."
              },
              "retardation": {
                "label": "Retardasi",
                "description": "Faktor retardasi (default 1, harus >= 1)."
              },
              "decay": {
                "label": "Peluruhan",
                "description": "Konstanta peluruhan orde pertama (default 0, harus >= 0; satuan waktu sama dengan 'time')."
              },
              "time": {
                "label": "Waktu",
                "description": "Daftar satu atau lebih waktu berlalu positif yang dipisahkan koma. Waktu terakhir ditulis ke 'output'; semua waktu (termasuk yang terakhir) dilaporkan dalam keluaran 'time_series'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster konsentrasi keluaran untuk waktu terakhir di 'time'. Jika dihilangkan, disimpan di memori."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari raster magnitude/direction (default 1)."
              },
              "step": {
                "label": "Langkah",
                "description": "Panjang langkah perambatan pusat gumpalan dalam satuan CRS (default: ukuran sel raster magnitude)."
              },
              "max_steps": {
                "label": "Langkah maksimum",
                "description": "Jumlah maksimum langkah perambatan per waktu yang diminta (default 1000)."
              }
            }
          },
          "predict_using_trend_raster": {
            "name": "Prediksi dengan raster tren",
            "description": "Evaluasi raster kemiringan/intersep yang disesuaikan oleh generate_trend_raster pada satu atau lebih waktu, menghasilkan permukaan prediksi, seperti ArcGIS Predict Using Trend Raster.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kemiringan (tren) yang ditulis oleh generate_trend_raster."
              },
              "intercept": {
                "label": "Intersep",
                "description": "Raster intersep yang ditulis oleh generate_trend_raster (melalui 'intercept_output'-nya), terkoregistrasi dengan raster kemiringan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran untuk waktu prediksi pertama. Jika dihilangkan, hasil disimpan di memori."
              },
              "times": {
                "label": "Waktu",
                "description": "Waktu prediksi yang dipisahkan koma, pada skala yang sama dengan yang digunakan untuk pencocokan (mis. '12,18,24'). Menimpa start/end/interval."
              },
              "start": {
                "label": "Awal",
                "description": "Waktu pertama dari rentang yang dihasilkan (digunakan jika 'times' tidak ada)."
              },
              "end": {
                "label": "Akhir",
                "description": "Waktu terakhir dari rentang yang dihasilkan (inklusif; digunakan jika 'times' tidak ada)."
              },
              "interval": {
                "label": "Interval",
                "description": "Langkah antar waktu yang dihasilkan (default 1; digunakan jika 'times' tidak ada)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca dari setiap raster koefisien (default 1)."
              }
            }
          },
          "presence_only_prediction": {
            "name": "Prediksi presence-only",
            "description": "Pemodelan kesesuaian spesies/habitat gaya MaxEnt: sesuaikan model logistik terregularisasi L1 yang mengontraskan titik kehadiran terhadap sampel latar berseed dari raster penjelas (ekspansi basis linear/kuadratik/hinge), lalu prediksi permukaan probabilitas kehadiran ditambah laporan kepentingan variabel — seperti ArcGIS Presence-only Prediction (MaxEnt).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik kehadiran masukan (kemunculan yang teramati)."
              },
              "explanatory": {
                "label": "Penjelas",
                "description": "Daftar path raster penjelas yang dipisahkan koma (tumpukan kovariat). Diambil sampelnya di lokasi kehadiran + latar; raster pertama menentukan grid keluaran."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster probabilitas kehadiran keluaran. Jika dihilangkan, disimpan di memori."
              },
              "report": {
                "label": "Laporan",
                "description": "Path keluaran opsional untuk tabel koefisien / kepentingan variabel CSV."
              },
              "features": {
                "label": "Fitur",
                "description": "Kelas fitur ekspansi basis yang dipisahkan koma: salah satu dari 'linear', 'quadratic', 'hinge'. Default 'linear,quadratic'."
              },
              "background": {
                "label": "Latar",
                "description": "Jumlah sampel latar yang diambil dari tumpukan raster. Default 1000 (dibatasi pada jumlah sel yang valid)."
              },
              "regularization": {
                "label": "Regularisasi",
                "description": "Kekuatan regularisasi L1 (lasso) pada fitur terstandardisasi. Lebih besar = model lebih sederhana. Default 0.01."
              },
              "hinge_knots": {
                "label": "Knot hinge",
                "description": "Jumlah knot interior per kovariat untuk fitur hinge (hanya digunakan jika 'hinge' diaktifkan). Default 10."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed acak untuk sampel latar deterministik (default 1)."
              }
            }
          },
          "propagate_displacement": {
            "name": "Propagasi perpindahan",
            "description": "Propagasi perpindahan yang diperkenalkan oleh resolve_road_conflicts (atau layer tautan perpindahan dua titik apa pun) ke fitur terdekat dengan menginterpolasi tautan jarang menjadi medan IDW halus: fitur kaku (bangunan, persil) mendapat satu translasi rata-rata, garis fleksibel mendapat lengkungan per verteks yang dihaluskan sepanjang busur, seperti ArcGIS Propagate Displacement.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan yang akan disesuaikan (tipe geometri apa pun)."
              },
              "links": {
                "label": "Tautan",
                "description": "Tautan perpindahan: layer garis 2 verteks per tautan, verteks pertama = lokasi asli, verteks terakhir = lokasi terpindahkan (skema yang digunakan baik oleh keluaran 'links' resolve_road_conflicts maupun masukan 'links' rubbersheet_features)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "adjustment_style": {
                "label": "Gaya penyesuaian",
                "description": "'auto' (default: translasi kaku untuk titik/poligon, tekukan per verteks untuk garis), 'preserve_orientation' (translasi kaku dengan field yang dirata-ratakan di seluruh tapak), atau 'solid' (translasi kaku dengan field yang disampel sekali di titik representatif fitur)."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak maksimum (satuan CRS) di mana sebuah tautan dapat memengaruhi titik sampel; tautan yang lebih jauh diabaikan. Default: tak terbatas (setiap tautan berkontribusi di mana saja)."
              }
            }
          },
          "pycnophylactic_interpolation": {
            "name": "Interpolasi piknofilaktik",
            "description": "Interpolasi areal pelestari massa Tobler: ubah hitungan agregat zona menjadi permukaan kerapatan halus yang jumlah per zonanya tepat sama dengan masukan (seperti ArcGIS Areal Interpolation) — alternatif halus dari asumsi kerapatan seragam apportion_polygon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon masukan dengan field jumlah (variabel ekstensif)."
              },
              "count_field": {
                "label": "Field hitungan",
                "description": "Field yang memuat jumlah total setiap zona (populasi, dll.)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster kepadatan keluaran (nilai per sel; jumlah zona sama dengan masukan). Jika dihilangkan, disimpan di memori."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS (default: ekstensi / 200)."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah iterasi penghalusan maksimum (default 100)."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Berhenti jika perubahan per sel maksimum turun di bawah fraksi kepadatan rata-rata ini (default 0.001)."
              },
              "non_negative": {
                "label": "Non-negatif",
                "description": "Batasi nilai negatif ke 0 dan distribusikan ulang untuk mempertahankan massa (default true)."
              }
            }
          },
          "radiometric_terrain_flattening": {
            "name": "Perataan medan radiometrik",
            "description": "Menghapus sinyal kecerahan topografi dari hamburan balik SAR terkalibrasi dengan mengganti area referensi bumi datar dengan area teriluminasi lokal turunan DEM, dan menandai layover serta bayangan radar (ArcGIS Apply Radiometric Terrain Flattening). apply_radiometric_calibration putaran 17 menormalisasi dengan sudut datang elipsoid, sehingga pada tanah miring sigma0/gamma0-nya mengikuti topografi alih-alih tutupan lahan — sering kali lebih dari 6 dB, yang melebihi selisih hutan/tanah gundul yang seharusnya diukur.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster hamburan balik SAR terkalibrasi (beta nought secara default; lihat 'input_calibration')."
              },
              "dem": {
                "label": "DEM",
                "description": "Model elevasi digital, terkoregistrasi dengan raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster hamburan balik keluaran yang telah diratakan terhadap medan. Jika dihilangkan, disimpan di memori."
              },
              "output_scattering_area": {
                "label": "Keluaran luas hamburan",
                "description": "Rasio keluaran antara area tersinar sebenarnya terhadap area bumi datar. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "output_geometry_mask": {
                "label": "Keluaran masker geometri",
                "description": "Masker keluaran: 0 normal, 1 layover, 2 bayangan radar. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "incidence_angle": {
                "label": "Sudut datang",
                "description": "Sudut datang elipsoid dalam derajat: sebuah konstanta, atau path ke raster per sel. Wajib diisi."
              },
              "look_azimuth": {
                "label": "Azimut pandang",
                "description": "Azimut kompas dalam derajat dari target menuju sensor (default 270, yaitu lintasan menaik dengan arah pandang kanan). Lintasan menurun Sentinel-1 dengan arah pandang kanan sekitar 283."
              },
              "input_calibration": {
                "label": "Kalibrasi masukan",
                "description": "Masukan itu sebenarnya sudah berupa apa: 'beta0' (default), 'sigma0_ellipsoid', atau 'gamma0_ellipsoid'. Dua yang terakhir dikonversi kembali ke beta nought menggunakan sudut elipsoid sebelum perataan."
              },
              "calibration_type": {
                "label": "Jenis kalibrasi",
                "description": "Konvensi keluaran: 'gamma0' (default) atau 'sigma0'."
              },
              "input_units": {
                "label": "Satuan masukan",
                "description": "'intensity' (default), 'dn', 'amplitude', atau 'db'."
              },
              "output_units": {
                "label": "Satuan keluaran",
                "description": "'linear' (default) atau 'db'."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Pengali yang mengonversi satuan z DEM ke satuan XY raster (default 1.0)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari raster masukan yang akan diratakan (default 1)."
              }
            }
          },
          "raster_domain": {
            "name": "Domain raster",
            "description": "Menelusuri batas wilayah data valid suatu raster sebagai poligon (atau polyline tertutup), mempertahankan lubang no-data interior (ArcGIS Raster Domain). layer_footprint_raster bawaan mengembalikan luasan persegi penuh, yang untuk adegan terotasi, DAS terpotong, atau petak mosaik bergerigi bisa beberapa kali lipat cakupan sebenarnya; polygonize dapat melakukannya tetapi hanya dari masker validitas 0/1 yang harus dibangun pemanggil terlebih dahulu, yang merupakan seluruh tugasnya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan yang tapak data validnya diinginkan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon atau garis keluaran. Jika dihilangkan, disimpan di memori."
              },
              "geometry_type": {
                "label": "Jenis geometri",
                "description": "'polygon' (default) atau 'line' untuk batas sebagai polyline tertutup."
              },
              "ignore_value": {
                "label": "Nilai yang diabaikan",
                "description": "Perlakukan nilai ini sebagai tidak valid juga, di samping nodata raster itu sendiri (umumnya 0 untuk citra dengan tepi hitam)."
              },
              "min_value": {
                "label": "Nilai minimum",
                "description": "Perlakukan nilai di bawah ini sebagai tidak valid."
              },
              "max_value": {
                "label": "Nilai maksimum",
                "description": "Perlakukan nilai di atas ini sebagai tidak valid."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Buang bagian tapak yang lebih kecil dari luas ini dalam satuan peta kuadrat, yang menghilangkan speckle di sekitar margin bergerigi."
              },
              "fill_holes": {
                "label": "Isi lubang",
                "description": "Hapus lubang interior dan kembalikan tapak yang solid (default false)."
              },
              "all_bands": {
                "label": "Semua band",
                "description": "Haruskan sebuah sel valid di setiap band alih-alih hanya band yang dipilih (default false)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang diuji (default 1). Diabaikan jika 'all_bands' diatur."
              }
            }
          },
          "raster_normalize": {
            "name": "Normalisasi raster",
            "description": "Normalisasi min-maks band raster ke rentang [0, 1].",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dinormalisasi (default 1)."
              }
            }
          },
          "raster_to_h3": {
            "name": "Raster ke bin H3",
            "description": "Agregasi nilai band raster ke dalam sel grid global diskret H3 (rata-rata, jumlah, min, maks, hitungan, median).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan (harus geografis lon/lat, EPSG:4326)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran; driver diambil dari ekstensinya (.geojson, .fgb, .parquet, ...). Jika dihilangkan, layer disimpan di memori."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 dari 0 (paling kasar) hingga 15 (paling halus); default 8 (sel ~0,7 km²)."
              },
              "band": {
                "label": "Band",
                "description": "Band raster berbasis 1 yang diagregasi (default 1)."
              },
              "aggregate": {
                "label": "Agregat",
                "description": "Cara menggabungkan nilai piksel per sel: mean, sum, min, max, count, atau median (default mean)."
              }
            }
          },
          "raster_to_tiles": {
            "name": "Raster ke petak XYZ",
            "description": "Iris raster menjadi piramida petak PNG XYZ Web Mercator (EPSG:3857) untuk peta web.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan. Harus membawa CRS sumber (EPSG atau WKT)."
              },
              "output_dir": {
                "label": "Direktori keluaran",
                "description": "Direktori keluaran untuk pohon petak {z}/{x}/{y}.png (mis. /work/tiles)."
              },
              "min_zoom": {
                "label": "Zoom minimum",
                "description": "Level zoom minimum (default: satu level zoom native yang sesuai dengan resolusi raster)."
              },
              "max_zoom": {
                "label": "Zoom maksimum",
                "description": "Level zoom maksimum (default: sama dengan min_zoom)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dirender (default 1)."
              },
              "colormap": {
                "label": "Peta warna",
                "description": "Peta warna: viridis (default), magma, turbo, terrain, atau grayscale."
              },
              "method": {
                "label": "Metode",
                "description": "Metode resampling untuk reproyeksi dan pengambilan sampel: bilinear (default), nearest, cubic."
              },
              "min": {
                "label": "Min",
                "description": "Nilai yang dipetakan ke ujung bawah peta warna (default: minimum band)."
              },
              "max": {
                "label": "Maks",
                "description": "Nilai yang dipetakan ke ujung atas peta warna (default: maksimum band)."
              }
            }
          },
          "raster_to_weighted_points": {
            "name": "Raster ke titik terboboti",
            "description": "Mendistribusikan sejumlah titik tetap di seluruh raster sehingga kerapatannya sebanding dengan nilai sel, menempatkannya pada pola kisi Fibonacci deterministik, spiral, lingkaran, atau centroid (ArcGIS Raster To Weighted Points). Tidak ada di kedua registri yang membobot berdasarkan permukaan: random_sample dan random_points_in_polygon seragam, create_spatially_balanced_points sengaja menyebarkan titik secara merata, dan raster_to_vector_points menghasilkan satu per sel tanpa penjarangan atau pembobotan. Alokasi menggunakan metode sisa terbesar dan tidak membutuhkan RNG, sehingga hasilnya dapat direproduksi di WASM.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster permukaan masukan; nilai sel adalah bobotnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer titik keluaran. Jika dihilangkan, disimpan di memori."
              },
              "max_number_of_points": {
                "label": "Jumlah titik maksimum",
                "description": "Jumlah total titik yang akan didistribusikan (default 1000)."
              },
              "method": {
                "label": "Metode",
                "description": "Penempatan dalam sel: 'fibonacci_lattice' (default), 'fibonacci_spiral', 'circular', atau 'centroid'."
              },
              "min_value": {
                "label": "Nilai minimum",
                "description": "Sel dengan bobot pada atau di bawah nilai ini tidak mendapat titik (default 0). Bobot negatif selalu dikecualikan."
              },
              "max_points_per_cell": {
                "label": "Titik maksimum per sel",
                "description": "Batasi jumlah titik yang dapat diterima satu sel, sehingga satu sel bernilai tinggi tidak menyerap seluruh anggaran."
              },
              "include_weight": {
                "label": "Sertakan bobot",
                "description": "Tulis nilai sel sumber pada setiap titik (default true)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang menyediakan bobot (default 1)."
              }
            }
          },
          "read_geoparquet": {
            "name": "Baca GeoParquet",
            "description": "Baca file GeoParquet dan konversikan ke format vektor lain (atau simpan di memori).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file GeoParquet masukan (mis. /work/data.parquet)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional; format diambil dari ekstensinya (.geojson, .fgb, .shp, .gpkg, ...). Jika dihilangkan, layer disimpan di memori."
              }
            }
          },
          "reclassify_field": {
            "name": "Reklasifikasi field",
            "description": "Klasifikasikan atribut vektor numerik ke dalam bin kelas (seperti ArcGIS Reclassify Field): equal_interval, defined_interval, quantile, natural_breaks (Jenks), std_dev, atau geometric_interval, menulis field kelas bilangan bulat ditambah field nilai batas opsional.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor (atau tabel) masukan dengan field numerik yang akan diklasifikasikan."
              },
              "field": {
                "label": "Field",
                "description": "Nama field numerik yang akan diklasifikasikan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran dengan field kelas yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "Metode klasifikasi: equal_interval, defined_interval, quantile, natural_breaks, std_dev, atau geometric_interval (default natural_breaks)."
              },
              "classes": {
                "label": "Kelas",
                "description": "Jumlah kelas untuk equal_interval/quantile/natural_breaks/geometric_interval (default 5). Diabaikan oleh defined_interval dan std_dev, yang jumlah kelasnya mengikuti data."
              },
              "interval": {
                "label": "Interval",
                "description": "Lebar kelas tetap untuk defined_interval (wajib untuk metode tersebut)."
              },
              "std_dev_interval": {
                "label": "Interval simpangan baku",
                "description": "Ukuran interval untuk std_dev, dalam satuan simpangan baku (default 1.0; mis. 0.5 untuk band setengah sigma)."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Nama field kelas bilangan bulat yang akan ditambahkan (default 'class')."
              },
              "break_field": {
                "label": "Field pemisah",
                "description": "Jika diberikan, tambahkan juga field float dengan batas atas kelas tempat setiap fitur berada."
              }
            }
          },
          "reconstruct_tracks": {
            "name": "Rekonstruksi jejak",
            "description": "Ubah titik berstempel waktu menjadi polyline jejak pergerakan (dikelompokkan berdasarkan ID, diurutkan berdasarkan waktu, dipisah pada celah waktu/jarak) dengan statistik per jejak, dan secara opsional temukan lokasi persinggahan di mana penggerak berhenti — seperti ArcGIS Reconstruct Tracks / Find Dwell Locations.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan berisi pengamatan berstempel waktu."
              },
              "track_field": {
                "label": "Field jejak",
                "description": "Field yang mengidentifikasi setiap jejak/objek bergerak (misalnya id kendaraan atau hewan)."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: detik numerik atau stempel waktu ISO-8601."
              },
              "output": {
                "label": "Keluaran",
                "description": "Vektor garis keluaran berisi trek (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "time_gap": {
                "label": "Celah waktu",
                "description": "Mulai segmen trek baru jika jeda waktu antar titik melebihi sekian detik ini. Default: tanpa pemisahan waktu."
              },
              "distance_gap": {
                "label": "Celah jarak",
                "description": "Mulai segmen trek baru jika jarak antar titik melebihi nilai ini (meter untuk CRS geografis, satuan CRS jika tidak). Default: tanpa pemisahan jarak."
              },
              "dwells": {
                "label": "Persinggahan",
                "description": "Path titik keluaran opsional untuk lokasi persinggahan (tempat objek bergerak berhenti sejenak)."
              },
              "dwell_distance": {
                "label": "Jarak persinggahan",
                "description": "Radius maksimum untuk persinggahan, dalam satuan jarak di atas. Default 50."
              },
              "dwell_min_duration": {
                "label": "Durasi persinggahan minimum",
                "description": "Waktu minimum (detik) objek bergerak harus tetap berada dalam dwell_distance agar dihitung sebagai persinggahan. Default 300."
              }
            }
          },
          "reduce_point_density": {
            "name": "Kurangi kerapatan titik",
            "description": "Menjarangkan layer titik vektor sehingga tidak ada dua titik yang dipertahankan lebih dekat dari jarak antar minimum, atau mempertahankan satu titik per sel grid (ArcGIS Reduce Point Density). lidar_thin hanya untuk LAS dan find_identical hanya menangkap duplikat eksak, sehingga layer pemeruman, GPS, dan sensor yang rapat tidak dapat didesimasi sebelum interpolasi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik (atau multititik) masukan."
              },
              "method": {
                "label": "Metode",
                "description": "'spacing' (default): penipisan separasi minimum secara serakah. 'bin': pertahankan satu titik per sel grid."
              },
              "min_distance": {
                "label": "Jarak minimum",
                "description": "Separasi minimum antara titik yang dipertahankan, dalam satuan layer. Wajib untuk metode 'spacing'."
              },
              "bin_size": {
                "label": "Ukuran bin",
                "description": "Ukuran sel grid dalam satuan layer. Wajib untuk metode 'bin'."
              },
              "sort_field": {
                "label": "Field pengurutan",
                "description": "Atribut numerik yang menentukan titik mana yang menang dalam konflik. Tanpa itu, urutan masukan yang menentukan."
              },
              "sort_order": {
                "label": "Urutan pengurutan",
                "description": "'descending' (default, sort_field tertinggi menang) atau 'ascending'."
              },
              "keep_field": {
                "label": "Field yang dipertahankan",
                "description": "Atribut yang menandai titik yang harus selalu dipertahankan (bukan nol / true / tidak kosong). Gunakan untuk bahaya seperti pengukuran kedalaman beting."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer keluaran berisi titik yang dipertahankan. Jika dihilangkan, disimpan di memori."
              },
              "output_removed": {
                "label": "Keluaran yang dihapus",
                "description": "Layer opsional yang menerima titik yang dibuang, untuk ditinjau."
              }
            }
          },
          "regression_kriging": {
            "name": "Kriging regresi",
            "description": "Kriging dengan drift eksternal: meregresikan nilai sampel pada raster kovariat menyeluruh, menyesuaikan variogram ke residu, dan menambahkan medan residu terkriging kembali ke permukaan regresi (ArcGIS EBK Regression Prediction). Setiap varian kriging yang ada memodelkan tren dalam koordinat atau membutuhkan sampel titik sekunder; tidak ada yang menerima raster kovariat, yang sebenarnya dibutuhkan sebagian besar geostatistik terapan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik sampel."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Atribut numerik yang akan diprediksi."
              },
              "covariates": {
                "label": "Kovariat",
                "description": "Path raster kovariat yang dipisahkan koma atau titik koma, mencakup seluruh grid prediksi. Yang pertama menentukan grid keluaran."
              },
              "variogram_model": {
                "label": "Model variogram",
                "description": "Model variogram residual: 'spherical' (default), 'exponential', atau 'gaussian'."
              },
              "lag_count": {
                "label": "Jumlah lag",
                "description": "Jumlah bin lag yang digunakan untuk mencocokkan variogram residual (default 12)."
              },
              "max_neighbors": {
                "label": "Tetangga maksimum",
                "description": "Sampel terdekat yang digunakan dalam sistem kriging setiap sel (default 16)."
              },
              "bilinear": {
                "label": "Bilinear",
                "description": "Ambil sampel kovariat secara bilinear di lokasi titik alih-alih sel terdekat (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster prediksi keluaran. Jika dihilangkan, disimpan di memori."
              },
              "output_error": {
                "label": "Keluaran galat",
                "description": "Raster galat baku prediksi (galat baku kriging dari bidang residual). Selalu dihasilkan."
              }
            }
          },
          "regularize_adjacent_building_footprint": {
            "name": "Regularisasi jejak bangunan bersebelahan",
            "description": "Regularisasi sekelompok jejak bangunan bersebelahan ke satu orientasi bersama sehingga dinding bersama tetap sejajar dan kolinear (seperti ArcGIS Regularize Adjacent Building Footprint) — padanan konsisten-kelompok dari regularize_building_footprints per bangunan, yang membiarkan jejak bertetangga bergeser keluar dari keselarasan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon tapak bangunan masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path poligon keluaran. Jika dihilangkan, disimpan di memori."
              },
              "group": {
                "label": "Kelompok",
                "description": "Field opsional yang mengelompokkan tapak untuk diregularisasi bersama. Tanpa itu, kelompok dibentuk berdasarkan kedekatan batas."
              },
              "method": {
                "label": "Metode",
                "description": "'right_angles' (default) atau 'right_angles_and_diagonals'."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Panjang dinding minimum; tepi yang lebih pendek dipangkas sebagai derau (satuan CRS). Default 1.0."
              },
              "precision": {
                "label": "Presisi",
                "description": "Langkah grid untuk menjepret offset dinding sehingga dinding paralel yang berdekatan menjadi kolinear (satuan CRS). Default: tolerance."
              },
              "adjacency_distance": {
                "label": "Jarak kebersebelahan",
                "description": "Jika field 'group' tidak diberikan, tapak yang verteksnya berada dalam jarak ini menjadi satu kelompok (satuan CRS). Default: 2 x tolerance."
              }
            }
          },
          "regularize_building_footprints": {
            "name": "Regularisasi jejak bangunan",
            "description": "Normalisasi poligon jejak bangunan yang berderau menjadi bentuk teratur (dinding siku-siku, diagonal, sudut bebas, atau melingkar).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "Metode regularisasi: 'right_angles' (default), 'right_angles_and_diagonals', 'any_angle', atau 'circle'."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Jarak maksimum (dalam satuan CRS) tapak yang diregularisasi boleh menyimpang dari batas asli. Default 1.0."
              },
              "diagonal_penalty": {
                "label": "Penalti diagonal",
                "description": "Untuk 'right_angles_and_diagonals': seberapa kuat sudut siku-siku lebih disukai daripada dinding 45 derajat (sebuah dinding menjadi diagonal hanya jika simpangan sudutnya dari diagonal, dikali faktor ini, lebih kecil dari simpangannya dari sumbu). Default 1.5; nilai yang lebih besar menghasilkan lebih sedikit diagonal."
              },
              "min_radius": {
                "label": "Radius minimum",
                "description": "Untuk 'circle': radius terpasang terkecil yang diizinkan; hasil pemasangan yang lebih kecil mempertahankan tapak asli. Default 0.1."
              },
              "max_radius": {
                "label": "Radius maksimum",
                "description": "Untuk 'circle': radius terpasang terbesar yang diizinkan; hasil pemasangan yang lebih besar mempertahankan tapak asli. Tak terbatas jika dihilangkan."
              }
            }
          },
          "remove_overlap_multiple": {
            "name": "Hapus tumpang tindih (ganda)",
            "description": "Alokasikan ulang setiap tumpang tindih di antara sekumpulan poligon ke tepat satu fitur, menghasilkan partisi gabungannya yang bebas celah dan bebas tumpang tindih (pembagian garis tengah atau Thiessen), seperti ArcGIS Remove Overlap (Multiple).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan (fitur boleh tumpang tindih)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'center_line' (tetapkan setiap titik tumpang tindih ke fitur yang paling dalam memuatnya, default) atau 'thiessen' (centroid generator terdekat)."
              },
              "grid_resolution": {
                "label": "Resolusi grid",
                "description": "Jumlah sel di sepanjang sisi yang lebih panjang dari setiap wilayah tumpang tindih saat membagi (default 40; lebih tinggi = garis pembagi lebih halus, lebih lambat)."
              }
            }
          },
          "remove_thermal_noise": {
            "name": "Hapus derau termal",
            "description": "Mengurangkan lantai derau termal aditif penerima dari hamburan balik SAR, menghilangkan pita lintas swath yang mendominasi permukaan gelap seperti air tenang, tanah tergenang, dan bayangan radar (ArcGIS Remove Thermal Noise). Tidak ada di kedua registri yang melakukan ini: filter lee/frost/kuan/refined-lee bawaan menekan speckle multiplikatif, kuantitas yang berbeda. Tanpanya, ambang air Otsu akan mengunci pada batas sub-swath alih-alih garis pantai, dan rasio polarisasi silang dihitung dari pembilang yang sebagian besar berupa derau.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster hamburan balik SAR terkalibrasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran yang telah dihilangkan deraunya. Jika dihilangkan, disimpan di memori."
              },
              "output_snr": {
                "label": "Keluaran SNR",
                "description": "Rasio sinyal terhadap derau keluaran dalam dB. Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "noise_raster": {
                "label": "Raster derau",
                "description": "Raster daya derau per sel, terkoregistrasi dengan masukan. Diutamakan di atas dua bentuk lainnya."
              },
              "noise_profile": {
                "label": "Profil derau",
                "description": "Daya derau lintas-jangkauan yang dipisahkan koma, diinterpolasi secara linear di sepanjang kolom raster. Minimal dua nilai."
              },
              "noise_constant": {
                "label": "Konstanta derau",
                "description": "Sigma nought setara derau tunggal yang diterapkan ke setiap sel."
              },
              "noise_units": {
                "label": "Satuan derau",
                "description": "Satuan nilai derau: 'intensity' (default), 'dn', 'amplitude', atau 'db'."
              },
              "input_units": {
                "label": "Satuan masukan",
                "description": "'intensity' (default), 'dn', 'amplitude', atau 'db'."
              },
              "output_units": {
                "label": "Satuan keluaran",
                "description": "'linear' (default) atau 'db'."
              },
              "floor_fraction": {
                "label": "Fraksi batas bawah",
                "description": "Sel yang turun ke atau di bawah nol dibatasi ke fraksi daya derau lokal ini (default 0.01). Menjaga konversi dB tetap terhingga."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang deraunya dihilangkan (default 1)."
              }
            }
          },
          "render_raster_png": {
            "name": "Render raster ke PNG",
            "description": "Render satu band raster ke citra PNG melalui peta warna (no-data menjadi transparan).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file PNG keluaran (mis. /work/preview.png)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dirender (default 1)."
              },
              "colormap": {
                "label": "Peta warna",
                "description": "Peta warna: viridis (default), magma, turbo, terrain, atau grayscale."
              },
              "min": {
                "label": "Min",
                "description": "Nilai yang dipetakan ke ujung bawah peta warna (default: minimum band)."
              },
              "max": {
                "label": "Maks",
                "description": "Nilai yang dipetakan ke ujung atas peta warna (default: maksimum band)."
              }
            }
          },
          "render_vector_png": {
            "name": "Render vektor ke PNG",
            "description": "Gambar layer vektor (titik/garis/poligon) ke citra peta PNG.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan atau handle dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file PNG keluaran (mis. /work/map.png)."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar citra dalam piksel (default 800)."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi citra dalam piksel (default: dari rasio aspek data)."
              },
              "fill": {
                "label": "Isi",
                "description": "Warna isian poligon/titik sebagai #rrggbb atau #rrggbbaa (default biru semi-transparan)."
              },
              "stroke": {
                "label": "Garis tepi",
                "description": "Warna garis tepi/garis sebagai #rrggbb atau #rrggbbaa (default biru gelap)."
              },
              "stroke_width": {
                "label": "Lebar garis tepi",
                "description": "Lebar garis tepi/garis dalam piksel (default 1)."
              },
              "background": {
                "label": "Latar",
                "description": "Warna latar belakang sebagai #rrggbb[aa] atau 'transparent' (default transparent)."
              }
            }
          },
          "repair_geometry": {
            "name": "Perbaiki geometri",
            "description": "Deteksi dan perbaiki geometri poligon tidak valid — perpotongan diri (melalui gabungan diri), arah putaran cincin, verteks duplikat, dan bagian null/kosong — atau, dengan check_only, laporkan kode masalah per fitur. Seperti ArcGIS Repair Geometry / Check Geometry.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "check_only": {
                "label": "Hanya periksa",
                "description": "Jika true, jangan ubah geometri: hasilkan masukan dengan kolom 'problem_code'/'problem_desc' (seperti ArcGIS Check Geometry). Default false."
              }
            }
          },
          "rescale_by_function": {
            "name": "Skala ulang dengan fungsi",
            "description": "Skalakan ulang raster kontinu ke skala kesesuaian bersama melalui fungsi transfer (linear, inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear), seperti ArcGIS Rescale By Function.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kontinu masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "function": {
                "label": "Fungsi",
                "description": "Fungsi transfer: linear (default), inverse_linear, power, exponential, logarithmic, logistic, gaussian, near, small, large, symmetric_linear."
              },
              "from_scale": {
                "label": "Dari skala",
                "description": "Ujung bawah skala keluaran (default 0)."
              },
              "to_scale": {
                "label": "Ke skala",
                "description": "Ujung atas skala keluaran (default 1)."
              },
              "param1": {
                "label": "Parameter 1",
                "description": "Parameter bentuk pertama (eksponen untuk power; kecuraman untuk exponential/logarithmic/logistic/small/large; pusat untuk gaussian/near). Default spesifik per fungsi."
              },
              "param2": {
                "label": "Parameter 2",
                "description": "Parameter bentuk kedua (sebaran untuk gaussian/near). Default spesifik per fungsi."
              },
              "low_threshold": {
                "label": "Ambang rendah",
                "description": "Batas bawah opsional: nilai di bawahnya dipetakan ke 'value_below'."
              },
              "high_threshold": {
                "label": "Ambang tinggi",
                "description": "Batas atas opsional: nilai di atasnya dipetakan ke 'value_above'."
              },
              "value_below": {
                "label": "Nilai di bawah",
                "description": "Nilai keluaran untuk sel di bawah 'low_threshold' (default = from_scale)."
              },
              "value_above": {
                "label": "Nilai di atas",
                "description": "Nilai keluaran untuk sel di atas 'high_threshold' (default = to_scale)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang diskalakan ulang (default 1)."
              }
            }
          },
          "resolve_building_conflicts": {
            "name": "Selesaikan konflik bangunan",
            "description": "Pindahkan, susutkan, atau sembunyikan jejak bangunan yang berkonflik secara grafis dengan penghalang jalan tersimbolkan (dan satu sama lain) untuk pemetaan skala kecil, menandai masing-masing dengan status, seperti ArcGIS Resolve Building Conflicts.",
            "params": {
              "buildings": {
                "label": "Bangunan",
                "description": "Layer poligon bangunan masukan."
              },
              "barriers": {
                "label": "Penghalang",
                "description": "Layer garis penghalang (mis. jalan) yang harus dihindari bangunan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer bangunan keluaran dengan field 'status'. Jika dihilangkan, disimpan di memori."
              },
              "barrier_width": {
                "label": "Lebar penghalang",
                "description": "Lebar penghalang tersimbolkan dalam satuan peta (di-buffer setengah dari nilai ini di setiap sisi). Default 0."
              },
              "gap": {
                "label": "Celah",
                "description": "Jarak minimum yang harus dipertahankan antara bangunan dan penghalang (satuan peta). Default 0."
              },
              "min_size": {
                "label": "Ukuran minimum",
                "description": "Luas bangunan minimum (satuan peta²) sebelum bangunan yang berkonflik disembunyikan alih-alih diperkecil. Default 0 (tidak pernah menyembunyikan)."
              },
              "hide": {
                "label": "Sembunyikan",
                "description": "Apakah bangunan tersembunyi dibuang dari keluaran (default false: pertahankan dengan status='hidden')."
              }
            }
          },
          "resolve_road_conflicts": {
            "name": "Selesaikan konflik jalan",
            "description": "Pindahkan jalan yang representasi tersimbolkannya (lebar gambar) tumpang tindih atau berdesakan pada skala target: jalan berhierarki lebih rendah didorong menjauh dari yang berhierarki lebih tinggi dengan pergeseran verteks terhaluskan dan titik ujung terkunci, secara opsional menghasilkan tautan perpindahan, seperti ArcGIS Resolve Road Conflicts / Propagate Displacement.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis jalan masukan (LineString / MultiLineString)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer jalan terpindahkan keluaran dengan field 'status' dan 'shift'. Jika dihilangkan, disimpan di memori."
              },
              "symbol_width": {
                "label": "Lebar simbol",
                "description": "Lebar tersimbolkan tetap untuk semua jalan, dalam satuan peta (atau mm halaman jika 'scale' diatur). Digunakan jika 'symbol_width_field' tidak ada."
              },
              "symbol_width_field": {
                "label": "Field lebar simbol",
                "description": "Field numerik yang memberikan lebar tersimbolkan setiap jalan (satuan peta, atau mm halaman jika 'scale' diatur). Kembali ke 'symbol_width' jika sebuah nilai tidak tersedia."
              },
              "hierarchy_field": {
                "label": "Field hierarki",
                "description": "Field numerik yang memeringkat kepentingan jalan (nilai lebih rendah = lebih penting, dipertahankan tetap). Jika tidak ada: semua jalan berbagi perpindahan secara merata."
              },
              "scale": {
                "label": "Skala",
                "description": "Penyebut skala peta target. Jika diatur, lebar simbol adalah milimeter halaman yang dikonversi ke satuan lapangan (mm * scale / 1000). Default: lebar diambil langsung sebagai satuan peta."
              },
              "gap": {
                "label": "Celah",
                "description": "Jarak bebas tambahan yang dipertahankan antara jalur simbol, dalam satuan peta. Default 0."
              },
              "max_iter": {
                "label": "Iterasi maksimum",
                "description": "Jumlah iterasi perpindahan maksimum. Default 50."
              },
              "pin_endpoints": {
                "label": "Kunci titik ujung",
                "description": "Pertahankan verteks pertama/terakhir setiap jalan tetap untuk menjaga persimpangan/konektivitas (default true)."
              },
              "links": {
                "label": "Tautan",
                "description": "Path keluaran opsional untuk tautan perpindahan (garis dari→ke) yang dapat digunakan oleh rubbersheet_features."
              }
            }
          },
          "ripleys_k": {
            "name": "K Ripley",
            "description": "Analisis pola titik multi-jarak (fungsi K / L Ripley) dengan amplop keacakan spasial lengkap Monte Carlo, untuk mendeteksi pengelompokan atau dispersi pada rentang jarak.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan (geometri lain menggunakan titik representatif rata-rata verteksnya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV opsional untuk tabel K/L. Tabel juga dikembalikan dalam hasil tool."
              },
              "distance_bands": {
                "label": "Pita jarak",
                "description": "Jumlah pita jarak yang dievaluasi (default 10)."
              },
              "max_distance": {
                "label": "Jarak maksimum",
                "description": "Jarak terbesar yang dievaluasi, dalam satuan CRS. Default: seperempat dari sisi terpendek kotak pembatas titik."
              },
              "permutations": {
                "label": "Permutasi",
                "description": "Jumlah simulasi CSR untuk selubung signifikansi (default 99; 0 menonaktifkan selubung)."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik opsional yang membobot setiap titik."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed untuk RNG CSR (default 1), untuk selubung yang dapat direproduksi."
              }
            }
          },
          "rubbersheet_features": {
            "name": "Rubbersheet fitur",
            "description": "Warp layer vektor agar selaras dengan target menggunakan tautan perpindahan: transformasi affine sepotong-sepotong TIN Delaunay (atau IDW) yang menempatkan titik kontrol pada targetnya dan mendeformasi segala sesuatu di antaranya secara halus — transformasi konflasi, seperti ArcGIS Rubbersheet Features.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan yang akan disesuaikan (tipe geometri apa pun)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "links": {
                "label": "Tautan",
                "description": "Layer garis opsional berisi tautan perpindahan (setiap garis: verteks pertama = dari, verteks terakhir = ke)."
              },
              "target": {
                "label": "Target",
                "description": "Layer vektor target opsional; tautan dihasilkan dengan mencocokkan titik representatif setiap fitur masukan ke target terdekat dalam search_distance."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Jarak maksimum untuk mencocokkan masukan ke target saat menghasilkan tautan (satuan CRS). Wajib bersama 'target'."
              },
              "method": {
                "label": "Metode",
                "description": "'linear' (TIN Delaunay afin sepotong-sepotong, default) atau 'idw' (berbobot jarak terbalik)."
              },
              "power": {
                "label": "Pangkat",
                "description": "Pangkat IDW untuk peluruhan di luar TIN / untuk method=idw. Default 2."
              }
            }
          },
          "sar_coherence": {
            "name": "Koherensi SAR",
            "description": "Menghitung magnitudo koherensi interferometrik ternormalisasi (dan opsional fase interferometrik) antara dua akuisisi SAR kompleks terkoregistrasi pada jendela bergerak (ArcGIS Compute Coherence / Generate Interferogram). Koherensi mengukur stabilitas fase alih-alih kecerahan, sehingga mendeteksi perubahan yang tidak dapat dilihat oleh pengurangan intensitas — keruntuhan, banjir di bawah vegetasi, panen, pergerakan es — dalam segala cuaca. Tidak ada alat di kedua registri yang menggunakan fase SAR. Masukan adalah pasangan I/Q dua band dan harus sudah terkoregistrasi.",
            "params": {
              "reference": {
                "label": "Referensi",
                "description": "Raster SAR kompleks (dua band: I dan Q) dari akuisisi pertama."
              },
              "secondary": {
                "label": "Sekunder",
                "description": "Raster SAR kompleks terkoregistrasi (dua band: I dan Q) dari akuisisi kedua."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster koherensi keluaran opsional (magnitudo, 0..1). Jika dihilangkan, disimpan di memori."
              },
              "output_phase": {
                "label": "Keluaran fase",
                "description": "Path keluaran opsional untuk raster fase interferometrik dalam radian, dibungkus ke (-pi, pi]."
              },
              "window_size": {
                "label": "Ukuran jendela",
                "description": "Jendela estimasi sebagai 'range,azimuth' dalam sel (default '5,5'). Estimator dipusatkan, sehingga nilai genap dibulatkan NAIK ke ukuran ganjil berikutnya; jendela efektif dilaporkan kembali sebagai window_range/window_azimuth."
              },
              "bias_correction": {
                "label": "Koreksi bias",
                "description": "Koreksi bias ke atas dari estimator koherensi pada ukuran jendela kecil (default true)."
              }
            }
          },
          "semivariogram_sensitivity": {
            "name": "Sensitivitas semivariogram",
            "description": "Mengganggu nugget, partial sill, dan range dari variogram yang disesuaikan, melakukan kriging ulang di lokasi evaluasi, dan melaporkan seberapa jauh prediksi dan galat baku bergeser — pemeriksaan keandalan standar pada model kriging (ArcGIS GA Semivariogram Sensitivity). Rangkaian kriging bawaan luas dan kriging_cross_validation mengukur kecocokan, tetapi tidak ada yang mengukur sensitivitas, dan keduanya independen: model yang tervalidasi silang dengan baik tetap bisa sangat rapuh terhadap parameter yang dipilih analis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik yang memuat nilai terukur."
              },
              "field": {
                "label": "Field",
                "description": "Field numerik yang akan dikriging."
              },
              "locations": {
                "label": "Lokasi",
                "description": "Layer titik berisi lokasi prediksi tempat sensitivitas dievaluasi."
              },
              "output": {
                "label": "Keluaran",
                "description": "Tabel dengan satu baris per model terganggu. Jika dihilangkan, disimpan di memori."
              },
              "model": {
                "label": "Model",
                "description": "Model variogram: 'exponential' (default), 'spherical', atau 'gaussian'."
              },
              "nugget_span_percent": {
                "label": "Persen rentang nugget",
                "description": "Setengah lebar perturbasi untuk nugget, dalam persen (default 10)."
              },
              "partial_sill_span_percent": {
                "label": "Persen rentang partial sill",
                "description": "Setengah lebar perturbasi untuk sill parsial, dalam persen (default 10)."
              },
              "range_span_percent": {
                "label": "Persen rentang range",
                "description": "Setengah lebar perturbasi untuk range, dalam persen (default 10)."
              },
              "nugget_steps": {
                "label": "Langkah nugget",
                "description": "Jumlah sampel di sepanjang bentang nugget (default 3; 1 mematoknya pada nilai terpasang)."
              },
              "partial_sill_steps": {
                "label": "Langkah partial sill",
                "description": "Jumlah sampel di sepanjang bentang sill parsial (default 3)."
              },
              "range_steps": {
                "label": "Langkah range",
                "description": "Jumlah sampel di sepanjang bentang range (default 3)."
              },
              "lag_count": {
                "label": "Jumlah lag",
                "description": "Bin lag variogram empiris yang digunakan untuk pencocokan dasar (default 12)."
              }
            }
          },
          "similarity_search": {
            "name": "Pencarian kemiripan",
            "description": "Peringkatkan fitur kandidat berdasarkan kemiripan atribut dengan satu atau lebih fitur referensi lintas field numerik terstandarisasi z (Euclidean atau kosinus), terbanyak/tersedikit/keduanya — seperti ArcGIS Similarity Search.",
            "params": {
              "reference": {
                "label": "Referensi",
                "description": "Layer vektor referensi (satu atau lebih fitur yang mendefinisikan profil yang akan dicocokkan)."
              },
              "candidates": {
                "label": "Kandidat",
                "description": "Layer vektor kandidat yang akan diperingkat berdasarkan kemiripan dengan referensi."
              },
              "fields": {
                "label": "Field",
                "description": "Field numerik yang dipisahkan koma untuk dibandingkan (harus ada di kedua layer)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran (kandidat terperingkat). Jika dihilangkan, disimpan di memori."
              },
              "match_method": {
                "label": "Metode pencocokan",
                "description": "'euclidean' (jarak terstandardisasi-z; default) atau 'cosine' (kemiripan sudut)."
              },
              "most_or_least": {
                "label": "Terbanyak atau tersedikit",
                "description": "Pertahankan ujung yang 'most' paling mirip (default), 'least' paling tidak mirip, atau 'both' keduanya."
              },
              "num_results": {
                "label": "Jumlah hasil",
                "description": "Jumlah hasil yang dipertahankan per ujung (0 = semua kandidat). Default 10."
              }
            }
          },
          "simplify_3d_line": {
            "name": "Sederhanakan garis 3D",
            "description": "Kurangi jumlah verteks polyline 3D menggunakan pemisahan Douglas-Peucker yang mengukur deviasi dalam tiga dimensi, mempertahankan profil vertikal, seperti ArcGIS Simplify 3D Line.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer polyline masukan (verteks 3D; verteks 2D ditangani sebagai kasus khusus planar)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Simpangan 3D maksimum dalam satuan peta. Verteks yang lebih dekat dari ini ke tali busur dihapus."
              },
              "z_factor": {
                "label": "Faktor Z",
                "description": "Pengali yang diterapkan pada Z sebelum uji jarak, untuk data yang satuan Z-nya berbeda dari XY (default 1)."
              }
            }
          },
          "simplify_building": {
            "name": "Sederhanakan bangunan",
            "description": "Kurangi verteks jejak bangunan sambil melindungi sudut siku-siku, dengan ambang pembuangan luas minimum, seperti ArcGIS Simplify Building.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Poligon tapak bangunan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi penyederhanaan dalam satuan peta: jarak maksimum batas boleh bergeser."
              },
              "minimum_area": {
                "label": "Luas minimum",
                "description": "Tapak di bawah luas ini dibuang (default 0, pertahankan semua)."
              },
              "keep_collapsed_points": {
                "label": "Pertahankan titik terciut",
                "description": "Hasilkan sebuah titik di centroid setiap tapak yang dibuang oleh minimum_area (default false)."
              },
              "corner_tolerance": {
                "label": "Toleransi sudut",
                "description": "Derajat di mana sebuah sudut interior dihitung sebagai sudut siku-siku terlindungi (default 20)."
              }
            }
          },
          "simplify_by_circular_arcs": {
            "name": "Sederhanakan dengan busur lingkaran",
            "description": "Menyederhanakan garis dan poligon dengan mengganti rangkaian verteks dengan segmen lurus dan busur lingkaran sebenarnya, mempertahankan kurva rekayasa alih-alih mengaproksimasinya dengan tali busur (ArcGIS Simplify By Straight Lines And Circular Arcs; mode 'tangent' mencakup Simplify By Tangent Segments). Setiap penyederhana di kedua registri hanya menghapus verteks, yang memaksa pilihan antara kurva bersegi dan jumlah verteks yang tidak dapat diterima pada bulatan cul-de-sac, bundaran, dan jejak tangki. Lingkaran disesuaikan dengan kuadrat terkecil aljabar tetapi diterima berdasarkan deviasi ortogonal sebenarnya, sehingga jaminan toleransi tetap berlaku.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer garis atau poligon masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Simpangan maksimum yang diizinkan dari primitif terpasang terhadap verteks asli, dalam satuan CRS."
              },
              "mode": {
                "label": "Mode",
                "description": "'arcs' (default; mencocokkan segmen lurus dan busur lingkaran) atau 'tangent' (hanya segmen lurus, perilaku Simplify By Tangent Segments)."
              },
              "min_arc_angle": {
                "label": "Sudut busur minimum",
                "description": "Busur yang membentang kurang dari sekian derajat ini dihasilkan sebagai segmen lurus (default 10)."
              },
              "max_radius": {
                "label": "Radius maksimum",
                "description": "Busur dengan radius lebih besar dari ini dihasilkan sebagai segmen lurus (default: 1e6)."
              },
              "densify_output": {
                "label": "Keluaran perapatan",
                "description": "Rapatkan kembali busur terpasang ke toleransi tali busur saat penulisan (default true). Jika false hanya titik ujung busur yang dihasilkan, sehingga geometri saja kehilangan lengkungannya — baca 'output_arcs' untuk memulihkannya."
              },
              "output_arcs": {
                "label": "Keluaran busur",
                "description": "Path opsional untuk tabel busur terpasang (id fitur, titik ujung, pusat, radius, sapuan bertanda dalam derajat). Jika dihilangkan, disimpan di memori (tetap dikembalikan)."
              }
            }
          },
          "simplify_by_tangent_segments": {
            "name": "Sederhanakan dengan segmen tangen",
            "description": "Mengganti geometri kurva terapat dengan rantai minimal segmen lurus yang tetap berada dalam offset tegak lurus maksimum, menyambungkan segmen berurutan pada perpotongannya sehingga hasilnya tetap bersinggungan dengan aslinya (ArcGIS Simplify By Tangent Segments). Pendamping linear dari simplify_by_circular_arcs: simplify_features (Douglas-Peucker) hanya dapat mempertahankan verteks yang ada dan tidak menjamin ketersinggungan, meninggalkan tekukan pada geometri rekayasa, sedangkan smooth_line dan smooth_natural_features menggeser verteks alih-alih menguranginya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur garis atau poligon yang akan disederhanakan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Fitur tersederhanakan dengan field jumlah verteks ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "max_offset": {
                "label": "Offset maksimum",
                "description": "Simpangan tegak lurus maksimum dari aslinya, dalam SATUAN CRS. Pada EPSG:4326 ini adalah derajat, sehingga pekerjaan berskala meter memerlukan sekitar 2e-5, bukan 2.0. Batas ini diberlakukan terhadap setiap garis terpasang, sehingga rantai yang dihasilkan dapat sedikit melampauinya di dekat sambungan tempat segmen berurutan bertemu."
              },
              "anchor_points": {
                "label": "Titik jangkar",
                "description": "Layer titik opsional yang lokasinya harus bertahan sebagai verteks (anchor_points ArcGIS). Rangkaian tidak pernah diperluas melewati sebuah jangkar."
              },
              "anchor_tolerance": {
                "label": "Toleransi jangkar",
                "description": "Jarak yang di dalamnya verteks masukan dihitung cocok dengan titik jangkar (satuan CRS). Default: max_offset."
              },
              "min_run": {
                "label": "Run minimum",
                "description": "Jumlah minimum verteks masukan yang harus dicakup sebuah rangkaian sebelum diruntuhkan menjadi segmen (default 3). Rangkaian yang lebih pendek dihasilkan tanpa perubahan."
              },
              "preserve_endpoints": {
                "label": "Pertahankan titik ujung",
                "description": "Pertahankan verteks pertama dan terakhir setiap bagian secara persis (default true)."
              }
            }
          },
          "simplify_shared_edges": {
            "name": "Sederhanakan tepi bersama",
            "description": "Sederhanakan cakupan poligon sambil menjaga batas yang dibagi antara poligon bersebelahan tetap berimpit (tanpa celah atau sliver), seperti ArcGIS Simplify Shared Edges.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi penyederhanaan Douglas-Peucker: jarak maksimum (dalam satuan CRS) sebuah busur yang disederhanakan boleh menyimpang dari aslinya. Default 1.0."
              },
              "simplify_boundary": {
                "label": "Sederhanakan batas",
                "description": "Sederhanakan juga busur pada batas luar cakupan (sisi yang hanya dimiliki satu poligon). Default true; setel false untuk mempertahankan batas luar tanpa perubahan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Kuantisasi verteks ke grid berukuran ini (satuan CRS) sebelum membangun topologi, sehingga verteks bersama yang hampir berimpit diperlakukan sebagai satu. Default 0 (gunakan koordinat secara persis)."
              }
            }
          },
          "slice_raster": {
            "name": "Iris raster",
            "description": "Klasifikasikan raster kontinu menjadi N zona ordinal (interval sama, luas sama, natural breaks, interval geometrik, atau simpangan baku).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster kontinu masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster zona keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang diklasifikasikan (default 1)."
              },
              "number_zones": {
                "label": "Jumlah zona",
                "description": "Jumlah zona keluaran (default 10). Diabaikan untuk std_dev."
              },
              "slice_type": {
                "label": "Jenis irisan",
                "description": "Metode klasifikasi: equal_interval, equal_area, natural_breaks, geometric_interval, atau std_dev (default equal_interval)."
              },
              "base_output_zone": {
                "label": "Zona keluaran dasar",
                "description": "Id zona yang ditetapkan untuk zona terendah (default 1)."
              },
              "class_interval_size": {
                "label": "Ukuran interval kelas",
                "description": "Ukuran interval simpangan baku dalam satuan σ (default 1.0). Hanya digunakan oleh std_dev."
              }
            }
          },
          "smooth_natural_features": {
            "name": "Haluskan fitur alami",
            "description": "Haluskan poligon terpikselasi dan garis bergerigi (keluaran raster-ke-vektor) menjadi kurva yang tampak alami melalui pemotongan sudut Chaikin, dengan mempertahankan luas poligon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan dengan fitur poligon atau garis, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "segment_length": {
                "label": "Panjang segmen",
                "description": "Skala derau tangga yang akan dihilangkan, dalam satuan CRS — idealnya ukuran sel raster sumber. Terdeteksi otomatis dari panjang sisi median layer jika dihilangkan."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah iterasi penghalusan Chaikin (1-8); lebih banyak iterasi menghasilkan keluaran lebih halus dengan lebih banyak verteks. Default 3."
              },
              "preserve_area": {
                "label": "Pertahankan luas",
                "description": "Pulihkan luas asli setiap poligon setelah penghalusan (pemotongan sudut menyusutkan bentuk cembung). Default true."
              }
            }
          },
          "smooth_shared_edges": {
            "name": "Haluskan tepi bersama",
            "description": "Haluskan cakupan poligon sambil menjaga batas yang dibagi antara poligon bersebelahan tetap berimpit (tanpa celah atau sliver), seperti ArcGIS Smooth Shared Edges.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor poligon masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "algorithm": {
                "label": "Algoritma",
                "description": "Algoritma penghalusan: 'paek' (kernel Gaussian, dikendalikan toleransi; default) atau 'bezier' (pemotongan sudut Chaikin, mengabaikan toleransi)."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Panjang penghalusan PAEK dalam satuan CRS: jendela panjang busur tempat verteks dirata-ratakan. Nilai lebih besar menghasilkan kurva lebih halus. Default 1.0. Diabaikan oleh algoritma 'bezier'."
              },
              "smooth_boundary": {
                "label": "Haluskan batas",
                "description": "Haluskan juga busur pada batas luar cakupan (sisi yang hanya dimiliki satu poligon). Default true; setel false untuk mempertahankan batas luar tanpa perubahan."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Kuantisasi verteks ke grid berukuran ini (satuan CRS) sebelum membangun topologi, sehingga verteks bersama yang hampir berimpit diperlakukan sebagai satu. Default 0 (gunakan koordinat secara persis)."
              }
            }
          },
          "snap_tracks": {
            "name": "Jepret jejak",
            "description": "Cocokkan jejak GPS berstempel waktu ke jaringan jalan dengan program dinamis Viterbi (emisi = jarak jepret, transisi = kontinuitas rute), sehingga jejak tercocokkan mengikuti satu jalur yang masuk akal alih-alih berzig-zag di antara jalan paralel — seperti ArcGIS Snap Tracks.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik GPS berstempel waktu masukan."
              },
              "network": {
                "label": "Jaringan",
                "description": "Layer garis jaringan jalan sebagai acuan pencocokan."
              },
              "track_field": {
                "label": "Field jejak",
                "description": "Field yang mengidentifikasi setiap jejak/objek bergerak."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik (detik numerik atau ISO-8601)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer titik terjepret keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Radius kandidat: hanya sisi jaringan dalam jarak ini dari sebuah fix yang dipertimbangkan. Wajib."
              },
              "max_candidates": {
                "label": "Kandidat maksimum",
                "description": "Jumlah sisi kandidat maksimum yang dipertahankan per fix (default 5)."
              }
            }
          },
          "solar_radiation": {
            "name": "Radiasi matahari",
            "description": "Radiasi matahari masuk (Wh/m²) di atas DEM untuk rentang tanggal: langsung + difus, memperhitungkan kemiringan/aspek, pembayangan horizon, dan posisi matahari sepanjang waktu — seperti ArcGIS Raster Solar Radiation.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster elevasi masukan (terproyeksi, meter — kemiringan dan horizon memerlukan jarak sebenarnya)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster radiasi total keluaran (Wh/m²). Jika dihilangkan, disimpan di memori."
              },
              "direct_output": {
                "label": "Keluaran langsung",
                "description": "Raster keluaran opsional untuk komponen radiasi langsung (Wh/m²)."
              },
              "diffuse_output": {
                "label": "Keluaran difus",
                "description": "Raster keluaran opsional untuk komponen radiasi baur (Wh/m²)."
              },
              "start_day": {
                "label": "Hari awal",
                "description": "Hari pertama dalam tahun (1-365) atau tanggal ISO (YYYY-MM-DD). Default 1."
              },
              "end_day": {
                "label": "Hari akhir",
                "description": "Hari terakhir dalam tahun (1-365) atau tanggal ISO. Default 365."
              },
              "day_interval": {
                "label": "Interval hari",
                "description": "Ambil sampel setiap sekian hari ini pada rentang tersebut (setiap sampel mewakili sekian hari itu). Default: rentang/12 (sekitar 12 sampel)."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Selang jam antar sampel posisi matahari sepanjang setiap hari. Default 0.5."
              },
              "latitude": {
                "label": "Lintang",
                "description": "Lintang dalam derajat. Default: diturunkan dari pusat DEM untuk EPSG:4326 / 3857."
              },
              "transmittivity": {
                "label": "Transmitivitas",
                "description": "Transmisivitas atmosfer (0-1) untuk satu satuan massa udara. Default 0.6."
              },
              "diffuse_proportion": {
                "label": "Proporsi difus",
                "description": "Fraksi iradiansi horizontal ekstraterestrial yang diperlakukan sebagai radiasi langit baur (0-1). Default 0.3."
              },
              "horizon_distance": {
                "label": "Jarak horizon",
                "description": "Panjang sinar horizon maksimum dalam sel (membatasi perhitungan bayangan). Default 100."
              },
              "band": {
                "label": "Band",
                "description": "Band DEM berbasis 1 (default 1)."
              }
            }
          },
          "sort_features": {
            "name": "Urutkan fitur",
            "description": "Urutkan ulang layer vektor berdasarkan field atribut atau sepanjang kurva pengisi ruang Hilbert (pengurutan spasial), seperti ArcGIS Sort — pengurutan Hilbert mengelompokkan rekaman yang berdekatan secara spasial untuk meningkatkan pemangkasan GeoParquet dan lokalitas PMTiles.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran dalam urutan baru. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'hilbert' (urutan kurva spasial; default) atau 'attribute' (berdasarkan daftar 'fields')."
              },
              "fields": {
                "label": "Field",
                "description": "Mode attribute: field yang dipisahkan koma dengan arah opsional, misalnya 'pop:desc,name:asc'."
              },
              "index_field": {
                "label": "Field indeks",
                "description": "Nama field opsional untuk menyimpan jarak kurva Hilbert setiap fitur."
              }
            }
          },
          "space_time_kernel_density": {
            "name": "Kerapatan kernel ruang-waktu",
            "description": "Kerapatan kernel ruang-waktu dari titik berstempel waktu: satu band kerapatan per irisan waktu (raster multiband) dari kernel spasial (Epanechnikov/kuartik) x temporal (segitiga/Epanechnikov) yang terpisahkan, sehingga setiap band mengagregasi titik yang dekat dalam ruang dan waktu, seperti ArcGIS Space Time Kernel Density. Pendamping sadar waktu dari heat_map 2D bawaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan. Geografis (EPSG:4326/bujur-lintang tanpa label) menggunakan meter haversine; terproyeksi menggunakan satuan CRS. Geometri bukan titik menggunakan verteks pertama/representatifnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster multiband keluaran (satu band per irisan waktu; driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: field numerik (dalam satuannya sendiri) atau string tanggal/tanggal-waktu ISO-8601."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Interval irisan: angka biasa (time_field numerik) atau durasi seperti '1w', '7d', '12h', '1M'. Default '1w'."
              },
              "temporal_bandwidth": {
                "label": "Bandwidth temporal",
                "description": "Setengah lebar kernel temporal, dengan satuan/sintaks durasi sama seperti time_step. Default: sama dengan time_step."
              },
              "spatial_bandwidth": {
                "label": "Bandwidth spasial",
                "description": "Radius kernel spasial, dalam meter untuk masukan geografis atau satuan CRS untuk terproyeksi. Default: ekstensi maksimum / 20."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS (derajat untuk geografis). Default: ekstensi maksimum / 200."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik opsional yang membobot setiap titik. Default: setiap titik dihitung 1."
              },
              "spatial_kernel": {
                "label": "Kernel spasial",
                "description": "Bentuk kernel spasial: 'epanechnikov' (default) atau 'quartic'."
              },
              "temporal_kernel": {
                "label": "Kernel temporal",
                "description": "Bentuk kernel temporal: 'triangular' (default) atau 'epanechnikov'."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG yang dicantumkan pada raster keluaran (default: dari layer masukan)."
              }
            }
          },
          "spatial_association_between_zones": {
            "name": "Asosiasi spasial antarzona",
            "description": "Ukur seberapa kuat dua raster zona kategorikal bersesuaian melalui ukuran V (homogenitas/kelengkapan) ditambah skor asosiasi per zona.",
            "params": {
              "zones1": {
                "label": "Zona 1",
                "description": "Raster zona kategorikal pertama (misalnya tutupan lahan). Grid sama dengan zones2."
              },
              "zones2": {
                "label": "Zona 2",
                "description": "Raster zona kategorikal kedua (misalnya ekoregion) pada grid yang sama dengan zones1."
              },
              "output": {
                "label": "Keluaran",
                "description": "Tabel CSV per kelas zona-1 opsional (kelas, jumlah, asosiasi, kelas zona-2 dominan, dan pangsanya). Metrik keseluruhan selalu dikembalikan dalam hasil."
              },
              "band1": {
                "label": "Band 1",
                "description": "Band berbasis 1 dari zones1 yang dibaca (default 1)."
              },
              "band2": {
                "label": "Band 2",
                "description": "Band berbasis 1 dari zones2 yang dibaca (default 1)."
              }
            }
          },
          "spatial_eigenvector_filtering": {
            "name": "Penyaringan vektor eigen spasial (MESF)",
            "description": "Hasilkan vektor eigen Moran (filter spasial) dari matriks bobot spasial dan tambahkan komponen berautokorelasi sebagai field variabel penjelas (MEV1, MEV2, …), seperti ArcGIS Decompose Spatial Structure / Create Spatial Component Explanatory Variables. Membangun matriks konektivitas simetris (kontiguitas atau KNN tersimetrikan), memusatkannya ganda (M C M), dan mendekomposisi eigennya dengan pemecah Jacobi siklik Rust murni; mempertahankan vektor eigen yang Moran's I-nya ≥ min_autocorrelation, diperingkatkan menurun dan dibatasi pada max_components.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (titik/garis/poligon; metode ketetanggaan memerlukan poligon)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran — fitur masukan dengan vektor eigen yang dipertahankan ditambahkan sebagai MEV1, MEV2, …. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "Konseptualisasi hubungan spasial: 'contiguity_edges' (rook), 'contiguity_edges_corners' (queen), atau 'knn' (disimetriskan). Default 'contiguity_edges_corners'."
              },
              "number_of_neighbors": {
                "label": "Jumlah tetangga",
                "description": "Jumlah tetangga terdekat k untuk method = knn. Default 8."
              },
              "min_autocorrelation": {
                "label": "Autokorelasi minimum",
                "description": "Nilai Moran's I minimum yang harus dimiliki sebuah vektor eigen agar dipertahankan (autokorelasi spasial positif). Default 0.25."
              },
              "max_components": {
                "label": "Komponen maksimum",
                "description": "Jumlah maksimum vektor eigen yang dihasilkan, diambil dalam urutan Moran's I menurun. Default 15."
              }
            }
          },
          "spatial_outlier_detection": {
            "name": "Deteksi pencilan spasial",
            "description": "Nilai titik berdasarkan Local Outlier Factor (LOF)-nya — seberapa terisolasi setiap titik relatif terhadap kerapatan lokal k tetangga terdekatnya — dan tandai pencilan teratas, seperti ArcGIS Spatial Outlier Detection. Mengisi celah yang ditinggalkan label derau biner DBSCAN.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Titik keluaran dengan skor LOF dan penanda pencilan. Jika dihilangkan, disimpan di memori."
              },
              "neighbors": {
                "label": "Tetangga",
                "description": "Jumlah tetangga terdekat k (default 20)."
              },
              "percent_outlier": {
                "label": "Persen pencilan",
                "description": "Tandai sekian persen titik teratas berdasarkan LOF sebagai pencilan (default 5). Diabaikan jika 'threshold' disetel."
              },
              "threshold": {
                "label": "Ambang batas",
                "description": "Batas LOF eksplisit: titik dengan LOF di atas nilai ini adalah pencilan (menggantikan percent_outlier)."
              }
            }
          },
          "spatially_constrained_multivariate_clustering": {
            "name": "Klasterisasi multivariat terkendala spasial",
            "description": "Partisi fitur menjadi wilayah yang kontigu secara spasial dan homogen secara atribut dengan algoritma SKATER (pohon rentang minimum atas graf kontiguitas, dipotong untuk memaksimalkan varians antar klaster), dengan kendala ukuran/keseimbangan opsional. Setiap klaster terhubung secara konstruksi, tidak seperti multivariate_clustering. Seperti ArcGIS Spatially Constrained Multivariate Clustering.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur poligon (atau titik) masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran untuk fitur masukan ditambah field CLUSTER_ID. Jika dihilangkan, disimpan di memori."
              },
              "analysis_fields": {
                "label": "Field analisis",
                "description": "Nama field numerik yang dipisahkan koma/titik koma sebagai dasar pengklasteran."
              },
              "number_of_clusters": {
                "label": "Jumlah klaster",
                "description": "Jumlah klaster target (default 5)."
              },
              "neighborhood": {
                "label": "Ketetanggaan",
                "description": "'contiguity_edges' (rook, default), 'contiguity_edges_corners' (queen), atau 'knn'."
              },
              "number_of_neighbors": {
                "label": "Jumlah tetangga",
                "description": "Jumlah tetangga untuk ketetanggaan 'knn' (default 8)."
              },
              "constraint": {
                "label": "Kendala",
                "description": "'none' (default), 'feature_count', atau 'attribute_value'."
              },
              "constraint_field": {
                "label": "Field kendala",
                "description": "Field yang dijumlahkan per klaster jika 'constraint' bernilai 'attribute_value'."
              },
              "min_constraint": {
                "label": "Kendala minimum",
                "description": "Jumlah fitur atau total atribut minimum per klaster; pemotongan yang melanggarnya dilewati."
              },
              "max_constraint": {
                "label": "Kendala maksimum",
                "description": "Jumlah fitur atau total atribut maksimum per klaster; klaster di atasnya dipisah lebih lanjut bahkan melewati 'number_of_clusters'."
              },
              "scale_data": {
                "label": "Skalakan data",
                "description": "Standardisasi z pada field analisis sebelum pengklasteran (default true)."
              },
              "output_table": {
                "label": "Tabel keluaran",
                "description": "Path opsional untuk ringkasan per klaster (rata-rata, R-kuadrat per variabel, pseudo-F)."
              }
            }
          },
          "spectral_index": {
            "name": "Indeks spektral",
            "description": "Hitung indeks spektral (NDVI, NDWI, NDBI, NBR, EVI, SAVI) dari raster multi-band.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster multiband masukan."
              },
              "index": {
                "label": "Indeks",
                "description": "Indeks yang dihitung: ndvi, ndwi, ndbi, nbr, evi, atau savi."
              },
              "red": {
                "label": "Merah",
                "description": "Nomor band berbasis 1 untuk band merah."
              },
              "nir": {
                "label": "NIR",
                "description": "Nomor band berbasis 1 untuk band inframerah dekat."
              },
              "green": {
                "label": "Hijau",
                "description": "Nomor band berbasis 1 untuk band hijau."
              },
              "blue": {
                "label": "Biru",
                "description": "Nomor band berbasis 1 untuk band biru."
              },
              "swir": {
                "label": "SWIR",
                "description": "Nomor band berbasis 1 untuk band inframerah gelombang pendek."
              },
              "soil_factor": {
                "label": "Faktor tanah",
                "description": "Faktor penyesuaian tanah L untuk SAVI (default 0.5)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              }
            }
          },
          "split_by_attributes": {
            "name": "Pisahkan berdasarkan atribut",
            "description": "Pisahkan layer vektor menjadi satu file keluaran per nilai unik (atau kombinasi) dari field yang diberikan, seperti ArcGIS Split By Attributes.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan."
              },
              "output_dir": {
                "label": "Direktori keluaran",
                "description": "Direktori keluaran; satu file per kelompok ditulis di sini (dibuat jika diperlukan)."
              },
              "fields": {
                "label": "Field",
                "description": "Nama field yang dipisahkan koma sebagai dasar pemisahan (kunci multi-field menyatukan nilai dengan '__')."
              },
              "format": {
                "label": "Format",
                "description": "Ekstensi format keluaran: geojson (default), fgb, parquet, shp."
              }
            }
          },
          "split_by_features": {
            "name": "Pisahkan berdasarkan fitur",
            "description": "Potong layer masukan terhadap setiap zona dari layer pemisah poligon, menulis satu file keluaran per nilai field pemisah yang berbeda. Zona yang berbagi nilai dilebur terlebih dahulu, dan zona kosong dilewati. Seperti ArcGIS Split (Analysis).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur yang akan dipisah (titik, garis, atau poligon)."
              },
              "split_features": {
                "label": "Fitur pemisah",
                "description": "Layer poligon yang fiturnya mendefinisikan zona pemisahan."
              },
              "split_field": {
                "label": "Field pemisah",
                "description": "Field pada 'split_features' yang menyediakan nama setiap keluaran."
              },
              "output_dir": {
                "label": "Direktori keluaran",
                "description": "Direktori yang menerima satu file keluaran per nilai pemisahan berbeda."
              },
              "output_format": {
                "label": "Format keluaran",
                "description": "Ekstensi/driver file keluaran: 'geojson' (default), 'shp', 'gpkg', 'parquet', 'csv'."
              }
            }
          },
          "split_line_at_point": {
            "name": "Pisahkan garis di titik",
            "description": "Pisahkan fitur polyline di lokasi fitur titik yang berada dalam radius pencarian, menyisipkan node di setiap titik terjepret dan menghasilkan satu fitur per sub-segmen yang dihasilkan (atribut induk dipertahankan) — seperti ArcGIS Split Line At Point.",
            "params": {
              "input_lines": {
                "label": "Garis masukan",
                "description": "Layer vektor polyline masukan yang akan dipisah."
              },
              "point_features": {
                "label": "Fitur titik",
                "description": "Layer vektor titik (atau multititik) yang lokasinya mendefinisikan node pemisahan."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Jarak maksimum, dalam satuan CRS garis, antara sebuah titik dan sebuah garis agar titik tersebut memisah garis itu. Wajib, positif."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor garis keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "split_raster": {
            "name": "Pisahkan raster",
            "description": "Pisahkan raster menjadi petak mandiri berdasarkan jumlah petak, ukuran piksel tetap, atau fitur poligon, dengan tumpang tindih piksel opsional — seperti ArcGIS Split Raster. Setiap petak mempertahankan CRS dan georeferensi.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan."
              },
              "output_dir": {
                "label": "Direktori keluaran",
                "description": "Direktori keluaran untuk file petak (dibuat jika diperlukan)."
              },
              "base_name": {
                "label": "Nama dasar",
                "description": "Awalan nama file keluaran (default 'tile')."
              },
              "split_method": {
                "label": "Metode pemisahan",
                "description": "'count' (grid N×M, default), 'size' (petak berpiksel tetap), atau 'polygons' (satu pemotongan per fitur)."
              },
              "num_x": {
                "label": "Jumlah X",
                "description": "Jumlah kolom petak untuk 'count' (default 2)."
              },
              "num_y": {
                "label": "Jumlah Y",
                "description": "Jumlah baris petak untuk 'count' (default 2)."
              },
              "tile_size_x": {
                "label": "Ukuran petak X",
                "description": "Lebar petak dalam piksel untuk 'size' (default 256)."
              },
              "tile_size_y": {
                "label": "Ukuran petak Y",
                "description": "Tinggi petak dalam piksel untuk 'size' (default 256)."
              },
              "polygons": {
                "label": "Poligon",
                "description": "Layer vektor poligon untuk mode 'polygons' (satu petak per fitur)."
              },
              "overlap": {
                "label": "Tumpang tindih",
                "description": "Tumpang tindih piksel yang ditambahkan pada setiap petak di semua sisi (default 0)."
              },
              "format": {
                "label": "Format",
                "description": "Ekstensi/driver file keluaran: 'tif' (default) atau 'png'."
              }
            }
          },
          "stack_profile": {
            "name": "Profil tumpukan",
            "description": "Sampel beberapa raster permukaan sepanjang polyline yang sama dan hasilkan satu tabel format panjang (LINE_ID, FIRST_DIST, FIRST_Z, SRC_ID, SRC_NAME) sehingga permukaan dapat dibandingkan dalam penampang pada sumbu jarak bersama. Seperti ArcGIS Stack Profile.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur garis masukan yang akan diprofilkan."
              },
              "surfaces": {
                "label": "Permukaan",
                "description": "Daftar path raster permukaan yang dipisahkan koma/titik koma, disampel dalam urutan yang diberikan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel profil keluaran. Jika dihilangkan, disimpan di memori."
              },
              "sample_distance": {
                "label": "Jarak sampel",
                "description": "Jarak antar stasiun dalam satuan peta (default: ukuran sel masukan terhalus)."
              },
              "line_id_field": {
                "label": "Field ID garis",
                "description": "Field opsional yang menyediakan LINE_ID; default-nya indeks fitur."
              },
              "method": {
                "label": "Metode",
                "description": "Pengambilan sampel permukaan: 'bilinear' (default) atau 'nearest'."
              }
            }
          },
          "storage_capacity": {
            "name": "Kapasitas tampungan",
            "description": "Sapu elevasi muka air di atas DEM dan laporkan luas permukaan tergenang dan volume tampungan pada setiap tingkat (kurva tahap-luas-volume) per zona analisis atau atas seluruh DEM, seperti ArcGIS Storage Capacity.",
            "params": {
              "dem": {
                "label": "DEM",
                "description": "Raster DEM masukan (elevasi)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran (zone_id, level, elevation, area, volume)."
              },
              "zones": {
                "label": "Zona",
                "description": "Layer poligon opsional; satu kurva tahapan-luas-volume per poligon. Jika dihilangkan, seluruh DEM menjadi satu zona."
              },
              "zone_id_field": {
                "label": "Field ID zona",
                "description": "Field yang menamai setiap zona dalam keluaran (default: indeks fitur)."
              },
              "num_levels": {
                "label": "Jumlah tingkat",
                "description": "Jumlah langkah elevasi antara nilai minimum dan maksimum setiap zona (default 20). Diabaikan jika 'increment' diberikan."
              },
              "increment": {
                "label": "Inkremen",
                "description": "Langkah elevasi tetap antar aras (satuan peta). Menggantikan 'num_levels'."
              },
              "min_elevation": {
                "label": "Elevasi minimum",
                "description": "Batas elevasi bawah opsional untuk sapuan (default: medan terendah setiap zona)."
              },
              "max_elevation": {
                "label": "Elevasi maksimum",
                "description": "Batas elevasi atas opsional untuk sapuan (default: medan tertinggi setiap zona)."
              },
              "band": {
                "label": "Band",
                "description": "Band DEM berbasis 1 (default 1)."
              }
            }
          },
          "strip_map_index_features": {
            "name": "Fitur indeks peta strip",
            "description": "Telusuri setiap garis masukan dan hasilkan urutan bernomor persegi halaman terotasi yang tumpang tindih yang berorientasi pada arah rute lokal, untuk atlas peta strip sepanjang jalan raya, sungai, pipa, atau jalur — seperti ArcGIS Strip Map Index Features.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor garis masukan yang akan diindeks."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran berisi halaman indeks (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "page_length": {
                "label": "Panjang halaman",
                "description": "Panjang setiap halaman sepanjang rute, dalam satuan CRS. Wajib."
              },
              "page_width": {
                "label": "Lebar halaman",
                "description": "Lebar setiap halaman melintang rute, dalam satuan CRS. Wajib."
              },
              "overlap": {
                "label": "Tumpang tindih",
                "description": "Fraksi [0, 1) dari page_length yang tumpang tindih antara halaman berurutan sepanjang rute. Default 0."
              },
              "orientation": {
                "label": "Orientasi",
                "description": "along_line (default): rotasikan setiap halaman ke arah tali busur lokalnya. horizontal/vertical: jepret rotasi ke sumbu timur-barat/utara-selatan terdekat."
              },
              "start_page": {
                "label": "Halaman awal",
                "description": "Nomor halaman pertama yang ditetapkan. Default 1."
              }
            }
          },
          "subdivide_polygon": {
            "name": "Subdivisi poligon",
            "description": "Bagi setiap poligon menjadi bagian berluas sama (sejumlah bagian tertentu, atau luas target masing-masing) menggunakan potongan paralel lurus pada sudut tertentu, seperti ArcGIS Subdivide Polygon.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor poligon masukan (gunakan CRS terproyeksi/berluas sama untuk luas yang benar-benar sama)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor poligon keluaran (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'equal_parts' (num_parts jalur berluas sama, default) atau 'equal_areas' (jalur seluas target_area, sisanya di jalur terakhir)."
              },
              "num_parts": {
                "label": "Jumlah bagian",
                "description": "Jumlah bagian berluas sama (untuk method=equal_parts). Default 2."
              },
              "target_area": {
                "label": "Luas target",
                "description": "Luas setiap bagian dalam satuan CRS (wajib untuk method=equal_areas)."
              },
              "angle": {
                "label": "Sudut",
                "description": "Orientasi pemotongan dalam derajat (0 = pemotongan vertikal / jalur horizontal). Default 0."
              }
            }
          },
          "subset_features": {
            "name": "Subset fitur",
            "description": "Pisahkan layer fitur secara acak menjadi subset pelatihan dan komplemennya (subset uji), berdasarkan persentase atau jumlah absolut, menggunakan RNG deterministik berseed. Secara opsional distratifikasi berdasarkan field kelompok. Seperti ArcGIS Subset Features.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan (tipe geometri apa pun)."
              },
              "output_training": {
                "label": "Keluaran pelatihan",
                "description": "Path keluaran untuk subset pelatihan. Jika dihilangkan, disimpan di memori."
              },
              "output_test": {
                "label": "Keluaran uji",
                "description": "Path keluaran opsional untuk subset pelengkap (uji). Jika dihilangkan, subset uji disimpan di memori."
              },
              "size": {
                "label": "Ukuran",
                "description": "Ukuran subset pelatihan: sebuah persentase (0-100) atau jumlah fitur absolut, sesuai 'size_method' (default 50)."
              },
              "size_method": {
                "label": "Metode ukuran",
                "description": "'percentage' (default) atau 'absolute'."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed RNG untuk pemisahan yang dapat direproduksi (default konstanta tetap)."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Field opsional sebagai dasar stratifikasi: setiap kelompok menyumbang pangsa proporsionalnya sendiri dari subset pelatihan."
              }
            }
          },
          "subset_multidimensional_raster": {
            "name": "Subset raster multidimensi",
            "description": "Mempersempit kubus raster multidimensi menjadi subset irisannya, berdasarkan rentang koordinat dimensi, indeks eksplisit, atau langkah (ArcGIS Subset Multidimensional Raster / Select By Dimension). Alat kubus putaran 18 semuanya memakai seluruh kubus, sehingga tidak ada cara menganalisis jendela studi tanpa membangkitkan ulang masukan di luar katalog.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster multidimensi, atau daftar raster terkoregistrasi yang dipisahkan koma yang band-bandnya digabungkan menjadi satu kubus."
              },
              "dimension_values": {
                "label": "Nilai dimensi",
                "description": "Koordinat per irisan opsional yang meningkat ketat (tanggal, kedalaman, panjang gelombang), satu per irisan. Diperlukan oleh 'dimension_range'."
              },
              "dimension": {
                "label": "Dimensi",
                "description": "Nama dimensi, hanya digunakan dalam pelaporan (default 'slice')."
              },
              "dimension_range": {
                "label": "Rentang dimensi",
                "description": "Rentang koordinat inklusif sebagai 'min,max'. Memerlukan 'dimension_values'. Saling eksklusif dengan 'indices'."
              },
              "indices": {
                "label": "Indeks",
                "description": "Indeks irisan berbasis 0 eksplisit, misalnya '0,2,5'. Saling eksklusif dengan 'dimension_range'."
              },
              "step": {
                "label": "Langkah",
                "description": "Pertahankan setiap irisan ke-N setelah filter lain (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster kubus keluaran, satu band per irisan yang dipertahankan. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "summarize_categorical_raster": {
            "name": "Ringkas raster kategorikal",
            "description": "Menabulasi jumlah sel, luas, dan porsi setiap kelas dalam raster kategorikal, satu baris per irisan untuk tumpukan multi-band/multidimensi, secara opsional dibatasi pada area minat (ArcGIS Summarize Categorical Raster). raster_area bawaan menulis total kelas kembali ke sel raster alih-alih tabel dan hanya band tunggal, sehingga tidak dapat menghasilkan deret luas kelas per tanggal yang dibutuhkan analisis perubahan tutupan lahan. Luas sel diintegrasikan per baris untuk raster geografis.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster kategorikal masukan (band tunggal atau multiband)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "aoi": {
                "label": "AOI",
                "description": "Layer poligon opsional yang membatasi ringkasan pada area of interest."
              },
              "aoi_id_field": {
                "label": "Field ID AOI",
                "description": "Field pada 'aoi' yang mengidentifikasi setiap area; jika diberikan, ringkasan dihasilkan per fitur AOI."
              },
              "area_units": {
                "label": "Satuan luas",
                "description": "Satuan luas: map_units (default), hectares, atau square_kilometers."
              },
              "include_nodata": {
                "label": "Sertakan nodata",
                "description": "Jika true, nodata dilaporkan sebagai baris kelasnya sendiri (default false)."
              },
              "bands": {
                "label": "Band",
                "description": "Daftar band berbasis 1 yang dipisahkan koma untuk diringkas (default: semua band)."
              }
            }
          },
          "summarize_nearby": {
            "name": "Ringkas sekitar",
            "description": "Buffer fitur masukan pada satu atau lebih jarak garis lurus dan ringkas layer kedua di dalam setiap buffer: jumlah fitur, luas beririsan (poligon), panjang terpotong (garis), dan jumlah/rata-rata terboboti ukuran dari field numerik.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor masukan yang fiturnya dibuffer (titik, garis, atau poligon), format terdeteksi otomatis (atau handle dalam memori)."
              },
              "summary_features": {
                "label": "Fitur ringkasan",
                "description": "Layer vektor yang diringkas di dalam setiap buffer (poligon diringkas berdasarkan luas irisan, garis berdasarkan panjang terpotong, atau titik berdasarkan jumlah)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "distances": {
                "label": "Jarak",
                "description": "Daftar jarak buffer yang dipisahkan koma dalam satuan CRS, misalnya \"1000,2000,5000\". Diurutkan menaik; duplikat dan nilai non-positif dibuang."
              },
              "sum_fields": {
                "label": "Field penjumlahan",
                "description": "Field numerik opsional yang dipisahkan koma pada layer ringkasan untuk diagregasi. Masing-masing menghasilkan kolom sum_<field> dan mean_<field> (terboboti luas untuk poligon, terboboti panjang untuk garis, biasa untuk titik)."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field opsional pada layer masukan yang mengidentifikasi setiap fitur sumber dalam keluaran. Default-nya indeks fitur masukan."
              }
            }
          },
          "summarize_percent_change": {
            "name": "Ringkas persentase perubahan",
            "description": "Hitung insiden dari periode saat ini dan periode sebelumnya di dalam setiap fitur area dan laporkan selisih hitungan, persentase perubahan, dan kelas perubahan. Persentase perubahan null (kelas 'new') di mana hitungan sebelumnya nol. Seperti ArcGIS Summarize Percent Change.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur area (beat, tract, sel grid) sebagai wadah ringkasan."
              },
              "current_features": {
                "label": "Fitur saat ini",
                "description": "Fitur titik insiden untuk periode saat ini."
              },
              "previous_features": {
                "label": "Fitur sebelumnya",
                "description": "Fitur titik insiden untuk periode sebelumnya."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran untuk area beserta field perubahan. Jika dihilangkan, disimpan di memori."
              },
              "search_radius": {
                "label": "Radius pencarian",
                "description": "Jarak opsional dalam satuan peta; insiden dalam jarak ini dari sebuah area juga dihitung, bukan hanya yang berada di dalamnya. Perhatikan bahwa radius positif membuat catchment saling tumpang tindih, sehingga sebuah insiden dapat dihitung oleh lebih dari satu area (total korpus yang dilaporkan tetap terdeduplikasi)."
              }
            }
          },
          "summarize_within": {
            "name": "Ringkas di dalam",
            "description": "Ringkas atribut suatu layer di dalam layer poligon yang ada, membobot fitur yang tumpang tindih sebagian berdasarkan luas atau panjang beririsan, seperti ArcGIS Summarize Within.",
            "params": {
              "polygons": {
                "label": "Poligon",
                "description": "Layer poligon sebagai wadah ringkasan. Fitur dan atributnya dipertahankan."
              },
              "input": {
                "label": "Masukan",
                "description": "Layer yang diringkas (titik, garis, atau poligon)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path poligon keluaran opsional. Jika dihilangkan, hasil disimpan di memori."
              },
              "fields": {
                "label": "Field",
                "description": "Pasangan 'field:statistic' yang dipisahkan koma, misalnya 'pop:sum,income:mean'. Statistik: sum, mean, min, max, stddev, count."
              },
              "keep_all": {
                "label": "Pertahankan semua",
                "description": "Pertahankan poligon yang tidak beririsan dengan fitur apa pun (default true). Jika false, poligon kosong dibuang."
              },
              "shape_sum": {
                "label": "Jumlah bentuk",
                "description": "Tambahkan jumlah / panjang / luas total dari geometri masukan yang beririsan (default true)."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Field opsional pada layer yang diringkas; menghasilkan satu baris ringkasan terkelompok per nilai berbeda."
              }
            }
          },
          "summary_statistics": {
            "name": "Statistik ringkasan",
            "description": "GROUP BY gaya SQL atas satu atau lebih field kasus: untuk setiap kombinasi field kasus unik, hitung daftar agregat (field, statistik) (count/sum/mean/min/max/std/first/last) ditambah jumlah rekaman kelompok. Keluaran adalah tabel atribut murni. Tanpa field kasus menghasilkan satu baris total keseluruhan (seperti Summary Statistics di ArcGIS; hanya count mereproduksi Frequency).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor atau tabel atribut masukan yang akan diagregasi."
              },
              "statistics": {
                "label": "Statistik",
                "description": "Daftar pasangan 'field statistic' yang dipisahkan titik koma/koma (juga menerima 'field:statistic'), misalnya 'population sum; population mean; elev max'. Statistik: count, sum, mean, min, max, std, first, last."
              },
              "case_fields": {
                "label": "Field kasus",
                "description": "Nama field kasus (GROUP BY) opsional yang dipisahkan koma/titik koma. Jika dihilangkan, satu baris ringkasan tunggal dihasilkan untuk seluruh tabel."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel keluaran opsional (driver dari ekstensinya; GeoParquet atau CSV). Jika dihilangkan, tabel disimpan di memori. Kolom: field kasus, sebuah 'count' rekaman, lalu satu kolom '<field>_<statistic>' per pasangan yang diminta."
              }
            }
          },
          "sun_shadow_volume": {
            "name": "Volume bayangan matahari",
            "description": "Mengekstrusi padatan 3D sepanjang vektor matahari ke tanah untuk menghasilkan padatan volume bayangan tertutup untuk tanggal dan waktu tertentu (ArcGIS Sun Shadow Volume). shadow_image, shadow_animation, dan time_in_daylight semuanya bekerja pada DSM raster dan menghasilkan raster, dan solar_radiation menghitung iradiansi — tidak ada yang menghasilkan geometri bayangan, sehingga pertanyaan seperti 'apakah jendela ini terbayangi' atau 'seberapa banyak ruang udara persil ini berada dalam bayangan' tidak dapat dijawab. Keluarannya dapat dipadukan dengan inside_3d, intersect_3d, dan union_3d.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Solid bangunan 3D atau jejak terekstrusi (MultiPolygon mesh segitiga dengan Z)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Solid volume bayangan tertutup. Jika dihilangkan, disimpan di memori."
              },
              "datetime": {
                "label": "Tanggal-waktu",
                "description": "Tanggal-waktu setempat dari posisi matahari sebagai 'YYYY-MM-DDTHH:MM' atau 'YYYY-MM-DD HH:MM'. Diambil sebagai parameter, tidak pernah dari jam, sehingga hasilnya dapat direproduksi."
              },
              "latitude": {
                "label": "Lintang",
                "description": "Lintang dalam derajat, digunakan untuk geometri surya. Wajib: nilai ini tidak dapat diturunkan tanpa mesin proyeksi."
              },
              "utc_offset": {
                "label": "Offset UTC",
                "description": "Selisih jam dari UTC untuk waktu setempat yang diberikan (default 0)."
              },
              "adjusted_for_dst": {
                "label": "Disesuaikan untuk DST",
                "description": "Perlakukan waktu yang diberikan sebagai telah disesuaikan dengan waktu musim panas, mengurangi satu jam sebelum perhitungan surya (default false), sesuai ArcGIS."
              },
              "ground_elevation": {
                "label": "Elevasi tanah",
                "description": "Nilai Z tanah konstan tempat bayangan diproyeksikan. Default: nilai Z minimum setiap fitur sendiri."
              },
              "max_length": {
                "label": "Panjang maksimum",
                "description": "Batas jarak sapuan dalam satuan CRS, agar matahari rendah tidak menghasilkan prisma sepanjang kilometer. Default: tak terbatas."
              }
            }
          },
          "surface_difference": {
            "name": "Selisih permukaan",
            "description": "Delineasi di mana satu permukaan berada di atas, di bawah, atau sejajar dengan permukaan lain sebagai poligon, masing-masing membawa kelas, luas, volume, dan statistik selisihnya (ArcGIS Surface Difference). cut_fill mengukur kuantitas yang sama tetapi hanya menghasilkan raster label wilayah dan CSV, sehingga wilayahnya tidak memiliki geometri untuk ditumpangsusunkan, dipotong, atau digabung; surface_volume dan polygon_volume mengukur terhadap bidang atau di dalam poligon yang sudah Anda miliki alih-alih menemukannya.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster permukaan yang akan diklasifikasikan."
              },
              "reference": {
                "label": "Referensi",
                "description": "Permukaan referensi: path raster terkoregistrasi, atau elevasi konstanta sebagai pembanding terhadap datum datar."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon keluaran berisi wilayah terklasifikasi. Jika dihilangkan, disimpan di memori."
              },
              "output_raster": {
                "label": "Raster keluaran",
                "description": "Raster selisih bertanda keluaran (masukan dikurangi referensi). Selalu dihasilkan; disimpan di memori jika tidak ada path yang diberikan."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Selisih dalam jarak ini dari nol dihitung sebagai berimpit (default 0.0)."
              },
              "min_area": {
                "label": "Luas minimum",
                "description": "Buang wilayah yang lebih kecil dari luas ini dalam satuan peta kuadrat."
              },
              "include_coincident": {
                "label": "Sertakan yang berimpit",
                "description": "Hasilkan juga poligon untuk kelas tak berubah (default false). Nonaktif secara default karena pada sebagian besar adegan hal itu berupa satu poligon latar belakang yang sangat besar."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 dari permukaan masukan (default 1)."
              },
              "reference_band": {
                "label": "Band referensi",
                "description": "Band berbasis 1 dari permukaan referensi (default 1)."
              }
            }
          },
          "surface_parameters": {
            "name": "Parameter permukaan",
            "description": "Kemiringan, aspek, atau kelengkungan (mean/profile/tangential/plan/gaussian/casorati/contour_geodesic_torsion) dari DEM melalui penyesuaian permukaan kuadrat terkecil kuadratik/bikuadratik lokal pada jarak ketetanggaan terpilih, seperti ArcGIS Surface Parameters — padanan adaptif skala dari alat medan 3×3 tetap bawaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster elevasi masukan (DEM)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "parameter": {
                "label": "Parameter",
                "description": "Parameter mana yang dihitung: slope (default), aspect, mean_curvature, profile_curvature, tangential_curvature, plan_curvature, gaussian_curvature, casorati_curvature, contour_geodesic_torsion."
              },
              "fit": {
                "label": "Fit",
                "description": "Model permukaan: 'quadratic' (6 suku, default) atau 'biquadratic' (9 suku)."
              },
              "neighborhood_distance": {
                "label": "Jarak ketetanggaan",
                "description": "Radius ketetanggaan dalam satuan peta (default = satu ukuran sel, yaitu jendela 3×3)."
              },
              "neighborhood_type": {
                "label": "Jenis ketetanggaan",
                "description": "'fixed' (default) menggunakan radius penuh di mana-mana; 'adaptive' menyusutkan jendela menjadi 1 sel di dekat celah data/tepi."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              }
            }
          },
          "surface_volume": {
            "name": "Volume permukaan",
            "description": "Integrasikan raster permukaan terhadap bidang referensi horizontal, melaporkan luas 2D, luas permukaan 3D, dan volume untuk bagian di atas dan/atau di bawah bidang (seperti Surface Volume di ArcGIS). Analisis galian/timbunan pekerjaan tanah dan kapasitas waduk.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster permukaan elevasi masukan."
              },
              "reference_plane": {
                "label": "Bidang referensi",
                "description": "Elevasi bidang referensi sebagai acuan integrasi (default 0)."
              },
              "direction": {
                "label": "Arah",
                "description": "Sisi bidang mana yang diintegrasikan: 'above', 'below', atau 'both' (default 'above')."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca (default 1)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran opsional untuk tabel hasil. Jika dihilangkan, hasil hanya dikembalikan dalam hasil proses."
              }
            }
          },
          "table_to_geometry": {
            "name": "Tabel ke geometri",
            "description": "Bangun fitur garis atau elips dari field tabel: pasangan koordinat awal/akhir (XY To Line), asal + arah + jarak (Bearing Distance To Line), atau pusat + sumbu mayor/minor + azimut (Table To Ellipse) — dengan konstruksi garis planar, geodesik, dan rhumb.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Tabel atribut atau layer vektor titik masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "mode": {
                "label": "Mode",
                "description": "'xy_to_line', 'bearing_distance', atau 'ellipse'."
              },
              "line_type": {
                "label": "Jenis garis",
                "description": "'geodesic' (default, jalur terpendek pada elipsoid WGS84), 'rhumb' (arah konstan), atau 'planar' (segmen Kartesius lurus dalam satuan masukan itu sendiri)."
              },
              "vertex_spacing": {
                "label": "Jarak antar verteks",
                "description": "Jarak densifikasi untuk garis melengkung (geodesic/rhumb), dan jarak sampel garis luar elips, dalam meter untuk geodesic/rhumb atau satuan CRS untuk planar. Default: jumlah segmen tetap."
              },
              "polygon_output": {
                "label": "Keluaran poligon",
                "description": "Hanya mode=ellipse: hasilkan Polygon terisi alih-alih garis luar tertutup. Default false."
              },
              "start_x": {
                "label": "X awal",
                "description": "mode=xy_to_line: field yang menyimpan X / bujur awal."
              },
              "start_y": {
                "label": "Y awal",
                "description": "mode=xy_to_line: field yang menyimpan Y / lintang awal."
              },
              "end_x": {
                "label": "X akhir",
                "description": "mode=xy_to_line: field yang menyimpan X / bujur akhir."
              },
              "end_y": {
                "label": "Y akhir",
                "description": "mode=xy_to_line: field yang menyimpan Y / lintang akhir."
              },
              "x": {
                "label": "X",
                "description": "mode=bearing_distance/ellipse: field yang menyimpan X / bujur titik asal/pusat."
              },
              "y": {
                "label": "Y",
                "description": "mode=bearing_distance/ellipse: field yang menyimpan Y / lintang titik asal/pusat."
              },
              "bearing": {
                "label": "Arah (bearing)",
                "description": "mode=bearing_distance: field yang menyimpan arah dalam derajat searah jarum jam dari utara."
              },
              "distance": {
                "label": "Jarak",
                "description": "mode=bearing_distance: field yang menyimpan jarak perjalanan (meter untuk geodesic/rhumb, satuan CRS untuk planar)."
              },
              "major": {
                "label": "Mayor",
                "description": "mode=ellipse: field yang menyimpan panjang sumbu semi-mayor (meter untuk geodesic/rhumb, satuan CRS untuk planar)."
              },
              "minor": {
                "label": "Minor",
                "description": "mode=ellipse: field yang menyimpan panjang sumbu semi-minor (satuan sama dengan mayor)."
              },
              "azimuth": {
                "label": "Azimut",
                "description": "mode=ellipse: field yang menyimpan arah sumbu mayor dalam derajat searah jarum jam dari utara."
              }
            }
          },
          "tabulate_intersection": {
            "name": "Tabulasi irisan",
            "description": "Ringkasan zonal vektor-terhadap-vektor: bagikan layer kelas (poligon berdasarkan luas, garis berdasarkan panjang beririsan, atau titik berdasarkan hitungan) lintas poligon zona, melaporkan ukuran beririsan, persentase zona, dan field jumlah terboboti ukuran.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer poligon zona, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "class_features": {
                "label": "Fitur kelas",
                "description": "Layer vektor kelas yang dibagi ke seluruh zona (poligon diringkas berdasarkan luas, garis berdasarkan panjang irisan, atau titik berdasarkan jumlah)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "class_field": {
                "label": "Field kelas",
                "description": "Field kategorikal opsional pada layer kelas; hasil dikelompokkan berdasarkan zona x nilai ini. Hilangkan untuk memperlakukan semua fitur kelas sebagai satu kelas."
              },
              "sum_fields": {
                "label": "Field penjumlahan",
                "description": "Field numerik opsional yang dipisahkan koma pada layer kelas untuk dibagi ke setiap zona (terboboti luas untuk poligon, terboboti panjang untuk garis, dijumlahkan untuk titik)."
              },
              "zone_field": {
                "label": "Field zona",
                "description": "Field opsional yang mengidentifikasi setiap zona dalam keluaran. Default-nya indeks fitur zona."
              }
            }
          },
          "thin_road_network": {
            "name": "Tipiskan jaringan jalan",
            "description": "Generalisasi jaringan jalan untuk tampilan skala kecil: sembunyikan jalan pendek berhierarki rendah sambil mempertahankan konektivitas, menandai setiap jalan terlihat/tertipiskan (non-destruktif) seperti ArcGIS Thin Road Network.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor jalan (garis) masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "min_length": {
                "label": "Panjang minimum",
                "description": "Jalan yang lebih pendek dari nilai ini (satuan CRS) menjadi kandidat untuk ditipiskan. Jalan yang lebih panjang selalu dipertahankan."
              },
              "hierarchy_field": {
                "label": "Field hierarki",
                "description": "Field kelas jalan numerik opsional; nilai lebih rendah = lebih penting (dipertahankan lebih lama). Kandidat ditipiskan mulai dari nomor kelas tertinggi."
              },
              "visibility_field": {
                "label": "Field visibilitas",
                "description": "Nama field penanda visibilitas keluaran (1 = dipertahankan, 0 = ditipiskan). Default 'visible'."
              },
              "keep_only": {
                "label": "Hanya pertahankan",
                "description": "Jika true, hasilkan hanya jalan yang terlihat alih-alih menandai semuanya. Default false (tidak merusak)."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Jarak yang membuat titik ujung jalan diperlakukan sebagai persimpangan yang sama. Default 1e-6."
              }
            }
          },
          "tile_grid_polygons": {
            "name": "Poligon grid petak",
            "description": "Menghasilkan batas petak peta web sebagai poligon untuk tingkat zoom (atau rentang) dan luasan, masing-masing membawa z/x/y dan quadkey-nya (ArcGIS Map Server Cache Tiling Scheme To Polygons, Create Vector Tile Index, Generate Tile Cache Tiling Scheme). Alat grid persegi/heksagonal bawaan membangun grid sembarang dalam CRS masukan dan tidak dapat berimpit dengan quadtree WebMercator yang digunakan alat PMTiles dan raster_to_tiles.",
            "params": {
              "zoom": {
                "label": "Zoom",
                "description": "Aras zum. Gunakan bersama 'max_zoom' untuk menghasilkan piramida beberapa aras."
              },
              "max_zoom": {
                "label": "Zoom maksimum",
                "description": "Zum tertinggi opsional; jika diberikan, setiap aras dari 'zoom' hingga 'max_zoom' dihasilkan."
              },
              "extent": {
                "label": "Ekstensi",
                "description": "Layer raster atau vektor opsional yang batasnya memotong grid. Tanpanya, seluruh dunia pada zum tersebut (tunduk pada 'max_tiles')."
              },
              "bbox": {
                "label": "Bbox",
                "description": "Ekstensi eksplisit opsional sebagai 'min_lon,min_lat,max_lon,max_lat' dalam derajat. Lebih diutamakan daripada 'extent'."
              },
              "scheme": {
                "label": "Skema",
                "description": "'xyz' (default, Google/OSM, y menghitung turun dari utara) atau 'tms' (y menghitung naik dari selatan)."
              },
              "output_crs": {
                "label": "CRS keluaran",
                "description": "'EPSG:3857' (default, petak persegi) atau 'EPSG:4326' (segiempat bujur/lintang)."
              },
              "max_tiles": {
                "label": "Petak maksimum",
                "description": "Batas keras jumlah petak (default 1000000); melampauinya menghasilkan galat yang menyebutkan jumlah terhitung."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon keluaran. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "time_series_clustering": {
            "name": "Klasterisasi deret waktu",
            "description": "Klasterisasi sel kubus ruang-waktu H3 berdasarkan kemiripan deret waktunya (nilai, profil ternormalisasi z, atau korelasi) dengan k-medoids deterministik, sehingga tempat yang berevolusi serupa dikelompokkan bersama, seperti ArcGIS Time Series Clustering.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan dalam EPSG:4326 (bujur/lintang) dengan field stempel waktu."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field stempel waktu (numerik atau tanggal/tanggal-waktu ISO-8601)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon H3 keluaran dengan cluster_id/is_medoid. Jika dihilangkan, disimpan di memori."
              },
              "num_clusters": {
                "label": "Jumlah klaster",
                "description": "Jumlah klaster k (default 4)."
              },
              "characteristic": {
                "label": "Karakteristik",
                "description": "Jarak deret waktu: 'value' (mentah), 'profile' (ternormalisasi z, default), atau 'correlation' (1 − r)."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Lebar satu langkah waktu: angka biasa (time_field numerik) atau durasi seperti '1w', '7d', '12h'. Default '1w'."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik opsional yang dijumlahkan ke setiap bin. Default: jumlah titik per bin."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 dari 0 (paling kasar) hingga 15 (paling halus); default 7 (sel ~5 km²)."
              },
              "seed": {
                "label": "Seed",
                "description": "Seed acak untuk inisialisasi medoid yang dapat direproduksi (default 1)."
              }
            }
          },
          "time_series_cross_correlation": {
            "name": "Korelasi silang deret waktu",
            "description": "Korelasi silang ber-lag per sel antara dua tumpukan raster ruang-waktu yang selaras (seperti Time Series Cross Correlation / Multidimensional Raster Correlation di ArcGIS): untuk setiap sel, secara opsional hilangkan tren/musiman, lalu korelasikan deret A terhadap deret B pada min_lag..=max_lag dan laporkan lag terbaik beserta korelasi Pearson-nya, ditambah korelasi lag-0 opsional dan pseudo nilai p ukuran sampel efektif Pyper-Peterman. Pelengkap dua variabel sadar lag dari alat kubus deret tunggal generate_trend_raster / change_point_detection — tidak ada alat bawaan yang menghubungkan dua variabel sepanjang waktu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Tumpukan A: raster multiband (satu band per langkah waktu) ATAU daftar path raster band tunggal terkoregistrasi yang dipisahkan koma dalam urutan waktu."
              },
              "secondary": {
                "label": "Sekunder",
                "description": "Tumpukan B: bentuk dan panjang sama dengan 'input' (raster multiband atau daftar band tunggal yang dipisahkan koma)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster lag terbaik keluaran (lag bilangan bulat yang memaksimalkan |korelasi|). Jika dihilangkan, disimpan di memori."
              },
              "corr_output": {
                "label": "Keluaran korelasi",
                "description": "Raster keluaran opsional berisi korelasi Pearson (bertanda) pada lag terbaik."
              },
              "corr0_output": {
                "label": "Keluaran korelasi 0",
                "description": "Raster keluaran opsional berisi korelasi pada lag 0 (sezaman)."
              },
              "pvalue_output": {
                "label": "Keluaran nilai p",
                "description": "Raster keluaran opsional berisi nilai p dua sisi semu pada lag terbaik (ukuran sampel efektif Pyper-Peterman + z Fisher)."
              },
              "min_lag": {
                "label": "Lag minimum",
                "description": "Lag minimum dalam langkah waktu (default -6). A[t] dipasangkan dengan B[t+lag]."
              },
              "max_lag": {
                "label": "Lag maksimum",
                "description": "Lag maksimum dalam langkah waktu (default 6). Harus >= min_lag."
              },
              "detrend": {
                "label": "Hilangkan tren",
                "description": "Jika true, kurangi tren linear OLS per deret sebelum dikorelasikan (default false)."
              },
              "deseasonalize": {
                "label": "Hilangkan musiman",
                "description": "Jika true, kurangi siklus musiman aditif per deret dengan periode 'season_length' sebelum dikorelasikan (default false)."
              },
              "season_length": {
                "label": "Panjang musim",
                "description": "Periode musiman (langkah waktu) yang digunakan jika 'deseasonalize' bernilai true (default 12)."
              },
              "min_valid": {
                "label": "Valid minimum",
                "description": "Jumlah minimum pasangan tumpang tindih valid yang diperlukan untuk berkorelasi pada suatu lag (default 5)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dibaca jika sebuah tumpukan diberikan sebagai daftar band tunggal yang dipisahkan koma (default 1). Diabaikan untuk tumpukan multiband."
              }
            }
          },
          "time_series_forecast": {
            "name": "Peramalan deret waktu",
            "description": "Peramalan per lokasi pada kubus ruang-waktu H3 (seperti ArcGIS Exponential Smoothing / Curve Fit Forecast): ramalkan deret setiap sel ke depan dengan penghalusan eksponensial Holt atau penyesuaian kurva polinomial, memilih per sel model dengan RMSE hold-out terendah, dengan ramalan langkah berikutnya/akhir dan setengah lebar keyakinan 90%. Peramalan temporal yang tidak dapat dilakukan trend_surface spasial bawaan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik masukan berisi peristiwa berstempel waktu (bujur/lintang)."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang menyimpan waktu setiap titik: sebuah angka atau stempel waktu ISO-8601."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer poligon H3 keluaran dengan atribut ramalan. Jika dihilangkan, disimpan di memori."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang diagregasi per bin (default: jumlah titik)."
              },
              "steps": {
                "label": "Langkah",
                "description": "Jumlah langkah waktu yang diramalkan ke depan (default 3)."
              },
              "model": {
                "label": "Model",
                "description": "'auto' (RMSE hold-out terendah; default), 'exp_smoothing', 'linear', atau 'parabolic'."
              },
              "holdout": {
                "label": "Holdout",
                "description": "Langkah waktu yang disisihkan untuk memvalidasi/memilih model (default 3)."
              },
              "time_step": {
                "label": "Langkah waktu",
                "description": "Lebar satu langkah waktu dalam satuan time_field (default 1)."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 0..15 (default 7)."
              }
            }
          },
          "time_series_smoothing": {
            "name": "Penghalusan deret waktu",
            "description": "Haluskan deret waktu dalam sampel per lokasi (seperti ArcGIS Time Series Smoothing): kelompokkan fitur berdasarkan id_field, urutkan setiap kelompok berdasarkan time_field, dan tambahkan nilai terhaluskan melalui rata-rata bergerak mundur/terpusat/maju atau lintasan linear lokal bandwidth adaptif (LOESS). Geometri dan semua atribut asli dipertahankan. Melengkapi time_series_forecast, yang memproyeksikan ke depan alih-alih menghaluskan deret yang diamati.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer fitur masukan berisi pengamatan berstempel waktu."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Field numerik yang deretnya dihaluskan."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field yang mengurutkan setiap deret: sebuah angka atau stempel waktu ISO-8601."
              },
              "id_field": {
                "label": "Field ID",
                "description": "Field yang mengidentifikasi setiap lokasi/deret. Jika dihilangkan, semua fitur membentuk satu deret."
              },
              "method": {
                "label": "Metode",
                "description": "'moving_average' (default) atau 'local_linear' (LOESS berlebar pita adaptif)."
              },
              "window": {
                "label": "Jendela",
                "description": "moving_average: jumlah titik dalam jendela perata-rataan (default 3)."
              },
              "bandwidth": {
                "label": "Bandwidth",
                "description": "local_linear: jumlah titik terdekat dalam waktu yang digunakan per penyesuaian lokal (default 5)."
              },
              "alignment": {
                "label": "Penyelarasan",
                "description": "Penempatan jendela moving_average: 'backward', 'centered' (default), atau 'forward'."
              },
              "output_field": {
                "label": "Field keluaran",
                "description": "Nama field hasil penghalusan yang ditambahkan (default 'smoothed')."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path layer keluaran. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "topo_to_raster": {
            "name": "Topo ke raster",
            "description": "Interpolasi DEM yang benar secara hidrologis dari garis kontur, titik ketinggian, dan garis sungai opsional menggunakan relaksasi kelengkungan minimum (thin-plate) dengan penegakan drainase — seperti ArcGIS Topo To Raster (ANUDEM). Tidak seperti interpolator IDW/TIN/spline bawaan, alat ini tidak membuat teras pada kontur dan menghapus cekungan tertutup palsu.",
            "params": {
              "contours": {
                "label": "Kontur",
                "description": "Layer vektor garis kontur masukan (elevasi dibaca dari elevation_field). Setidaknya salah satu dari contours/points wajib ada."
              },
              "points": {
                "label": "Titik",
                "description": "Layer vektor titik tinggi masukan (elevasi dibaca dari elevation_field)."
              },
              "streams": {
                "label": "Sungai",
                "description": "Layer vektor garis sungai opsional yang digunakan untuk pemberlakuan drainase (dibakar ke permukaan sebelum penghapusan sink)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path raster DEM keluaran opsional (driver dari ekstensi). Jika dihilangkan, disimpan di memori."
              },
              "elevation_field": {
                "label": "Field elevasi",
                "description": "Nama field elevasi numerik pada layer kontur dan titik. Default: deteksi otomatis (HEIGHT/ELEV/ELEVATION/Z, jika tidak ada maka field numerik pertama)."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS. Default: diukur agar sumbu grid yang lebih panjang sekitar 400 sel."
              },
              "tension": {
                "label": "Tegangan",
                "description": "Kekakuan permukaan dalam [0,1]: 0 = thin-plate murni (paling halus), 1 = membran tegang. Default 0.35."
              },
              "iterations": {
                "label": "Iterasi",
                "description": "Jumlah iterasi SOR maksimum (default 2000). Iterasi berhenti lebih awal setelah perubahan sel maksimum turun di bawah toleransi."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Toleransi konvergensi: berhenti jika perubahan sel terbesar dalam suatu iterasi berada di bawah nilai ini (satuan elevasi CRS). Default 0.01."
              },
              "enforce_drainage": {
                "label": "Terapkan drainase",
                "description": "Hapus sink interior palsu setelah interpolasi sehingga DEM mengalirkan air ke tepinya (default true)."
              },
              "stream_burn": {
                "label": "Bakar sungai",
                "description": "Kedalaman (satuan elevasi) untuk menurunkan sel sungai sebelum penghapusan sink, agar aliran dirutekan sepanjangnya. Default 0 (otomatis = 1% dari relief jika sungai diberikan)."
              }
            }
          },
          "trace_proximity_events": {
            "name": "Telusuri kejadian kedekatan",
            "description": "Temukan interval di mana dua jejak bergerak berada dalam suatu jarak satu sama lain selama setidaknya durasi minimum (kejadian kedekatan), dan secara opsional telusuri kontak hilir transitif dari entitas seed, seperti ArcGIS Trace Proximity Events.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik berstempel waktu (gunakan CRS terproyeksi; jarak dalam satuan peta)."
              },
              "track_field": {
                "label": "Field jejak",
                "description": "Field yang mengidentifikasi setiap entitas bergerak / jejak."
              },
              "time_field": {
                "label": "Field waktu",
                "description": "Field stempel waktu (detik numerik atau ISO-8601)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer garis peristiwa kedekatan keluaran. Jika dihilangkan, disimpan di memori."
              },
              "search_distance": {
                "label": "Jarak pencarian",
                "description": "Pemisahan maksimum agar dua jejak dianggap 'berdekatan' (satuan peta)."
              },
              "min_duration": {
                "label": "Durasi minimum",
                "description": "Waktu minimum dalam kondisi berdekatan agar dihitung sebagai peristiwa: detik atau durasi seperti '5m', '1h' (default 0)."
              },
              "entities": {
                "label": "Entitas",
                "description": "Id jejak seed opsional yang dipisahkan koma untuk menelusuri kontak hilir (pelacakan kontak)."
              },
              "depth": {
                "label": "Kedalaman",
                "description": "Jumlah generasi penelusuran maksimum dari seed (default tak terbatas)."
              }
            }
          },
          "transform_features": {
            "name": "Transformasi fitur",
            "description": "Terapkan transformasi affine (geser, rotasi terhadap jangkar, skala per sumbu, cermin) pada setiap geometri dalam layer vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "dx": {
                "label": "Dx",
                "description": "Pergeseran yang diterapkan pada X setelah penskalaan/pencerminan/rotasi, dalam satuan CRS. Default 0."
              },
              "dy": {
                "label": "Dy",
                "description": "Pergeseran yang diterapkan pada Y setelah penskalaan/pencerminan/rotasi, dalam satuan CRS. Default 0."
              },
              "angle": {
                "label": "Sudut",
                "description": "Rotasi berlawanan arah jarum jam terhadap jangkar, dalam derajat. Default 0."
              },
              "scale_x": {
                "label": "Skala X",
                "description": "Faktor skala terhadap jangkar sepanjang X. Default 1."
              },
              "scale_y": {
                "label": "Skala Y",
                "description": "Faktor skala terhadap jangkar sepanjang Y. Default 1."
              },
              "mirror_axis": {
                "label": "Sumbu cermin",
                "description": "Refleksi melalui jangkar: NONE (default), X (balik Y melintasi sumbu horizontal), atau Y (balik X melintasi sumbu vertikal)."
              },
              "anchor": {
                "label": "Jangkar",
                "description": "Titik putar untuk penskalaan/pencerminan/rotasi: CENTROID (pusat kotak pembatas, default), ORIGIN (0,0), atau XY (gunakan anchor_x/anchor_y)."
              },
              "anchor_x": {
                "label": "Jangkar X",
                "description": "Koordinat X jangkar; wajib jika anchor=XY."
              },
              "anchor_y": {
                "label": "Jangkar Y",
                "description": "Koordinat Y jangkar; wajib jika anchor=XY."
              }
            }
          },
          "transform_fields": {
            "name": "Transformasi field",
            "description": "Standarisasi, transformasi, dan enkode field atribut (seperti ArcGIS Standardize/Transform/Encode Field): skor z, min-maks, robust, log/log1p/sqrt/boxcox/inverse, binning interval sama/kuantil/simpangan baku, dan enkode one-hot.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor (atau tabel) masukan dengan field yang akan ditransformasi."
              },
              "fields": {
                "label": "Field",
                "description": "Nama field yang dipisahkan koma untuk ditransformasi; transformasi yang sama diterapkan pada masing-masing."
              },
              "transform": {
                "label": "Transformasi",
                "description": "Transformasi yang diterapkan: zscore, minmax, robust, log, log1p, sqrt, boxcox, inverse, bin, onehot."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer vektor keluaran dengan field hasil transformasi yang ditambahkan. Jika dihilangkan, disimpan di memori."
              },
              "bins": {
                "label": "Bin",
                "description": "Jumlah kelas untuk 'bin' (default 5)."
              },
              "bin_method": {
                "label": "Metode bin",
                "description": "Metode klasifikasi untuk 'bin': equal_interval (default), quantile, atau std_dev."
              },
              "boxcox_lambda": {
                "label": "Lambda Box-Cox",
                "description": "Lambda tetap untuk 'boxcox'; jika dihilangkan, disesuaikan dengan kemungkinan maksimum (pencarian golden-section)."
              },
              "suffix": {
                "label": "Akhiran",
                "description": "Akhiran nama field keluaran (default bergantung pada transformasi, misalnya '_z' untuk zscore)."
              },
              "drop_input": {
                "label": "Buang masukan",
                "description": "Jika true, hapus field asli dari keluaran setelah transformasi (default false)."
              }
            }
          },
          "transform_route_events": {
            "name": "Transformasi kejadian rute",
            "description": "Referensikan ulang kejadian titik yang diukur terhadap sistem rute sumber ke sistem rute target: pulihkan XY setiap kejadian dari rute sumber dan ukurannya, lalu relokasikan ke rute target terdekat dalam toleransi klaster, menghasilkan ID rute target dan ukuran — seperti ArcGIS Transform Route Events.",
            "params": {
              "source_events": {
                "label": "Kejadian sumber",
                "description": "Layer kejadian titik masukan. Setiap fitur membawa pengenal rute (route_id_field) dan sebuah ukuran (measure_field)."
              },
              "source_routes": {
                "label": "Rute sumber",
                "description": "Sistem rute sumber: layer garis yang fiturnya dikunci oleh route_id_field. Ukuran adalah jarak dari verteks pertama setiap rute."
              },
              "target_routes": {
                "label": "Rute target",
                "description": "Sistem rute target: layer garis tempat kejadian dipindahkan. Pengenal rute berasal dari target_id_field."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor titik keluaran (driver dari ekstensi). Jika dihilangkan, hasil disimpan di memori."
              },
              "route_id_field": {
                "label": "Field ID rute",
                "description": "Field yang menamai pengenal rute dalam source_events dan source_routes (default 'route_id'). Jika field tidak ada -> indeks fitur rute sumber digunakan."
              },
              "measure_field": {
                "label": "Field ukuran",
                "description": "Field numerik dalam source_events yang menyimpan ukuran sistem sumber (default 'measure')."
              },
              "target_id_field": {
                "label": "Field ID target",
                "description": "Field yang menamai pengenal rute dalam target_routes (default: sama dengan route_id_field). Jika field tidak ada -> indeks fitur rute target digunakan."
              },
              "cluster_tolerance": {
                "label": "Toleransi klaster",
                "description": "Jarak XY maksimum (satuan CRS) dari lokasi kejadian yang dipulihkan ke sebuah rute target agar kejadian dipindahkan. Nilai 0 atau dihilangkan berarti tanpa batas (selalu dijepret ke rute target terdekat)."
              }
            }
          },
          "transpose_fields": {
            "name": "Transposisi field",
            "description": "Membentuk ulang tabel atribut lebar menjadi format panjang: setiap kolom nilai yang terdaftar menjadi barisnya sendiri, ditandai dengan kolom asalnya (ArcGIS Transpose Fields). pivot_table hanya mengubah panjang-ke-lebar, sehingga tabel yang datang dengan satu kolom per periode tidak dapat dimasukkan ke alat deret waktu yang membutuhkan satu baris per pengamatan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer vektor atau tabel masukan."
              },
              "transpose_fields": {
                "label": "Transposisi field",
                "description": "Kolom nilai yang dipisahkan koma atau titik koma untuk di-unpivot."
              },
              "value_field": {
                "label": "Field nilai",
                "description": "Nama kolom keluaran yang menyimpan nilai sel (default 'VALUE')."
              },
              "transposed_field": {
                "label": "Field transposisi",
                "description": "Nama kolom keluaran yang menyimpan nama kolom sumber (default 'FIELD')."
              },
              "field_labels": {
                "label": "Label field",
                "description": "Label opsional yang ditulis ke dalam 'transposed_field' alih-alih nama kolom mentah, misalnya '2000,2010,2020'. Harus memiliki panjang yang sama dengan 'transpose_fields'."
              },
              "retain_fields": {
                "label": "Pertahankan field",
                "description": "Atribut yang disalin ke setiap baris keluaran. Default-nya semua field yang tidak ditransposisi."
              },
              "drop_nulls": {
                "label": "Buang null",
                "description": "Lewati baris keluaran yang nilainya null (default false)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer keluaran. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "trim_line": {
            "name": "Pangkas garis",
            "description": "Hapus segmen garis menggantung pendek (overshoot dan taji) yang lebih pendek dari toleransi panjang, mempertahankan perpotongan sebenarnya dan garis panjang.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor garis masukan, format terdeteksi otomatis (atau handle dalam memori)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran opsional (driver dari ekstensinya). Jika dihilangkan, disimpan di memori."
              },
              "dangle_length": {
                "label": "Panjang gantung",
                "description": "Toleransi panjang dalam satuan CRS. Segmen menggantung yang lebih pendek dari nilai ini dipangkas; yang lebih panjang dipertahankan. Harus positif."
              },
              "keep_short": {
                "label": "Pertahankan yang pendek",
                "description": "Jika true (default), segmen pendek yang tidak terhubung di kedua ujungnya (terisolasi) dipertahankan; jika false, segmen tersebut juga dihapus. Segmen yang menggantung tepat di satu ujung selalu dipangkas jika pendek."
              },
              "snap_tolerance": {
                "label": "Toleransi jepret",
                "description": "Titik ujung dalam jarak ini (satuan CRS) diperlakukan sebagai node yang sama. Default 1e-6."
              }
            }
          },
          "union_3d": {
            "name": "Gabungan 3D",
            "description": "Menghitung volume gabungan padatan 3D tertutup yang tumpang tindih tanpa menghitung ganda irisannya, ditambah volume tumpang tindih per pasangan (ArcGIS Union 3D). Kedua registri tidak memiliki tumpang susun 3D apa pun, sehingga menjumlahkan kapsul buffer_3d atau hull minimum_bounding_volume saat ini menghitung ganda setiap tumpang tindih; polygon_volume dan surface_volume hanya mengukur terhadap bidang referensi. Volume per padatan eksak (penjumlahan tetrahedron bertanda); gabungan diestimasi dari okupansi voksel pada resolusi yang dilaporkan.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Fitur solid 3D tertutup (MultiPolygon mesh segitiga dengan Z, seperti yang dihasilkan buffer_3d dan minimum_bounding_volume)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel volume per kelompok keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "group_field": {
                "label": "Field pengelompokan",
                "description": "Field opsional; solid digabungkan di dalam setiap nilai kelompok alih-alih di seluruh layer."
              },
              "output_overlap_table": {
                "label": "Keluaran tabel tumpang tindih",
                "description": "Path opsional untuk volume tumpang tindih per pasangan. Jika dihilangkan, disimpan di memori (tetap dikembalikan)."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Jumlah sampel voksel per sumbu yang digunakan untuk mengestimasi volume gabungan, 4 hingga 512 (default 96). Nilai lebih tinggi lebih akurat dan lebih lambat."
              }
            }
          },
          "unwrap_phase": {
            "name": "Unwrap fase",
            "description": "Mengonversi fase interferometrik terbungkus dalam (-pi, pi] menjadi medan absolut kontinu dengan kuadrat terkecil terboboti, diselesaikan dengan gradien konjugat terprakondisi, dengan pembobotan dan masking koherensi opsional (ArcGIS Unwrap Phase). Tidak ada di kedua registri yang membuka fase — raster_calculator tidak dapat mengekspresikan penyelesaian global dan filter speckle bawaan menghaluskan alih-alih membuka — sehingga keluaran fase sar_coherence dan flatten_interferogram saat ini tidak memiliki titik akhir kontinu.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster fase terbungkus dalam radian, atau interferogram I/Q dua band."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster fase kontinu tak terbungkus. Jika dihilangkan, disimpan di memori."
              },
              "method": {
                "label": "Metode",
                "description": "'least_squares_pcg' (default), sesuai metode yang didukung ArcGIS."
              },
              "coherence": {
                "label": "Koherensi",
                "description": "Raster koherensi terkoregistrasi opsional yang digunakan sebagai bobot penyelesaian per sisi, sehingga piksel berkoherensi rendah kurang menarik solusi."
              },
              "coherence_threshold": {
                "label": "Ambang koherensi",
                "description": "Masker piksel yang koherensinya jatuh di bawah nilai ini (default 0.3). Diabaikan jika tidak ada raster koherensi yang diberikan. Pemaskeran yang memecah piksel valid menjadi komponen tak terhubung akan membuat setiap komponen selain komponen piksel referensi memiliki konstanta aditif sembarang sendiri."
              },
              "max_iterations": {
                "label": "Iterasi maksimum",
                "description": "Batas iterasi PCG (default 500)."
              },
              "tolerance": {
                "label": "Toleransi",
                "description": "Residu relatif tempat penyelesaian berhenti (default 1e-8)."
              },
              "reference_row": {
                "label": "Baris referensi",
                "description": "Baris dari piksel yang dipatok ke nol, menetapkan konstanta aditif solusi. Default: piksel valid pertama."
              },
              "reference_col": {
                "label": "Kolom referensi",
                "description": "Kolom dari piksel yang dipatok. Default: piksel valid pertama."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang menyimpan fase. Hilangkan untuk raster fase band tunggal atau interferogram I/Q dua band (yang kemudian terdeteksi otomatis); berikan untuk membaca fase riil dari band tertentu pada tumpukan multiband. Raster dengan lebih dari dua band MEMERLUKAN parameter ini, karena tiga band atau lebih bukan pasangan I/Q dan menebak akan menghasilkan fase yang tampak masuk akal tetapi salah."
              }
            }
          },
          "validate_flow_direction": {
            "name": "Validasi arah aliran",
            "description": "Melaporkan sel yang membuat raster arah aliran tidak dapat digunakan — kode yang bukan arah D8, sel interior tanpa outlet, aliran ke no-data, aliran keluar tepi, dan sel pada jalur aliran sirkular — sebagai layer titik masalah (ArcGIS Validate Flow Direction). Rangkaian hidrologi bawaan memakai raster penunjuk di mana-mana (d8_flow_accumulation, watershed, basins, trace_downslope_flowpaths) tetapi tidak ada yang memvalidasinya, sehingga raster yang rusak karena resampling, reklasifikasi, atau pemotongan menghasilkan jawaban salah yang tampak masuk akal alih-alih galat, dan loop perutean dapat menggantung.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster arah aliran (penunjuk) yang akan diperiksa."
              },
              "output": {
                "label": "Keluaran",
                "description": "Layer titik keluaran, satu titik per sel bermasalah. Jika dihilangkan, disimpan di memori."
              },
              "flow_direction_type": {
                "label": "Jenis arah aliran",
                "description": "'d8' (default) untuk kode pangkat dua tunggal, atau 'mfd' jika sebuah nilai dapat berupa jumlah beberapa arah."
              },
              "report_edge_outflow": {
                "label": "Laporkan aliran keluar tepi",
                "description": "Laporkan sel yang alirannya meninggalkan raster (default false). Normal pada batas sejati, tetapi merupakan cacat nyata pada interior yang terpotong."
              },
              "check_circular": {
                "label": "Periksa sirkular",
                "description": "Deteksi jalur aliran melingkar (default true)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang menyimpan arah (default 1)."
              }
            }
          },
          "vector_convert": {
            "name": "Konversi vektor",
            "description": "Konversi set data vektor ke format lain (ekstensi keluaran menentukan driver).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan (format terdeteksi otomatis) atau handle dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran; driver diambil dari ekstensinya (.geojson, .fgb, .shp, .gpkg, .parquet, ...). Jika dihilangkan, layer disimpan di memori."
              }
            }
          },
          "vector_to_h3": {
            "name": "Vektor ke bin H3",
            "description": "Kelompokkan layer vektor ke dalam sel grid global diskret H3, menghitung fitur per sel.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan (harus bujur/lintang geografis, EPSG:4326) atau handle dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path vektor keluaran; driver diambil dari ekstensinya (.geojson, .fgb, .parquet, ...). Jika dihilangkan, layer disimpan di memori."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Resolusi H3 dari 0 (paling kasar) hingga 15 (paling halus); default 8 (sel ~0,7 km²)."
              }
            }
          },
          "vector_to_pmtiles": {
            "name": "Vektor ke PMTiles",
            "description": "Kemas layer vektor ke dalam satu arsip PMTiles (piramida Mapbox Vector Tile).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan (GeoJSON, Shapefile, GeoPackage, FlatGeobuf, GeoParquet, ...)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file PMTiles keluaran (misalnya /work/roads.pmtiles)."
              },
              "min_zoom": {
                "label": "Zoom minimum",
                "description": "Aras zum minimum (default 0)."
              },
              "max_zoom": {
                "label": "Zoom maksimum",
                "description": "Aras zum maksimum (default 14, maksimum 18)."
              },
              "layer_name": {
                "label": "Nama layer",
                "description": "Nama layer di dalam petak, digunakan saat penataan gaya (default: nama layer masukan)."
              },
              "simplify": {
                "label": "Sederhanakan",
                "description": "Sederhanakan geometri per aras zum (default true)."
              },
              "drop_rate": {
                "label": "Laju pembuangan",
                "description": "Laju pembuangan fitur pada zum rendah, seperti pada tippecanoe (default: tanpa pembuangan)."
              }
            }
          },
          "voxel_isosurface": {
            "name": "Isosurface voxel",
            "description": "Mengekstrak isosurface tertriangulasi pada satu atau lebih nilai ambang dari medan voksel 3D melalui marching tetrahedra (ArcGIS Export Voxel Isosurface). Seluruh rangkaian konturing di kedua registri bersifat 2D — garis dari bidang; ini adalah analog volumetriknya, mengubah keluaran idw_3d atau raster multidimensi menjadi geometri yang dapat dirender. Menghasilkan konvensi mesh segitiga yang digunakan buffer_3d dan minimum_bounding_volume, sehingga hasilnya langsung dapat dimasukkan ke inside_3d.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Medan voksel sebagai raster multiband: band k adalah irisan Z pada z_min + k * z_spacing."
              },
              "values": {
                "label": "Nilai",
                "description": "Nilai ambang: sebuah angka, array JSON berisi angka, atau string yang dipisahkan koma. Satu permukaan per nilai."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path keluaran opsional untuk permukaan mesh segitiga. Jika dihilangkan, disimpan di memori."
              },
              "z_min": {
                "label": "Z minimum",
                "description": "Koordinat Z dari irisan pertama (default 0)."
              },
              "z_spacing": {
                "label": "Jarak antar Z",
                "description": "Jarak vertikal antar irisan (default 1)."
              },
              "close_boundaries": {
                "label": "Tutup batas",
                "description": "Tutup permukaan di tempat ia bertemu tepi volume sehingga hasilnya membatasi solid tertutup (default true). Diimplementasikan dengan menelusuri satu cangkang tambahan di bawah iso, sehingga penutup terlas ke permukaan; penutup itu terletak antara bidang batas dan satu sel di luarnya. Ini hanya menyegel permukaan LUAR: sel yang bersentuhan dengan nodata interior dilewati, sehingga kantong nodata yang memotong permukaan terekstrak tetap menyisakan tepi terbuka (kantong yang seluruhnya berada di dalam atau di luar kontur tidak pernah bertemu mesh)."
              },
              "smooth": {
                "label": "Haluskan",
                "description": "Jumlah iterasi penghalusan Laplacian yang diterapkan pada mesh terekstrak (default 0)."
              }
            }
          },
          "warp_raster": {
            "name": "Warp raster",
            "description": "Georeferensi raster dari titik kontrol tanah (seperti ArcGIS Warp): sesuaikan polinomial orde 1/2/3 dari pasangan GCP piksel sumber → koordinat dunia dan lakukan resampling ke grid bergeoreferensi baru (terdekat/bilinear), melaporkan residu per GCP dan galat RMS. Separuh raster dari cerita konflasi yang sudah dicakup rubbersheet_features untuk vektor.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Raster masukan (grid pikselnya adalah ruang koordinat sumber)."
              },
              "gcps": {
                "label": "GCP",
                "description": "Titik kontrol tanah sebagai kuadrupel 'col,row,x,y' yang dipisahkan ';' (>= 3 untuk orde 1, 6 untuk orde 2, 10 untuk orde 3)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster tergeoreferensi keluaran. Jika dihilangkan, disimpan di memori."
              },
              "transform": {
                "label": "Transformasi",
                "description": "Orde polinomial: 'poly1' (afin; default), 'poly2', atau 'poly3'."
              },
              "resampling": {
                "label": "Resampling",
                "description": "'nearest' (default) atau 'bilinear'."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan dunia (default: lebar masukan yang dipetakan ke ekstensi target)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "Kode EPSG untuk mencantumkan CRS keluaran (opsional)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang di-warp (default 1)."
              }
            }
          },
          "weighted_voronoi": {
            "name": "Voronoi terboboti",
            "description": "Raster alokasi Voronoi terboboti (area pasar/dominasi): tetapkan setiap sel ke lokasi dengan jarak terboboti terkecil — multiplikatif (d/w, Apollonius), aditif (d-w), atau pangkat (d²-w²) — seperti ArcGIS Generate Weighted Voronoi. Versi lokasi tak setara dari voronoi_diagram bawaan yang tak terboboti.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Layer titik lokasi masukan."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster alokasi keluaran (indeks lokasi berbasis 1 per sel). Jika dihilangkan, disimpan di memori."
              },
              "weight_field": {
                "label": "Field bobot",
                "description": "Field numerik yang memberikan bobot/daya tarik setiap lokasi (default: semua lokasi berbobot 1)."
              },
              "weight_type": {
                "label": "Jenis bobot",
                "description": "'multiplicative' (d/w; default), 'additive' (d-w), atau 'power' (d²-w²)."
              },
              "cell_size": {
                "label": "Ukuran sel",
                "description": "Ukuran sel keluaran dalam satuan CRS (default: ekstensi / 400)."
              },
              "margin": {
                "label": "Margin",
                "description": "Fraksi ekstensi lokasi untuk menambah bantalan pada raster (default 0.1)."
              },
              "epsg": {
                "label": "EPSG",
                "description": "EPSG yang dicantumkan pada keluaran (default: dari layer masukan)."
              }
            }
          },
          "write_geoparquet": {
            "name": "Tulis GeoParquet",
            "description": "Konversi set data vektor (GeoJSON, Shapefile, FlatGeobuf, GeoPackage, ...) ke GeoParquet, terurut Hilbert dan terkompresi ZSTD secara default.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file vektor masukan (format terdeteksi otomatis) atau handle dalam memori."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file GeoParquet keluaran (misalnya /work/data.parquet)."
              },
              "compression": {
                "label": "Kompresi",
                "description": "Kompresi kolom: zstd (default), snappy, gzip, atau uncompressed."
              },
              "hilbert_sort": {
                "label": "Pengurutan Hilbert",
                "description": "Urutkan fitur sepanjang kurva Hilbert demi lokalitas spasial (default true)."
              }
            }
          },
          "write_pmtiles": {
            "name": "Raster ke PMTiles",
            "description": "Render raster ke dalam satu arsip PMTiles (piramida petak PNG Web Mercator).",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "Path file raster masukan. Harus membawa CRS sumber (EPSG atau WKT)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path file PMTiles keluaran (misalnya /work/dem.pmtiles)."
              },
              "min_zoom": {
                "label": "Zoom minimum",
                "description": "Level zoom minimum (default: satu level zoom native yang sesuai dengan resolusi raster)."
              },
              "max_zoom": {
                "label": "Zoom maksimum",
                "description": "Level zoom maksimum (default: sama dengan min_zoom)."
              },
              "band": {
                "label": "Band",
                "description": "Band berbasis 1 yang dirender (default 1)."
              },
              "colormap": {
                "label": "Peta warna",
                "description": "Peta warna: viridis (default), magma, turbo, terrain, atau grayscale."
              },
              "method": {
                "label": "Metode",
                "description": "Metode resampling: bilinear (default), nearest, cubic."
              },
              "min": {
                "label": "Min",
                "description": "Nilai yang dipetakan ke ujung bawah peta warna (default: minimum band)."
              },
              "max": {
                "label": "Maks",
                "description": "Nilai yang dipetakan ke ujung atas peta warna (default: maksimum band)."
              }
            }
          },
          "zonal_characterization": {
            "name": "Karakterisasi zonal",
            "description": "Hitung statistik untuk beberapa raster nilai atas satu raster zona dalam satu lintasan, dengan statistik per raster dan persentil sembarang, seperti ArcGIS Zonal Characterization.",
            "params": {
              "zones": {
                "label": "Zona",
                "description": "Raster zona; setiap nilai berbeda mendefinisikan satu zona."
              },
              "rasters": {
                "label": "Raster",
                "description": "Entri 'path:statistic[:name]' yang dipisahkan koma, misalnya 'dem.tif:mean,ndvi.tif:median'. Raster nilai menggunakan band 1. Statistik: mean, sum, min, max, range, stddev, median, majority, minority, variety, count, percentile."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path tabel statistik keluaran opsional. Jika dihilangkan, disimpan di memori."
              },
              "percentile": {
                "label": "Persentil",
                "description": "Persentil (0-100) yang diterapkan pada setiap raster yang statistiknya 'percentile' (default 50)."
              },
              "zone_band": {
                "label": "Band zona",
                "description": "Band berbasis 1 yang dibaca dari raster zona (default 1)."
              },
              "ignore_nodata": {
                "label": "Abaikan nodata",
                "description": "Lewati sel nodata dalam raster nilai (default true). Jika false, nodata apa pun dalam suatu zona membuat statistik zona tersebut null."
              }
            }
          },
          "zonal_fill": {
            "name": "Pengisian zonal",
            "description": "Isi setiap zona raster kategorikal dengan nilai minimum raster bobot yang ditemukan sepanjang batas zona tersebut (seperti ArcGIS Zonal Fill) — blok pembangun permukaan terkendala yang tidak ada dalam rangkaian bawaan (fill berbasis aliran, zonal_statistics hanya meringkas).",
            "params": {
              "zones": {
                "label": "Zona",
                "description": "Raster zona kategorikal (setiap nilai bilangan bulat berbeda adalah satu zona)."
              },
              "weight": {
                "label": "Bobot",
                "description": "Raster bobot terkoregistrasi yang nilai minimum batasnya mengisi setiap zona."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran. Jika dihilangkan, disimpan di memori."
              }
            }
          },
          "zonal_geometry": {
            "name": "Geometri zonal",
            "description": "Ukuran geometrik per zona dari raster zona kategorikal (seperti ArcGIS Zonal Geometry): luas, keliling, ketebalan, centroid, dan sumbu mayor/minor + orientasi elips deviasi standar — padanan bentuk zona yang tidak disediakan zonal_statistics dan zonal_histogram bawaan yang berbasis nilai.",
            "params": {
              "zones": {
                "label": "Zona",
                "description": "Raster zona kategorikal (setiap nilai bilangan bulat berbeda adalah satu zona)."
              },
              "output": {
                "label": "Keluaran",
                "description": "Raster keluaran (mode raster) atau path CSV (mode as_table). Jika dihilangkan, disimpan di memori / hanya dikembalikan dalam hasil."
              },
              "measure": {
                "label": "Ukuran",
                "description": "Ukuran mode raster: 'area' (default), 'perimeter', 'thickness', 'centroid_x', 'centroid_y', 'major_axis', 'minor_axis', atau 'orientation'."
              },
              "as_table": {
                "label": "Sebagai tabel",
                "description": "Jika true, hasilkan satu baris per zona dengan setiap ukuran alih-alih raster per sel (default false)."
              }
            }
          },
          "zonal_histogram": {
            "name": "Histogram zonal",
            "description": "Tabulasi distribusi sel raster nilai di dalam setiap zona: hitungan kelas (kategorikal) atau frekuensi ber-bin (kontinu), sebagai tabel tabulasi silang zona x kelas.",
            "params": {
              "zones": {
                "label": "Zona",
                "description": "Path file raster zona (id zona bilangan bulat/kategorikal)."
              },
              "value": {
                "label": "Nilai",
                "description": "Path file raster nilai; harus berbagi grid dengan 'zones'."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path CSV keluaran: satu baris per zona, satu kolom per kelas/bin."
              },
              "mode": {
                "label": "Mode",
                "description": "'classes' (default) memperlakukan setiap nilai yang dibulatkan sebagai kelasnya sendiri, untuk raster nilai bilangan bulat/kategorikal. 'bins' mengelompokkan nilai kontinu ke dalam bin berlebar sama."
              },
              "bins": {
                "label": "Bin",
                "description": "Jumlah bin berlebar sama untuk mode 'bins'. Default 10."
              },
              "percent": {
                "label": "Persen",
                "description": "Hasilkan persentase setiap kelas terhadap sel valid zona alih-alih jumlah sel mentah. Default false."
              },
              "zone_band": {
                "label": "Band zona",
                "description": "Band berbasis 1 yang dibaca dari 'zones'. Default 1."
              },
              "value_band": {
                "label": "Band nilai",
                "description": "Band berbasis 1 yang dibaca dari 'value'. Default 1."
              },
              "long_output": {
                "label": "Keluaran panjang",
                "description": "Path CSV opsional untuk varian format panjang (zone,class,count,percent)."
              }
            }
          },
          "extract_cog_subset": {
            "name": "Ekstrak subset COG",
            "description": "Ekstrak subset bbox dari Cloud Optimized GeoTIFF lokal atau HTTP.",
            "params": {
              "input": {
                "label": "Masukan",
                "description": "File COG lokal. Berikan input atau url."
              },
              "url": {
                "label": "URL",
                "description": "URL COG HTTP(S). Berikan url atau input; sumber HTTP menggunakan permintaan byte-range."
              },
              "bbox": {
                "label": "Bbox",
                "description": "Kotak pembatas sebagai minX,minY,maxX,maxY dalam bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS bbox",
                "description": "Kode EPSG dari koordinat bbox."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path COG keluaran."
              },
              "level": {
                "label": "Tingkat",
                "description": "Aras ikhtisar COG yang dibaca; 0 adalah resolusi penuh."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran piksel keluaran target. Menggunakan satuan output_crs jika output_crs disetel; jika tidak, satuan bbox_crs. Memilih ikhtisar COG terdekat jika level dihilangkan."
              },
              "output_crs": {
                "label": "CRS keluaran",
                "description": "Kode EPSG keluaran opsional. Jika disetel, subset diproyeksikan ulang ke CRS ini. Untuk CRS sumber yang tidak dapat ditulis sebagai metadata EPSG, default-nya bbox_crs."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Nilai nodata keluaran opsional. Digunakan sebagai pengisi proyeksi ulang dan ditulis sebagai metadata nodata keluaran."
              }
            }
          },
          "extract_wms_subset": {
            "name": "Ekstrak subset WMS",
            "description": "Minta subset bbox dari endpoint GetMap WMS dan tulis sebagai COG Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "URL endpoint WMS."
              },
              "layers": {
                "label": "Layer",
                "description": "Nama layer WMS, dipisahkan koma."
              },
              "styles": {
                "label": "Gaya",
                "description": "Nama gaya WMS, dipisahkan koma. Default-nya kosong."
              },
              "bbox": {
                "label": "Bbox",
                "description": "Kotak pembatas sebagai minX,minY,maxX,maxY dalam bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS bbox",
                "description": "Kode EPSG dari koordinat bbox."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path COG keluaran."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran piksel keluaran target dalam satuan output_crs jika output_crs disetel; jika tidak, satuan bbox_crs."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar permintaan keluaran dalam piksel. Digunakan jika resolution dihilangkan."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi permintaan keluaran dalam piksel. Digunakan jika resolution dihilangkan."
              },
              "output_crs": {
                "label": "CRS keluaran",
                "description": "Kode EPSG keluaran/permintaan opsional. Default-nya bbox_crs."
              },
              "format": {
                "label": "Format",
                "description": "Format citra WMS. Default-nya image/geotiff."
              },
              "version": {
                "label": "Versi",
                "description": "Versi WMS. Default-nya 1.1.1."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Nilai nodata keluaran opsional."
              }
            }
          },
          "extract_xyz_tile_subset": {
            "name": "Ekstrak subset petak XYZ",
            "description": "Ambil petak raster XYZ untuk suatu bbox, mosaikkan, dan tulis sebagai COG RGB Deflate.",
            "params": {
              "url": {
                "label": "URL",
                "description": "Templat URL petak XYZ, misalnya https://.../{z}/{x}/{y}.png."
              },
              "zoom": {
                "label": "Zoom",
                "description": "Aras zum XYZ."
              },
              "bbox": {
                "label": "Bbox",
                "description": "Kotak pembatas sebagai minX,minY,maxX,maxY dalam bbox_crs."
              },
              "bbox_crs": {
                "label": "CRS bbox",
                "description": "Kode EPSG dari koordinat bbox."
              },
              "output": {
                "label": "Keluaran",
                "description": "Path COG keluaran."
              },
              "resolution": {
                "label": "Resolusi",
                "description": "Ukuran piksel keluaran target dalam satuan output_crs. Default-nya resolusi petak asli."
              },
              "width": {
                "label": "Lebar",
                "description": "Lebar keluaran dalam piksel. Digunakan jika resolution dihilangkan."
              },
              "height": {
                "label": "Tinggi",
                "description": "Tinggi keluaran dalam piksel. Digunakan jika resolution dihilangkan."
              },
              "output_crs": {
                "label": "CRS keluaran",
                "description": "Kode EPSG keluaran opsional. Default-nya bbox_crs."
              },
              "tile_size": {
                "label": "Ukuran petak",
                "description": "Ukuran petak dalam piksel. Default-nya 256."
              },
              "subdomains": {
                "label": "Subdomain",
                "description": "Huruf subdomain opsional untuk {s}, misalnya abc."
              },
              "nodata": {
                "label": "Nodata",
                "description": "Nilai nodata keluaran opsional yang digunakan untuk piksel hilang/transparan."
              }
            }
          }
        }
      },
      "whitebox": {
        "categories": {
          "conversion": "Konversi",
          "conversionGeometryTopology": "Konversi - Geometri dan topologi",
          "conversionRasterVectorConversion": "Konversi - Konversi raster/vektor",
          "conversionVectorTableIO": "Konversi - I/O vektor dan tabel",
          "hydrology": "Hidrologi",
          "hydrologyDepressionsStorage": "Hidrologi - Cekungan dan tampungan",
          "hydrologyFlowRouting": "Hidrologi - Perutean aliran",
          "hydrologyHydrologicIndices": "Hidrologi - Indeks hidrologi",
          "hydrologyStreamsLongitudinalAnalysis": "Hidrologi - Sungai - Analisis memanjang",
          "hydrologyStreamsNetworkExtraction": "Hidrologi - Sungai - Ekstraksi jaringan",
          "hydrologyStreamsOrderingMetrics": "Hidrologi - Sungai - Metrik orde",
          "hydrologyWatershedsBasins": "Hidrologi - Daerah aliran sungai",
          "lidarAnalysisMetrics": "LiDAR - Metrik analisis",
          "lidarFilteringClassification": "LiDAR - Penyaringan dan klasifikasi",
          "lidarIOManagement": "LiDAR - I/O dan pengelolaan",
          "lidarInterpolationGridding": "LiDAR - Interpolasi dan pembuatan grid",
          "projectionAndGeoreferencing": "Proyeksi dan georeferensi",
          "raster": "Raster",
          "rasterDistanceCost": "Raster - Jarak dan biaya",
          "rasterLocalNeighborhood": "Raster - Ketetanggaan lokal",
          "rasterOverlayMath": "Raster - Matematika tumpang susun",
          "rasterReclassifyMask": "Raster - Reklasifikasi dan masking",
          "rasterSpatialStatistics": "Raster - Statistik spasial",
          "remoteSensingChangeDetection": "Penginderaan jauh - Deteksi perubahan",
          "remoteSensingClassification": "Penginderaan jauh - Klasifikasi",
          "remoteSensingEdgeFeatureDetection": "Penginderaan jauh - Deteksi tepi dan fitur",
          "remoteSensingEnhancementContrast": "Penginderaan jauh - Peningkatan dan kontras",
          "remoteSensingFilters": "Penginderaan jauh - Filter",
          "remoteSensingObia": "Penginderaan jauh - OBIA",
          "remoteSensingRadiometricCorrection": "Penginderaan jauh - Koreksi radiometrik",
          "remoteSensingSar": "Penginderaan jauh - SAR",
          "remoteSensingSpectralAnalytics": "Penginderaan jauh - Analitik spektral",
          "remoteSensingThermalEmissivity": "Penginderaan jauh - Termal dan emisivitas",
          "terrain": "Medan",
          "terrainDerivatives": "Medan - Turunan",
          "terrainLandformIndices": "Medan - Indeks bentuk lahan",
          "terrainMultiscaleSignatures": "Medan - Tanda multiskala",
          "terrainRoughnessTexture": "Medan - Kekasaran dan tekstur",
          "terrainVisibility": "Medan - Visibilitas",
          "terrainWorkflowProducts": "Medan - Produk alur kerja",
          "vector": "Vektor",
          "vectorAttributeAnalysis": "Vektor - Analisis atribut",
          "vectorGeometryProcessing": "Vektor - Pemrosesan geometri",
          "vectorLinearReferencing": "Vektor - Referensi linear",
          "vectorNetworkAnalysis": "Vektor - Analisis jaringan",
          "vectorOnlineData": "Vektor - Data daring",
          "vectorOverlayAnalysis": "Vektor - Analisis tumpang susun",
          "vectorSamplingGridding": "Vektor - Pengambilan sampel dan pembuatan grid",
          "vectorShapeMetrics": "Vektor - Metrik bentuk",
          "vectorSpatialStatistics": "Vektor - Statistik spasial"
        },
        "menuTool": {
          "calculate_transit_service_frequency": "Hitung frekuensi layanan transit",
          "excel_to_table": "Excel ke tabel",
          "extract_scanned_features": "Ekstrak fitur hasil pindai",
          "features_to_gpx": "Fitur ke GPX",
          "features_to_gtfs": "Fitur ke GTFS",
          "gpx_to_features": "GPX ke fitur",
          "gtfs_to_features": "GTFS ke fitur",
          "h3_to_vector": "Sel H3 ke poligon",
          "h3_polyfill": "Polyfill H3",
          "kml_to_features": "KML ke fitur",
          "pmtiles_extract": "Ekstrak PMTiles",
          "raster_to_h3": "Raster ke bin H3",
          "write_pmtiles": "Raster ke PMTiles",
          "raster_to_tiles": "Raster ke petak XYZ",
          "read_geoparquet": "Baca GeoParquet",
          "vector_convert": "Konversi vektor",
          "vector_to_h3": "Vektor ke bin H3",
          "vector_to_pmtiles": "Vektor ke PMTiles",
          "write_geoparquet": "Tulis GeoParquet",
          "fix_dangling_arcs": "Perbaiki arc menggantung",
          "lines_to_polygons": "Garis ke poligon",
          "multipart_to_singlepart": "Multibagian ke bagian tunggal",
          "polygons_to_lines": "Poligon ke garis",
          "remove_polygon_holes": "Hapus lubang poligon",
          "singlepart_to_multipart": "Bagian tunggal ke multibagian",
          "topology_rule_autofix": "Perbaikan otomatis aturan topologi",
          "topology_rule_validate": "Validasi aturan topologi",
          "topology_validation_report": "Laporan validasi topologi",
          "convert_nodata_to_zero": "Konversi nodata ke nol",
          "modify_nodata_value": "Ubah nilai nodata",
          "new_raster_from_base_raster": "Raster baru dari basis raster",
          "new_raster_from_base_vector": "Raster baru dari basis vektor",
          "raster_to_vector_lines": "Raster ke garis vektor",
          "raster_to_vector_points": "Raster ke titik vektor",
          "raster_to_vector_polygons": "Raster ke poligon vektor",
          "remove_raster_polygon_holes": "Hapus lubang poligon raster",
          "set_nodata_value": "Tetapkan nilai nodata",
          "vector_lines_to_raster": "Garis vektor ke raster",
          "vector_points_to_raster": "Titik vektor ke raster",
          "vector_polygons_to_raster": "Poligon vektor ke raster",
          "add_point_coordinates_to_table": "Tambah koordinat titik ke tabel",
          "clean_vector": "Bersihkan vektor",
          "csv_points_to_vector": "Titik CSV ke vektor",
          "export_table_to_csv": "Ekspor tabel ke CSV",
          "join_tables": "Gabungkan tabel",
          "merge_table_with_csv": "Gabungkan tabel dengan CSV",
          "merge_vectors": "Gabungkan vektor",
          "reinitialize_attribute_table": "Inisialisasi ulang tabel atribut",
          "vector_summary_statistics": "Statistik ringkasan vektor",
          "delineate_depressions": "Delineasi cekungan",
          "delineate_mounts": "Delineasi gundukan",
          "enforce_river_monotonicity": "Terapkan monotonisitas sungai",
          "extract_sinks": "Ekstrak sink",
          "fill_spill_merge": "Fill-Spill-Merge",
          "topo_to_raster": "Topo ke raster",
          "breach_depressions_least_cost": "Bobol cekungan biaya terkecil",
          "breach_single_cell_pits": "Bobol lubang sel tunggal",
          "burn_streams": "Bakar sungai",
          "burn_streams_at_roads": "Bakar sungai di jalan",
          "depth_in_sink": "Kedalaman dalam sink",
          "fill_burn": "Isi dan bakar",
          "fill_depressions": "Isi cekungan",
          "fill_depressions_planchon_and_darboux": "Isi cekungan Planchon dan Darboux",
          "fill_depressions_wang_and_liu": "Isi cekungan Wang dan Liu",
          "fill_pits": "Isi lubang",
          "flatten_lakes": "Ratakan danau",
          "impoundment_size_index": "Indeks ukuran tampungan",
          "insert_dams": "Sisipkan bendungan",
          "raise_walls": "Naikkan dinding",
          "sink": "Sel sink",
          "stochastic_depression_analysis": "Analisis cekungan stokastik",
          "topological_breach_burn": "Bobol-bakar topologis",
          "upslope_depression_storage": "Tampungan cekungan hulu",
          "average_flowpath_slope": "Kemiringan jalur aliran rata-rata",
          "average_upslope_flowpath_length": "Panjang jalur aliran hulu rata-rata",
          "d8_flow_accum": "Akumulasi aliran D8",
          "d8_mass_flux": "Fluks massa D8",
          "d8_pointer": "Penunjuk D8",
          "dinf_flow_accum": "Akumulasi aliran Dinf",
          "dinf_mass_flux": "Fluks massa Dinf",
          "dinf_pointer": "Penunjuk Dinf",
          "downslope_flowpath_length": "Panjang jalur aliran hilir",
          "fd8_flow_accum": "Akumulasi aliran FD8",
          "fd8_pointer": "Penunjuk FD8",
          "flow_accum_full_workflow": "Alur kerja lengkap akumulasi aliran",
          "flow_length_diff": "Selisih panjang aliran",
          "max_upslope_flowpath_length": "Panjang jalur aliran hulu maksimum",
          "max_upslope_value": "Nilai hulu maksimum",
          "mdinf_flow_accum": "Akumulasi aliran MDinf",
          "minimal_dispersion_flow_algorithm": "Algoritma aliran dispersi minimal",
          "num_inflowing_neighbours": "Jumlah tetangga masuk",
          "qin_flow_accumulation": "Akumulasi aliran Qin",
          "quinn_flow_accumulation": "Akumulasi aliran Quinn",
          "rho8_flow_accum": "Akumulasi aliran Rho8",
          "rho8_pointer": "Penunjuk Rho8",
          "trace_downslope_flowpaths": "Telusuri jalur aliran hilir",
          "depth_to_water": "Kedalaman ke air",
          "distance_to_outlet": "Jarak ke outlet",
          "downslope_distance_to_stream": "Jarak hilir ke sungai",
          "downslope_index": "Indeks hilir",
          "edge_contamination": "Kontaminasi tepi",
          "elev_relative_to_watershed_min_max": "Elevasi relatif terhadap min-maks DAS",
          "elevation_above_stream": "Elevasi di atas sungai",
          "elevation_above_stream_euclidean": "Elevasi di atas sungai Euclidean",
          "find_noflow_cells": "Temukan sel tanpa aliran",
          "find_parallel_flow": "Temukan aliran paralel",
          "hydrologic_connectivity": "Konektivitas hidrologi",
          "relative_stream_power_index": "Indeks daya aliran relatif",
          "sediment_transport_index": "Indeks transpor sedimen",
          "wetness_index": "Indeks kebasahan",
          "farthest_channel_head": "Hulu saluran terjauh",
          "find_main_stem": "Temukan batang utama",
          "length_of_upstream_channels": "Panjang saluran hulu",
          "long_profile": "Profil memanjang",
          "long_profile_from_points": "Profil memanjang dari titik",
          "extract_streams": "Ekstrak sungai",
          "extract_valleys": "Ekstrak lembah",
          "prune_vector_streams": "Pangkas sungai vektor",
          "raster_streams_to_vector": "Sungai raster ke vektor",
          "rasterize_streams": "Rasterisasi sungai",
          "remove_short_streams": "Hapus sungai pendek",
          "repair_stream_vector_topology": "Perbaiki topologi vektor sungai",
          "river_centerlines": "Garis tengah sungai",
          "hack_stream_order": "Orde sungai Hack",
          "horton_ratios": "Rasio Horton",
          "horton_stream_order": "Orde sungai Horton",
          "shreve_stream_magnitude": "Magnitudo sungai Shreve",
          "strahler_order_basins": "Basin orde Strahler",
          "strahler_stream_order": "Orde sungai Strahler",
          "stream_link_class": "Kelas tautan sungai",
          "stream_link_identifier": "Pengenal tautan sungai",
          "stream_link_length": "Panjang tautan sungai",
          "stream_link_slope": "Kemiringan tautan sungai",
          "stream_slope_continuous": "Kemiringan sungai kontinu",
          "topological_stream_order": "Orde sungai topologis",
          "tributary_identifier": "Pengenal anak sungai",
          "vector_stream_network_analysis": "Analisis jaringan sungai vektor",
          "basins": "Basin",
          "flood_order": "Urutan banjir",
          "hillslopes": "Lereng bukit",
          "isobasins": "Isobasin",
          "jenson_snap_pour_points": "Jepret titik curah Jenson",
          "longest_flowpath": "Jalur aliran terpanjang",
          "max_branch_length": "Panjang cabang maksimum",
          "snap_pour_points": "Jepret titik curah",
          "subbasins": "Subbasin",
          "unnest_basins": "Uraikan basin bersarang",
          "watershed": "Daerah aliran sungai",
          "watershed_from_raster_pour_points": "DAS dari titik curah raster",
          "assign_projection_lidar": "Tetapkan proyeksi LiDAR",
          "colourize_based_on_class": "Pewarnaan berdasarkan kelas",
          "colourize_based_on_point_returns": "Pewarnaan berdasarkan pantulan titik",
          "find_flightline_edge_points": "Temukan titik tepi jalur terbang",
          "individual_tree_detection": "Deteksi pohon individu",
          "lidar_eigenvalue_features": "Fitur nilai eigen LiDAR",
          "lidar_histogram": "Histogram LiDAR",
          "lidar_info": "Info LiDAR",
          "lidar_kappa": "Kappa LiDAR",
          "lidar_point_density": "Kerapatan titik LiDAR",
          "lidar_point_return_analysis": "Analisis pantulan titik LiDAR",
          "lidar_point_stats": "Statistik titik LiDAR",
          "lidar_ransac_planes": "Bidang RANSAC LiDAR",
          "lidar_rooftop_analysis": "Analisis atap LiDAR",
          "normal_vectors": "Vektor normal",
          "classify_buildings_in_lidar": "Klasifikasi bangunan pada LiDAR",
          "classify_lidar": "Klasifikasi LiDAR",
          "classify_overlap_points": "Klasifikasi titik tumpang tindih",
          "clip_lidar_to_polygon": "Potong LiDAR ke poligon",
          "erase_polygon_from_lidar": "Hapus poligon dari LiDAR",
          "filter_lidar": "Filter LiDAR",
          "filter_lidar_by_percentile": "Filter LiDAR berdasarkan persentil",
          "filter_lidar_by_reference_surface": "Filter LiDAR berdasarkan permukaan acuan",
          "filter_lidar_classes": "Filter kelas LiDAR",
          "filter_lidar_noise": "Filter derau LiDAR",
          "filter_lidar_scan_angles": "Filter sudut pindai LiDAR",
          "height_above_ground": "Tinggi di atas tanah",
          "improved_ground_point_filter": "Filter titik tanah yang ditingkatkan",
          "individual_tree_segmentation": "Segmentasi pohon individu",
          "lidar_classify_subset": "Klasifikasi subset LiDAR",
          "lidar_elevation_slice": "Irisan elevasi LiDAR",
          "lidar_remove_outliers": "Hapus pencilan LiDAR",
          "lidar_segmentation": "Segmentasi LiDAR",
          "lidar_segmentation_based_filter": "Filter berbasis segmentasi LiDAR",
          "modify_lidar": "Modifikasi LiDAR",
          "normalize_lidar": "Normalisasi LiDAR",
          "remove_duplicates": "Hapus duplikat",
          "ascii_to_las": "ASCII ke LAS",
          "las_to_ascii": "LAS ke ASCII",
          "las_to_shapefile": "LAS ke Shapefile",
          "lidar_colourize": "Pewarnaan LiDAR",
          "lidar_join": "Gabungkan LiDAR",
          "lidar_shift": "Geser LiDAR",
          "lidar_tile": "Petak LiDAR",
          "lidar_tophat_transform": "Transformasi top-hat LiDAR",
          "recover_flightline_info": "Pulihkan info jalur terbang",
          "select_tiles_by_polygon": "Pilih petak berdasarkan poligon",
          "sort_lidar": "Urutkan LiDAR",
          "split_lidar": "Pisahkan LiDAR",
          "flightline_overlap": "Tumpang tindih jalur terbang",
          "lidar_block_maximum": "Maksimum blok LiDAR",
          "lidar_block_minimum": "Minimum blok LiDAR",
          "lidar_construct_vector_tin": "Bangun TIN vektor LiDAR",
          "lidar_contour": "Kontur LiDAR",
          "lidar_digital_surface_model": "Model permukaan digital LiDAR",
          "lidar_hex_bin": "Bin heksagonal LiDAR",
          "lidar_hillshade": "Bayangan bukit LiDAR",
          "lidar_idw_interpolation": "Interpolasi IDW LiDAR",
          "lidar_nearest_neighbour_gridding": "Gridding tetangga terdekat LiDAR",
          "lidar_radial_basis_function_interpolation": "Interpolasi fungsi basis radial LiDAR",
          "lidar_sibson_interpolation": "Interpolasi Sibson LiDAR",
          "lidar_thin": "Penjarangan LiDAR",
          "lidar_thin_high_density": "Penjarangan LiDAR kerapatan tinggi",
          "lidar_tile_footprint": "Jejak petak LiDAR",
          "lidar_tin_gridding": "Gridding TIN LiDAR",
          "build_network_topology": "Bangun topologi jaringan",
          "closest_facility_network": "Fasilitas terdekat jaringan",
          "generate_network_nodes": "Buat node jaringan",
          "k_shortest_paths_network": "K jalur terpendek jaringan",
          "location_allocation_network": "Alokasi lokasi jaringan",
          "map_matching_v1": "Map matching V1",
          "multimodal_od_cost_matrix": "Matriks biaya OD multimoda",
          "multimodal_routes_from_od": "Rute multimoda dari OD",
          "multimodal_shortest_path": "Jalur terpendek multimoda",
          "network_accessibility_metrics": "Metrik aksesibilitas jaringan",
          "network_centrality_metrics": "Metrik sentralitas jaringan",
          "network_connected_components": "Komponen terhubung jaringan",
          "network_node_degree": "Derajat node jaringan",
          "network_od_cost_matrix": "Matriks biaya OD jaringan",
          "network_routes_from_od": "Rute jaringan dari OD",
          "network_service_area": "Area layanan jaringan",
          "network_topology_audit": "Audit topologi jaringan",
          "od_sensitivity_analysis": "Analisis sensitivitas OD",
          "shortest_path_network": "Jalur terpendek jaringan",
          "snap_points_to_network": "Jepret titik ke jaringan",
          "split_lines_at_intersections": "Pisahkan garis di persimpangan",
          "transfer_attributes": "Transfer atribut",
          "travelling_salesman_problem": "Travelling salesman problem",
          "vehicle_routing_cvrp": "Perutean kendaraan CVRP",
          "vehicle_routing_pickup_delivery": "Perutean kendaraan jemput-antar",
          "vehicle_routing_vrptw": "Perutean kendaraan VRPTW",
          "georeference_raster_from_control_points": "Georeferensi raster dari titik kontrol",
          "orthorectification": "Ortorektifikasi",
          "reproject_lidar": "Reproyeksi LiDAR",
          "reproject_vector": "Reproyeksi vektor",
          "aggregate_multidimensional_raster": "Agregasi raster multidimensi",
          "analyze_changes_ccdc": "Analisis perubahan dengan CCDC",
          "apply_radiometric_calibration": "Terapkan kalibrasi radiometrik",
          "assign_projection_raster": "Tetapkan proyeksi raster",
          "band_collection_statistics": "Statistik koleksi band",
          "block_statistics": "Statistik blok",
          "boundary_clean": "Pembersihan batas",
          "cell_position_statistics": "Statistik posisi sel",
          "cell_statistics": "Statistik sel",
          "classification_accuracy_assessment": "Penilaian akurasi klasifikasi",
          "combine": "Gabungkan",
          "composite_bands": "Komposit band",
          "compute_sar_indices": "Hitung indeks SAR",
          "contour_with_barriers": "Kontur dengan penghalang",
          "convert_sar_units": "Konversi satuan SAR",
          "coregister_rasters": "Koregistrasi raster",
          "corridor": "Koridor",
          "cost_back_link": "Tautan balik biaya",
          "cut_fill": "Galian dan timbunan",
          "darcy_flow": "Aliran Darcy",
          "dem_filter": "Filter DEM",
          "detect_image_anomalies": "Deteksi anomali citra",
          "diffusion_interpolation_with_barriers": "Interpolasi difusi dengan penghalang",
          "dimensional_moving_statistics": "Statistik bergerak dimensional",
          "empirical_bayesian_kriging": "Kriging Bayesian empiris",
          "euclidean_direction": "Arah Euclidean",
          "expand_shrink": "Perluas / Susutkan",
          "extract_cog_subset": "Ekstrak subset COG",
          "extract_ocean_winds": "Ekstrak angin laut",
          "extract_spectra_from_image": "Ekstrak spektrum dari citra",
          "extract_wms_subset": "Ekstrak subset WMS",
          "extract_xyz_tile_subset": "Ekstrak subset petak XYZ",
          "find_argument_statistics": "Temukan statistik argumen",
          "flatten_interferogram": "Ratakan interferogram",
          "focal_flow": "Aliran fokal",
          "focal_statistics": "Statistik fokal",
          "frequency_comparison": "Perbandingan frekuensi",
          "fuzzy_overlay": "Tumpang susun fuzzy",
          "gaussian_geostatistical_simulations": "Simulasi geostatistik Gaussian",
          "multidimensional_anomaly": "Buat anomali multidimensi",
          "generate_trend_raster": "Buat raster tren",
          "goldstein_phase_filter": "Filter fase Goldstein",
          "idw_3d": "IDW 3D",
          "interpolate_from_spatiotemporal_points": "Interpolasi dari titik spasiotemporal",
          "interpolate_with_barriers": "Interpolasi dengan penghalang",
          "kernel_density_ratio": "Rasio kerapatan kernel",
          "kernel_interpolation_with_barriers": "Interpolasi kernel dengan penghalang",
          "landtrendr": "LandTrendr",
          "las_height_metrics": "Metrik ketinggian LAS",
          "line_density": "Kerapatan garis",
          "line_statistics": "Statistik garis",
          "local_polynomial_interpolation": "Interpolasi polinomial lokal",
          "locate_regions": "Tentukan lokasi wilayah",
          "matched_filter_target_detection": "Deteksi target matched filter (CEM/ACE)",
          "maximum_likelihood_classification": "Klasifikasi maximum likelihood",
          "merge_multidimensional_rasters": "Gabungkan raster multidimensi",
          "multicriteria_overlay": "Tumpang susun multikriteria",
          "multidimensional_principal_components": "Komponen utama multidimensi",
          "multidimensional_raster_correlation": "Korelasi raster multidimensi",
          "multilook": "Multilook",
          "multitemporal_coherence": "Koherensi multitemporal",
          "observer_points": "Titik pengamat",
          "optimal_interpolation": "Interpolasi optimal",
          "path_distance": "Jarak jalur",
          "percentile_contours": "Kontur persentil",
          "point_statistics": "Statistik titik",
          "porous_puff": "Porous puff",
          "predict_using_trend_raster": "Prediksi dengan raster tren",
          "presence_only_prediction": "Prediksi presence-only",
          "pycnophylactic_interpolation": "Interpolasi piknofilaktik",
          "radiometric_terrain_flattening": "Perataan medan radiometrik",
          "raster_normalize": "Normalisasi raster",
          "regression_kriging": "Kriging regresi",
          "remove_thermal_noise": "Hapus derau termal",
          "render_raster_png": "Render raster ke PNG",
          "reproject_raster": "Reproyeksi raster",
          "rescale_by_function": "Skala ulang dengan fungsi",
          "sar_coherence": "Koherensi SAR",
          "slice_raster": "Iris raster",
          "solar_radiation": "Radiasi matahari",
          "space_time_kernel_density": "Kerapatan kernel ruang-waktu",
          "spatial_association_between_zones": "Asosiasi spasial antarzona",
          "spectral_index": "Indeks spektral",
          "split_raster": "Pisahkan raster",
          "storage_capacity": "Kapasitas tampungan",
          "subset_multidimensional_raster": "Subset raster multidimensi",
          "summarize_categorical_raster": "Ringkas raster kategorikal",
          "surface_parameters": "Parameter permukaan",
          "surface_volume": "Volume permukaan",
          "time_series_cross_correlation": "Korelasi silang deret waktu",
          "unwrap_phase": "Unwrap fase",
          "warp_raster": "Warp raster",
          "weighted_voronoi": "Voronoi terboboti",
          "zonal_characterization": "Karakterisasi zonal",
          "zonal_fill": "Pengisian zonal",
          "zonal_geometry": "Geometri zonal",
          "zonal_histogram": "Histogram zonal",
          "abs": "Abs",
          "aggregate_raster": "Agregasi raster",
          "anova": "ANOVA",
          "arccos": "Arccos",
          "arcosh": "Arcosh",
          "arcsin": "Arcsin",
          "arctan": "Arctan",
          "arsinh": "Arsinh",
          "artanh": "Artanh",
          "atan2": "Atan2",
          "block_maximum": "Maksimum blok",
          "block_minimum": "Minimum blok",
          "boundary_shape_complexity": "Kompleksitas bentuk batas",
          "ceil": "Ceil",
          "centroid_raster": "Centroid raster",
          "clip_raster_to_polygon": "Potong raster ke poligon",
          "clump": "Pengelompokan (clump)",
          "cos": "Cos",
          "cosh": "Cosh",
          "create_plane": "Buat bidang",
          "crispness_index": "Indeks ketajaman",
          "cross_tabulation": "Tabulasi silang",
          "cumulative_distribution": "Distribusi kumulatif",
          "dbscan": "DBSCAN",
          "decrement": "Dekremen",
          "edge_proportion": "Proporsi tepi",
          "equal_to": "Sama dengan",
          "erase_polygon_from_raster": "Hapus poligon dari raster",
          "exp": "Exp",
          "exp2": "Exp2",
          "fft_random_field": "Medan acak FFT",
          "filter_raster_features_by_area": "Filter fitur raster berdasarkan luas",
          "find_patch_edge_cells": "Temukan sel tepi patch",
          "floor": "Floor",
          "greater_than": "Lebih besar dari",
          "greater_than_or_equal_to": "Lebih besar atau sama dengan",
          "heat_map": "Peta panas",
          "idw_interpolation": "Interpolasi IDW",
          "image_autocorrelation": "Autokorelasi citra",
          "image_correlation": "Korelasi citra",
          "image_regression": "Regresi citra",
          "increment": "Inkremen",
          "inplace_add": "Tambah di tempat",
          "inplace_divide": "Bagi di tempat",
          "inplace_multiply": "Kali di tempat",
          "inplace_subtract": "Kurang di tempat",
          "integer_division": "Pembagian bilangan bulat",
          "inverse_pca": "PCA invers",
          "is_nodata": "Adalah nodata",
          "kappa_index": "Indeks kappa",
          "ks_normality_test": "Uji normalitas KS",
          "less_than": "Lebih kecil dari",
          "less_than_or_equal_to": "Lebih kecil atau sama dengan",
          "list_unique_values_raster": "Daftar nilai unik raster",
          "ln": "Ln",
          "log10": "Log10",
          "log2": "Log2",
          "map_features": "Petakan fitur",
          "max": "Maks",
          "min": "Min",
          "modified_shepard_interpolation": "Interpolasi Shepard termodifikasi",
          "narrowness_index": "Indeks kesempitan",
          "negate": "Negasi",
          "nibble": "Nibble (isi dari tetangga)",
          "not_equal_to": "Tidak sama dengan",
          "ordinary_cokriging": "Interpolasi co-kriging biasa",
          "paired_sample_t_test": "Uji t sampel berpasangan",
          "phi_coefficient": "Koefisien phi",
          "principal_component_analysis": "Analisis komponen utama",
          "print_geotiff_tags": "Cetak tag GeoTIFF",
          "quantiles": "Kuantil",
          "radial_basis_function_interpolation": "Interpolasi fungsi basis radial",
          "radius_of_gyration": "Radius girasi",
          "random_field": "Medan acak",
          "random_forest_classification_fit": "Fit klasifikasi random forest",
          "random_forest_classification_predict": "Prediksi klasifikasi random forest",
          "random_forest_regression_fit": "Fit regresi random forest",
          "random_forest_regression_predict": "Prediksi regresi random forest",
          "random_sample": "Sampel acak",
          "raster_area": "Luas raster",
          "raster_calculator": "Kalkulator raster",
          "raster_cell_assignment": "Penetapan sel raster",
          "raster_histogram": "Histogram raster",
          "raster_perimeter": "Keliling raster",
          "raster_summary_stats": "Statistik ringkasan raster",
          "reciprocal": "Resiprokal",
          "rescale_value_range": "Skala ulang rentang nilai",
          "root_mean_square_error": "Akar rata-rata kuadrat galat",
          "round": "Pembulatan",
          "shape_complexity_index_raster": "Indeks kompleksitas bentuk raster",
          "sieve": "Saring (sieve)",
          "sin": "Sin",
          "sinh": "Sinh",
          "sqrt": "Sqrt",
          "square": "Kuadrat",
          "tan": "Tan",
          "tanh": "Tanh",
          "tin_interpolation": "Interpolasi TIN",
          "to_degrees": "Ke derajat",
          "to_radians": "Ke radian",
          "trend_surface": "Permukaan tren",
          "trend_surface_vector_points": "Permukaan tren titik vektor",
          "truncate": "Pemangkasan",
          "turning_bands_simulation": "Simulasi turning bands",
          "two_sample_ks_test": "Uji KS dua sampel",
          "wilcoxon_signed_rank_test": "Uji peringkat bertanda Wilcoxon",
          "z_scores": "Skor Z",
          "zonal_statistics": "Statistik zonal",
          "buffer_raster": "Buffer raster",
          "cost_allocation": "Alokasi biaya",
          "cost_distance": "Jarak biaya",
          "cost_pathway": "Jalur biaya",
          "euclidean_allocation": "Alokasi Euclidean",
          "euclidean_distance": "Jarak Euclidean",
          "image_correlation_neighbourhood_analysis": "Analisis ketetanggaan korelasi citra",
          "natural_neighbour_interpolation": "Interpolasi natural neighbour",
          "nearest_neighbour_interpolation": "Interpolasi tetangga terdekat",
          "add": "Tambah",
          "average_overlay": "Tumpang susun rata-rata",
          "bool_and": "Boolean AND",
          "bool_not": "Boolean NOT",
          "bool_or": "Boolean OR",
          "bool_xor": "Boolean XOR",
          "count_if": "Hitung jika",
          "divide": "Bagi",
          "highest_position": "Posisi tertinggi",
          "lowest_position": "Posisi terendah",
          "max_absolute_overlay": "Tumpang susun absolut maksimum",
          "max_overlay": "Tumpang susun maksimum",
          "min_absolute_overlay": "Tumpang susun absolut minimum",
          "min_overlay": "Tumpang susun minimum",
          "modulo": "Modulo",
          "multiply": "Kali",
          "multiply_overlay": "Tumpang susun perkalian",
          "percent_equal_to": "Persentase sama dengan",
          "percent_greater_than": "Persentase lebih besar dari",
          "percent_less_than": "Persentase lebih kecil dari",
          "pick_from_list": "Pilih dari daftar",
          "power": "Pangkat",
          "standard_deviation_overlay": "Tumpang susun simpangan baku",
          "subtract": "Kurang",
          "sum_overlay": "Tumpang susun jumlah",
          "update_nodata_cells": "Perbarui sel nodata",
          "weighted_overlay": "Tumpang susun terboboti",
          "weighted_sum": "Jumlah terboboti",
          "conditional_evaluation": "Evaluasi bersyarat",
          "reclass": "Reklasifikasi",
          "reclass_equal_interval": "Reklasifikasi interval sama",
          "geographically_weighted_regression_raster": "Regresi terboboti geografis raster",
          "getis_ord_gi_star_raster": "Getis-Ord Gi* raster",
          "inhomogeneous_intensity_raster": "Intensitas inhomogen raster",
          "local_kriging": "Kriging lokal",
          "local_morans_i_lisa_raster": "Moran's I lokal (LISA) raster",
          "ordinary_kriging": "Kriging biasa",
          "simple_kriging": "Kriging sederhana",
          "spacetime_kriging": "Kriging ruang-waktu",
          "spatial_error_regression_raster": "Regresi spatial error raster",
          "spatial_lag_regression_raster": "Regresi spatial lag raster",
          "universal_kriging": "Kriging universal",
          "change_vector_analysis": "Analisis vektor perubahan",
          "image_difference_change_detection": "Deteksi perubahan selisih citra",
          "pca_based_change_detection": "Deteksi perubahan berbasis PCA",
          "post_classification_change": "Perubahan pasca-klasifikasi",
          "write_function_memory_insertion": "Penyisipan memori fungsi tulis",
          "evaluate_training_sites": "Evaluasi lokasi pelatihan",
          "fuzzy_knn_classification": "Klasifikasi fuzzy KNN",
          "generalize_classified_raster": "Generalisasi raster terklasifikasi",
          "generalize_with_similarity": "Generalisasi dengan kemiripan",
          "k_means_clustering": "Klasterisasi K-means",
          "knn_classification": "Klasifikasi KNN",
          "knn_regression": "Regresi KNN",
          "logistic_regression": "Regresi logistik",
          "min_dist_classification": "Klasifikasi jarak minimum",
          "modified_k_means_clustering": "Klasterisasi K-means termodifikasi",
          "nnd_classification": "Klasifikasi NND",
          "otsu_thresholding": "Ambang batas Otsu",
          "parallelepiped_classification": "Klasifikasi parallelepiped",
          "random_forest_classification": "Klasifikasi random forest",
          "random_forest_regression": "Regresi random forest",
          "svm_classification": "Klasifikasi SVM",
          "svm_regression": "Regresi SVM",
          "canny_edge_detection": "Deteksi tepi Canny",
          "corner_detection": "Deteksi sudut",
          "laplacian_filter": "Filter Laplacian",
          "laplacian_of_gaussians_filter": "Filter Laplacian of Gaussians",
          "prewitt_filter": "Filter Prewitt",
          "roberts_cross_filter": "Filter Roberts cross",
          "sobel_filter": "Filter Sobel",
          "balance_contrast_enhancement": "Peningkatan kontras seimbang",
          "create_colour_composite": "Buat komposit warna",
          "direct_decorrelation_stretch": "Peregangan dekorelasi langsung",
          "false_colour_composite": "Komposit warna semu",
          "gamma_correction": "Koreksi gamma",
          "gaussian_contrast_stretch": "Peregangan kontras Gaussian",
          "histogram_equalization": "Ekualisasi histogram",
          "histogram_matching": "Pencocokan histogram",
          "histogram_matching_two_images": "Pencocokan histogram dua citra",
          "ihs_to_rgb": "IHS ke RGB",
          "min_max_contrast_stretch": "Peregangan kontras min-maks",
          "mosaic": "Mosaik",
          "mosaic_with_feathering": "Mosaik dengan feathering",
          "normalized_difference_index": "Indeks selisih ternormalisasi",
          "panchromatic_sharpening": "Penajaman pankromatik",
          "percentage_contrast_stretch": "Peregangan kontras persentase",
          "piecewise_contrast_stretch": "Peregangan kontras sepotong-sepotong",
          "resample": "Resampling",
          "rgb_to_ihs": "RGB ke IHS",
          "sigmoidal_contrast_stretch": "Peregangan kontras sigmoid",
          "split_colour_composite": "Pisahkan komposit warna",
          "standard_deviation_contrast_stretch": "Peregangan kontras simpangan baku",
          "true_colour_composite": "Komposit warna asli",
          "adaptive_filter": "Filter adaptif",
          "anisotropic_diffusion_filter": "Filter difusi anisotropik",
          "bilateral_filter": "Filter bilateral",
          "closing": "Penutupan morfologi",
          "conservative_smoothing_filter": "Filter penghalusan konservatif",
          "diff_of_gaussians_filter": "Filter difference of Gaussians",
          "diversity_filter": "Filter keragaman",
          "edge_preserving_mean_filter": "Filter rata-rata pelestari tepi",
          "emboss_filter": "Filter emboss",
          "fast_almost_gaussian_filter": "Filter Gaussian cepat aproksimatif",
          "flip_image": "Balik citra",
          "frangi_filter": "Filter Frangi",
          "gabor_filter_bank": "Bank filter Gabor",
          "gaussian_filter": "Filter Gaussian",
          "glcm_texture": "Tekstur GLCM",
          "guided_filter": "Filter terpandu",
          "high_pass_bilateral_filter": "Filter bilateral lolos tinggi",
          "high_pass_filter": "Filter lolos tinggi",
          "high_pass_median_filter": "Filter median lolos tinggi",
          "integral_image_transform": "Transformasi citra integral",
          "k_nearest_mean_filter": "Filter rata-rata K tetangga terdekat",
          "kuwahara_filter": "Filter Kuwahara",
          "lee_filter": "Filter Lee",
          "lidar_ground_point_filter": "Filter titik tanah LiDAR",
          "line_detection_filter": "Filter deteksi garis",
          "line_thinning": "Penipisan garis",
          "majority_filter": "Filter mayoritas",
          "maximum_filter": "Filter maksimum",
          "mean_filter": "Filter rata-rata",
          "median_filter": "Filter median",
          "minimum_filter": "Filter minimum",
          "non_local_means_filter": "Filter non-local means",
          "olympic_filter": "Filter olimpik",
          "opening": "Pembukaan morfologi",
          "percentile_filter": "Filter persentil",
          "range_filter": "Filter rentang",
          "remove_spurs": "Hapus taji",
          "savitzky_golay_2d_filter": "Filter Savitzky-Golay 2D",
          "scharr_filter": "Filter Scharr",
          "standard_deviation_filter": "Filter simpangan baku",
          "thicken_raster_line": "Pertebal garis raster",
          "tophat_transform": "Transformasi top-hat",
          "total_filter": "Filter total",
          "unsharp_masking": "Unsharp masking",
          "user_defined_weights_filter": "Filter bobot tentuan pengguna",
          "wiener_filter": "Filter Wiener",
          "build_object_hierarchy_multiscale": "Bangun hierarki objek multiskala",
          "classify_objects_ensemble_pro": "Klasifikasi objek ensemble Pro",
          "classify_objects_random_forest": "Klasifikasi objek random forest",
          "classify_objects_rules_basic": "Klasifikasi objek aturan dasar",
          "classify_objects_rules_hierarchical": "Klasifikasi objek aturan hierarkis",
          "classify_objects_svm": "Klasifikasi objek SVM",
          "evaluate_object_classification_accuracy": "Evaluasi akurasi klasifikasi objek",
          "evaluate_segmentation_quality_pro": "Evaluasi kualitas segmentasi Pro",
          "image_segmentation": "Segmentasi citra",
          "image_slider": "Penggeser citra",
          "image_stack_profile": "Profil tumpukan citra",
          "obia_audit_report_pro": "Laporan audit OBIA Pro",
          "obia_batch_orchestrator_pro": "Orkestrator batch OBIA Pro",
          "obia_pipeline_basic": "Pipeline OBIA dasar",
          "object_class_probability_maps": "Peta probabilitas kelas objek",
          "object_features_context_neighbors": "Fitur objek konteks tetangga",
          "object_features_shape_basic": "Fitur objek bentuk dasar",
          "object_features_spectral_basic": "Fitur objek spektral dasar",
          "object_features_texture_glcm_basic": "Fitur objek tekstur GLCM dasar",
          "object_features_topology_relations": "Fitur objek relasi topologi",
          "object_uncertainty_diagnostics_pro": "Diagnostik ketidakpastian objek Pro",
          "objects_boundary_refinement_pro": "Penghalusan batas objek Pro",
          "objects_enforce_min_mapping_unit": "Terapkan unit pemetaan minimum pada objek",
          "polygons_to_segments": "Poligon ke segmen",
          "propagate_labels_across_hierarchy": "Propagasi label lintas hierarki",
          "segment_graph_felzenszwalb": "Segmentasi graf Felzenszwalb",
          "segment_multiresolution_hierarchical": "Segmentasi multiresolusi hierarkis",
          "segment_scale_parameter_optimizer": "Pengoptimal parameter skala segmen",
          "segment_slic_superpixels": "Segmentasi superpiksel SLIC",
          "segment_watershed_markers": "Segmentasi watershed dengan penanda",
          "segments_merge_small_regions": "Gabungkan segmen wilayah kecil",
          "segments_split_low_cohesion": "Pisahkan segmen berkohesi rendah",
          "segments_to_polygons": "Segmen ke poligon",
          "brdf_normalization": "Normalisasi BRDF",
          "correct_vignetting": "Koreksi vignetting",
          "dark_object_subtraction": "Pengurangan objek gelap",
          "dn_to_toa_reflectance": "DN ke reflektansi TOA",
          "terrain_corrected_optical_analytics": "Analitik optik terkoreksi medan",
          "cloude_pottier_decomposition": "Dekomposisi Cloude-Pottier",
          "enhanced_lee_filter": "Filter Lee yang ditingkatkan",
          "freeman_durden_decomposition": "Dekomposisi Freeman-Durden",
          "frost_filter": "Filter Frost",
          "gamma_map_filter": "Filter Gamma MAP",
          "h_alpha_wisart_classification": "Klasifikasi H-Alpha Wishart",
          "kuan_filter": "Filter Kuan",
          "refined_lee_filter": "Filter Lee yang disempurnakan",
          "wisart_iterative_clustering": "Klasterisasi iteratif Wishart",
          "yamaguchi_4component_decomposition": "Dekomposisi 4 komponen Yamaguchi",
          "continuum_removal": "Penghapusan kontinum",
          "linear_spectral_unmixing": "Unmixing spektral linear",
          "minimum_noise_fraction": "Fraksi derau minimum",
          "spectral_angle_mapper": "Spectral angle mapper",
          "spectral_library_matching": "Pencocokan pustaka spektral",
          "land_surface_temperature_single_channel": "Suhu permukaan tanah kanal tunggal",
          "land_surface_temperature_split_window": "Suhu permukaan tanah split window",
          "ndvi_based_emissivity": "Emisivitas berbasis NDVI",
          "assess_route": "Nilai rute",
          "breakline_mapping": "Pemetaan breakline",
          "convergence_index": "Indeks konvergensi",
          "dem_void_filling": "Pengisian kekosongan DEM",
          "deviation_from_mean_elevation": "Deviasi dari elevasi rata-rata",
          "difference_from_mean_elevation": "Selisih dari elevasi rata-rata",
          "directional_relief": "Relief terarah",
          "elev_above_pit": "Elevasi di atas lubang",
          "elev_above_pit_dist": "Jarak elevasi di atas lubang",
          "elevation_percentile": "Persentil elevasi",
          "embankment_mapping": "Pemetaan tanggul",
          "exposure_towards_wind_flux": "Paparan terhadap fluks angin",
          "feature_preserving_smoothing": "Penghalusan pelestari fitur",
          "feature_preserving_smoothing_multiscale": "Penghalusan pelestari fitur multiskala",
          "fetch_analysis": "Analisis fetch",
          "fill_missing_data": "Isi data hilang",
          "find_ridges": "Temukan punggung bukit",
          "hillshade": "Bayangan bukit",
          "hypsometrically_tinted_hillshade": "Bayangan bukit berwarna hipsometrik",
          "local_hypsometric_analysis": "Analisis hipsometrik lokal",
          "low_points_on_headwater_divides": "Titik rendah pada pemisah hulu",
          "map_off_terrain_objects": "Petakan objek non-medan",
          "max_downslope_elev_change": "Perubahan elevasi hilir maksimum",
          "max_upslope_elev_change": "Perubahan elevasi hulu maksimum",
          "min_downslope_elev_change": "Perubahan elevasi hilir minimum",
          "multidirectional_hillshade": "Bayangan bukit multiarah",
          "num_downslope_neighbours": "Jumlah tetangga hilir",
          "num_upslope_neighbours": "Jumlah tetangga hulu",
          "profile": "Profil",
          "remove_off_terrain_objects": "Hapus objek non-medan",
          "ridge_and_valley_vectors": "Vektor punggung dan lembah",
          "slope_vs_aspect_plot": "Plot kemiringan vs aspek",
          "slope_vs_elev_plot": "Plot kemiringan vs elevasi",
          "smooth_vegetation_residual": "Haluskan residu vegetasi",
          "surface_area_ratio": "Rasio luas permukaan",
          "topographic_hachures": "Hachure topografi",
          "accumulation_curvature": "Kelengkungan akumulasi",
          "aspect": "Aspek",
          "casorati_curvature": "Kelengkungan Casorati",
          "curvedness": "Tingkat kelengkungan (curvedness)",
          "difference_curvature": "Kelengkungan selisih",
          "gaussian_curvature": "Kelengkungan Gaussian",
          "generating_function": "Fungsi pembangkit",
          "horizontal_excess_curvature": "Kelengkungan ekses horizontal",
          "maximal_curvature": "Kelengkungan maksimal",
          "mean_curvature": "Kelengkungan rata-rata",
          "minimal_curvature": "Kelengkungan minimal",
          "plan_curvature": "Kelengkungan plan",
          "principal_curvature_direction": "Arah kelengkungan utama",
          "profile_curvature": "Kelengkungan profil",
          "relative_aspect": "Aspek relatif",
          "ring_curvature": "Kelengkungan cincin",
          "rotor": "Rotor",
          "shape_index": "Indeks bentuk",
          "slope": "Kemiringan",
          "tangential_curvature": "Kelengkungan tangensial",
          "total_curvature": "Kelengkungan total",
          "unsphericity": "Ketidakbulatan",
          "vertical_excess_curvature": "Kelengkungan ekses vertikal",
          "elev_relative_to_min_max": "Elevasi relatif terhadap min-maks",
          "geomorphons": "Geomorphon",
          "hypsometric_analysis": "Analisis hipsometrik",
          "multiscale_topographic_position_class": "Kelas posisi topografi multiskala",
          "pennock_landform_classification": "Klasifikasi bentuk lahan Pennock",
          "percent_elev_range": "Persentase rentang elevasi",
          "relative_topographic_position": "Posisi topografi relatif",
          "max_anisotropy_dev": "Deviasi anisotropi maksimum",
          "max_anisotropy_dev_signature": "Tanda deviasi anisotropi maksimum",
          "max_difference_from_mean": "Selisih maksimum dari rata-rata",
          "max_elev_dev_signature": "Tanda deviasi elevasi maksimum",
          "max_elevation_deviation": "Deviasi elevasi maksimum",
          "multiscale_curvatures": "Kelengkungan multiskala",
          "multiscale_elevated_index": "Indeks ketinggian multiskala",
          "multiscale_elevation_percentile": "Persentil elevasi multiskala",
          "multiscale_low_lying_index": "Indeks dataran rendah multiskala",
          "multiscale_roughness": "Kekasaran multiskala",
          "multiscale_roughness_signature": "Tanda kekasaran multiskala",
          "multiscale_std_dev_normals": "Simpangan baku normal multiskala",
          "multiscale_std_dev_normals_signature": "Tanda simpangan baku normal multiskala",
          "multiscale_topographic_position_image": "Citra posisi topografi multiskala",
          "topographic_position_animation": "Animasi posisi topografi",
          "average_normal_vector_angular_deviation": "Deviasi sudut vektor normal rata-rata",
          "circular_variance_of_aspect": "Varians sirkular aspek",
          "edge_density": "Kerapatan tepi",
          "ruggedness_index": "Indeks kekasaran",
          "spherical_std_dev_of_normals": "Simpangan baku sferis normal",
          "standard_deviation_of_slope": "Simpangan baku kemiringan",
          "average_horizon_distance": "Jarak horizon rata-rata",
          "horizon_angle": "Sudut horizon",
          "horizon_area": "Luas horizon",
          "openness": "Keterbukaan",
          "shadow_animation": "Animasi bayangan",
          "shadow_image": "Citra bayangan",
          "sky_view_factor": "Faktor pandangan langit",
          "skyline_analysis": "Analisis kaki langit",
          "time_in_daylight": "Waktu dalam siang hari",
          "viewshed": "Daerah pandang",
          "visibility_index": "Indeks visibilitas",
          "topo_render": "Render topografi",
          "add_surface_information": "Tambah informasi permukaan",
          "add_z_information": "Tambah informasi Z",
          "adjust_3d_z": "Sesuaikan Z 3D",
          "adjust_stream_to_raster": "Sesuaikan sungai ke raster",
          "aggregate_points": "Agregasi titik",
          "aggregate_polygons": "Agregasi poligon",
          "align_features": "Selaraskan fitur",
          "apportion_polygon": "Pembagian poligon",
          "areal_interpolation": "Interpolasi areal",
          "assign_projection_vector": "Tetapkan proyeksi vektor",
          "attribute_uncertainty": "Ketidakpastian atribut",
          "bivariate_spatial_association": "Asosiasi spasial bivariat",
          "buffer_3d": "Buffer 3D",
          "build_balanced_zones": "Bangun zona seimbang",
          "build_seamlines": "Bangun seamline",
          "calculate_adjacent_fields": "Hitung field bersebelahan",
          "calculate_central_meridian_and_parallels": "Hitung meridian tengah dan paralel",
          "calculate_composite_index": "Hitung indeks komposit",
          "calculate_distance_band": "Hitung pita jarak",
          "calculate_end_time": "Hitung waktu akhir",
          "calculate_grid_convergence_angle": "Hitung sudut konvergensi grid",
          "calculate_missing_z_values": "Hitung nilai Z yang hilang",
          "calculate_motion_statistics": "Hitung statistik gerakan",
          "calculate_polygon_main_angle": "Hitung sudut utama poligon",
          "calculate_rates": "Hitung laju",
          "calculate_transformation_errors": "Hitung galat transformasi",
          "calculate_utm_zone": "Hitung zona UTM",
          "cartogram": "Kartogram",
          "causal_inference_analysis": "Analisis inferensi kausal",
          "cell_records_to_sectors": "Rekaman sel ke sektor",
          "central_feature": "Fitur pusat / rata-rata arah linear",
          "change_point_detection": "Deteksi titik perubahan",
          "collapse_dual_lines_to_centerline": "Ciutkan garis ganda ke garis tengah",
          "collapse_hydro_polygon": "Ciutkan poligon hidro",
          "collapse_road_detail": "Ciutkan detail jalan",
          "collect_events": "Kumpulkan kejadian",
          "colocation_analysis": "Analisis kolokasi",
          "color_polygons": "Warnai poligon",
          "compare_spatial_weights": "Bandingkan bobot spasial",
          "compute_accuracy_for_object_detection": "Hitung akurasi deteksi objek",
          "construct_sight_lines": "Bangun garis pandang",
          "contiguous_cartogram": "Kartogram kontigu",
          "contour_list": "Daftar kontur",
          "convert_coordinate_notation": "Konversi notasi koordinat",
          "cost_connectivity": "Konektivitas biaya",
          "count_overlapping_features": "Hitung fitur tumpang tindih",
          "create_accuracy_assessment_points": "Buat titik penilaian akurasi",
          "create_cartographic_partitions": "Buat partisi kartografis",
          "create_overpass": "Buat jalan layang",
          "create_routes": "Buat rute",
          "create_spatial_sampling_locations": "Buat lokasi pengambilan sampel spasial",
          "create_spatially_balanced_points": "Buat titik seimbang spasial",
          "create_underpass": "Buat terowongan",
          "cul_de_sac_masks": "Masker cul-de-sac",
          "delineate_built_up_areas": "Delineasi area terbangun",
          "dendrogram": "Dendrogram",
          "densify_sampling_network": "Rapatkan jaringan pengambilan sampel",
          "detect_bright_ocean_objects": "Deteksi objek laut terang",
          "detect_dark_ocean_areas": "Deteksi area laut gelap",
          "detect_feature_changes": "Deteksi perubahan fitur",
          "detect_graphic_conflict": "Deteksi konflik grafis",
          "detect_incidents": "Deteksi insiden",
          "dice": "Pecah (dice)",
          "difference_3d": "Selisih 3D",
          "dimension_reduction": "Reduksi dimensi",
          "directional_distribution": "Distribusi arah",
          "directional_trend": "Tren arah",
          "disperse_markers": "Sebarkan penanda",
          "dissolve_route_events": "Lebur kejadian rute",
          "edgematch_features": "Pencocokan tepi fitur",
          "eighty_twenty_analysis": "Analisis delapan puluh dua puluh",
          "eliminate_polygon_part": "Hilangkan bagian poligon",
          "eliminate_polygons": "Hilangkan poligon",
          "emerging_hot_spot_analysis": "Analisis hot spot berkembang",
          "enclose_multipatch": "Tutup multipatch",
          "estimate_time_to_event": "Estimasi waktu ke kejadian",
          "evaluate_bin_sizes": "Evaluasi ukuran bin",
          "evaluate_variable_influence": "Evaluasi pengaruh variabel",
          "exploratory_interpolation": "Interpolasi eksploratif",
          "exploratory_regression": "Regresi eksploratif",
          "extract_locations_from_text": "Ekstrak lokasi dari teks",
          "extract_water_sar": "Ekstrak air (SAR)",
          "extrude_between": "Ekstrusi di antara",
          "feature_outline_masks": "Masker garis luar fitur",
          "feature_to_line": "Fitur ke garis",
          "feature_vertices_to_points": "Verteks fitur ke titik",
          "features_to_kml": "Fitur ke KML",
          "fence_diagram": "Diagram pagar",
          "fill_missing_values": "Isi nilai hilang",
          "find_dwell_locations": "Temukan lokasi persinggahan",
          "find_identical": "Temukan identik",
          "find_meeting_locations": "Temukan lokasi pertemuan",
          "find_space_time_matches": "Temukan kecocokan ruang-waktu",
          "flip_line": "Balik garis",
          "forest_based_forecast": "Peramalan berbasis forest",
          "generalized_linear_regression": "Regresi linear tergeneralisasi",
          "generate_breach_lines": "Buat garis bobol",
          "generate_near_table": "Buat tabel terdekat",
          "generate_network_swm": "Buat SWM jaringan",
          "generate_od_links": "Buat tautan asal-tujuan",
          "generate_points_along_3d_lines": "Buat titik sepanjang garis 3D",
          "generate_spatial_weights_matrix": "Buat matriks bobot spasial",
          "generate_subset_polygons": "Buat poligon subset",
          "generate_transects_along_lines": "Buat transek sepanjang garis",
          "geodetic_densify": "Rapatkan geodetik",
          "geographically_weighted_regression": "Regresi terboboti geografis",
          "geotagged_photos_to_points": "Foto bergeotag ke titik",
          "graphic_buffer": "Buffer grafis",
          "grid_index_features": "Fitur indeks grid",
          "group_by_proximity": "Kelompokkan berdasarkan kedekatan",
          "hdbscan": "Klasterisasi HDBSCAN",
          "getis_ord_general_g": "Klasterisasi tinggi/rendah (General G Getis-Ord)",
          "hot_spot_analysis_comparison": "Perbandingan analisis hot spot",
          "identify_narrow_polygons": "Identifikasi poligon sempit",
          "incremental_spatial_autocorrelation": "Autokorelasi spasial inkremental",
          "inside_3d": "Di dalam 3D",
          "integrate": "Integrasi",
          "interpolate_shape": "Interpolasi bentuk",
          "intersect_3d": "Irisan 3D",
          "intersect_3d_line_with_surface": "Irisan garis 3D dengan permukaan",
          "intersecting_layers_masks": "Masker layer berpotongan",
          "intervisibility": "Intervisibilitas",
          "is_closed_3d": "Tertutup 3D",
          "line_of_sight": "Garis pandang",
          "local_bivariate_relationships": "Hubungan bivariat lokal",
          "local_outlier_analysis": "Analisis pencilan lokal",
          "locate_lines_along_routes": "Tentukan lokasi garis sepanjang rute",
          "median_center": "Pusat median",
          "merge_divided_roads": "Gabungkan jalan terbagi",
          "merge_lines_by_pseudo_node": "Gabungkan garis berdasarkan pseudo node",
          "minimum_bounding_volume": "Volume pembatas minimum",
          "multipatch_footprint": "Jejak multipatch",
          "multipatch_to_mesh": "Multipatch ke mesh",
          "multiple_ring_buffer": "Buffer cincin ganda",
          "mgwr": "Regresi terboboti geografis multiskala",
          "multivariate_clustering": "Klasterisasi multivariat",
          "near_3d": "Terdekat 3D",
          "neighborhood_summary_statistics": "Statistik ringkasan ketetanggaan",
          "non_maximum_suppression": "Supresi non-maksimum",
          "optics_clustering": "Klasterisasi OPTICS",
          "optimal_corridor_connections": "Koneksi koridor optimal",
          "optimal_path_as_line": "Jalur optimal sebagai garis",
          "optimized_hot_spot_analysis": "Analisis hot spot teroptimasi",
          "optimized_outlier_analysis": "Analisis pencilan teroptimasi",
          "pairwise_comparison_weights": "Bobot perbandingan berpasangan",
          "pivot_table": "Tabel pivot",
          "points_to_line": "Titik ke garis",
          "points_to_path": "Titik ke jalur",
          "polygon_neighbors": "Tetangga poligon",
          "polygon_volume": "Volume poligon",
          "propagate_displacement": "Propagasi perpindahan",
          "raster_domain": "Domain raster",
          "raster_to_weighted_points": "Raster ke titik terboboti",
          "reclassify_field": "Reklasifikasi field",
          "reconstruct_tracks": "Rekonstruksi jejak",
          "reduce_point_density": "Kurangi kerapatan titik",
          "regularize_adjacent_building_footprint": "Regularisasi jejak bangunan bersebelahan",
          "regularize_building_footprints": "Regularisasi jejak bangunan",
          "remove_overlap_multiple": "Hapus tumpang tindih (ganda)",
          "render_vector_png": "Render vektor ke PNG",
          "repair_geometry": "Perbaiki geometri",
          "resolve_building_conflicts": "Selesaikan konflik bangunan",
          "resolve_road_conflicts": "Selesaikan konflik jalan",
          "ripleys_k": "K Ripley",
          "rubbersheet_features": "Rubbersheet fitur",
          "semivariogram_sensitivity": "Sensitivitas semivariogram",
          "similarity_search": "Pencarian kemiripan",
          "simplify_3d_line": "Sederhanakan garis 3D",
          "simplify_building": "Sederhanakan bangunan",
          "simplify_by_circular_arcs": "Sederhanakan dengan busur lingkaran",
          "simplify_by_tangent_segments": "Sederhanakan dengan segmen tangen",
          "simplify_shared_edges": "Sederhanakan tepi bersama",
          "smooth_natural_features": "Haluskan fitur alami",
          "smooth_shared_edges": "Haluskan tepi bersama",
          "snap_tracks": "Jepret jejak",
          "sort_features": "Urutkan fitur",
          "spatial_eigenvector_filtering": "Penyaringan vektor eigen spasial (MESF)",
          "spatial_outlier_detection": "Deteksi pencilan spasial",
          "spatially_constrained_multivariate_clustering": "Klasterisasi multivariat terkendala spasial",
          "split_by_attributes": "Pisahkan berdasarkan atribut",
          "split_by_features": "Pisahkan berdasarkan fitur",
          "split_line_at_point": "Pisahkan garis di titik",
          "stack_profile": "Profil tumpukan",
          "strip_map_index_features": "Fitur indeks peta strip",
          "subdivide_polygon": "Subdivisi poligon",
          "subset_features": "Subset fitur",
          "summarize_nearby": "Ringkas sekitar",
          "summarize_percent_change": "Ringkas persentase perubahan",
          "summarize_within": "Ringkas di dalam",
          "summary_statistics": "Statistik ringkasan",
          "sun_shadow_volume": "Volume bayangan matahari",
          "surface_difference": "Selisih permukaan",
          "table_to_geometry": "Tabel ke geometri",
          "tabulate_intersection": "Tabulasi irisan",
          "thin_road_network": "Tipiskan jaringan jalan",
          "tile_grid_polygons": "Poligon grid petak",
          "time_series_clustering": "Klasterisasi deret waktu",
          "time_series_forecast": "Peramalan deret waktu",
          "time_series_smoothing": "Penghalusan deret waktu",
          "trace_proximity_events": "Telusuri kejadian kedekatan",
          "transform_features": "Transformasi fitur",
          "transform_fields": "Transformasi field",
          "transform_route_events": "Transformasi kejadian rute",
          "transpose_fields": "Transposisi field",
          "trim_line": "Pangkas garis",
          "union_3d": "Gabungan 3D",
          "validate_flow_direction": "Validasi arah aliran",
          "voxel_isosurface": "Isosurface voxel",
          "buffer_vector": "Buffer vektor",
          "directional_variogram": "Analisis variogram arah",
          "estimate_variogram": "Estimasi variogram",
          "fit_variogram": "Fit model variogram",
          "add_field": "Tambah field",
          "add_geometry_attributes": "Tambah atribut geometri",
          "attribute_correlation": "Korelasi atribut",
          "attribute_histogram": "Histogram atribut",
          "attribute_scattergram": "Scattergram atribut",
          "delete_field": "Hapus field",
          "extract_by_attribute": "Ekstrak berdasarkan atribut",
          "field_calculator": "Kalkulator field",
          "filter_vector_features_by_area": "Filter fitur vektor berdasarkan luas",
          "list_unique_values": "Daftar nilai unik",
          "rename_field": "Ganti nama field",
          "centroid_vector": "Centroid vektor",
          "concave_hull": "Concave hull",
          "densify_features": "Rapatkan fitur",
          "eliminate_coincident_points": "Hilangkan titik berimpit",
          "extend_vector_lines": "Perpanjang garis vektor",
          "merge_line_segments": "Gabungkan segmen garis",
          "minimum_bounding_box": "Kotak pembatas minimum",
          "minimum_bounding_circle": "Lingkaran pembatas minimum",
          "minimum_bounding_envelope": "Amplop pembatas minimum",
          "minimum_convex_hull": "Convex hull minimum",
          "polygonize": "Poligonisasi",
          "representative_point_vector": "Titik representatif vektor",
          "simplify_features": "Sederhanakan fitur",
          "smooth_vectors": "Haluskan vektor",
          "snap_endnodes": "Jepret node ujung",
          "split_vector_lines": "Pisahkan garis vektor",
          "split_with_lines": "Pisahkan dengan garis",
          "locate_points_along_routes": "Tentukan lokasi titik sepanjang rute",
          "points_along_lines": "Titik sepanjang garis",
          "route_calibrate": "Kalibrasi rute",
          "route_event_lines_from_layer": "Garis kejadian rute dari layer",
          "route_event_lines_from_table": "Garis kejadian rute dari tabel",
          "route_event_merge": "Gabungkan kejadian rute",
          "route_event_overlay": "Tumpang susun kejadian rute",
          "route_event_points_from_layer": "Titik kejadian rute dari layer",
          "route_event_points_from_table": "Titik kejadian rute dari tabel",
          "route_event_split": "Pisahkan kejadian rute",
          "route_measure_qa": "QA ukuran rute",
          "route_recalibrate": "Kalibrasi ulang rute",
          "snap_events_to_routes": "Jepret kejadian ke rute",
          "download_osm_vector": "Unduh vektor OSM",
          "clip": "Potong",
          "difference": "Selisih",
          "dissolve": "Lebur (dissolve)",
          "erase": "Hapus",
          "identity": "Identitas",
          "intersect": "Irisan",
          "line_intersections": "Perpotongan garis",
          "line_polygon_clip": "Potong garis dengan poligon",
          "near": "Terdekat",
          "select_by_location": "Pilih berdasarkan lokasi",
          "spatial_join": "Gabung spasial",
          "symmetrical_difference": "Selisih simetris",
          "union": "Gabungan",
          "update": "Perbarui",
          "construct_vector_tin": "Bangun TIN vektor",
          "contours_from_points": "Kontur dari titik",
          "contours_from_raster": "Kontur dari raster",
          "extract_nodes": "Ekstrak node",
          "extract_raster_values_at_points": "Ekstrak nilai raster pada titik",
          "find_lowest_or_highest_points": "Temukan titik terendah atau tertinggi",
          "hexagonal_grid_from_raster_base": "Grid heksagonal dari basis raster",
          "hexagonal_grid_from_vector_base": "Grid heksagonal dari basis vektor",
          "layer_footprint_raster": "Jejak layer raster",
          "layer_footprint_vector": "Jejak layer vektor",
          "medoid": "Medoid",
          "random_points_in_polygon": "Titik acak dalam poligon",
          "rectangular_grid_from_raster_base": "Grid persegi dari basis raster",
          "rectangular_grid_from_vector_base": "Grid persegi dari basis vektor",
          "vector_hex_binning": "Binning heksagonal vektor",
          "voronoi_diagram": "Diagram Voronoi",
          "compactness_ratio": "Rasio kekompakan",
          "deviation_from_regional_direction": "Deviasi dari arah regional",
          "elongation_ratio": "Rasio pemanjangan",
          "hole_proportion": "Proporsi lubang",
          "linearity_index": "Indeks linearitas",
          "narrowness_index_vector": "Indeks kesempitan vektor",
          "patch_orientation": "Orientasi patch",
          "perimeter_area_ratio": "Rasio keliling-luas",
          "polygon_area": "Luas poligon",
          "polygon_long_axis": "Sumbu panjang poligon",
          "polygon_perimeter": "Keliling poligon",
          "polygon_short_axis": "Sumbu pendek poligon",
          "related_circumscribing_circle": "Lingkaran pembatas terkait",
          "shape_complexity_index_vector": "Indeks kompleksitas bentuk vektor",
          "envelope_test": "Uji amplop",
          "getis_ord_gi_star": "Getis-Ord Gi*",
          "global_morans_i": "Moran's I global",
          "hotspot_vs_process": "Hotspot vs proses",
          "inhomogeneous_baseline": "Baseline inhomogen",
          "local_morans_i_lisa": "Moran's I lokal (LISA)",
          "nearest_neighbour_index": "Indeks tetangga terdekat",
          "point_pattern_envelope": "Amplop pola titik",
          "point_process_residuals": "Residu proses titik",
          "point_process_residuals_comparison": "Perbandingan residu proses titik",
          "quadrat_count_test": "Uji hitungan kuadrat",
          "ripleys_k_function": "Fungsi K Ripley",
          "ripleys_k_test": "Uji K Ripley",
          "spatial_error_regression": "Regresi spatial error",
          "spatial_lag_regression": "Regresi spatial lag"
        },
        "menuSubcategory": {
          "geolibre_wasm": "GeoLibre (WASM)",
          "geometry_topology": "Geometri dan topologi",
          "raster_vector_conversion": "Konversi raster/vektor",
          "vector_table_i_o": "I/O vektor dan tabel",
          "depressions_storage": "Cekungan dan tampungan",
          "flow_routing": "Perutean aliran",
          "hydrologic_indices": "Indeks hidrologi",
          "streams_longitudinal_analysis": "Sungai - Analisis memanjang",
          "streams_network_extraction": "Sungai - Ekstraksi jaringan",
          "streams_ordering_metrics": "Sungai - Metrik orde",
          "watersheds_basins": "Daerah aliran sungai",
          "analysis_metrics": "Metrik analisis",
          "filtering_classification": "Penyaringan dan klasifikasi",
          "i_o_management": "I/O dan pengelolaan",
          "interpolation_gridding": "Interpolasi dan pembuatan grid",
          "network_analysis": "Analisis jaringan",
          "general": "Umum",
          "distance_cost": "Jarak dan biaya",
          "local_neighborhood": "Ketetanggaan lokal",
          "overlay_math": "Matematika tumpang susun",
          "reclassify_mask": "Reklasifikasi dan masking",
          "spatial_statistics": "Statistik spasial",
          "change_detection": "Deteksi perubahan",
          "classification": "Klasifikasi",
          "edge_feature_detection": "Deteksi tepi dan fitur",
          "enhancement_contrast": "Peningkatan dan kontras",
          "filters": "Filter",
          "obia": "OBIA",
          "radiometric_correction": "Koreksi radiometrik",
          "sar": "SAR",
          "spectral_analytics": "Analitik spektral",
          "thermal_emissivity": "Termal dan emisivitas",
          "derivatives": "Turunan",
          "landform_indices": "Indeks bentuk lahan",
          "multiscale_signatures": "Tanda multiskala",
          "roughness_texture": "Kekasaran dan tekstur",
          "visibility": "Visibilitas",
          "workflow_products": "Produk alur kerja",
          "attribute_analysis": "Analisis atribut",
          "geometry_processing": "Pemrosesan geometri",
          "linear_referencing": "Referensi linear",
          "online_data": "Data daring",
          "overlay_analysis": "Analisis tumpang susun",
          "sampling_gridding": "Pengambilan sampel dan pembuatan grid",
          "shape_metrics": "Metrik bentuk"
        }
      }
    }
  }
}
