Lewati ke konten
AI Agent
QGIS
Tutorial

Cara Pakai Field Calculator QGIS: 24 Ekspresi Teruji dan Jebakannya

Diterbitkan

Untuk menghitung sebuah kolom di QGIS, buka tabel atribut layer, klik ikon Field Calculator (Ctrl+I), pilih field baru atau yang sudah ada, ketik ekspresi lalu klik OK. Bagian itu cepat. Bagian sulitnya adalah ketika ekspresi berjalan tanpa error tetapi menulis NULL, derajat persegi, atau kelas yang salah.

Pada 7 November 2026 saya menjalankan 24 ekspresi field calculator pada layer OpenStreetMap nyata untuk Indiranagar dan kelurahan di sekitarnya di Bengaluru, India (8.709 bangunan, 854 jalan, 35 sekolah, 37 halte bus, 10 kelurahan), dan menjalankan versi keliru yang umum dari setiap ekspresi di sampingnya. Di bawah ini ada kumpulan resepnya dengan nilai output yang persis, jebakan diam yang diukur terhadap referensi elipsoidal, dan apa yang terjadi saat tiga yang paling sulit saya serahkan ke agen AI di dalam QGIS.

Apa itu Field Calculator QGIS?

Field Calculator QGIS adalah alat bawaan yang membuat atau memperbarui kolom tabel atribut dengan ekspresi QGIS. Alat ini bisa menghitung nilai geometri seperti luas, panjang dan koordinat, mengubah teks, mengelompokkan baris dengan CASE WHEN, dan mengambil jumlah atau jarak dari layer lain di proyek Anda.

Sebenarnya QGIS memberi empat tempat untuk menjalankan ekspresi yang sama, dan salah memilih adalah cara pertama kehilangan hasil kerja:

  • Dialog Field Calculator (Ctrl+I): mengedit layer secara langsung. Anda bisa membuat kolom baru atau menimpa kolom yang ada, pada semua fitur atau hanya yang terseleksi. Perubahan tersimpan di buffer edit sampai Anda menyimpan editan.
  • Virtual field (kotak centang di dalam dialog): menghitung ekspresi secara langsung setiap kali Anda membuka tabel atau menggambar peta. Saat saya menggandakan tapak bangunan fid 27 di layer uji, kolom luas biasanya tetap 197.355 sementara virtual field berubah menjadi 789.418. Masalahnya, virtual field tersimpan di file proyek .qgs, bukan di GeoPackage atau Shapefile. Buka file itu di proyek baru dan kolomnya hilang.
  • Alat Processing "Field calculator" (native:fieldcalculator): menulis layer output yang benar-benar baru dan tidak menyentuh layer asli. Pakai ini di model atau saat Anda tidak ingin mengedit secara langsung. Hati-hati dengan @row_number, yang di sini mulai dari 0 dan di dialog mulai dari 1.
  • Bilah kalkulasi cepat di bagian atas tabel atribut: memperbarui kolom yang ada tanpa membuka dialog lengkap, cocok untuk satu baris cepat saat Anda sudah dalam mode edit.

Cara menghitung field langkah demi langkah

Buka Field Calculator

Klik kanan layer Anda dan pilih Open Attribute Table, lalu klik ikon sempoa di toolbar tabel atribut. Dengan layer terpilih di panel Layers, Ctrl+I langsung membuka Field Calculator.

Periksa seleksi dan pengaturan field

Jika ada fitur yang terseleksi di peta, Only update N selected feature(s) tercentang secara default. Hilangkan centangnya jika Anda ingin seluruh layer dihitung. Pilih Create a new field (atau Update existing field), isi Output field name dan pilih Output field type (Decimal number (real) untuk luas dan panjang dengan desimal, Integer untuk hitungan bulat, Text (string) untuk label dan kelas).

Tulis ekspresi dan periksa Preview

