W PostGIS 2.0 szukam wydajnego sposobu na utworzenie widoku włączonego przestrzennie, który będzie widoczny w QGIS.
Postępowałem zgodnie z kontekstem Części 2 odpowiedzi @Mike Toews na Jak utworzyć tabelę z istniejących tabel (stosując nowe schematy) w Postgis DB? , a widok pojawia się jako warstwa punktowa (w moim przypadku) w oknie dialogowym „Dodaj warstwy PostGIS”. Ale po utworzeniu widoku i włączeniu go przestrzennie otrzymałem następujący błąd podczas próby dodania widoku do QGIS:
Musisz wybrać tabelę, aby dodać warstwę
Czy ktoś może wyjaśnić, dlaczego widok przestrzenny nie załaduje się do QGIS i co muszę zrobić, aby można go było załadować jako warstwę w QGIS?
Obecnie używam QGIS v1.8 z instalatora OSGEO
Widzę, że jest zbudowany z bazy nazw geograficznych, załadowanej do PostGIS. Tabela geoname / dane przestrzenne mogą być dobrze wybrane / przeglądane w QGIS.
Kiedy próbuję wybrać widok „ mt_view ”, QGIS widzi widok w oknie dialogowym, ale nie pozwala mi go wybrać. Daje kropkowane pole wokół tego obszaru, ale nie wyróżnia i nie wybiera widoku.
Właśnie zauważyłem, że kiedy uruchamiam moje pierwsze zapytanie:
CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'
widok pojawia się w oknie dialogowym Dodaj warstwę QGIS, ale nie można go wybrać. Potem kiedy biegnę:
SELECT Populate_Geometry_Columns('data.test'::regclass);
Otrzymuję wynik „0”, który według dokumentacji powinien zwracać „1”.
źródło
Odpowiedzi:
Mogę potwierdzić, że nie można po prostu wybrać widoku z listy.
Najpierw wydaje się konieczne wybranie „kolumny klucza podstawowego”. Następnie tabela włącza się do wyboru:
źródło
(Trochę aktualizuję moją odpowiedź)
Tak długo, jak pole OBJECTID (numer_wiersza) jest pierwsze w definicji kolumny widoku , QGIS będzie je odbierał bez pytania o dodanie z menu „dodaj warstwę wektorową”.
Właśnie naprawiłem niektóre stare widoki, które były zepsute zgodnie z pierwotnym pytaniem, ale przeniesienie pola OBJECTID na początek widoku rozwiązało problem!
źródło
PRIMARY KEY
zdefiniowaną, QGIS rutynowo ją odbiera: nigdy nie zawiedzie „PK” na żadnym z moich tabel, które mają PK, chociaż prawie wszystkie moje PK sąVARCHAR
. To nie może się zdarzyć,VIEW
ponieważ PostgreSQLVIEW
nie może miećCONSTRAINT
. Jestem całkiem pewien, dlatego konieczneVIEW
jest ręczne wybranie PK dla s podczas importowania do QGIS za pomocą przycisku „Dodaj warstwy PostGIS”, dlatego importuję je za pomocą skryptu Python.Czy Twój widok pojawia się w
geometry_columns
tabeli? Zgodnie z instrukcją widok powinien się automatycznie pojawiać w wersji 2.0, ale go nie próbowałem.Spróbuj wykonać następujące czynności, aby to sprawdzić:
źródło
Czy twój widok używa unikalnego pola liczby całkowitej, takiego jak „gid” lub PK, równoważne z jednej z tabel w twoim widoku?
Wiem, że w poprzednich wersjach QGIS miałem problemy z dodawaniem widoków do mapy, gdy nie było unikalnego pola liczb całkowitych. Jednak otrzymałem inny komunikat o błędzie wskazujący na ten problem, ale warto sprawdzić, czy nie obejmuje on wszystkich baz.
źródło