BAB 2: Sinkronisasi Lapangan (Ground-Truthing Cloud)
#Bagian A: QGIS
#2.1. Membangun Basis Data & Formulir Survei Cerdas di QGIS
Anda memakai format GeoPackage (.gpkg) yang ringan dan merupakan standar modern pengganti Shapefile.
#A. Langkah Eksekusi (Persiapan Desktop):
- Buat layer poin baru: Layer > Create Layer > New GeoPackage Layer.
- Beri nama tabel: Titik_Survei. Tambahkan field: Kondisi (Teks), Tinggi_Phn (Desimal), dan Foto (Teks).
- Klik kanan layer Titik_Survei > Properties > Attributes Form.
- Ubah Attribute editor layout dari Autogenerate menjadi Drag and drop designer. Dengan ini, Anda bisa mendesain antarmuka aplikasi seluler langsung dari QGIS.
- Konfigurasi setiap field:
- Klik field Kondisi. Pada bagian Widget Type, ubah menjadi Value Map. Masukkan pilihan: Sehat, Terserang Hama, Tebangan Liar.
- Klik field Foto. Pada Widget Type, ubah menjadi Attachment. Centang Integrated document viewer dan pilih tipe Image.

#2.2. Sinkronisasi ke Perangkat Seluler (QField/Mergin Maps)
Anda akan mengirim proyek ini ke Cloud agar bisa diakses oleh tim lapangan.
- Buka Plugins > Manage and Install Plugins, instal QFieldSync (atau Mergin Maps).
- Simpan proyek QGIS Anda.
- Klik ikon QFieldSync > Package for QField.
- Pilih folder tujuan. QGIS akan memaketkan seluruh layer, basemap, dan formulir ke dalam satu folder terenkripsi.
- Unggah proyek ke QFieldCloud (atau copy langsung ke smartphone Android/iOS tim Anda). Tim lapangan kini dapat mengisi data secara luring (offline) di tengah hutan. Aplikasi akan otomatis menyinkronkan data saat mendapat sinyal internet.

#2.3. Eksekusi Tingkat Lanjut: Validasi Otomatis via PyQGIS
Saat tim lapangan mensinkronisasi ratusan titik survei kembali ke QGIS Desktop, Anda tidak perlu mengeceknya satu per satu. Gunakan skrip Python untuk melakukan Spatial Join antara titik survei lapangan dan poligon klasifikasi Anda, lalu berikan skor akurasi.

# [SKRIP 2.1: Validasi Otomatis Titik Ground-Truth vs Poligon Klasifikasi]
# Penulis: Badar Mubarok Yogaswara
import processing
from qgis.core import QgsProject
print("🔍 Memulai Validasi Lapangan Otomatis...")
layer_survei = QgsProject.instance().mapLayersByName('Titik_Survei')[0]
layer_klasifikasi = QgsProject.instance().mapLayersByName('Poligon_Sawah')[0]
# Melakukan Spatial Join (Menarik atribut poligon ke titik survei yang berada di dalamnya)
hasil_join = processing.run("native:joinattributesbylocation", {
'INPUT': layer_survei,
'JOIN': layer_klasifikasi,
'PREDICATE': [0], # 0 = Intersects
'JOIN_FIELDS': ['Kelas_Citra'], # Field dari citra satelit
'METHOD': 0,
'DISCARD_NONMATCHING': False,
'PREFIX': 'GIS_',
'OUTPUT': 'memory:Validasi_Hasil'
})['OUTPUT']
# Menambahkan layer hasil ke QGIS
QgsProject.instance().addMapLayer(hasil_join)
# Menghitung Akurasi
titik_cocok = 0
total_titik = hasil_join.featureCount()
for fitur in hasil_join.getFeatures():
if str(fitur['Kondisi']).lower() == str(fitur['GIS_Kelas_Citra']).lower():
titik_cocok += 1
akurasi = (titik_cocok / total_titik) * 100 if total_titik > 0 else 0
print(f"📊 Laporan Validasi: {titik_cocok} dari {total_titik} titik cocok.")
print(f"🎯 Akurasi Keseluruhan (Overall Accuracy): {akurasi:.2f}%")#Bagian B: ArcGIS Pro
#2.1. Membangun Basis Data dan Formulir Survei (ArcGIS Pro)
Padanan GeoPackage di ArcGIS adalah file geodatabase. Pilihan isian yang dibatasi (Value Map di QGIS) dibuat dengan domain, dan foto disimpan sebagai lampiran (attachment).