Ketik ekspresi di editor sebelah kiri, atau cari di daftar fungsi di tengah lalu klik dua kali untuk menyisipkan. Selalu periksa baris Preview di bawah editor sebelum mengklik OK. Jika muncul error, NULL, atau angka seperti 0.0000003, perbaiki ekspresinya sebelum Anda menulisnya ke 8.000 baris.

Klik OK dan simpan editan

Klik OK. Jika layer belum dalam mode edit, QGIS memperingatkan bahwa mode edit akan dinyalakan otomatis. Setelah kalkulasi selesai, klik ikon disket Save Edits di toolbar tabel atribut agar kolom tertulis ke disk.

Berikut dialognya pada layer jalan, siap menulis kelas jalan:

Dialog Field Calculator QGIS pada layer jalan Bengaluru, dengan Only update 39 selected features tercentang, field Text baru bernama road_rank, ekspresi CASE WHEN yang mengelompokkan jalan primary dan secondary sebagai arterial, dan Preview menampilkan arterial.
Dialog Field Calculator di QGIS 3.44. Perhatikan kotak centang di kiri atas: karena 39 jalan terseleksi di kanvas, hanya 39 baris itu yang akan dihitung.

Saat Anda tidak tahu nama sebuah fungsi, pakai kotak pencarian di atas kolom tengah. Kotak itu menyaring pohon fungsi dan membuka dokumentasi di sebelah kanan, termasuk urutan parameter dan contohnya.

Expression builder Field Calculator QGIS pada layer kelurahan, mencari overlay_contains di daftar fungsi, dengan panel kanan menampilkan sintaks dan argumen overlay_contains dan preview menghasilkan 18.
Mencari overlay_contains di daftar fungsi. Preview di bagian bawah menunjukkan 18 sekolah di dalam kelurahan terpilih sebelum Anda menjalankan kalkulasi.

Kumpulan resep ekspresi yang sudah diuji

Setiap ekspresi di bawah dijalankan di QGIS 3.44.15 pada 7 November 2026 di layer OpenStreetMap Bengaluru kami (disimpan dalam EPSG:4326, elipsoid proyek WGS 84). Jika Anda butuh data uji untuk wilayah sendiri, panduan kami tentang cara mengunduh data OpenStreetMap di QGIS menjelaskan cara mengambil bangunan, jalan dan titik dengan rapi.

Contoh output bangunan di bawah berasal dari bangunan fid 27, 28, 30, 60 dan 62 (yang punya alamat dan jumlah lantai) serta fid 1, 2 dan 3 (yang tidak punya keduanya).

Luas, panjang, keliling dan koordinat

