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
fid27 di layer uji, kolom luas biasanya tetap197.355sementara virtual field berubah menjadi789.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 dari0dan di dialog mulai dari1. - 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:

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.

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 inginkan | Ekspresi untuk ditempel | Hasil uji pada sampel | Versi keliru yang umum (dan akibatnya) |
|---|---|---|---|
| Luas bangunan dalam m² (elipsoidal) | $area | 197.35, 110.86, 141.11, 219.71, 318.83 | area($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.22 | Transformasi ke 'EPSG:3857' (Web Mercator) membesarkan luas +5,95% di sini |
| Panjang jalan dalam meter (elipsoidal) | $length | 616.34, 7.99, 1104.32, 9.14, 72.24 | length($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.29 | Transformasi ke 'EPSG:3857' membesarkan panjang jalan +3,03% (median) |
| Keliling bangunan dalam meter | $perimeter | 56.72, 44.97, 48.60, 61.54, 72.69 | perimeter($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.32 | y(centroid($geometry)) menghasilkan derajat (12.97...) saat layer dalam EPSG:4326 |
| Nomor baris atau ID fitur | @row_number atau $id | 1, 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 inginkan | Ekspresi untuk ditempel | Hasil uji pada sampel | Versi keliru yang umum (dan akibatnya) |
|---|---|---|---|
| Kelas ukuran dari luas | CASE WHEN $area < 100 THEN 'small' WHEN $area < 250 THEN 'medium' ELSE 'large' END | medium, medium, medium, medium, large | Tidak diuji |
| Ganti jumlah lantai NULL dengan integer default | coalesce(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 dipisahkan | 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 | mid, 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 inginkan | Ekspresi untuk ditempel | Hasil uji pada sampel | Versi keliru yang umum (dan akibatnya) |
|---|---|---|---|
| Gabungkan nomor rumah dan nama jalan dengan aman | concat("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 jalan | regexp_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 digit | lpad(to_string("osm_id"), 12, '0') | '000313829229', '000313835091' | Tidak diuji |
| Format angka untuk tampilan | format_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 tanggal | day(age(to_date('2026-11-07'), to_date('2019-03-15'))) | 2794 | age(...) 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 inginkan | Ekspresi untuk ditempel | Hasil uji pada sampel | Versi keliru yang umum (dan akibatnya) |
|---|---|---|---|
| Hitung bangunan yang bersinggungan dengan tiap kelurahan | aggregate('buildings', 'count', "osm_id", filter:=intersects($geometry, geometry(@parent))) | 4, 1552, 336, 3141, 79, 402, 1179, 348, 1539, 139 | Lupa filter:=... memberi setiap kelurahan jumlah total seluruh layer (8709) tanpa error |
| Total luas bangunan dalam ha per kelurahan | round(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.7 | Menjumlahkan tapak utuh yang menyentuh batas kelurahan, sehingga bangunan di perbatasan terhitung di dua kelurahan |
| Hitung sekolah di dalam tiap kelurahan | array_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 terdekat | distance(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.61 | distance($geometry, array_first(overlay_nearest('bus_stops', $geometry))) menghasilkan 0.001142 (derajat) |
| Hitung halte bus dalam radius 300 m dari bangunan | aggregate('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, 7 | array_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).
$areadan$lengthmemakai elipsoid proyek (diatur diProject > Properties > General > Measurements). Saat elipsoidnyaWGS 84,$areamenghasilkan meter persegi yang akurat meskipun layer dan proyek Anda dalam derajat (EPSG:4326).- Saat elipsoid proyek diatur ke
None / Planimetric,$areapada layerEPSG:4326kami tetap tidak menghasilkan derajat persegi. Di QGIS 3.44.15 hasilnya meter persegi yang +3,24% terlalu besar pada 200 bangunan tersebut. area($geometry)danlength($geometry)selalu planimetrik dalam CRS layer itu sendiri. Pada layerEPSG:4326,area($geometry)menghasilkan derajat persegi (sekitar0.0000003untuk sebuah rumah), yang dibulatkan menjadi0.0di kolom desimal standar.- Transformasi ke Web Mercator (
EPSG:3857) sebelumarea()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 84 | Error 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.

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.
| Tugas | Prompt persis yang dikirim | Waktu agen | Hasil 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 dtk | Lulus. 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 dtk | Lulus. 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 dtk | Lulus (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.

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.

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.

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.

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

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.
Kenapa Field Calculator menghasilkan NULL untuk semua atau sebagian besar baris saya?
Empat penyebab umum:
- Ada fitur yang terseleksi di peta, sehingga Only update N selected feature(s) tercentang dan setiap baris yang tidak terseleksi tetap
NULL. - Anda menggabungkan teks dengan
||(seperti"addr:housenumber" || ' ' || "addr:street"), di mana satu inputNULLmembuat seluruh hasil menjadiNULL. Pakaiconcat()sebagai gantinya. - Anda memberi kutip ganda pada nilai teks (
"building" = "yes"), yang membuat QGIS mencari kolom bernamayes. Pakai kutip tunggal untuk nilai ("building" = 'yes'). - Anda memakai
$xatau$ypada layer poligon atau garis.$xhanya bekerja pada titik; pakaix(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.
Kerjakan di QGIS cukup dengan memintanya
AI Agent menjalankan tugas yang Anda jelaskan, langsung di proyek QGIS Anda sendiri. Gratis, tanpa kartu.
, buka tabel atribut layer, klik ikon Field Calculator (

