Mendapatkan daftar nilai berbeda dari bidang shapefile menggunakan QGIS?

18

Saya memiliki shapefile yang fitur-fiturnya dapat saya filter dengan menentukan klausa where dalam dialog query. Fx Saya memiliki bidang bernama 'city_name' dan dengan menyatakan 'city_name = "London"' di mana klausa hanya London yang ditampilkan. Yang ingin saya lakukan sekarang adalah mengambil semua nilai dalam 'city_name' dari tabel atribut.

Sesuatu seperti itu:

select distinct city_name from [attribute table]

Saya menemukan beberapa alat di QGIS yang tampaknya berurusan dengan SQL dan saya juga melihat dengan cepat pada berbagai Plugin. Tapi saya gagal menghubungkan ke database atau nama tabel ... database apa atau tabel mana dalam kasus itu?

Pada akhirnya saya ingin mengekspor daftar hasil dan menggunakannya untuk diproses lebih lanjut.

Saya menggunakan QGIS 1.8.

Raffael
sumber

Jawaban:

32

Perbarui jawaban (Versi QGIS> = 2.14)

Sejak QGIS 2.14 , Anda dapat menggunakan menjalankan pernyataan SQL pada setiap layer vektor yang dimuat menggunakan lapisan Virtual .

  1. Setelah layer dimuat di QGIS, pergi ke Layer> Add Layer> Add / Edit Virtual Layer ;
  2. Dalam dialog Buat lapisan virtual, masukkan pernyataan SQL Anda di bidang Kueri. Sesuatu seperti:

    PILIH PILIH city_name DARI layer_name

  3. Untuk geometri atur No Geometry

  4. Klik Oke dan sebuah tabel akan dimuat dalam QGIS dengan nilai unik yang diinginkan.

Catatan: tabel ini akan diperbarui jika nilai baru ditambahkan ke kolom city_name.

Jawaban lama (Versi QGIS <2.14)

Anda memiliki beberapa pilihan untuk melakukan apa yang Anda minta.

  1. Impor shapefile Anda dalam database Spatialite atau Postgis, dan kemudian Anda bisa meminta tabel Anda menggunakan pernyataan SQL lengkap;
  2. Gunakan alat Dissolve (Vector> Geoprocessing Tools> Dissolve), untuk membubarkan shapefile Anda menggunakan bidang "city_name". Meskipun merupakan metode yang aneh, file dbf dari shapefile yang dihasilkan akan memberikan daftar yang Anda butuhkan;
  3. Lihatlah plugin statistik grup (1.6) , Anda dapat menggunakan "city_name" sebagai bidang klasifikasi, dan tekan hitung. Ini akan menghitung beberapa statistik tentang setiap kota, Anda kemudian dapat menyalin hasilnya dan mengekstrak daftar kota.

Saya baru saja memperhatikan bahwa, di Alat Analisis Vektor> , ada alat Nilai Daftar unik yang tepat yang dibutuhkan seseorang untuk tugas ini. Sangat mudah ... tidak ada solusi dan tidak perlu untuk Plugin.

Alexandre Neto
sumber
6

Gunakan Manajer DB QGIS dan akses shapefile Anda melalui 'lapisan virtual'

Anda kemudian dapat menggunakan jendela SQL dan menulis kueri Anda:

masukkan deskripsi gambar di sini

DPSSpatial
sumber
1
Ini sekarang (QGIS 2.14+) jawaban yang benar.
Alexandre Neto
-1

Gunakan pembuat kueri di QGIS, buka bidang nama kota di bidang dalam pembuat kueri. Pergi ke nilai, tambahkan semua. Hapus semua nol.

Buat skrip yang mirip dengan nama kota = "london" dan nama kota = "paris" hingga Anda memiliki daftar nama lengkap dan jalankan skrip. Sekarang semua nama kota dipilih. Anda dapat mengekspor yang dipilih sebagai file bentuk dan mengimpor ke database postgresql.

Untuk menggunakan backend postgresql ke QGIS, instal postgresql stack dengan geoserver, postgresql, dan databse yang diaktifkan postgis di postgresql. Anda perlu menghubungkan QGIS ke server. Bermain-main sedikit dan Anda akan mengetahuinya.

Lewis
sumber