Yang Anda inginkanEkspresi untuk ditempelHasil uji pada sampelVersi keliru yang umum (dan akibatnya)
Luas bangunan dalam m² (elipsoidal)$area197.35, 110.86, 141.11, 219.71, 318.83area($geometry) menghasilkan 0.0 (sekitar 3e-7 derajat persegi), tanpa error
Luas bangunan dalam m² (terproyeksi di UTM 43N)area(transform($geometry, 'EPSG:4326', 'EPSG:32643'))197.60, 110.99, 141.29, 219.98, 319.22Transformasi ke 'EPSG:3857' (Web Mercator) membesarkan luas +5,95% di sini
Panjang jalan dalam meter (elipsoidal)$length616.34, 7.99, 1104.32, 9.14, 72.24length($geometry) menghasilkan 0.005681, 0.000074 (derajat), tanpa error
Panjang jalan dalam meter (terproyeksi di UTM 43N)length(transform($geometry, 'EPSG:4326', 'EPSG:32643'))616.72, 7.99, 1105.01, 9.14, 72.29Transformasi ke 'EPSG:3857' membesarkan panjang jalan +3,03% (median)
Keliling bangunan dalam meter$perimeter56.72, 44.97, 48.60, 61.54, 72.69perimeter($geometry) menghasilkan derajat pada layer EPSG:4326
Centroid poligon X (Easting dalam meter)x(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643')))786714.46, 786437.79, 786237.28$x pada poligon menghasilkan NULL tanpa error; x_at($geometry, 0) menghasilkan vertex pertama (77.642744), bukan pusatnya
Centroid poligon Y (Northing dalam meter)y(centroid(transform($geometry, 'EPSG:4326', 'EPSG:32643')))1435359.45, 1435116.32, 1436699.32y(centroid($geometry)) menghasilkan derajat (12.97...) saat layer dalam EPSG:4326
Nomor baris atau ID fitur@row_number atau $id1, 2, 3, 4 (dialog) atau 27 untuk $id pada fid 27@row_number mulai dari 1 di dialog GUI, tetapi mulai dari 0 di Processing native:fieldcalculator

Jika Anda menulis $area ke field output Integer alih-alih Decimal number (real) (diuji dengan Field calculator Processing), QGIS membulatkan ke bilangan bulat terdekat (197.35 menjadi 197, 110.86 menjadi 111), bukan memotongnya.

Kelas bersyarat (CASE WHEN dan penanganan NULL)

Yang Anda inginkanEkspresi untuk ditempelHasil uji pada sampelVersi keliru yang umum (dan akibatnya)
Kelas ukuran dari luasCASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' ENDmedium, medium, medium, medium, largeTidak diuji
Ganti jumlah lantai NULL dengan integer defaultcoalesce(to_int("building:levels"), 1)4, 4, 2, 4, 3 (dan 1 saat levels NULL)"building:levels" + 'a' menghasilkan '4a' karena tag OSM disimpan sebagai teks
Kelas tinggi dengan NULL dipisahkanCASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' ENDmid, mid, low, mid, mid (dan unknown untuk fid 1)Melewatkan WHEN ... IS NULL mengirim setiap baris kosong ke ELSE, sehingga 7.636 bangunan tanpa data diberi label 'high'

Merapikan teks, format dan tanggal

Yang Anda inginkanEkspresi untuk ditempelHasil uji pada sampelVersi keliru yang umum (dan akibatnya)
Gabungkan nomor rumah dan nama jalan dengan amanconcat("addr:housenumber", ' ', "addr:street")'594 12th Main Road', '83/4 13th Main Road' (' ' jika keduanya NULL)"addr:housenumber" || ' ' || "addr:street" menghasilkan NULL jika salah satu kolom NULL
Buang akhiran (Road, Main, Cross) dari nama jalanregexp_replace("name", '\\s+(Road|Main|Cross)$', '')'Chinmaya Mission Hospital', '13th Main', '12th Main'Satu backslash \s+ gagal dengan Invalid regular expression '?+(Road|Main|Cross)$'
Tambah nol di depan ID hingga 12 digitlpad(to_string("osm_id"), 12, '0')'000313829229', '000313835091'Tidak diuji
Format angka untuk tampilanformat_number($area, 1)'197,4', '110,9' ('3 958,7' untuk 3958.7 di Mac dengan locale koma)Outputnya berupa teks yang mengikuti locale OS Anda (koma desimal dan spasi sempit tak terputus), jadi tidak bisa dipakai untuk hitungan setelahnya
Jumlah hari antara dua tanggalday(age(to_date('2026-11-07'), to_date('2019-03-15')))2794age(...) saja menghasilkan objek QgsInterval; to_date('07/11/2026') gagal kecuali Anda memberi 'dd/MM/yyyy' sebagai argumen kedua

Perhatikan juga panjang field output saat menulis teks ke GeoPackage atau Shapefile. Saat saya menjalankan concat("addr:housenumber", ' ', "addr:street") ke field teks dengan panjang 40 di Processing, seluruh proses berhenti tanpa output karena satu jalan (" 80 Feet Road(Sir C.V. Raman Hospital Road)") panjangnya 43 karakter.

Hitungan spasial, jumlah dan jarak terdekat antar layer

Ekspresi ini memungkinkan satu layer menanyai layer lain di proyek Anda tanpa menjalankan spatial join di QGIS secara terpisah.

Yang Anda inginkanEkspresi untuk ditempelHasil uji pada sampelVersi keliru yang umum (dan akibatnya)
Hitung bangunan yang bersinggungan dengan tiap kelurahanaggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent)))4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139Lupa filter:=... memberi setiap kelurahan jumlah total seluruh layer (8709) tanpa error
Total luas bangunan dalam ha per kelurahanround(aggregate('buildings', 'sum', $area, filter:=intersects($geometry, geometry(@parent))) / 10000, 3)0.565, 20.292, 5.605, 59.116, 1.037, 14.094, 16.646, 7.991, 21.39, 1.7Menjumlahkan tapak utuh yang menyentuh batas kelurahan, sehingga bangunan di perbatasan terhitung di dua kelurahan
Hitung sekolah di dalam tiap kelurahanarray_length(overlay_contains('schools', "osm_id"))0, 2, 3, 18, 0, 0, 7, 3, 2, 0 (total: 35)overlay_contains('schools') tanpa argumen kedua menghasilkan true atau false, bukan jumlah
Jarak dalam meter ke halte bus terdekatdistance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(array_first(overlay_nearest('bus_stops', $geometry)), 'EPSG:4326', 'EPSG:32643'))125.17, 49.39, 199.59, 158.39, 187.97, 74.67, 123.00, 226.61distance($geometry, array_first(overlay_nearest('bus_stops', $geometry))) menghasilkan 0.001142 (derajat)
Hitung halte bus dalam radius 300 m dari bangunanaggregate('bus_stops', 'count', "osm_id", filter:=distance(transform($geometry, 'EPSG:4326', 'EPSG:32643'), transform(geometry(@parent), 'EPSG:4326', 'EPSG:32643')) <= 300)1, 1, 4, 2, 2, 6, 7, 7array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)) menghasilkan 37 (semua halte) karena 300 dibaca sebagai 300 derajat

