Czy tworzysz widok przestrzenny w PostGIS i dodajesz go jako warstwę w QGIS?

49

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.

QGIS nie może wybrać widoku mt_view jako warstwy


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”.

RyanDalton
źródło
1
Potwierdzam problem. W QGIS 1.8, PostGIS 2.0 i widoku utworzonym z tabeli z kluczem podstawowym widok ten jest wyświetlany na dostępnych warstwach, ale pojawia się komunikat o błędzie „Musisz wybrać tabelę, aby dodać warstwę”.
giohappy,
2
Czy istnieje inny sposób automatycznego ustawiania klucza podstawowego w oknie Dodaj warstwę Postgis podczas pracy z widokami? Bardzo ciężko jest wybrać pole klucza podstawowego na tym ekranie dla dowolnych warstw / widoków, jeśli wyobrażasz sobie zwykłego użytkownika GIS, a widok ma wiele pól liczb całkowitych.
@Pimimez, sugerowałbym rozpoczęcie nowego pytania od tego, co powiedziałeś powyżej, a następnie odwołanie się do tego adresu URL pytań we własnym zakresie. Zapewni to znacznie szerszą widoczność.
RyanDalton
Nie ma sposobu na wizualizację wypukłego kadłuba w qgis 1.8 lisboa? Próbowałem śledzić vievs w Postgis 1.5. Powiedziano mi, aby użyć kolumny identyfikatora do opublikowania go w Qgis. Jeśli nie używasz kolumny identyfikatora, i tak nie możesz jej załadować z powodu błędu. 1. utwórz lub zamień widok con_hull_baeume3 (bid) jako wybierz „0”, ST_ConvexHull (ST_Collect (geom)) FROM baeume; 2. utwórz lub zamień widok con_hull_baeume4 (bid) jako wybierz licytację, ST_ConvexHull (ST_Collect (geom)) Z grupy baeume według oferty; ale ten tworzy wypukły kadłub na każdym z punktów geometrycznych. Mam na myśli po prostu użyj „select ST_ConvexHull (ST_Collect (geom)) FROM baeume;” prace
ulan
1
Witamy! Prześlij to jako nowe pytanie, ponieważ wydaje się, że nie odpowiada na pierwotne. Przynajmniej jeśli jest to pytanie, ponieważ ostatnie stwierdzenie nie jest jasne, czy ci się udało, czy nie.
lynxlynxlynx

Odpowiedzi:

54

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:

wprowadź opis zdjęcia tutaj

podmrok
źródło
1
Wow, nigdy bym tego nie widziała. Dzięki wielkie! Zredagowałem tytuł, aby odzwierciedlić problem związany z QGIS, a nie widok PostGIS.
RyanDalton
Wygląda na to, że jest to problem związany z QGIS 1.8 (z którego jeszcze nie korzystałem). Te kroki nie są wymagane w wersji 1.7.
Mike T
Zgadza się, 1.7 próbował zgadnąć klucz podstawowy. Ale to nie działało dobrze.
podmrok
na marginesie, @underdark, czy QGIS akceptuje inne rodzaje PK?
George Silva,
1
W QGIS3 kolumna nosi nagłówek „identyfikator funkcji”, a nie „kolumna klucza podstawowego” i (przynajmniej dla mnie) znajduje się poza krawędzią domyślnego okna (tj. Niewidoczna) i nic nie wskazuje na to, że było więcej kolumn! Myślę, że zarejestruję żądanie funkcji, które zostanie poproszone o te szczegóły (w razie potrzeby) po wybraniu. Wygląda na to, że programiści zakładają, że ludzie upewnią się, że w pierwszej kolumnie jest unikalny klucz.
Russell Fulton,
5

(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ą”.

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

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!

DPSSpatial
źródło
Użyłem również składni „row_number () over ()” dla wielu widoków. Zwykle użyłem „gid” w polu klucza podstawowego. Czy wszystkie inne widoki używają „objectid” jako klucza podstawowego?
RyanDalton,
zwykle objectid - co działało w powyższym przykładzie - ale spróbuje gid ... czy to coś, co QGIS rozpoznaje przed jakimkolwiek innym polem „id”?
DPSSpatial
GID nie ma na to żadnego wpływu ...
DPSSpatial
Po prostu marzę o możliwościach. dzięki za sprawdzenie
RyanDalton,
(Późno do tego, ale ...) na pierwszy rzut oka, myślę, że jeśli ładowana tabela ma PRIMARY KEYzdefiniowaną, 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ć, VIEWponieważ PostgreSQL VIEWnie może mieć CONSTRAINT. Jestem całkiem pewien, dlatego konieczne VIEWjest ręczne wybranie PK dla s podczas importowania do QGIS za pomocą przycisku „Dodaj warstwy PostGIS”, dlatego importuję je za pomocą skryptu Python.
GT.
4

Czy Twój widok pojawia się w geometry_columnstabeli? 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ć:

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
źródło
Tak, uruchomienie tego sprawdzania w stosunku do mojego widoku zwraca: the_geom, Point, 4269,2
RyanDalton
3

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.

Ando
źródło
Tak, tabela geonames ma „geonameid”, który jest unikalnym identyfikatorem i ma dla tego pola ustawione ograniczenie PRIMARY KEY.
RyanDalton