Obtendo a lista de valores distintos do campo shapefile usando o QGIS?

18

Eu tenho um shapefile cujos recursos eu posso filtrar especificando uma cláusula where no diálogo de consulta. Fx Eu tenho um campo chamado 'city_name' e afirmando 'city_name = "London"' na cláusula where somente London é exibida. O que eu gostaria de fazer agora é buscar todos os valores em 'city_name' da tabela de atributos.

Algo parecido:

select distinct city_name from [attribute table]

Encontrei várias ferramentas no QGIS aparentemente lidando com SQL e também dei uma rápida olhada nos diferentes plugins. Mas falho ao me conectar a um banco de dados ou ao nome da tabela ... qual banco de dados ou qual tabela nesse caso?

No final, quero exportar a lista de resultados e usá-la para processamento adicional.

Estou usando o QGIS 1.8.

Raffael
fonte

Respostas:

32

Resposta de atualização (versão QGIS> = 2.14)

Desde o QGIS 2.14 , você pode usar instruções SQL de execução em qualquer camada vetorial carregada usando camadas virtuais .

  1. Tendo a camada carregada no QGIS, vá para Camada> Adicionar camada> Adicionar / editar camada virtual ;
  2. Na caixa de diálogo Criar camada virtual, insira sua instrução SQL no campo Consulta. Algo como:

    SELECT DISTINCT nome_da_ cidade FROM nome_da_cama

  3. Para conjunto de geometria Sem geometria

  4. Clique em Ok e uma tabela será carregada no QGIS com os valores exclusivos desejados.

Nota: esta tabela será atualizada se novos valores forem adicionados à coluna city_name.

Resposta herdada (QGIS versão <2.14)

Você tem algumas opções para fazer o que pede.

  1. Importe seu shapefile em um banco de dados Spatialite ou Postgis e, em seguida, você pode consultar sua tabela usando instruções SQL completas;
  2. Use a ferramenta Dissolver (Vetor> Ferramentas de geoprocessamento> Dissolver) para dissolver seus arquivos de forma usando o campo "city_name". Embora seja um método estranho, o arquivo dbf do shapefile resultante fornecerá a lista que você precisa;
  3. Dê uma olhada no plugin de estatísticas do grupo (1.6) , você pode usar "city_name" como campo de classificação e pressionar Calcular. Ele calculará algumas estatísticas sobre cada cidade, e você poderá copiar o resultado e extrair a lista de cidades.

Acabei de notar que, no Vector> Analysis Tools , existe uma ferramenta List Unique Values que é precisamente o que é necessário para esta tarefa. Tão fácil ... sem soluções alternativas e sem necessidade de plugins.

Alexandre Neto
fonte
6

Use o QGIS DB Manager e acesse seu shapefile via 'camadas virtuais'

Você pode usar a janela SQL e escrever sua consulta:

insira a descrição da imagem aqui

DPSSpatial
fonte
1
Esta é agora (QGIS 2.14+) a resposta correta.
Alexandre Neto
-1

Use o construtor de consultas no QGIS, vá para o campo nome da cidade nos campos no construtor de consultas. Vá para valores, adicione todos. Exclua quaisquer valores nulos.

Crie um script semelhante ao nome da cidade = "london" e nome da cidade = "paris" até ter a lista completa de nomes e execute o script. Agora todos os nomes de cidades estão selecionados. Você pode exportar selecionado como um arquivo de forma e importar para um banco de dados postgresql.

Para usar um backend do postgresql no QGIS, instale uma pilha do postgresql com geoserver, postgresql e um banco de dados ativado pelo postgis no postgresql. Você precisará conectar o QGIS ao servidor. Brinque um pouco e você descobrirá.

Lewis
fonte