BAB 5: Hitung Sekali, Berlaku untuk Semua: Kalkulasi Field
#Studi kasus: "Luas di tabel itu hasil ukur lama"
Kolom LUAS_LAMA_HA di tabel petak berasal dari ukuran lama di lapangan. Kepala Seksi curiga angkanya sudah tidak pas. Ia meminta tiga hal: luas yang dihitung ulang dari bentuk petak, umur tanaman, dan kelas umur (muda, sedang, tua). Mengetik 16 angka dengan kalkulator memang bisa. Tetapi bila petaknya 1.600, Anda butuh cara yang menghitung semuanya sekaligus.
#Konsep: kalkulasi field dalam tiga kalimat
Kalkulasi field adalah menyuruh GIS mengisi satu kolom untuk semua baris sekaligus memakai satu rumus, seperti rumus yang diseret ke bawah di lembar hitung. Rumus itu disebut ekspresi, dan bisa memakai isi kolom lain, angka, serta fungsi (perintah siap pakai seperti round). Khusus di GIS, ekspresi juga bisa membaca bentuk objek, misalnya luas dan panjangnya.
Istilah baru bab ini:
- Field Calculator: alat untuk mengisi kolom dengan ekspresi.
- Ekspresi: rumus yang dihitung untuk tiap baris.
- Fungsi: perintah siap pakai, ditulis dengan tanda kurung, misalnya
round(...). - Operator: tanda hitung atau sambung (
+,-,/,||). - Field virtual: kolom yang dihitung setiap kali dibuka dan tidak ditulis ke berkas.

