O QGIS pode ler vistas espacial?


10

Eu tenho um banco de dados espacial que criei que abrange vários anos de dados de crimes. Para facilitar um cenário do mundo real em que eu possa simplificar a interação de um usuário, introduzindo uma Visualização que simplesmente limita o intervalo de tempo ou que tipos de crimes são devolvidos, quero saber se é possível ao QGIS ler essa Visualização como esta faria qualquer outra tabela espacial no meu banco de dados. O ponto aqui é que, obviamente, eu não quero criar uma tabela separada para todas as visões possíveis que eu possa usar, e estou tentando simplificá-la, não exigindo que o usuário conheça o banco de dados e o SQL apropriado para definir os próprios dados. Um fluxo de trabalho semelhante no mundo do ArcGIS pode estar criando arquivos de camada separados que o usuário pode abrir no ArcMap que acessa o banco de dados (por exemplo, SQL Server) e apresenta apenas o conjunto de dados limitado.

Criei uma exibição no meu banco de dados, mas ela não aparece na lista de classes de recursos que posso importar quando me conecto ao spatialite db no QGIS. Talvez as visualizações não sejam consideradas espaciais? (Isso é algo que vou abordar mais tarde, mas pensei que já fiz; simplesmente não me lembro da conclusão.) De qualquer forma, como replicar o tipo de fluxo de trabalho que eu quero ou a alternativa similar do ArcGIS ?

Respostas:


15

Eu acho que você precisa registrar a visualização na tabela geometry_columns para poder usá-la no QGIS.

Um bom recurso é "Escrevendo manualmente sua própria VISTA Espacial" com o seguinte exemplo:

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

De qualquer forma, você deve registrar essa VIEW nas views_geometry_columns, para torná-la uma verdadeira Visualização Espacial.


Esse parece ser o problema. Criei a visualização e verifiquei as meta tabelas. Obviamente, a geometria da vista não está listada. Como registro a geometria da vista? Eu tentei o RecoverGeometryColumn, mas está me dizendo que a tabela não existe. Eu pensei que estava na versão 2.4, mas aparentemente estou trabalhando com o Spatialite 3.0 beta. Talvez eu esteja implementando o comando errado? Talvez não funcione nas visualizações? (É melhor!); para maior clareza, meu comando foi SELECT RecoverGeometryColumn ('tblName', 'SHAPE', 2226, 'POINT', 2);
Bryan Goodrich

4
Há uma tabela especial para lidar com vistas baseadas em geometria. Use a seguinte sintaxe INSERIR EM VIEWS_GEOMETRY_COLUMNS VALUES ('{TABLE NAME}', '{GEOM COLUMN NAME}', '{GEOM TYPE}', 2, {SRID}, 0);
Nathan W

exemplo: INSERIR EM VIEWS_GEOMETRY_COLUMNS VALUES ('Towns_v1', 'Geometry', 'POINT', 2, 32632, 0);
Nathan W

Use SELECT * FROM views_geometry_columns;para ver o que é necessário inserir. Mais informações em gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/…
Nathan W

2

Você também pode ter que colocar um ID exclusivo na visualização, semelhante ao discutido aqui: No PostGIS, é possível criar uma Visualização com um ID exclusivo?


A menos que eu não selecione explicitamente a PK na criação da exibição, um ID exclusivo não será carregado? Pelo menos para a consulta de seleção simples que estou fazendo aqui.
Bryan Goodrich

@ BryanGoodrich- Experimente, mas não funciona dessa maneira com as visualizações do PostGIS, até onde eu descobri.
219129 Ryan GDalton #

A exibição foi criada por "SELECT * FROM crime WHERE ..." e eu subconjunto pela cláusula where. Isso retornou a coluna PK (nome do usuário, que eu gerei a partir dos nomes das colunas na tabela R que usei para preencher o banco de dados SQLite). O problema é o sublinhado: ele precisa de uma referência geométrica nas meta-tabelas. É isso que o QGIS usa para identificar tabelas espaciais, e a exibição não possui nenhum registro nessas meta-tabelas.
Bryan Goodrich

Bom saber. Obrigado por fazer a pergunta e obter uma boa resposta
RyanKDalton

2

registrar a visualização em geometry_columns hoje em dia (ano de 2015) parece exigir um campo adicional 'read_only' assim:

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

11
Você poderia adicionar um link para a documentação de suporte? Obrigado!
underdark

2

Para o SpatialLite 4.x, são necessárias duas alterações na resposta original - a adição da read_onlycoluna e a alteração de todos os valores inseridos em minúsculas. O SQL atualizado ficaria assim:

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

O read_onlycampo aceita 0 ou 1. (Veja o comentário de Sandro Furieri nos Grupos do Google para obter mais esclarecimentos.)

Mais detalhes sobre essas e outras alterações 4.x podem ser encontradas no wiki da mudança para o 4.0 .


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

NB: substituir apenas: nameOfView e geometryTable

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.