QGIS è in grado di leggere le visualizzazioni spaziali?


11

Ho un database di spatialite che ho creato che copre diversi anni di dati sulla criminalità. Per facilitare uno scenario del mondo reale in cui posso semplificare l'interazione per un utente introducendo una vista che limita semplicemente l'intervallo di tempo o quali tipi di reati vengono restituiti, voglio sapere se è possibile per QGIS leggere questa vista in modo simile sarebbe qualsiasi altra tabella spaziale nel mio database. Il punto qui è che ovviamente non voglio creare una tabella separata per ogni possibile Vista che posso usare, e sto cercando di renderlo semplice non richiedendo all'utente di conoscere il database e l'SQL appropriato per sottoinsieme i dati stessi. Un flusso di lavoro simile nel mondo ArcGIS potrebbe creare file layer separati che l'utente potrebbe aprire in ArcMap che accedono al database (ad esempio, SQL Server) e presentino solo il set di dati limitato.

Ho creato una vista nel mio database, ma non compare nell'elenco delle classi di funzioni che posso importare quando mi collego al db spatialite in QGIS. Forse le viste non sono considerate spaziali? (Questo è qualcosa che esaminerò più avanti, ma pensavo di averlo già fatto; non ricordo la conclusione.) In ogni caso, come si potrebbe replicare il tipo di flusso di lavoro che voglio o l'alternativa ArcGIS simile ?

Risposte:


15

Penso che devi registrare la vista nella tabella geometry_columns per poterla usare in QGIS.

Una buona risorsa è "Scrivere a mano la tua VISTA spaziale" con il seguente esempio:

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

Ad ogni modo è necessario registrare questa VISTA in views_geometry_columns, in modo da renderla una vera vista spaziale.


Questo sembra essere il problema. Ho creato la vista e controllato le meta tabelle. Ovviamente, la geometria dalla vista non è elencata. Come posso registrare la geometria della vista? Ho provato RecoverGeometryColumn ma mi sta dicendo che la tabella non esiste. Pensavo di essere su una versione 2.4, ma a quanto pare sto lavorando con la beta 3.0 di Spatialite. Forse sto implementando il comando sbagliato? Forse non funziona con le visualizzazioni? (Meglio!); per chiarezza, il mio comando era SELEZIONA RecoverGeometryColumn ('tblName', 'SHAPE', 2226, 'POINT', 2);
Bryan Goodrich,

4
Esiste una tabella speciale per la gestione delle viste basate sulla geometria. Utilizzare la sintassi seguente INSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES ('{TABLE NAME}', '{GEOM COLUMN NAME}', '{GEOM TYPE}', 2, {SRID}, 0);
Nathan W,

esempio: INSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES ('Towns_v1', 'Geometry', 'POINT', 2, 32632, 0);
Nathan W,

Utilizzare SELECT * FROM views_geometry_columns;per vedere cosa è necessario per essere inserito. Maggiori informazioni su gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/…
Nathan W

2

Potrebbe anche essere necessario inserire un ID univoco nella vista, simile a quello che viene discusso qui: In PostGIS è possibile creare una vista con un ID univoco?


Se non selezionassi esplicitamente il PK nella creazione della vista, non verrebbe portato un ID univoco? Almeno per la semplice query di selezione che sto facendo qui.
Bryan Goodrich,

@ BryanGoodrich- Provalo, ma non funziona così con le viste PostGIS, per quanto ho trovato.
RyanKDalton,

La vista è stata creata da "SELECT * FROM crime WHERE ..." e io sottoinsieme dalla clausola where. Ciò ha restituito la colonna PK (rowname, che ho generato dai nomi di colonna nella tabella R che ho usato per popolare il DB SQLite). Il problema è come sottolineato underdark: ha bisogno di un riferimento alla geometria nelle meta table. Questo è ciò che QGIS utilizza per identificare le tabelle spaziali e la vista non ha alcun record in quelle meta tabelle.
Bryan Goodrich,

Buono a sapersi. Grazie per aver posto la domanda e aver ottenuto una buona risposta
RyanK Dalton,

2

la registrazione della vista in geometry_columns al giorno d'oggi (anno 2015) sembra richiedere un campo aggiuntivo "read_only" in questo modo:

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
Potresti aggiungere un link alla documentazione di supporto? Grazie!
underdark

2

Per SpatialLite 4.x, sono necessarie due modifiche alla risposta originale: l'aggiunta della read_onlycolonna e la modifica di tutti i valori inseriti in minuscolo. L'SQL aggiornato sarebbe simile al seguente:

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

Il read_onlycampo accetta 0 o 1. (Vedi il commento di Sandro Furieri in Google Gruppi per ulteriori chiarimenti.)

Maggiori dettagli su queste e altre modifiche 4.x sono disponibili nel wiki di passaggio a 4.0 .


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

NB: sostituire solo: nameOfView e geometryTable

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.