Lewati ke isi
Profil penulisSeri Buku GIS Kehutanan dan Pertanian/ B2
Tampilkan bagian untuk:

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.
Ilustrasi 5.1: Bagian-bagian sebuah ekspresi
Skema: ekspresi round(area($geometry) / 10000, 3) dipecah menjadi fungsi, geometri, operator, dan pembulat

#Ekspresi yang akan Anda pakai

MaksudEkspresi
Luas petak (hektare, 3 desimal)round(area($geometry) / 10000, 3)
Panjang garis (meter, 1 desimal)round(length($geometry), 1)
Selisih dua kolomround("LUAS_HA" - "LUAS_LAMA_HA", 3)
Umur tanaman (tahun 2026)2026 - "TAHUN_TANAM"
Kelas dengan banyak pilihanCASE WHEN "UMUR" < 10 THEN 'Muda' WHEN "UMUR" < 15 THEN 'Sedang' ELSE 'Tua' END
Dua pilihan sajaif("STATUS" = 'Lindung', 'L', 'P')
Menyambung teksconcat("NAMA_KPH", ' / ', "KODE_PETAK")
Huruf besarupper("NAMA_KPH")
Mengganti teksreplace("NAMA_KPH", 'KPH ', '')
Isi cadangan bila kosongcoalesce("CATATAN", 'tidak ada')

#Tiga hal yang sering mengejutkan

  • Pembagian memberi desimal. 5 / 2 menghasilkan 2.5. Untuk bilangan bulat, pakai 5 // 2 yang menghasilkan 2.
  • Kosong merusak hitungan. 1 + NULL menghasilkan kosong (NULL), bukan 1. Bungkus dengan coalesce(kolom, 0) bila perlu.
  • Dua cara menghitung luas. area($geometry) menghitung datar di bidang peta (cocok untuk UTM). $area memakai 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:

PemeriksaanHasil
Luas KPH Alpha, Beta, Gamma4,000, 4,000, dan 8,000 ha
Total luas 16 petak16,000 ha
Petak yang selisih luasnya lebih dari 0,06 ha dari ukuran lama6 petak: P-02, P-04, P-05, P-07, P-12, P-15
Kelas umurTua 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

  1. Klik layer Petak, lalu buka Field Calculator dengan Ctrl+I (atau ikon kalkulator di toolbar atribut).
  2. Centang Create a new field. Isi:
  • Output field name: LUAS_HA
  • Output field type: Decimal number (real)
  • Output field length: 10, Precision: 3
  1. Pada kotak ekspresi, ketik:
ekspresi
round(area($geometry) / 10000, 3)
  1. Lihat kotak Preview di bawah ekspresi. Pada baris pertama (P-01) terlihat 1,01. Itu pratinjau untuk satu baris.
  2. Klik OK. Kolom LUAS_HA terisi di semua baris. Nilai tersimpan di data bila Anda menyimpan edit. [CEK: perilaku mode edit otomatis]
  3. 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 fieldTipeEkspresi
SELISIH_HADecimal, presisi 3round("LUAS_HA" - "LUAS_LAMA_HA", 3)
UMURInteger2026 - "TAHUN_TANAM"
KELAS_UMURText, panjang 10CASE WHEN "UMUR" < 10 THEN 'Muda' WHEN "UMUR" < 15 THEN 'Sedang' ELSE 'Tua' END
KODE_LENGKAPText, panjang 30concat("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.

python
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

  1. Klik kanan layer ► Attribute Table. Pada tab Table, grup Field, klik Add untuk membuat field baru (nama dan tipe). [CEK]
  2. Klik kanan nama kolom ► Calculate Field. Alat Calculate Field ada di Data Management Tools.
  3. Pilih Expression Type: Python 3, Arcade, atau SQL. Pada Python 3, nama field ditulis !NAMA_FIELD!. Pada Arcade, ditulis $feature.NAMA_FIELD.
  4. Contoh luas hektare dengan Python 3: !shape.area@hectares! [CEK]. Contoh umur: 2026 - !TAHUN_TANAM!.
  5. Contoh kelas dengan Arcade: When($feature.UMUR < 10, 'Muda', $feature.UMUR < 15, 'Sedang', 'Tua'). [CEK]
  6. 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

  1. Buka tabel atribut. Klik Table Options ► Add Field… untuk membuat kolom. [CEK]
  2. Klik kanan nama kolom ► Field Calculator….
  3. Pilih bahasa Python atau VB Script. Pada Python, nama field ditulis !NAMA_FIELD!. [CEK]
  4. Contoh umur: 2026 - !TAHUN_TANAM!. Contoh luas hektare: !shape.area@hectares! [CEK].
  5. Kelas dengan banyak pilihan memakai Code Block (Python). [CEK]

#Cek paham

  1. Apa yang terjadi bila ekspresi memuat kolom yang isinya kosong (NULL)?
  2. Mengapa kolom UMUR harus dibuat sebelum KELAS_UMUR?
  3. Apa beda area($geometry) dan $area?

Jawaban:

  1. Hasil hitungan biasanya ikut kosong. Gunakan coalesce(kolom, 0) untuk memberi nilai cadangan.
  2. Karena rumus KELAS_UMUR membaca isi UMUR. Kolom yang dibaca harus sudah ada dan terisi.
  3. area($geometry) menghitung datar di bidang peta. $area mengikuti 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

TugasQGISArcGIS ProArcMap 10.8
Membuka alatField Calculator (Ctrl+I)Calculate FieldField Calculator
Menyebut kolom"KOLOM"!KOLOM! (Python) atau $feature.KOLOM (Arcade)!KOLOM! (Python)
Luas dari bentukarea($geometry)!shape.area@hectares! [CEK]!shape.area@hectares! [CEK]
Banyak pilihanCASE WHEN ... ENDWhen(...) Arcade [CEK]Code Block [CEK]
Kolom tanpa menulis ke berkasField virtualTidak ada padanan langsung [CEK]Tidak ada padanan langsung [CEK]