Bisakah QGIS Membaca Tampilan Spasialit?

11

Saya memiliki basis data spasial yang saya buat yang mencakup beberapa tahun data kejahatan. Untuk memfasilitasi skenario dunia nyata di mana saya dapat menyederhanakan interaksi untuk pengguna dengan memperkenalkan Tampilan yang hanya membatasi rentang waktu atau jenis kejahatan apa yang dikembalikan, saya ingin tahu apakah mungkin bagi QGIS untuk membaca Tampilan ini seperti itu akan ada tabel spasial lainnya di database saya. Intinya di sini adalah bahwa saya jelas tidak ingin membuat tabel terpisah untuk setiap tampilan yang mungkin saya gunakan, dan saya mencoba membuatnya sederhana dengan tidak mengharuskan pengguna untuk mengetahui database dan SQL yang sesuai untuk mengelompokkan data itu sendiri. Alur kerja serupa di dunia ArcGIS mungkin membuat file layer terpisah yang dapat dibuka pengguna di ArcMap yang mengakses database (katakanlah, SQL Server) dan hanya menyajikan kumpulan data terbatas.

Saya membuat Tampilan di basis data saya, tetapi tidak muncul dalam daftar kelas fitur yang dapat saya impor ketika saya terhubung ke db spasial di QGIS. Mungkin Tampilan tidak dianggap spasial? (Ini adalah sesuatu yang akan saya bahas nanti, tetapi saya pikir saya sudah melakukannya; Saya hanya tidak ingat kesimpulannya.) Bagaimanapun, bagaimana mungkin seseorang meniru jenis alur kerja yang saya inginkan atau alternatif ArcGIS serupa ?

Bryan Goodrich
sumber

Jawaban:

15

Saya pikir Anda harus mendaftarkan tampilan di tabel geometry_columns untuk dapat menggunakannya di QGIS.

Sumber daya yang baik adalah "Tulis Tangan VIEW Spasial Anda sendiri" dengan contoh berikut:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column)
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry');

Pokoknya Anda harus mendaftarkan LIHAT ini ke dalam views_geometry_columns, sehingga untuk membuatnya menjadi Tampilan Spasial yang nyata.

underdark
sumber
Sepertinya itulah masalahnya. Saya membuat tampilan dan memeriksa tabel meta. Jelas, geometri dari tampilan tidak terdaftar. Bagaimana cara mendaftarkan geometri tampilan? Saya mencoba RecoverGeometryColumn tetapi ia memberi tahu saya bahwa tabelnya tidak ada. Saya pikir saya menggunakan versi 2.4, tetapi ternyata saya bekerja dengan Spatialite 3.0 beta. Mungkin saya salah menerapkan perintah? Mungkin itu tidak berfungsi pada tampilan? (Lebih baik!); untuk kejelasan, perintah saya adalah SELECT RecoverGeometryColumn ('tblName', 'SHAPE', 2226, 'POINT', 2);
Bryan Goodrich
4
Ada tabel khusus untuk menangani tampilan berbasis geometri. Gunakan sintaks berikut INSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES ('{TABLE NAME}', '{GEOM COLUMN NAME}', '{GEOM TYPE}', 2, {SRID}, 0);
Nathan W
contoh: INSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES ('Towns_v1', 'Geometry', 'POINT', 2, 32632, 0);
Nathan W
Gunakan SELECT * FROM views_geometry_columns;untuk melihat apa yang perlu dimasukkan. Info lebih lanjut di gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/…
Nathan W
2

Anda juga mungkin harus memasukkan ID unik ke dalam tampilan, mirip dengan apa yang dibahas di sini: Di PostGIS, mungkinkah membuat Tampilan dengan ID unik?

RyanKDalton
sumber
Kecuali saya secara eksplisit tidak memilih PK dalam pembuatan tampilan, bukankah ID unik akan dibawa? Setidaknya untuk kueri pemilihan sederhana yang saya lakukan di sini.
Bryan Goodrich
@ BryanGoodrich- Cobalah, tetapi tidak berfungsi seperti itu dengan pandangan PostGIS, sejauh yang saya temukan.
RyanKDalton
Pandangan itu diciptakan oleh "SELECT * FROM crime WHERE ..." dan saya subset oleh where-clause. Ini mengembalikan kolom PK (rowname, yang saya hasilkan dari nama kolom dalam tabel R yang saya gunakan untuk mengisi DB SQLite). Masalahnya adalah seperti yang ditunjukkan underdark: perlu referensi geometri di tabel meta. Inilah yang digunakan QGIS untuk mengidentifikasi tabel spasial, dan tampilan tidak memiliki catatan dalam tabel meta tersebut.
Bryan Goodrich
Senang mendengarnya. Terima kasih telah mengajukan pertanyaan dan mendapatkan jawaban yang bagus
RyanKDalton
2

mendaftarkan tampilan di geometry_columns saat ini (tahun 2015) tampaknya memerlukan bidang tambahan 'read_only' seperti:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry', 1);
KaeptnHaddock
sumber
1
Bisakah Anda menambahkan tautan ke dokumentasi pendukung? Terima kasih!
underdark
2

Untuk SpatialLite 4.x, diperlukan dua perubahan pada jawaban asli - penambahan read_onlykolom dan mengubah semua nilai yang dimasukkan ke huruf kecil. SQL yang diperbarui akan terlihat seperti ini:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'rowid', 'local_councils', 'geometry', 1);

The read_onlylapangan menerima 0 atau 1. (komentar See Sandro Furieri di Grup Google untuk penjelasan lebih lanjut.)

Rincian lebih lanjut tentang ini dan perubahan 4.x lainnya dapat ditemukan pada wiki beralih-ke-4.0 .

Darren
sumber
1
INSERT INTO views_geometry_columns VALUES
('nameOfView' , 'geometry', 'rowid', 'geometryTable', 'geometry', 1);

NB: ganti saja: nameOfView dan geometryTable

Norbert Byiringiro
sumber