QGIS Mekansal Görünümleri Okuyabilir mi?


11

Oluşturduğum bir spatialite veritabanım var, bu da birkaç yıllık suç verisini kapsıyor. Zaman aralığını veya hangi tür suçların iade edildiğini sınırlayan bir Görünüm tanıtarak bir kullanıcı için etkileşimi basitleştirebileceğim gerçek dünya senaryosunu kolaylaştırmak için QGIS'in bu Görünümü bu şekilde okumasının mümkün olup olmadığını bilmek istiyorum veritabanımdaki başka herhangi bir uzamsal tablo olurdu. Buradaki nokta, açıkça kullanabileceğim her olası Görünüm için ayrı bir tablo oluşturmak istemediğim ve kullanıcının veritabanını ve verileri ayarlamak için uygun SQL'i bilmesini gerektirmeden basitleştirmeye çalışıyorum. ArcGIS dünyasındaki benzer bir iş akışı, kullanıcının veritabanına erişen (örneğin, SQL Server) ArcMap'te açabileceği ve yalnızca sınırlı veri kümesini sunan ayrı katman dosyaları oluşturmak olabilir.

Veritabanımda bir görünüm oluşturdum, ancak QGIS'deki spatialite db'ye bağlandığımda içe aktarabileceğim özellik sınıfları listesinde görünmüyor. Belki Görüntülemeler mekansal sayılmaz? (Bu daha sonra inceleyeceğim bir şey, ama zaten yaptığımı düşündüm; sadece sonucu hatırlamıyorum.) Her durumda, istediğim iş akışını veya benzer ArcGIS alternatifini nasıl çoğaltabiliriz ?

Yanıtlar:


15

QGIS içinde kullanabilmek için geometry_columns tablosundaki görünümü kaydetmeniz gerektiğini düşünüyorum.

Aşağıdaki örnekte iyi bir kaynak "Kendi Uzamsal Görünümünüzü El Yazısıdır" :

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

Her neyse, bu GÖRÜNÜMü views_geometry_columns'a kaydetmelisiniz, böylece gerçek bir Mekansal Görünüm haline gelsin.


Sorun bu gibi görünüyor. Görünümü oluşturdum ve meta tabloları kontrol ettim. Açıkçası, görünümdeki geometri listelenmemiştir. Görünümün geometrisini nasıl kaydederim? RecoverGeometryColumn'u denedim ama bana masanın mevcut olmadığını söylüyor. 2.4 sürümünde olduğumu sanıyordum, ama görünüşe göre Spatialite 3.0 beta ile çalışıyorum. Belki de komutu yanlış uyguluyorum? Belki görüşlerde işe yaramıyor? (Daha iyi!); açıklığa kavuşturmak için, komutum SELECT RecoverGeometryColumn ('tblName', 'SHAPE', 2226, 'POINT', 2);
Bryan Goodrich

4
Geometri tabanlı görünümleri işlemek için özel bir tablo vardır. Aşağıdaki sözdizimini kullanın VIEWS_GEOMETRY_COLUMNS DEĞERLERİNE EKLE ('{TABLO ADI}', '{GEOM KOLON ADI}', '{GEOM TYPE}', 2, {SRID}, 0);
Nathan W

örnek: VIEWS_GEOMETRY_COLUMNS DEĞERLERİNE EKLE ('Towns_v1', 'Geometri', 'POINT', 2, 32632, 0);
Nathan W

Eklenmesi SELECT * FROM views_geometry_columns;gerekenleri görmek için kullanın . More info at gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/...
Nathan W

2

Ayrıca, burada tartışılana benzer şekilde, görünüme benzersiz bir kimlik koymak zorunda kalabilirsiniz: PostGIS'te benzersiz bir kimliğe sahip bir Görünüm oluşturmak mümkün mü?


Görünüm oluşturmada açıkça PK'yi seçmezsem, benzersiz bir kimlik taşınmaz mı? En azından burada yaptığım basit seçme sorgusu için.
Bryan Goodrich

@ BryanGoodrich- Bir deneyin, ama bulduğum kadarıyla PostGIS görünümleriyle bu şekilde çalışmıyor.
RyanKDalton

Görünüm "NEREDE suç YERİNDEN SEÇİLDİ ..." Bu, PK sütununu (SQLite DB'yi doldurmak için kullandığım R tablosundaki sütun adlarından oluşturduğum rowname) döndürdü. Sorun, altı çizildiği gibi: meta tablolarda bir geometri referansına ihtiyaç duyuyor. QGIS, uzamsal tabloları tanımlamak için bunu kullanır ve görünümün bu meta tablolarda herhangi bir kaydı yoktur.
Bryan Goodrich

Bunu bildiğim iyi oldu. Soruyu sorduğunuz ve iyi bir yanıt
aldığınız

2

görünümü bugünlerde geometry_columns'a (2015 yılı) kaydettirmek şu şekilde ek bir 'read_only' alanı gerektiriyor gibi görünüyor:

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);

1
Lütfen destekleyici belgelere bir bağlantı ekleyebilir misiniz? Teşekkürler!
underdark

2

SpatialLite 4.x için, orijinal yanıtta iki değişiklik yapılması gerekir - read_onlysütunun eklenmesi ve eklenen tüm değerlerin küçük harfe değiştirilmesi. Güncellenmiş SQL şöyle görünecektir:

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);

read_onlyAlan 0 veya 1 (See Sandro Furieri yorumuna kabul Google Grupları fazla açıklama için.)

Bu ve diğer 4.x değişiklikleriyle ilgili daha fazla ayrıntı, 4.0'a geçiş wiki'sinde bulunabilir .


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

Not: sadece değiştirin: nameOfView ve geometryTable

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.