#A. Langkah Eksekusi (Persiapan Desktop):
- Buat file geodatabase dengan alat Create File Geodatabase, misalnya bernama Survei.gdb.
- Buat layer titik dengan alat Create Feature Class (tipe geometri Point) dan beri nama Titik_Survei.
- Tambahkan field Kondisi (teks) dan Tinggi_Phn (desimal) pada Titik_Survei.
- Buat domain dengan Create Domain (jenis coded value), misalnya Kondisi_Domain. Isi pilihannya dengan Add Coded Value To Domain: Sehat, Terserang Hama, dan Tebangan Liar.
- Pasang domain ke field Kondisi dengan Assign Domain To Field.
- Aktifkan lampiran foto dengan Enable Attachments pada Titik_Survei. Foto disimpan sebagai lampiran, sehingga Anda tidak perlu field Foto bertipe teks seperti pada QGIS.
- Rancang tampilan formulir seluler di aplikasi web Field Maps setelah layer diterbitkan (lihat 2.2). [CEK]
#2.2. Sinkronisasi ke Perangkat Seluler (ArcGIS Pro)
Aplikasi lapangan Esri adalah ArcGIS Field Maps, yang menggantikan Collector, Explorer, dan Tracker.

- Terbitkan Titik_Survei sebagai hosted feature layer di ArcGIS Online atau Enterprise. Field Maps hanya dapat mengedit layer yang di-host, bukan layer dari berkas yang tersimpan di dalam peta. [CEK]
- Buat peta web yang berisi layer itu.
- Atur formulir di Field Maps: urutkan isian dengan seret dan lepas (smart forms) dan wajibkan isian tertentu. [CEK]
- Untuk kerja tanpa sinyal, siapkan area peta luring (offline map area). [CEK]
- Bagikan peta ke tim. Tim membukanya di aplikasi Field Maps pada ponsel, dan data disinkronkan saat ada sinyal.
#2.3. Eksekusi Tingkat Lanjut: Validasi Otomatis dengan ArcPy
Skenarionya sama dengan Bagian A: menggabungkan titik survei dengan poligon klasifikasi, lalu menghitung akurasi. Alat penggabungnya adalah Spatial Join.

Buka jendela Python di ArcGIS Pro dan jalankan skrip berikut:
# [SKRIP 2.1-Pro: Validasi Titik Ground-Truth vs Poligon Klasifikasi dengan ArcPy]
# Penulis: Badar Mubarok Yogaswara
# [CEK] Cocokkan dengan versi Anda. Spatial Join tersedia pada semua level lisensi.
import arcpy
arcpy.env.workspace = r"C:\data_kph\Survei.gdb" # ganti dengan lokasi Anda
arcpy.env.overwriteOutput = True
survei = "Titik_Survei"
klasifikasi = "Poligon_Sawah"
hasil = "Validasi_Hasil"
print("Memulai validasi lapangan otomatis...")
# 1. Spatial Join: tarik atribut poligon ke titik survei yang berada di dalamnya
arcpy.analysis.SpatialJoin(survei, klasifikasi, hasil,
"JOIN_ONE_TO_ONE", "KEEP_ALL", "", "INTERSECT")
# 2. Hitung akurasi: bandingkan Kondisi dengan Kelas_Citra
total_titik = 0
titik_cocok = 0
with arcpy.da.SearchCursor(hasil, ["Kondisi", "Kelas_Citra"]) as kursor:
for kondisi, kelas in kursor:
total_titik += 1
if str(kondisi).lower() == str(kelas).lower():
titik_cocok += 1
akurasi = (titik_cocok / total_titik) * 100 if total_titik > 0 else 0
print(f"Laporan Validasi: {titik_cocok} dari {total_titik} titik cocok.")
print(f"Akurasi Keseluruhan (Overall Accuracy): {akurasi:.2f}%")#Bagian C: ArcMap 10.8
#2.1. Membangun Basis Data dan Formulir Survei (ArcMap)
Konsepnya sama dengan Bagian B: file geodatabase, domain untuk pilihan terbatas, dan lampiran untuk foto.

