Creare una vista spaziale in PostGIS e aggiungerla come livello in QGIS?


49

In PostGIS 2.0, sto cercando un modo efficiente per creare una vista spazialmente abilitata che sia visualizzabile in QGIS.

Ho seguito il contesto della parte 2 della risposta di @Mike Toews a Come creare una tabella da tabelle esistenti (applicando nuovi schemi) in DB Postgis? e la vista viene visualizzata come livello punto (nel mio caso) nella finestra di dialogo "Aggiungi livelli PostGIS". Ma dopo aver creato la vista e averlo abilitato spazialmente, ho ricevuto il seguente errore durante il tentativo di aggiungere la vista a QGIS:

È necessario selezionare una tabella per aggiungere un livello

Qualcuno può spiegare perché la vista spaziale non verrà caricata in QGIS e cosa devo fare per renderla caricabile come layer in QGIS?

Attualmente sto usando QGIS v1.8 dal programma di installazione di OSGEO

Vedo che è costruito dal database dei geonames, caricato in PostGIS. La tabella geoname / i dati spaziali possono essere selezionati / visualizzati in QGIS bene.

Quando provo a selezionare " mt_view ", QGIS vede la vista nella finestra di dialogo, ma non mi consente di selezionarla. Fornisce una casella punteggiata intorno all'area, ma non evidenzia e seleziona la vista.

QGIS non può selezionare mt_view come layer


Ho appena notato che quando eseguo la mia prima query:

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

la vista appare nella finestra di dialogo Aggiungi livello di QGIS, ma non è selezionabile. Quindi quando corro:

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

Ottengo il risultato di "0", dove secondo la documentazione , penso che dovrebbe restituire "1".


1
Confermo il problema. Con QGIS 1.8, PostGIS 2.0 e una vista creata da una tabella con una chiave primaria, la vista viene elencata nei livelli disponibili ma appare il messaggio di errore "Devi selezionare una tabella per aggiungere un livello".
giohappy,

2
C'è un altro modo per impostare automaticamente la chiave primaria nella finestra Postgis Aggiungi livello quando lavoriamo con le viste? È molto difficile selezionare un campo chiave primaria in questa schermata per tutti i livelli / viste se immagini un normale utente GIS e una vista ha molti campi interi.

@Pgimenez, suggerirei di iniziare una nuova domanda con quello che hai dichiarato sopra, e quindi fare riferimento a questo URL delle domande nel tuo. Ciò gli darà una visibilità molto più ampia.
Ryan Dalton,

Non c'è modo di visualizzare uno scafo convesso in QGIS 1.8 Lisbona? Ho provato a seguire viev in Postgis 1.5 Mi è stato detto di usare una colonna id per pubblicarla in Qgis. Se non si utilizza una colonna ID, non è possibile caricarla comunque a causa di un errore. 1. creare o sostituire la vista con_hull_baeume3 (bid) come selezionare '0', ST_ConvexHull (ST_Collect (geom)) FROM baeume; 2. creare o sostituire la vista con_hull_baeume4 (offerta) come offerta selezionata, ST_ConvexHull (ST_Collect (geom)) DA baeume group in base all'offerta; ma questo crea uno scafo convesso su ciascuno dei punti geometrici. Intendo solo usare 'select ST_ConvexHull (ST_Collect (geom)) FROM baeume;' funziona
ulan

1
Benvenuto! Si prega di pubblicare questa come una nuova domanda, poiché non sembra rispondere a quella originale. Almeno se si tratta di una domanda, poiché l'ultima affermazione non è chiara se ci sei riuscito o no.
Lynxlynxlynx il

Risposte:


54

Posso confermare che non è possibile selezionare semplicemente una vista elencata.

Sembra necessario selezionare prima la "colonna chiave primaria". Quindi la tabella diventa selezionabile:

inserisci qui la descrizione dell'immagine


1
Caspita, non l'avrei mai visto. Grazie mille! Ho modificato il titolo per riflettere il problema con QGIS, non con la vista PostGIS.
Ryan Dalton,

Sembra che questo sia un problema per QGIS 1.8 (che non ho ancora usato). Questi passaggi non sono richiesti per 1.7.
Mike T,

Esatto, 1.7 ha provato a indovinare la chiave primaria. Ma non ha funzionato bene.
underdark

su una nota a margine, @underdark, QGIS accetta altri tipi di PK?
George Silva,

1
In QGIS3 la colonna è intitolata "ID funzione" non "colonna chiave primaria" e (almeno per me) è fuori dal bordo della finestra predefinita (cioè non visibile) e nessuna indicazione che ci fossero più colonne! Penso che registrerò una richiesta di funzionalità che viene richiesta per questi dettagli (se necessario) dopo la selezione. Sembrerebbe che gli sviluppatori presumano che le persone si assicureranno che esista una chiave unica nella prima colonna.
Russell Fulton,

5

(Aggiornamento leggermente della mia risposta)

Finché il campo OBJECTID (row_number) è il primo nella definizione della colonna della vista , QGIS lo prenderà senza chiederti di aggiungere dal menu 'Aggiungi livello vettoriale'.

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

Ho appena corretto alcune vecchie visualizzazioni che erano state interrotte secondo la domanda originale, ma spostando il campo OBJECTID all'inizio della vista è stato risolto il problema!


Ho usato la sintassi "row_number () over ()" anche per molte visualizzazioni. Di solito ho usato "gid" per il mio campo chiave principale. Tutte le altre visualizzazioni utilizzano "objectid" come chiave primaria?
Ryan Dalton,

di solito objectid - che ha funzionato nell'esempio sopra - ma proverà gid ... è qualcosa che QGIS riconosce prima di qualsiasi altro campo 'id'?
DPSSpatial

GID non ha alcun effetto su questo ...
DPSSpatial

Sto solo sognando le possibilità. grazie per il controllo
Ryan Dalton,

(In ritardo, ma ...) a un'ipotesi, penso che se una tabella che viene caricata ha un PRIMARY KEYdefinito, QGIS lo prende di routine: non manca mai di "scegliere" il PK su uno dei miei tavoli che hanno un PK, anche se quasi tutti i miei PK lo sono VARCHAR. Ciò non può accadere con un VIEWperché PostgreSQL VIEWnon può avere CONSTRAINTs. Abbastanza sicuro, è per questo che è necessario selezionare VIEWmanualmente il PK per gli s durante l'importazione in QGIS tramite il pulsante "Aggiungi livelli PostGIS", motivo per cui li importa usando uno script Python.
GT.

4

La tua vista viene visualizzata nella geometry_columnstabella? Secondo il manuale, la vista dovrebbe apparire automaticamente in 2.0 ma non l'ho provato.

Prova a eseguire quanto segue per verificare:

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

Sì, l'esecuzione di questo controllo a mio avviso restituisce: the_geom, Point, 4269,2
Ryan Dalton,

3

La tua vista utilizza un campo intero univoco come "gid" o PK equivalente da una delle tabelle nella tua vista?

So che nelle versioni precedenti di QGIS ho avuto problemi con l'aggiunta di viste alla mappa quando non esisteva un campo intero univoco. Tuttavia, ho ricevuto un messaggio di errore diverso che indicava questo problema, ma potrebbe valere la pena controllare per coprire tutte le basi.


Sì, la tabella dei geonames ha "geonameid" che è un ID univoco e ha un vincolo PRIMARY KEY impostato su quel campo.
Ryan Dalton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.