Fazendo visualização espacial no PostGIS e adicionando-a como camada no QGIS?

49

No PostGIS 2.0, estou buscando uma maneira eficiente de criar uma exibição espacialmente ativada que seja visível no QGIS.

Eu segui o contexto da Parte 2 da resposta do Mike Toews em Como criar uma tabela a partir de tabelas existentes (aplicando novos esquemas) no banco de dados postgis? , e a exibição aparece como uma camada de ponto (no meu caso) na caixa de diálogo "Adicionar camadas PostGIS". Mas, depois de criar a visualização e ativá-la espacialmente, recebi o seguinte erro ao tentar adicionar a visualização ao QGIS:

Você deve selecionar uma tabela para adicionar uma camada

Alguém pode explicar por que a exibição espacial não será carregada no QGIS e o que preciso fazer para torná-la carregável como uma camada no QGIS?

Atualmente, estou usando o QGIS v1.8 no instalador do OSGEO

Eu vejo é construído a partir do banco de dados de nomes geográficos, carregado no PostGIS. A tabela de nomes geográficos / dados espaciais podem ser selecionados / visualizados no QGIS muito bem.

Quando tento selecionar o " mt_view ", o QGIS vê a visualização na caixa de diálogo, mas não me permite selecioná-la. Ele fornece uma caixa pontilhada ao redor da área, mas não destaca e seleciona a exibição.

O QGIS não pode selecionar o mt_view como uma camada


Acabei de perceber que quando executo minha primeira consulta:

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

a exibição aparece no diálogo Adicionar camada do QGIS, mas não é selecionável. Então, quando eu corro:

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

Eu recebo o resultado de "0", onde, de acordo com a documentação , acho que deveria estar retornando "1".

RyanDalton
fonte
11
Eu confirmo o problema. Com o QGIS 1.8, PostGIS 2.0 e uma visualização criada a partir de uma tabela com uma chave primária, essa visualização é listada nas camadas disponíveis, mas a mensagem de erro "Você deve selecionar uma tabela para adicionar uma camada" é exibida.
Giohappy
2
Existe outra maneira de definir automaticamente a chave primária na janela Adicionar camada do Postgis quando trabalhamos com visualizações? É um trabalho muito difícil selecionar um campo de chave primária nesta tela para qualquer camada / vista, se você imaginar um usuário GIS normal e uma vista tiver muitos campos inteiros.
@ PGimenez, sugiro iniciar uma nova pergunta com o que você declarou acima e depois referenciar esse URL de perguntas por conta própria. Isso dará visibilidade muito mais ampla.
RyanDalton
Não há como visualizar um casco convexo no qgis 1.8 lisboa? Eu tentei seguir vievs no Postgis 1.5. Disseram-me para usar uma coluna de identificação para publicá-la no Qgis. Se você não usar uma coluna de identificação, você não poderá carregá-la de qualquer maneira devido a um erro. 1. crie ou substitua a visualização con_hull_baeume3 (bid) como selecione '0', ST_ConvexHull (ST_Collect (geom)) FROM baeume; 2. crie ou substitua a visualização con_hull_baeume4 (bid) como lance selecionado, ST_ConvexHull (ST_Collect (geom)) FROM baeume agrupe por oferta; mas este faz um casco convexo em cada um dos pontos geométricos. Quero dizer, basta usar 'select ST_ConvexHull (ST_Collect (geom)) FROM baeume;' funciona
ulan 22/03
11
Bem vinda! Publique isso como uma nova pergunta, pois ela não parece responder à original. Pelo menos se for uma pergunta, já que a última afirmação não está clara se você conseguiu ou não.
Lynxlynxlynx

Respostas:

54

Posso confirmar que não é possível simplesmente selecionar uma exibição listada.

Parece necessário selecionar a "coluna da chave primária" primeiro. Em seguida, a tabela fica selecionável:

insira a descrição da imagem aqui

underdark
fonte
11
Uau, eu nunca teria visto isso. Muito obrigado! Editei o título para refletir que o problema estava no QGIS, não na visualização do PostGIS.
RyanDalton
Parece que este é um problema do QGIS 1.8 (que ainda não usei). Essas etapas não são necessárias para 1.7.
Mike T
É isso mesmo, 1.7 tentou adivinhar a chave primária. Mas não funcionou bem.
underdark
em uma nota lateral, @underdark, o QGIS aceita outros tipos de PKs?
George Silva
11
No QGIS3, a coluna é denominada "ID do recurso" e não "coluna da chave primária" e (pelo menos para mim) fica fora da borda da janela padrão (ou seja, não é visível) e não indica que havia mais colunas! Acho que vou registrar uma solicitação de recurso para que seja solicitado esses detalhes (se necessário) após a seleção. Parece que os desenvolvedores assumem que as pessoas se certificarão de que haja uma chave exclusiva na primeira coluna.
Russell Fulton
5

(Atualizando minha resposta um pouco)

Desde que o campo OBJECTID (número da linha) seja o primeiro na definição da coluna da visualização , o QGIS o buscará sem solicitar que você adicione no menu 'adicionar camada de vetor'.

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

Eu apenas corrigi algumas visualizações antigas que estavam quebradas conforme a pergunta original, mas mover o campo OBJECTID para o início da visualização corrigiu o problema!

DPSSpatial
fonte
Também usei a sintaxe "row_number () over ()" para muitas visualizações. Normalmente, usei "gid" no meu campo de chave primária. Todas as suas outras visualizações usam "objectid" como chave primária?
RyanDalton
geralmente objectid - que funcionou no exemplo acima - mas tentará gid ... é algo que o QGIS reconhece antes de qualquer outro campo 'id'?
amigos estão dizendo sobre dps
O GID não tem qualquer efeito sobre isso ...
DPSSpatial
Apenas sonhando com possibilidades. obrigado por verificar #
10119 RyanDalton
(Tarde para isso, mas ...), acho que, se uma tabela que está sendo carregada tiver um PRIMARY KEYdefinido, o QGIS a buscará rotineiramente: nunca falha em 'selecionar' o PK em qualquer uma das minhas tabelas PK, embora quase todos os meus PKs sejam VARCHAR. Isso não pode acontecer com a VIEWporque o PostgreSQL VIEWnão pode ter CONSTRAINTs. Certamente, é por isso que é necessário selecionar VIEWmanualmente o PK para s ao importar para o QGIS através do botão 'Adicionar camadas do PostGIS', e é por isso que eu os importo usando um script Python.
GT.
4

Sua visão aparece na geometry_columnstabela? De acordo com o manual, a visualização deve aparecer automaticamente na versão 2.0, mas ainda não a testei.

Tente executar o seguinte para verificar:

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
fonte
Sim, a execução dessa verificação na minha opinião retorna: the_geom, Point, 4269,2 #
RyanDalton
3

Sua visualização está usando um campo inteiro exclusivo como um "gid" ou equivalente PK de uma das tabelas na sua visualização?

Sei que nas versões anteriores do QGIS tive problemas com a adição de visualizações no mapa quando não havia um campo inteiro exclusivo. No entanto, recebi uma mensagem de erro diferente apontando esse problema, mas pode valer a pena verificar para cobrir todas as bases.

Ando
fonte
Sim, a tabela geonames possui "geonameid" que é um ID exclusivo e possui uma restrição PRIMARY KEY configurada nesse campo.
RyanDalton