#A. Langkah Eksekusi (Persiapan Desktop):
- Buat file geodatabase dengan alat Create File GDB, misalnya bernama Survei.gdb. Folder tujuan harus sudah ada.
- Buat layer titik dengan alat Create Feature Class (tipe geometri POINT) dan beri nama Titik_Survei.
- Tambahkan field Kondisi (teks) dan Tinggi_Phn (desimal).
- Buat domain dengan Create Domain (jenis CODED), lalu isi pilihannya dengan Add Coded Value To Domain: Sehat, Terserang Hama, dan Tebangan Liar.
- Pasang domain ke field Kondisi dengan Assign Domain To Field.
- Aktifkan lampiran foto dengan Enable Attachments. Alat ini memerlukan lisensi Standard atau Advanced.
#2.2. Sinkronisasi ke Perangkat Seluler (ArcMap)

- Siapkan data di ArcMap seperti pada 2.1.
- Terbitkan sebagai hosted feature layer lewat ArcGIS Online. Cara persis menerbitkan dari ArcMap 10.8 belum diverifikasi. [CEK]
- Pakai Field Maps untuk pengumpulan data. Collector for ArcGIS sudah dipensiunkan Esri.
- Setelah data terkumpul, salin hasilnya kembali ke geodatabase. [CEK]
#2.3. Eksekusi Tingkat Lanjut: Validasi Otomatis dengan ArcPy (Python 2.7)
Skenario dan hasil sama dengan Bagian B, tetapi kode harus mengikuti Python 2.7.