Lima jebakan field calculator yang gagal tanpa error

Saya membaca 70 komentar minta tolong di bawah tutorial QGIS di YouTube: 48 adalah pertanyaan sungguhan tentang menulis ekspresi, dan 8 di antaranya tentang ekspresi yang tidak valid, menghasilkan NULL atau tidak menyeleksi apa pun. Kasus yang lebih buruk justru yang tidak pernah ditanyakan, karena ekspresinya berjalan dan menulis angka yang tampak masuk akal. Berikut lima jebakan yang kami ukur pada data Bengaluru kami.

1. $area vs area($geometry), dan apa pengaruh elipsoid proyek

$area dan area($geometry) tidak melakukan perhitungan yang sama, dan setidaknya satu tutorial 2026 menyebut $area menghasilkan derajat persegi di CRS geografis. Itu tidak terjadi, di kedua pengaturan proyek yang kami uji. Pada 7 November 2026 kami mengukur keduanya, ditambah transform(), pada 200 bangunan dan 200 jalan pertama di layer Bengaluru EPSG:4326 kami terhadap referensi elipsoidal WGS 84 (QgsDistanceArea).

  • $area dan $length memakai elipsoid proyek (diatur di Project > Properties > General > Measurements). Saat elipsoidnya WGS 84, $area menghasilkan meter persegi yang akurat meskipun layer dan proyek Anda dalam derajat (EPSG:4326).
  • Saat elipsoid proyek diatur ke None / Planimetric, $area pada layer EPSG:4326 kami tetap tidak menghasilkan derajat persegi. Di QGIS 3.44.15 hasilnya meter persegi yang +3,24% terlalu besar pada 200 bangunan tersebut.
  • area($geometry) dan length($geometry) selalu planimetrik dalam CRS layer itu sendiri. Pada layer EPSG:4326, area($geometry) menghasilkan derajat persegi (sekitar 0.0000003 untuk sebuah rumah), yang dibulatkan menjadi 0.0 di kolom desimal standar.
  • Transformasi ke Web Mercator (EPSG:3857) sebelum area() membesarkan setiap bangunan +5,95% bahkan di lintang Bengaluru (13° LU), dan membesarkan panjang jalan +3,03%. Transformasi ke zona UTM lokal (EPSG:32643) tetap dalam selisih +0,12% dari luas elipsoidal.
