Saya membuat peta fiktif, jadi saya perlu membuat banyak titik, garis, dan pasti poligon. Kemudian saya mengekspor data saya sebagai geojson. Tapi sebelum itu saya harus pergi dan memberikan setiap elemen ID unik.
Saya tidak perlu penyortiran khusus, seperti poligon terbesar mendapatkan ID terkecil atau lebih. Aku hanya perlu semua poligon dengan sebuah ID di akhir, tanpa melakukan itu secara manual seperti saya harus lakukan sekarang.
Akan lebih bagus jika seseorang tahu bagaimana melakukan itu.
Jawaban:
Menggunakan bidang kalkulator adalah cara untuk pergi:
Tidak ada ID yang diberikan
Beberapa ID sudah diberikan
sumber
Haleluya! Atau Eureka. Atau terserah. Ini bisa dilakukan. Dengan shapefile.
maximum("FID") + 1
.Dengan menghapus centang yang Dapat Diedit , Anda tidak dapat memasukkan nilai lain atau menghapus yang ada di sana. Perhatikan bahwa jika ada nilai tanpa ID, nilai ini tidak akan diperbarui. Pada titik tertentu saya akan bereksperimen dengan memeriksa Menerapkan nilai default pada pembaruan dan merevisi rumus saya untuk memeriksa nilai nol atau NULL untuk memperbarui hanya catatan tersebut ketika diedit, bukan catatan apa pun dengan nilai lebih dari 1. (Sebelumnya dalam hal ini posting itu dibahas bagaimana memperbarui bidang FID dengan nilai unik, yang perlu Anda lakukan jika Anda menambahkan bidang setelah sudah ada fitur di shapefile.)
Perhatikan bahwa ini disimpan dengan file peta saat ini, bukan shapefile, jadi menambahkan shapefile itu beberapa kali akan mengharuskan Anda untuk menyalin bagian dari style layer ke layer yang baru ditambahkan. Untuk melakukan ini, klik kanan pada layer, pilih Gaya> Salin Gaya> Bidang , dan klik kanan pada lapisan lain, pilih Gaya> Tempel Gaya> Semua Kategori Gaya (atau lanjutkan ke Bidang ). Anda juga bisa menyalin bagian gaya itu ke lapisan lain berdasarkan pada shapefile, tetapi bidang ID harus memiliki nama yang sama dengan lapisan tempat Anda menyalin.
sumber
Saya ingin menambahkan ke posting vinayan dan secara singkat menyebutkan fungsi rownum , karena sangat mirip dan dalam beberapa kasus mungkin sedikit lebih nyaman.
id mengembalikan ID Fitur , artinya selalu dimulai dari nol .
rownum mengembalikan nomor baris , artinya dimulai pada satu .
Jadi, pada dasarnya, jika Anda ingin kenaikan otomatis mulai dari 0 pergi untuk $ id , dan jika Anda ingin mulai dari 1 maka pergi untuk $ rownum .
sumber
Topik ini telah muncul di sini: Buat Shapefile dengan kunci primer kenaikan otomatis di QGIS
Saran saya adalah:
1) Database SQLITE / SpatialLite mendukung penambahan otomatis pada bidang yang disetel ke INTEGER PRIMARY KEY:
Setiap kali Anda mengedit / membuat poligon, Anda dapat mengisi atributnya, dan SQLITE akan memberinya nilai unik tambahan di bidang yang telah Anda atur ke tipe INTEGER PRIMARY KEY.
Ketika Anda siap untuk mengekspor ke GEOJSON, Anda sudah siap dengan ID UNIK Anda.
2) Jika menggunakan Shapefile, buat bidang OBJECTID tipe INTEGER dan gunakan ekspresi kalkulator bidang untuk mengisi bidang itu setiap kali Anda mengedit / membuat poligon dan perlu mengekspornya. Anda akan kehilangan ID asli yang pernah dimiliki poligon, tetapi Anda ini adalah satu-satunya cara untuk mencapai ini menggunakan .SHP. (Saya harus menemukan ekspresi kalkulator bidang).
PostGIS adalah sumber data lain yang mungkin ingin Anda jelajahi, meskipun lebih berat daripada SQLITE, Anda mungkin menemukan nilai dalam sistem seperti itu saat Anda bergerak maju ...
sumber
Posting lama tetapi untuk orang lain yang mencari solusi cepat saya adalah membuat bidang dengan $ ID +1 dan secara otomatis akan menghasilkan dimulai dengan 1!
sumber
Pembaruan untuk QGIS 3
Saya tahu saya cukup terlambat untuk hal ini tetapi selalu baik untuk memberikan pembaruan apa pun:
Di QGIS 3 sekarang ada alat asli yang dapat digunakan untuk melakukan pekerjaan yang tepat ini dan itu disebut "Tambahkan bidang autoincremental"
Tidak perlu menggunakan ekspresi dalam kalkulator lapangan atau melakukan pengkodean apa pun, namun demikian semuanya masih sangat berguna dan baik untuk diketahui.
sumber
Cara termudah untuk melakukan ini mungkin dengan skrip python atau mungkin dengan kalkulator bidang. Maaf saya tidak punya satu untuk Anda, mungkin orang lain akan melakukannya. Sementara itu, saya akan mencari skrip python untuk itu. Saya sudah melihat banyak tentang ini untuk ArcGIS, tapi saya yakin ada sesuatu di luar sana untuk QGIS.
sumber
Jika Anda tidak membutuhkan sesuatu yang dapat dicerna secara manusiawi, sekarang ada perbaikan yang mudah: Di propreties lapangan, pilih "UUID Generator", dan biarkan semuanya kosong.
Ini secara otomatis akan membuat UUID di lapangan. Tidak seramah nomor sederhana (sesuai $ id atau $ rownum), tetapi menghasilkan UUID sejak awal, jadi tidak ada langkah berurutan.
sumber
Saya ingin menambahkan bahwa ini sepertinya tidak berfungsi ketika Anda menggunakan lapisan basis data postgreSQL. $ ID dan $ rownum semuanya kembali 0. PostgreSQL 9.6 QGIS 2.18.12
sumber
solusi ini tidak lagi berfungsi untuk saya di QGIS 2.01 Dufour. Mengetik
$id
di bidang baru atau yang sudah ada yang bernama 'id' di bidang input ekspresi memberi saya kesalahan "Ekspresi tidak valid"Apa yang berhasil adalah mengetik fungsi
$rownum
dan kemudian klik "OK"sumber
Anda bisa menghapus kolom pertama (id) dan membuat yang baru "Sebagai bidang virtual"
sumber