Buka jendela Python di ArcMap dan jalankan skrip berikut:
# [SKRIP 2.1-ArcMap: Validasi Titik Ground-Truth vs Poligon Klasifikasi dengan ArcPy]
# Penulis: Badar Mubarok Yogaswara
# [CEK] Cocokkan dengan versi Anda. Spatial Join tersedia pada semua level lisensi.
from __future__ import print_function # agar print() berlaku di Python 2.7
import arcpy
arcpy.env.workspace = r"C:\data_kph\Survei.gdb" # ganti dengan lokasi Anda
arcpy.env.overwriteOutput = True
survei = "Titik_Survei"
klasifikasi = "Poligon_Sawah"
hasil = "Validasi_Hasil"
print("Memulai validasi lapangan otomatis...")
# 1. Spatial Join: tarik atribut poligon ke titik survei yang berada di dalamnya
arcpy.SpatialJoin_analysis(survei, klasifikasi, hasil,
"JOIN_ONE_TO_ONE", "KEEP_ALL", "", "INTERSECT")
# 2. Hitung akurasi: bandingkan Kondisi dengan Kelas_Citra
total_titik = 0
titik_cocok = 0
with arcpy.da.SearchCursor(hasil, ["Kondisi", "Kelas_Citra"]) as kursor:
for kondisi, kelas in kursor:
total_titik += 1
if str(kondisi).lower() == str(kelas).lower():
titik_cocok += 1
akurasi = (float(titik_cocok) / total_titik) * 100 if total_titik > 0 else 0
print("Laporan Validasi: {} dari {} titik cocok.".format(titik_cocok, total_titik))
print("Akurasi Keseluruhan (Overall Accuracy): {:.2f}%".format(akurasi))#Ringkasan, Latihan, dan Bantuan Bab 2
#Ringkasan
- GeoPackage menggantikan Shapefile sebagai wadah data lapangan yang ringan.
- Value Map membatasi isian ke pilihan baku, dan Attachment menyimpan foto.
- QFieldSync mengemas proyek ke ponsel dan menyinkronkan data kembali ke QGIS.
- Spatial Join dan skrip dapat menghitung akurasi titik lapangan terhadap poligon klasifikasi.
- [ArcGIS Pro] File geodatabase, domain, Enable Attachments, dan Field Maps; validasi dengan Spatial Join dan ArcPy (Python 3).
- [ArcMap] Alat geodatabase yang sama; Enable Attachments tidak tersedia di lisensi Basic; alur lapangan perlu diuji; tidak ada Attribute Rules.
#Latihan
- Buat layer Titik_Survei dengan tiga field seperti di langkah 2.1, lalu isi 10 titik contoh di sekitar tempat Anda.
- Sinkronkan proyek ke ponsel, tambahkan 2 titik baru dengan foto, lalu sinkronkan kembali ke QGIS.
- Jalankan skrip 2.1 dan catat akurasinya.
- [ArcGIS Pro / ArcMap] Buat Survei.gdb, feature class Titik_Survei, dan domain Kondisi_Domain dengan tiga pilihan seperti di 2.1.
- [ArcGIS Pro / ArcMap] Jalankan Skrip 2.1 versi Anda dan bandingkan akurasinya dengan hasil di QGIS.
#Jika terjadi masalah
- Akurasi sangat rendah padahal peta tampak benar: skrip membandingkan teks field Kondisi dengan Kelas_Citra (huruf besar dan kecil dianggap sama). Pastikan pilihan Value Map memakai istilah yang sama persis dengan kelas pada poligon. [CEK]
- Skrip tidak menemukan layer: nama layer harus persis Titik_Survei dan Poligon_Sawah.
- [ArcGIS Pro / ArcMap] Field Kelas_Citra tidak ditemukan setelah Spatial Join: periksa nama field hasil join, karena namanya dapat berubah bila ada field bernama sama. [CEK]
- [ArcMap] Enable Attachments tidak dapat dijalankan: alat ini memerlukan lisensi Standard atau Advanced.
- [ArcMap] Dataset tidak dapat dibuka: periksa apakah dataset itu memakai Attribute Rules, karena tidak kompatibel dengan ArcMap.
#Tabel Perbandingan Bab 2: QGIS, ArcGIS Pro, dan ArcMap 10.8
Kolom Status menjelaskan seberapa pasti padanan itu. Terbukti: dokumentasi resmi sudah dibaca penulis. Kemungkinan: berdasarkan informasi umum. [CEK]: perlu dicoba di perangkat lunaknya.
| Langkah | QGIS | ArcGIS Pro | ArcMap 10.8 | Status |
|---|---|---|---|---|
| 2.1 Wadah data | GeoPackage (.gpkg) | File geodatabase (Create File Geodatabase) | File geodatabase (Create File GDB) | Terbukti: alat ada di Pro dan ArcMap |
| 2.1 Layer titik | New GeoPackage Layer | Create Feature Class (Point) | Create Feature Class (POINT) | Terbukti |
| 2.1 Pilihan terbatas | Value Map | Create Domain, Add Coded Value To Domain, Assign Domain To Field | Alat yang sama | Terbukti; semua level lisensi |
| 2.1 Foto | Widget Attachment | Enable Attachments | Enable Attachments (tidak di lisensi Basic) | Terbukti |
| 2.1 Formulir seluler | Drag and drop designer | Field Maps (form builder) | Tidak ada padanan langsung | Pro: kemungkinan [CEK]. ArcMap: belum diverifikasi |
| 2.2 Kirim ke ponsel | QFieldSync, Package for QField | Hosted feature layer, Field Maps, area offline | Alur aman lewat ArcGIS Online lalu Field Maps | [CEK]; ArcMap perlu diuji pengguna |
| 2.3 Gabung atribut | native:joinattributesbylocation | Spatial Join | Spatial Join | Terbukti ada di Pro dan ArcMap |
| 2.3 Hitung akurasi | Loop fitur PyQGIS | arcpy.da.SearchCursor (Python 3) | arcpy.da.SearchCursor (Python 2.7) | Kemungkinan; arcpy.da ada di keduanya (terbukti dari panduan migrasi) |
| 2.3 Aturan validasi atribut | Skrip PyQGIS | Attribute Rules | Tidak ada padanan | Terbukti: dataset ber-rule tidak kompatibel dengan ArcMap |