Ekspresi pada layer EPSG:4326 (n = 200 bangunan, 200 jalan)Error median vs elipsoid WGS 84Error maks
$area (elipsoid proyek WGS 84)0.00%0.00%
$area (elipsoid proyek None)+3.24%+3.25%
$perimeter (elipsoid proyek None)+1.72%+2.25%
$length pada jalan (elipsoid proyek None)+1.31%+2.61%
area($geometry)-100.00% (derajat persegi)-100.00%
length($geometry) pada jalan-100.00% (derajat)-100.00%
area(transform($geometry, 'EPSG:4326', 'EPSG:32643'))+0.12%+0.12%
length(transform($geometry, 'EPSG:4326', 'EPSG:32643')) pada jalan+0.06%+0.06%
area(transform($geometry, 'EPSG:4326', 'EPSG:3857'))+5.95%+5.96%
length(transform($geometry, 'EPSG:4326', 'EPSG:3857')) pada jalan+3.03%+3.26%

Jika Anda belum paham kenapa EPSG:4326, EPSG:3857 dan zona UTM berperilaku sangat berbeda, baca penjelasan kami tentang apa itu CRS di QGIS.

2. overlay_nearest membaca max_distance dalam satuan layer, bukan meter

Fungsi overlay_nearest cepat karena memakai indeks spasial, dan punya parameter max_distance yang praktis. Tetapi max_distance selalu diukur dalam satuan koordinat layer.

Saat bangunan dan halte bus kami dalam EPSG:4326 (derajat) dan Anda menulis array_length(overlay_nearest('bus_stops', $id, max_distance:=300, limit:=-1)), QGIS mencari halte bus dalam radius 300 derajat. Itu mencakup seluruh Bumi, sehingga setiap bangunan mendapat 37 (semua 37 halte bus di layer). Menebak max_distance:=0.003 untuk 300 meter juga tidak bekerja dengan rapi, karena satu derajat bujur dan satu derajat lintang tidak sama panjangnya dalam meter: pada bangunan fid 62, 0.003 menghasilkan 8 halte, padahal yang benar 7. Proyeksikan ulang kedua layer ke UTM terlebih dahulu, atau pakai pola aggregate(..., filter:=distance(transform(...))) dari baris terakhir tabel spasial di atas.

3. Baris NULL langsung jatuh ke cabang ELSE dari CASE WHEN

Di dataset Bengaluru kami, hanya 1.073 dari 8.709 bangunan (12,3%) yang punya tag building:levels. Sisanya, 7.636, bernilai NULL.

Jika Anda menulis CASE WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END, kedua perbandingan <= bernilai tidak diketahui pada baris NULL, dan baris itu jatuh ke ELSE. Akhirnya 7.636 bangunan tanpa data tergolong menara tinggi tanpa satu peringatan pun. Selalu taruh WHEN "field" IS NULL THEN 'unknown' (atau hilangkan ELSE agar baris yang tidak cocok tetap NULL) sebagai cabang pertama saat data Anda punya celah.

4. "Only update selected features" membuat sisa kolom tetap NULL

Setiap kali ada satu fitur saja yang terseleksi di kanvas peta, Field Calculator otomatis mencentang Only update N selected feature(s).

Saat saya menyeleksi 39 jalan primary di Bengaluru dan menjalankan CASE WHEN "highway" IN ('primary', 'secondary') THEN 'arterial' ELSE 'local' END ke field baru road_rank, QGIS menulis 'arterial' ke 39 baris itu dan membiarkan 815 jalan lainnya (termasuk semua 28 jalan secondary yang jelas disebut dalam ekspresi saya) tetap NULL.

Tabel atribut QGIS untuk layer jalan setelah Field Calculator dijalankan dengan 39 jalan primary terseleksi: baris primary menampilkan road_rank sebagai arterial, sedangkan baris secondary dan residential menampilkan NULL, dan row_n menampilkan 1, 2, 3 dari @row_number.
Karena 39 jalan primary terseleksi saat dialog dibuka, 28 jalan secondary dan 787 jalan lokal keluar sebagai NULL meskipun ekspresi CASE menanganinya.

