Membuat tampilan spasial di PostGIS dan menambahkannya sebagai layer di QGIS?

49

Di PostGIS 2.0, saya mencari cara yang efisien untuk membuat tampilan yang diaktifkan secara spasial yang dapat dilihat di QGIS.

Saya mengikuti konteks Bagian 2 dari @Mike Toews jawaban untuk Bagaimana membuat tabel dari tabel yang ada (menerapkan skema baru) di postgis DB? , dan tampilan muncul sebagai layer titik (dalam kasus saya) dalam dialog "Tambahkan Lapisan PostGIS". Tetapi setelah membuat tampilan dan mengaktifkannya secara spasial, saya menerima kesalahan berikut ketika mencoba menambahkan tampilan ke QGIS:

Anda harus memilih tabel untuk menambahkan lapisan

Adakah yang bisa menjelaskan mengapa tampilan spasial tidak dimuat ke QGIS, dan apa yang perlu saya lakukan agar dapat dimuat sebagai layer di QGIS?

Saya saat ini menggunakan QGIS v1.8 dari installer OSGEO

Pandangan saya dibangun dari basis data geonames, dimuat ke dalam PostGIS. Tabel geoname / data spasial dapat dipilih / dilihat di QGIS saja.

Ketika saya mencoba untuk memilih " mt_view ", QGIS melihat tampilan dalam dialog, tetapi tidak akan membiarkan saya memilihnya. Ini memberi kotak bertitik di sekitar area, tetapi tidak menyorot dan memilih tampilan.

QGIS tidak dapat memilih mt_view sebagai layer


Saya baru menyadari bahwa ketika saya menjalankan permintaan pertama saya:

CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'

tampilan muncul di QGIS Add Layer Dialog, tetapi tidak dapat dipilih. Lalu ketika saya menjalankan:

SELECT Populate_Geometry_Columns('data.test'::regclass);

Saya mendapatkan hasil dari "0", di mana menurut dokumentasi , saya pikir itu harus mengembalikan "1".

Ryan Dalton
sumber
1
Saya mengkonfirmasi masalahnya. Dengan QGIS 1.8, PostGIS 2.0, dan tampilan yang dibuat dari tabel dengan kunci utama, tampilan itu terdaftar di lapisan yang tersedia tetapi pesan kesalahan "Anda harus memilih tabel untuk menambahkan lapisan" muncul.
giohappy
2
Apakah ada cara lain untuk mengatur secara otomatis de primary key di jendela Postgis Add Layer ketika kita bekerja dengan view? Sangat sulit untuk memilih bidang kunci utama di layar ini untuk setiap lapisan / tampilan jika Anda membayangkan pengguna GIS normal dan tampilan memiliki banyak bidang integer.
@ Pimenez, saya sarankan memulai pertanyaan baru dengan apa yang Anda nyatakan di atas, dan kemudian referensi url pertanyaan ini di Anda sendiri. Itu akan memberikan visibilitas yang jauh lebih luas.
RyanDalton
Tidak ada cara untuk memvisualisasikan cembung di qgis 1.8 lisboa? Saya telah mencoba mengikuti vievs di Postgis 1.5. Saya diberitahu untuk menggunakan kolom id untuk menerbitkannya di Qgis. Jika Anda tidak menggunakan kolom id, Anda tidak dapat memuatnya karena kesalahan. 1. buat atau ganti tampilan con_hull_baeume3 (bid) sebagai pilih '0', ST_ConvexHull (ST_Collect (geom)) FROM baeume; 2. membuat atau mengganti tampilan con_hull_baeume4 (bid) sebagai tawaran pilihan, ST_ConvexHull (ST_Collect (geom)) DARI grup baeume berdasarkan tawaran; tapi yang ini membuat cembung pada masing-masing titik geometri. Maksud saya cukup gunakan 'pilih ST_ConvexHull (ST_Collect (geom)) DARI baeume;' bekerja
ulan
1
Selamat datang! Silakan posting ini sebagai pertanyaan baru, karena sepertinya tidak menjawab yang asli. Setidaknya jika itu adalah pertanyaan, karena pernyataan terakhir tidak jelas apakah Anda berhasil atau tidak.
lynxlynxlynx

Jawaban:

54

Saya dapat mengonfirmasi bahwa tidak mungkin hanya memilih tampilan yang tercantum.

Tampaknya perlu untuk memilih "kolom kunci utama" terlebih dahulu. Kemudian tabel berubah menjadi dipilih:

masukkan deskripsi gambar di sini

underdark
sumber
1
Wow, saya tidak akan pernah melihatnya. Terima kasih banyak! Saya telah mengedit judul untuk mencerminkan masalah dengan QGIS, bukan tampilan PostGIS.
RyanDalton
Tampaknya ini adalah masalah untuk QGIS 1.8 (yang belum saya gunakan). Langkah-langkah ini tidak diperlukan untuk 1.7.
Mike T
Benar, 1.7 mencoba menebak kunci utama. Tapi itu tidak berhasil.
underdark
sebagai tambahan, @underdark, apakah QGIS menerima jenis PK lainnya?
George Silva
1
Di QGIS3 kolom tersebut mengarah "id fitur" bukan "kolom kunci utama" dan (setidaknya bagi saya) itu berada di luar jendela default (yaitu tidak terlihat) dan tidak ada indikasi bahwa ada lebih banyak kolom! Saya pikir saya akan mencatat permintaan fitur yang diminta untuk rincian ini (jika perlu) setelah seleksi. Tampaknya pengembang menganggap bahwa orang akan memastikan ada kunci unik di kolom pertama.
Russell Fulton
5

(Memperbarui sedikit jawabanku)

Selama bidang OBJECTID (row_number) adalah yang pertama dalam definisi kolom tampilan , QGIS akan mengambilnya tanpa meminta Anda untuk menambahkan dari menu 'add vector layer'.

CREATE OR REPLACE VIEW dqmt.addressverify AS 
 SELECT row_number() OVER (ORDER BY newaddresses.addressid) AS objectid,
    newaddresses.addressid
  , geom
   FROM dqmt.newaddresses;

Saya baru saja memperbaiki beberapa pandangan lama yang rusak sesuai pertanyaan awal, tetapi memindahkan bidang OBJECTID ke awal tampilan memperbaiki masalah!

DPSSpatial
sumber
Saya telah menggunakan sintaks "row_number () over ()" untuk banyak tampilan juga. Saya biasanya menggunakan "gid" untuk bidang kunci utama saya. Apakah semua pandangan Anda yang lain menggunakan "objectid" sebagai kunci utama mereka?
RyanDalton
biasanya objectid - yang bekerja pada contoh di atas - tetapi akan mencoba gid ... apakah sesuatu yang QGIS mengenali sebelum bidang 'id' lainnya?
DPSSpatial
GID tidak memiliki pengaruh pada hal ini ...
DPSSpatial
Hanya memimpikan kemungkinan. terima kasih sudah memeriksa
RyanDalton
(Terlambat untuk ini, tapi ...) pada tebakan, saya berpikir bahwa jika sebuah tabel yang sedang dimuat memiliki PRIMARY KEYdefinisi, QGIS secara rutin mengambilnya: tidak pernah gagal untuk 'memilih' PK di salah satu meja saya yang memiliki PK, meskipun hampir semua PK saya VARCHAR. Itu tidak dapat terjadi dengan VIEWkarena PostgreSQL VIEWtidak dapat memiliki CONSTRAINT. Cukup yakin itu sebabnya perlu untuk memilih PK untuk VIEWtangan ketika mengimpor ke QGIS melalui tombol 'Tambah PostGIS Layers', itulah sebabnya saya mengimpor mereka menggunakan skrip Python.
GT.
4

Apakah tampilan Anda muncul di geometry_columnstabel? Menurut manual , tampilan akan muncul secara otomatis di 2.0 tetapi saya belum mencobanya.

Coba jalankan yang berikut ini untuk memeriksa:

SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims 
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';
Ian Turton
sumber
Ya, menjalankan pemeriksaan ini terhadap pandangan saya tidak kembali: the_geom, Point, 4269,2
RyanDalton
3

Apakah tampilan Anda menggunakan bidang bilangan bulat unik seperti "gid" atau setara PK dari salah satu tabel di tampilan Anda?

Saya tahu bahwa dalam versi QGIS sebelumnya saya memiliki masalah dengan pandangan yang ditambahkan ke peta ketika tidak ada bidang bilangan bulat yang unik. Namun saya memang menerima pesan kesalahan berbeda yang menunjukkan masalah itu, tetapi mungkin ada baiknya memeriksa untuk menutup semua pangkalan.

Ando
sumber
Ya, tabel geonames memiliki "geonameid" yang merupakan ID unik dan memiliki batasan PRIMARY KEY yang ditetapkan pada bidang itu.
RyanDalton