#Ekspresi yang akan Anda pakai
| Maksud | Ekspresi |
|---|---|
| Luas petak (hektare, 3 desimal) | round(area($geometry) / 10000, 3) |
| Panjang garis (meter, 1 desimal) | round(length($geometry), 1) |
| Selisih dua kolom | round("LUAS_HA" - "LUAS_LAMA_HA", 3) |
| Umur tanaman (tahun 2026) | 2026 - "TAHUN_TANAM" |
| Kelas dengan banyak pilihan | CASE WHEN "UMUR" < 10 THEN 'Muda' WHEN "UMUR" < 15 THEN 'Sedang' ELSE 'Tua' END |
| Dua pilihan saja | if("STATUS" = 'Lindung', 'L', 'P') |
| Menyambung teks | concat("NAMA_KPH", ' / ', "KODE_PETAK") |
| Huruf besar | upper("NAMA_KPH") |
| Mengganti teks | replace("NAMA_KPH", 'KPH ', '') |
| Isi cadangan bila kosong | coalesce("CATATAN", 'tidak ada') |
#Tiga hal yang sering mengejutkan
- Pembagian memberi desimal.
5 / 2menghasilkan2.5. Untuk bilangan bulat, pakai5 // 2yang menghasilkan2. - Kosong merusak hitungan.
1 + NULLmenghasilkan kosong (NULL), bukan 1. Bungkus dengancoalesce(kolom, 0)bila perlu. - Dua cara menghitung luas.
area($geometry)menghitung datar di bidang peta (cocok untuk UTM).$areamemakai elipsoid yang diatur di proyek. Pada data latihan, selisihnya kurang dari 1 m² per petak (diuji dengan elipsoid WGS 84), jadi hasil pembulatan ke tiga desimal hektare hampir selalu sama. Pilih satu cara dan konsisten.
#Angka dari data latihan
Hasil skrip 5.1 di QGIS 4.0.2:
| Pemeriksaan | Hasil |
|---|---|
| Luas KPH Alpha, Beta, Gamma | 4,000, 4,000, dan 8,000 ha |
| Total luas 16 petak | 16,000 ha |
| Petak yang selisih luasnya lebih dari 0,06 ha dari ukuran lama | 6 petak: P-02, P-04, P-05, P-07, P-12, P-15 |
| Kelas umur | Tua 5 petak, Sedang 7 petak, Muda 4 petak |
Contoh baris: P-05 luasnya 1,070 ha, ukuran lama 1,00 ha, selisih +0,070 ha, umur 21 tahun, kelas Tua. P-15 luasnya 1,065 ha, umur 6 tahun, kelas Muda.
Jadi jawaban untuk Kepala Seksi: luas lama memang meleset, paling jauh sekitar 0,07 ha per petak, meski total tetap 16 ha.
#Bagian A: QGIS
#Bagian A: Field Calculator di QGIS
#Menghitung luas
- Klik layer
Petak, lalu buka Field Calculator dengan Ctrl+I (atau ikon kalkulator di toolbar atribut). - Centang Create a new field. Isi:
- Output field name:
LUAS_HA - Output field type:
Decimal number (real) - Output field length: 10, Precision: 3
- Pada kotak ekspresi, ketik:
round(area($geometry) / 10000, 3)- Lihat kotak Preview di bawah ekspresi. Pada baris pertama (P-01) terlihat 1,01. Itu pratinjau untuk satu baris.
- Klik OK. Kolom
LUAS_HAterisi di semua baris. Nilai tersimpan di data bila Anda menyimpan edit. [CEK: perilaku mode edit otomatis] - Matikan mode edit dan simpan. Jumlah ketiga KPH tetap 4, 4, dan 8 ha.
#Menghitung kolom lain, satu per satu
Ulangi langkah di atas untuk kolom berikut. Perhatikan urutannya, karena kolom baru memakai kolom sebelumnya.
| Nama field | Tipe | Ekspresi |
|---|---|---|
SELISIH_HA | Decimal, presisi 3 | round("LUAS_HA" - "LUAS_LAMA_HA", 3) |
UMUR | Integer | 2026 - "TAHUN_TANAM" |
KELAS_UMUR | Text, panjang 10 | CASE WHEN "UMUR" < 10 THEN 'Muda' WHEN "UMUR" < 15 THEN 'Sedang' ELSE 'Tua' END |
KODE_LENGKAP | Text, panjang 30 | concat("NAMA_KPH", ' / ', "KODE_PETAK") |
Tanda || juga menyambung teks, jadi "NAMA_KPH" || ' / ' || "KODE_PETAK" memberi hasil yang sama dengan concat. Bila tahun bisa berganti, pakai year(now()) - "TAHUN_TANAM". Angka di buku ini memakai 2026 supaya hasilnya tidak berubah.
#Memperbarui kolom yang sudah ada
Pada Field Calculator, centang Update existing field, lalu pilih kolomnya dari daftar. Alat ini menimpa isi lama. Bila Anda hanya ingin menghitung baris terpilih, centang Only update selected features.
#Mengisi panjang jalan dan luas persemaian
Dari bab 3: pada Jalan_Baru, perbarui PANJANG_M dengan round(length($geometry), 1). Hasilnya sekitar 428,5. Pada Persemaian_Baru, perbarui LUAS_M2 dengan round(area($geometry), 1). Hasilnya 3.700,0 bila Anda memakai tabel koordinat.
#Field virtual
Bila kolom hanya dibutuhkan untuk tampilan, centang Create virtual field di Field Calculator. Kolomnya tidak ditulis ke berkas dan selalu mengikuti bentuk terbaru. Cocok untuk luas, yang berubah bila bentuk diedit. Kekurangannya: kolom ini hanya hidup di proyek QGIS Anda dan tidak ikut bila berkas dikirim ke orang lain.
#Pilihan: kalkulasi lewat Python
Skrip 5.1 (skrip/b2_05_kalkulasi.py) menjalankan alat Field calculator lima kali berturut-turut.
def tambah(lyr, nama, tipe, rumus, panjang=0, presisi=0):
return processing.run("native:fieldcalculator", {
"INPUT": lyr, "FIELD_NAME": nama, "FIELD_TYPE": tipe, "FIELD_LENGTH": panjang,
"FIELD_PRECISION": presisi, "FORMULA": rumus, "OUTPUT": "memory:"})["OUTPUT"]
h = tambah(petak, "LUAS_HA", 0, "round(area($geometry) / 10000, 3)", 10, 3)Kode tipe: 0 untuk desimal, 1 untuk bilangan bulat, 2 untuk teks. Hasil uji: total luas 16,0 ha dan kelas umur Tua 5, Sedang 7, Muda 4. Hasil disimpan sebagai Petak_Hitung.gpkg di folder keluaran, dan dipakai di bab 6.
#Bagian B: ArcGIS Pro
#Bagian B: ArcGIS Pro
- Klik kanan layer ► Attribute Table. Pada tab Table, grup Field, klik Add untuk membuat field baru (nama dan tipe). [CEK]
- Klik kanan nama kolom ► Calculate Field. Alat Calculate Field ada di Data Management Tools.
- Pilih Expression Type: Python 3, Arcade, atau SQL. Pada Python 3, nama field ditulis
!NAMA_FIELD!. Pada Arcade, ditulis$feature.NAMA_FIELD. - Contoh luas hektare dengan Python 3:
!shape.area@hectares![CEK]. Contoh umur:2026 - !TAHUN_TANAM!. - Contoh kelas dengan Arcade:
When($feature.UMUR < 10, 'Muda', $feature.UMUR < 15, 'Sedang', 'Tua'). [CEK] - Alat ini langsung mengubah data masukan, dan bila ada objek terpilih, hanya objek terpilih yang dihitung.
#Bagian C: ArcMap 10.8
#Bagian C: ArcMap 10.8
- Buka tabel atribut. Klik Table Options ► Add Field… untuk membuat kolom. [CEK]
- Klik kanan nama kolom ► Field Calculator….
- Pilih bahasa Python atau VB Script. Pada Python, nama field ditulis
!NAMA_FIELD!. [CEK] - Contoh umur:
2026 - !TAHUN_TANAM!. Contoh luas hektare:!shape.area@hectares![CEK]. - Kelas dengan banyak pilihan memakai Code Block (Python). [CEK]
#Cek paham
- Apa yang terjadi bila ekspresi memuat kolom yang isinya kosong (NULL)?
- Mengapa kolom
UMURharus dibuat sebelumKELAS_UMUR? - Apa beda
area($geometry)dan$area?
Jawaban:
- Hasil hitungan biasanya ikut kosong. Gunakan
coalesce(kolom, 0)untuk memberi nilai cadangan. - Karena rumus
KELAS_UMURmembaca isiUMUR. Kolom yang dibaca harus sudah ada dan terisi. area($geometry)menghitung datar di bidang peta.$areamengikuti elipsoid proyek. Pada data latihan, selisihnya di bawah 1 m² per petak.
#Kesalahan umum
- Salah tanda kutip.
"UMUR"adalah nama kolom,'Muda'adalah teks. Tertukar, ekspresi galat. - Tipe kolom tidak cocok. Menaruh teks ke kolom angka gagal atau menghasilkan kosong. Pilih tipe sesuai isi.
- Presisi terlalu kecil. Kolom dengan panjang atau presisi pas-pasan memotong angka. Beri ruang lebih.
- Menghitung luas di CRS derajat. Luasnya bermakna ganjil, seperti di bab 5 seri B1. Hitung di CRS meter (UTM).
- Menimpa kolom penting. Gunakan kolom baru lebih dulu, bandingkan, baru ganti bila yakin.
#Ringkasan dan latihan
Ringkasan: Field Calculator mengisi satu kolom untuk semua baris dengan satu ekspresi. Ekspresi memakai kolom, fungsi, dan operator, dan bisa membaca bentuk objek. Pakai kolom baru, periksa pratinjau, lalu simpan.
Latihan: buat kolom KATEGORI dengan ekspresi yang menghasilkan Jati bila jenisnya Jati, dan Non-jati untuk yang lain. Berapa petak berkategori Jati? (Petunjuk: if("JENIS" = 'Jati', 'Jati', 'Non-jati'). Jawaban: 5 petak.)
#Tabel perbandingan: kalkulasi field
| Tugas | QGIS | ArcGIS Pro | ArcMap 10.8 |
|---|---|---|---|
| Membuka alat | Field Calculator (Ctrl+I) | Calculate Field | Field Calculator |
| Menyebut kolom | "KOLOM" | !KOLOM! (Python) atau $feature.KOLOM (Arcade) | !KOLOM! (Python) |
| Luas dari bentuk | area($geometry) | !shape.area@hectares! [CEK] | !shape.area@hectares! [CEK] |
| Banyak pilihan | CASE WHEN ... END | When(...) Arcade [CEK] | Code Block [CEK] |
| Kolom tanpa menulis ke berkas | Field virtual | Tidak ada padanan langsung [CEK] | Tidak ada padanan langsung [CEK] |