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.

Langkah 1

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.

Hasil yang diharapkan: ID unggahan dikembalikan, plot disimpan dalam basis data PostGIS.
Langkah 2

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.

Hasil yang diharapkan: Analisis dimulai, negara teridentifikasi, tingkat risiko dasar ditetapkan.
Langkah 3

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.

Hasil yang diharapkan: Persentase cakupan hutan dihitung, area kehilangan teridentifikasi dengan atribusi tahun kehilangan.
Langkah 4

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.

Hasil yang diharapkan: Data peringatan GLAD dan RADD diperoleh, divalidasi silang jika tumpang tindih.
Langkah 5

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.

Hasil yang diharapkan: Skor risiko numerik dihitung, siap untuk penentuan keputusan.
Langkah 6

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.

Hasil yang diharapkan: Keputusan kepatuhan disimpan, laporan PDF tersedia untuk diunduh.

Tugas Umum

Cara mengunggah dan menganalisis plot

  1. Unggah file geospasial Anda (GeoJSON, KML, atau Shapefile ZIP) melalui POST /api/analysis/upload. Respons menyertakan upload_id.
  2. Mulai analisis dengan memanggil POST /api/analysis/analyze/{upload_id}. Ini memulai pipeline lengkap: cakupan hutan, peringatan GLAD, peringatan RADD, dan penilaian risiko.
  3. Pantau penyelesaian dengan GET /api/analysis/status/{analysis_id} hingga statusnya completed.
  4. Ambil hasilnya dengan GET /api/analysis/results/{analysis_id}. Respons mencakup status kepatuhan, skor risiko, persentase kehilangan hutan, dan detail peringatan.
  5. Unduh laporan PDF dari GET /api/reports/enhanced-pdf/{upload_id} untuk laporan visual lengkap dengan citra satelit.

Cara memeriksa apakah plot patuh

  1. Lihat field compliance_status dalam hasil analisis. Nilainya adalah salah satu dari: COMPLIANT, NON_COMPLIANT, atau NEEDS_REVIEW.
  2. Periksa nilai risk_score. Nilai di atas 70 menunjukkan ketidakpatuhan.
  3. 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.
  4. Tinjau forest_loss_percentage. Kehilangan melebihi 2% dari luas plot juga memicu ketidakpatuhan.

Cara menggunakan antrean asinkron untuk batch besar

  1. Kirim plot untuk pemrosesan asinkron melalui POST /api/queue/submit. Respons menyertakan queue_id.
  2. Pantau status pekerjaan di GET /api/queue/status/{queue_id}. Status berkembang melalui: PENDINGPROCESSINGCOMPLETED (atau FAILED).
  3. Ketika pekerjaan selesai, hasil secara otomatis dikirim melalui email ke pengguna terdaftar dengan tautan unduhan PDF.
  4. Untuk pekerjaan batch, email ringkasan gabungan dikirim dengan lampiran PDF individual (tingkat Enterprise) atau satu PDF ringkasan (tingkat Gratis).
  5. Periksa statistik antrean keseluruhan di GET /api/queue/stats untuk 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:

🔒
Bayangkan seperti brankas bank

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.

Python
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
Apa yang dilakukan kode ini
Baris 4–5: Membuat dua tugas — satu untuk GLAD (optik, Landsat) dan satu untuk RADD (radar, Sentinel-1). Keduanya belum mulai dieksekusi.
Baris 7–10: asyncio.gather() menjalankan kedua tugas secara bersamaan. Saat GLAD menunggu respons GEE-nya, RADD dapat memproses permintaannya (dan sebaliknya).
Hasil: Total waktu aktual kira-kira 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

PemeriksaanAmbang BatasEfek
Kehilangan hutan> 2%NON_COMPLIANT
Skor risiko> 70NON_COMPLIANT
Peringatan setelah batas waktusetelah 2020-12-31NON_COMPLIANT
Semua pemeriksaan lolosCOMPLIANT

Endpoint API

MetodePathDeskripsi
POST/api/analysis/uploadUnggah 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

FaktorPoinKondisi
Negara (risiko tinggi)+20Plot terletak di BR, ID, CD, PE, CO, BO, VE, atau MY
Negara (standar)0Negara tidak diklasifikasikan sebagai risiko tinggi atau rendah
Negara (risiko rendah)-20Plot di negara dengan tata kelola hutan yang kuat
Peringatan pasca-batas waktu+25Peringatan GLAD atau RADD apa pun bertanggal setelah 2020-12-31
Faktor area peringatanhingga +25Diskalakan berdasarkan luas deforestasi yang terdeteksi
Kehilangan hutan+10Kehilangan kanopi terukur terdeteksi dalam plot
Ketidakpastian data+5Margin kesalahan pengukuran satelit dan model