5. Tanda kutip ganda vs kutip tunggal (kenapa "building" = "yes" menghasilkan NULL)

Di ekspresi QGIS, kutip ganda " " berarti nama field dan kutip tunggal ' ' berarti nilai teks.

Jika Anda mengetik "building" = "yes", QGIS mencari kolom bernama building dan membandingkannya dengan kolom lain bernama yes. Karena tidak ada kolom bernama yes, ekspresi bernilai NULL (dan parser QgsExpression di baliknya melaporkan Field 'yes' not found). Begitu juga, jika nama kolom mengandung titik dua, seperti building:levels milik OpenStreetMap, menghilangkan kutip ganda akan gagal dengan syntax error, unexpected Unknown_CHARACTER. Klik dua kali nama field di daftar Fields and Values selalu menyisipkan tanda kutip yang benar.

Lewati sintaksnya: menjalankan kalkulasi yang sama dengan agen AI

Menulis $area dengan tangan itu cepat. Menulis aggregate() bersarang dengan dua panggilan transform(), referensi geometri @parent dan filter jarak adalah titik di mana orang akhirnya bertanya di Stack Exchange.

Kami membuat AI Agent, panel chat yang menempel di dalam QGIS, jadi bagian ini membahas alat kami sendiri. Karena berjalan di dalam proyek QGIS yang sedang Anda buka, alat ini memeriksa nama layer, tipe field, CRS dan nilai unik sebelum menjalankan Field Calculator atau alat Processing untuk Anda.

Pada 7 November 2026 saya memberi AI Agent (v1.9.4, effort Medium, izin Balanced) tiga kalkulasi multi-langkah dari rencana uji kami, satu kalimat per chat, pada lima layer Bengaluru yang persis sama dalam EPSG:4326.

TugasPrompt persis yang dikirimWaktu agenHasil terhadap pengecekan independen kami
A. Hitungan kedekatan"Add a field called bus_stops_300m to the buildings layer with the number of bus stops within 300 metres of each building."39 dtkLulus. Field integer dibuat, semua 8.709 bangunan terisi, 0 selisih terhadap hitungan tapak-ke-halte kami dalam EPSG:32643 (rentang 0 sampai 8).
B. Klasifikasi + styling"Class the buildings into low (1 or 2 levels), mid (3 or 4) and high (5 or more) from the building:levels field, store the class in a new field called height_class, and style the buildings by that class."18 dtkLulus. 563 low, 442 mid, 68 high (semua 1.073 sesuai aturan kami). 7.636 baris tanpa jumlah lantai tetap NULL dan diberi style sebagai kategori abu-abu keempat "Unknown levels".
C. Jumlah sekolah dan luas bangunan per kelurahan"For each ward, add the number of schools and the total building area in hectares."37 dtkLulus (dengan perbedaan metode). school_count cocok di 10/10 kelurahan (total 35). building_ha cocok dengan luas tapak yang dipotong di 10/10 kelurahan (total 148,25 ha).

Pada Tugas A, agen tidak terjebak di perangkap 300 derajat overlay_nearest. Log alatnya menunjukkan agen memeriksa kedua layer, mengecek CRS, menjalankan kalkulasi dalam satuan metrik dari tapak bangunan (bukan centroid, yang akan mengubah jawaban pada 667 bangunan), dan memverifikasi nilai min dan maks sebelum menjawab.

Panel AI Agent di QGIS setelah menambahkan field bus_stops_300m ke 8.709 bangunan Bengaluru, melaporkan hitungan dari 0 sampai 8 tanpa nilai kosong dan mencatat jarak garis lurus dari tiap tapak bangunan ke 37 halte.
Tugas A di AI Agent: 39 detik untuk menghitung jumlah halte bus dalam 300 m pada 8.709 bangunan di proyek EPSG:4326 tanpa jebakan derajat.

