Pipeline Analisis
Apa yang terjadi ketika Anda mengunggah sebidang lahan untuk pemeriksaan kepatuhan EUDR.
Lacak Unggahan dari Browser hingga Keputusan
Ikuti perjalanan sebuah file GeoJSON dari saat pengguna mengklik "Unggah" hingga keputusan kepatuhan akhir. Setiap langkah di bawah ini sesuai dengan tahap nyata dalam kode backend.
Unggah File Geospasial
Pengguna mengirim file ke POST /api/analysis/upload. FileProcessor mengambil alih: memvalidasi geometri, memperbaiki otomatis poligon yang berpotongan sendiri menggunakan make_valid(), mengekstrak fitur individual dari koleksi, dan menghitung luas setiap plot dalam hektar.
Format yang didukung meliputi GeoJSON, KML, dan Shapefile (ZIP). Geometri yang telah diuraikan disimpan dalam basis data PostGIS dengan metadata sistem referensi koordinat lengkap.
Memulai Analisis
Klien memanggil POST /api/analysis/analyze/{upload_id}. Sistem membuat instance ForestAnalyzerWithAlerts, mesin analisis utama yang mengoordinasikan semua pemeriksaan hilir.
Pertama, sistem mendeteksi negara dari koordinat plot menggunakan pencarian bounding-box atau geocoding terbalik. Negara menentukan tingkat risiko dasar — negara berisiko tinggi (Brasil, Indonesia, RD Kongo, dll.) dimulai dengan penalti +20 poin dalam skor risiko.
Kueri Cakupan Hutan
GEE dikueri untuk data Hansen Global Forest Change (dataset UMD/hansen/global_forest_change_2023_v1_11). Sistem membandingkan cakupan hutan dasar tahun 2020 dengan kondisi terkini dan menghitung persentase hutan yang hilang dalam batas plot.
Ini adalah analisis tingkat piksel pada resolusi 30 meter. Setiap piksel mengodekan tahun kehilangan tutupan pohon (2001–2023), memungkinkan sistem membedakan kehilangan sebelum batas waktu dari kehilangan setelah batas waktu.
Mengambil Peringatan Deforestasi
Dua sistem peringatan independen dikueri secara bersamaan menggunakan asyncio.gather():
- GLAD — Deteksi optik melalui citra Landsat pada resolusi 30m. Cakupan global sejak 2001.
- RADD — Deteksi radar melalui Sentinel-1 SAR pada resolusi 10m. Bekerja menembus tutupan awan, siang atau malam. Mencakup daerah tropis lembap sejak 2019.
Menjalankan keduanya secara paralel memangkas waktu tunggu menjadi setengah karena keduanya mengkueri dataset GEE yang independen. Ketika kedua sistem mendeteksi kehilangan di area yang sama, tingkat kepercayaan secara signifikan lebih tinggi.
Menghitung Skor Risiko
Skor risiko adalah nilai komposit dari 100, dibangun dari empat faktor:
- Risiko negara: +20 (risiko tinggi), 0 (standar), atau -20 (risiko rendah)
- Kehilangan hutan: hingga +10 poin berdasarkan persentase kehilangan
- Area peringatan pasca-batas waktu: hingga +25 poin jika peringatan ada setelah 2020-12-31, ditambah +25 untuk penanda peringatan pasca-batas waktu yang terkonfirmasi
- Ketidakpastian data: +5 poin untuk margin kesalahan pengukuran dan model
Skor di atas 70 menandai plot sebagai tidak patuh dan memerlukan peninjauan.
Menyampaikan Keputusan
ComplianceStatus akhir ditentukan:
- COMPLIANT — semua pemeriksaan lolos, tidak ada deforestasi pasca-batas waktu yang terdeteksi
- NON_COMPLIANT — satu atau lebih ambang batas terlampaui (kehilangan hutan > 2%, skor risiko > 70, atau peringatan pasca-batas waktu ditemukan)
- NEEDS_REVIEW — hasil di ambang batas yang memerlukan penilaian manusia
Hasil disimpan ke tabel analysis_results dan catatan peringatan ke deforestation_alerts. Laporan PDF yang ditingkatkan dihasilkan dengan citra satelit, peta perubahan NDVI, dan klasifikasi tutupan lahan.
Tugas Umum
Cara mengunggah dan menganalisis plot
- Unggah file geospasial Anda (GeoJSON, KML, atau Shapefile ZIP) melalui
POST /api/analysis/upload. Respons menyertakanupload_id. - Mulai analisis dengan memanggil
POST /api/analysis/analyze/{upload_id}. Ini memulai pipeline lengkap: cakupan hutan, peringatan GLAD, peringatan RADD, dan penilaian risiko. - Pantau penyelesaian dengan
GET /api/analysis/status/{analysis_id}hingga statusnyacompleted. - Ambil hasilnya dengan
GET /api/analysis/results/{analysis_id}. Respons mencakup status kepatuhan, skor risiko, persentase kehilangan hutan, dan detail peringatan. - Unduh laporan PDF dari
GET /api/reports/enhanced-pdf/{upload_id}untuk laporan visual lengkap dengan citra satelit.
Cara memeriksa apakah plot patuh
- Lihat field
compliance_statusdalam hasil analisis. Nilainya adalah salah satu dari:COMPLIANT,NON_COMPLIANT, atauNEEDS_REVIEW. - Periksa nilai
risk_score. Nilai di atas 70 menunjukkan ketidakpatuhan. - Periksa array peringatan untuk entri dengan tanggal setelah batas waktu EUDR (2020-12-31). Satu peringatan pasca-batas waktu sudah cukup untuk memicu status NON_COMPLIANT.
- Tinjau
forest_loss_percentage. Kehilangan melebihi 2% dari luas plot juga memicu ketidakpatuhan.
Cara menggunakan antrean asinkron untuk batch besar
- Kirim plot untuk pemrosesan asinkron melalui
POST /api/queue/submit. Respons menyertakanqueue_id. - Pantau status pekerjaan di
GET /api/queue/status/{queue_id}. Status berkembang melalui:PENDING→PROCESSING→COMPLETED(atauFAILED). - Ketika pekerjaan selesai, hasil secara otomatis dikirim melalui email ke pengguna terdaftar dengan tautan unduhan PDF.
- Untuk pekerjaan batch, email ringkasan gabungan dikirim dengan lampiran PDF individual (tingkat Enterprise) atau satu PDF ringkasan (tingkat Gratis).
- Periksa statistik antrean keseluruhan di
GET /api/queue/statsuntuk memantau throughput dan pekerjaan yang tertunda.
Mengapa Pipeline Bekerja Seperti Ini
Pertahanan Berlapis
Sistem tidak bergantung pada satu metrik tunggal. Sebaliknya, tiga pemeriksaan independen harus semuanya lolos agar plot dianggap patuh:
- Persentase kehilangan hutan — ukuran kuantitatif perubahan kanopi
- Ambang skor risiko — skor komposit yang menggabungkan risiko negara, tingkat keparahan peringatan, dan kualitas data
- Pemeriksaan peringatan pasca-batas waktu — deforestasi apa pun yang terdeteksi setelah 31 Desember 2020
Brankas bank modern memiliki tiga kunci independen: dial kombinasi, kunci fisik, dan pemindai biometrik. Masing-masing secara independen mencegah akses tidak sah. Bahkan jika satu mekanisme rusak atau tidak berfungsi, dua lainnya tetap melindungi isinya. Pipeline analisis bekerja dengan cara yang sama — persentase kehilangan hutan, skor risiko, dan peringatan pasca-batas waktu adalah tiga penghalang independen. Sebuah plot harus melewati ketiganya untuk dianggap patuh.
Mengapa Pengambilan Peringatan Secara Bersamaan Penting
GLAD dan RADD mengkueri dataset yang sepenuhnya independen di GEE. Keduanya tidak bergantung pada hasil satu sama lain. Ini menjadikannya kasus klasik untuk konkurensi.
import asyncio
async def analyze_alerts(geometry):
glad_task = get_glad_alerts(geometry)
radd_task = get_radd_alerts(geometry)
glad, radd = await asyncio.gather(
glad_task,
radd_task
)
return glad, radd
asyncio.gather() menjalankan kedua tugas secara bersamaan. Saat GLAD menunggu respons GEE-nya, RADD dapat memproses permintaannya (dan sebaliknya).max(waktu_glad, waktu_radd) alih-alih waktu_glad + waktu_radd. Untuk kueri GEE tipikal 3–5 detik masing-masing, ini menghemat 3–5 detik per analisis.Tanggal Batas EUDR
Seluruh regulasi bergantung pada satu tanggal: 31 Desember 2020. Berdasarkan Regulasi UE 2023/1115, komoditas yang ditempatkan di pasar UE tidak boleh diproduksi di lahan yang dideforestasi setelah batas waktu ini.
Deforestasi apa pun yang terdeteksi setelah tanggal ini — baik oleh analisis optik GLAD maupun deteksi radar RADD — secara otomatis membuat plot berstatus NON_COMPLIANT. Deforestasi yang terjadi sebelum batas waktu dicatat dalam laporan tetapi tidak mempengaruhi status kepatuhan.
Aturan biner ini adalah alasan mengapa pemeriksaan peringatan pasca-batas waktu ada sebagai penghalang independen dalam pipeline. Bahkan jika kehilangan hutan di bawah 2% dan skor risiko di bawah 70, satu peringatan terkonfirmasi bertanggal 1 Januari 2021 atau setelahnya sudah cukup untuk membuat plot gagal.
Referensi Cepat
Ambang Batas Kepatuhan
| Pemeriksaan | Ambang Batas | Efek |
|---|---|---|
| Kehilangan hutan | > 2% | NON_COMPLIANT |
| Skor risiko | > 70 | NON_COMPLIANT |
| Peringatan setelah batas waktu | setelah 2020-12-31 | NON_COMPLIANT |
| Semua pemeriksaan lolos | — | COMPLIANT |
Endpoint API
| Metode | Path | Deskripsi |
|---|---|---|
POST | /api/analysis/upload | Unggah file geospasial (GeoJSON, KML, Shapefile) |
POST | /api/analysis/analyze/{id} | Mulai analisis kepatuhan EUDR untuk unggahan |
GET | /api/analysis/status/{id} | Periksa status penyelesaian analisis |
GET | /api/analysis/results/{id} | Ambil hasil analisis lengkap |
Komponen Skor Risiko
| Faktor | Poin | Kondisi |
|---|---|---|
| Negara (risiko tinggi) | +20 | Plot terletak di BR, ID, CD, PE, CO, BO, VE, atau MY |
| Negara (standar) | 0 | Negara tidak diklasifikasikan sebagai risiko tinggi atau rendah |
| Negara (risiko rendah) | -20 | Plot di negara dengan tata kelola hutan yang kuat |
| Peringatan pasca-batas waktu | +25 | Peringatan GLAD atau RADD apa pun bertanggal setelah 2020-12-31 |
| Faktor area peringatan | hingga +25 | Diskalakan berdasarkan luas deforestasi yang terdeteksi |
| Kehilangan hutan | +10 | Kehilangan kanopi terukur terdeteksi dalam plot |
| Ketidakpastian data | +5 | Margin kesalahan pengukuran satelit dan model |