Pada Tugas B, agen lebih dulu memeriksa nilai unik building:levels, melihat bahwa 7.636 dari 8.709 bangunan tidak punya jumlah lantai, membiarkan baris itu NULL di height_class alih-alih jatuh ke high, lalu menerapkan style kategori 4 kelas di peta.

Panel AI Agent dan panel Layers QGIS yang menampilkan field height_class dikategorikan menjadi low, mid, high dan Unknown levels, dengan jawaban yang mencantumkan 563 low, 442 mid, 68 high dan 7.636 bangunan unknown.
Tugas B: agen memeriksa kolom lebih dulu, menjaga 7.636 bangunan tanpa data agar tidak masuk cabang ELSE, dan memberi style keempat kelompok.

Melihat peta hasil render membuat jelas kenapa pengecekan NULL penting pada data OpenStreetMap: bangunan abu-abu adalah 87,7% yang tidak punya tag building:levels.

Peta QGIS hasil render untuk pusat Indiranagar, Bengaluru, dengan bangunan berwarna kuning muda untuk low, oranye untuk mid, merah tua untuk high dan abu-abu untuk unknown levels, ditumpangi jalan dan titik hitam untuk halte bus.
Pusat Indiranagar dengan style height_class: 563 low (kuning), 442 mid (oranye), 68 high (merah) dan 7.636 tanpa tag lantai di OSM (abu-abu).

Pada Tugas C, angka building_ha dari agen sedikit berbeda dari baris hektare per kelurahan di kumpulan resep kami: New Thippasandra keluar 20.151 ha, bukan 20.292 ha (-0,69%), Jeevan Bhimanagar -0.14% dan Indiranagar -0.06%. Saat saya cek penyebabnya, agen ternyata memakai metode geometri yang lebih ketat daripada filter intersects() saya: agen memotong poligon bangunan di batas kelurahan sebelum menjumlahkan luasnya, sehingga bangunan yang melintasi batas tidak terhitung dua kali di dua kelurahan, dan agen mencatat hal itu dalam balasannya. Agen memang membiarkan layer kelurahan dalam mode edit dengan editan yang belum disimpan, dan menyebutkan di jawabannya bahwa editan belum disimpan.

Panel AI Agent di QGIS melaporkan school_count dan building_ha untuk tiap 10 kelurahan Bengaluru, mencatat bahwa tapak dipotong di batas kelurahan dan editan belum disimpan.
Tugas C: agen memotong bangunan yang melintasi batas kelurahan sebelum menjumlahkan hektare, dan mencatat bahwa editan layer belum disimpan.

Berikut tabel atribut hasilnya pada layer kelurahan setelah editan itu disimpan:

Tabel atribut QGIS untuk 10 kelurahan Bengaluru yang menampilkan kolom integer baru school_count dan kolom desimal building_ha di samping nama kelurahan seperti Domlur, Indiranagar, New Thippasandra dan Ulsoor.
10 kelurahan dengan tambahan school_count (total 35) dan building_ha (total 148,25 ha).

Tiga tugas adalah sampel kecil (n = 3), dan prompt yang saya berikan jelas serta menyebut nama field dan batas kelas, jadi anggap ini demonstrasi, bukan benchmark. Untuk rumus sederhana seperti $area atau concat(), dialog Field Calculator lebih cepat daripada mengetik pesan chat. Agen berguna saat Anda butuh agregat antar layer, transformasi CRS atau rangkaian Processing multi-langkah, atau saat Anda sebenarnya harus menulis skrip PyQGIS. Anda juga bisa membandingkan asisten lain di hub QGIS AI kami.

Cara kami mengukurnya. Semua pengujian dilakukan pada 7 November 2026 di QGIS 3.44.15-Solothurn di macOS dengan data OpenStreetMap untuk Indiranagar, Bengaluru (bounding box 12.968, 77.634, 12.986, 77.656, ODbL) dalam CRS proyek EPSG:4326. Setiap ekspresi di kumpulan resep diverifikasi terhadap kalkulasi Python atau QgsDistanceArea independen pada ID fitur yang sama. Error luas dan panjang diukur pada 200 bangunan dan 200 jalan pertama menurut fid terhadap QgsDistanceArea dengan elipsoid WGS 84 (EPSG:7030). AI Agent 1.9.4 dijalankan dengan effort Medium dan izin Balanced dalam chat baru untuk setiap tugas. Jumlah pertanyaan YouTube kami berasal dari 70 komentar minta tolong di 59 video yang disaring dari korpus 25.276 komentar.

Pertanyaan yang sering diajukan

Kenapa kalkulasi $area saya salah atau menghasilkan 0 di QGIS?

Pertama, periksa apakah Anda mengetik area($geometry) alih-alih $area. Pada layer yang disimpan dalam derajat (EPSG:4326), area($geometry) menghasilkan derajat persegi (sekitar 0.0000003 untuk sebuah rumah), yang dibulatkan menjadi 0.0 di field desimal. Pakai $area dengan elipsoid proyek diatur ke WGS 84 di Project > Properties > General > Measurements, atau proyeksikan ulang geometri di dalam ekspresi dengan area(transform($geometry, 'EPSG:4326', 'EPSG:32643')) memakai zona UTM lokal Anda. Hindari EPSG:3857 (Web Mercator), yang membesarkan luas bangunan +5,95% bahkan di 13° LU dalam pengujian kami.

Bagaimana cara menulis pernyataan IF atau CASE di Field Calculator QGIS?

Untuk dua hasil, pakai if(condition, value_if_true, value_if_false), misalnya if($area < 100, 'small', 'large'). Untuk tiga kelas atau lebih, pakai CASE WHEN ... THEN ... ELSE ... END:

CASE WHEN to_int("building:levels") IS NULL THEN 'unknown' WHEN to_int("building:levels") <= 2 THEN 'low' WHEN to_int("building:levels") <= 4 THEN 'mid' ELSE 'high' END

Taruh pengecekan IS NULL di awal. Jika tidak, setiap baris dengan nilai kosong jatuh ke ELSE.

Kenapa Field Calculator menghasilkan NULL untuk semua atau sebagian besar baris saya?

Empat penyebab umum:

  1. Ada fitur yang terseleksi di peta, sehingga Only update N selected feature(s) tercentang dan setiap baris yang tidak terseleksi tetap NULL.
  2. Anda menggabungkan teks dengan || (seperti "addr:housenumber" || ' ' || "addr:street"), di mana satu input NULL membuat seluruh hasil menjadi NULL. Pakai concat() sebagai gantinya.
  3. Anda memberi kutip ganda pada nilai teks ("building" = "yes"), yang membuat QGIS mencari kolom bernama yes. Pakai kutip tunggal untuk nilai ("building" = 'yes').
  4. Anda memakai $x atau $y pada layer poligon atau garis. $x hanya bekerja pada titik; pakai x(centroid($geometry)) untuk poligon.

Bagaimana cara menghitung luas dalam hektare di Field Calculator QGIS?

Atur Output field type ke Decimal number (real), atur Precision ke 2 atau 3, lalu masukkan $area / 10000 (dengan asumsi satuan luas proyek Anda meter persegi dan elipsoid proyek sudah diatur di Project > Properties > General). Untuk membulatkan nilai yang disimpan itu sendiri ke 3 angka desimal, pakai round($area / 10000, 3).

Bagaimana cara memperbarui hanya fitur yang terseleksi di Field Calculator?

Seleksi fitur di kanvas peta atau di tabel atribut terlebih dahulu, lalu buka Field Calculator (Ctrl+I). Kotak centang Only update N selected feature(s) di kiri atas akan tercentang otomatis. Pilih Update existing field, pilih kolomnya dari dropdown, masukkan ekspresi dan klik OK.

Coba AI Agent gratis

Kerjakan di QGIS cukup dengan memintanya

AI Agent menjalankan tugas yang Anda jelaskan, langsung di proyek QGIS Anda sendiri. Gratis, tanpa kartu.

Coba AI Agent gratis