Classificando por vários campos ao mesmo tempo no QGIS?

17

É possível classificar vários campos ao mesmo tempo no QGIS?

Por exemplo, eu gostaria de classificar uma tabela pelo nome do estado e, em cada estado, classificar pelo nome do município.

Seria o mesmo que a opção Classificação avançada disponível no ArcMap.

Stu Smith
fonte

Respostas:

3

Na verdade, existe um truque muito simples. Suponha que você queira classificar primeiro o campo "A" e depois o campo "B" dentro de "A". Primeiro, clique com o botão esquerdo no cabeçalho do campo "B" (clique uma vez para classificação crescente, uma segunda vez para decrescente) na tabela de atributos. Em seguida, clique com o botão esquerdo no cabeçalho do campo "A" (uma vez para ASC, segunda vez para DESC). Esta última ação terá classificado o campo "A", preservando a classificação do campo "B" dentro de valores idênticos de "A". Tentei com 3 campos e também funciona (então fiquei entediado). Estou usando o QGIS 3.6.3-Noosa.

Benoit St-Onge
fonte
Excelente! Eu também testei com 3 campos (estado, município, cidade) e funcionou perfeitamente - ascendente ou descendente. 3.8.3
Stu Smith
8

Você pode usar o plug-in de classificação e número . Ele permite classificar uma tabela de atributos em até 3 campos e, em seguida, cria um campo adicional que contém a ordem dos recursos classificados.

Disclaimer: Eu sou o autor do plugin.

ArMoraer
fonte
espero que funcione. Coloquei-o no meu conjunto de dados de registro de 150k e ele ainda está indo depois de 10 minutos. Isso codifica a classificação na nova coluna para que você possa classificar da seguinte maneira: existe uma maneira que funciona como no Excel ou no ArcMap que não adiciona uma coluna? consulte desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/…
GeorgeC
1
Também espero que funcione, nunca testei em conjuntos de dados tão grandes. Eu não acho que é possível simplesmente mudar a ordem de exibição, como no ArcMap; A API QGIS não fornece nenhum método para fazer isso. Por isso, escolhi adicionar um campo de numeração como solução alternativa.
ArMoraer 25/05
Ainda está acontecendo - o ArcMap fez isso em cerca de 30 anos. Ah bem. Obrigado pela solução - eu manterei isso aberto por 24h para ver se alguém tem outras sugestões.
GeorgeC
Ok, obrigado pelo feedback. O plugin depende diretamente da sort()função do Python , eu me pergunto por que é tão lento. Vou tentar encontrar algum truque para acelerar o processo em uma versão futura.
ArMoraer 25/05
Agradável da ferramenta ... me salvou um monte de trabalho ... muito apreciada
K_Man
7

Se estiver OK para salvar o resultado permanentemente, você pode classificar o shapefile com GDAL

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp

Levou menos de 3 minutos com um shapefile com um milhão de polígonos.

user30184
fonte
1
obrigado, mas eu prefiro não fazer nada permanente, pois irá gerar vários conjuntos de dados e também esperava uma maneira de dentro do próprio QGIS.
GeorgeC
2
Então eu provavelmente converteria o shapefile em Spatialite. Com o DB Manager, você pode criar e executar consultas SQL. Você também pode salvar as consultas usadas com frequência para necessidades futuras.
User30184
5

O plug-in do DB Manager no QGIS agora possui um nó 'Camadas virtuais' que permite gravar comandos SQL em arquivos shapefiles carregados no seu projeto QGIS.

Portanto, agora que você tem essa capacidade, a lógica do SQL para classificar por vários campos está na instrução ORDER BY, usando asc (ascendente), desc (descendente) e é possível agrupá-los para classificar por várias colunas:

insira a descrição da imagem aqui

Um bônus adicional é que você aprenderá mais SQL; assim, quando você ficar cansado de shapefiles e mais no PostGIS, o salto não será tão bom !!!

DPSSpatial
fonte
Obrigado - esta é uma ótima solução, no entanto, para este caso de uso, também não quero alterar o formato dos dados.
GeorgeC
2
Você pode trabalhar com .SHP para esta solução - isso não altera o formato dos dados. Experimentá-lo ...
DPSSpatial
1
@GeorgeC você tentou isso?
precisa saber é o seguinte
5

Agora isso pode ser feito sem nenhum plug-in ou trabalho específico do banco de dados, pelo menos para a versão 3.2+. Para classificar por várias colunas:

  1. Clique com o botão direito do mouse no cabeçalho da coluna da tabela de atributos e escolha "Classificar ..."
  2. Adicione a função concat()junto com os campos pelos quais deseja classificar, na ordem correta (por exemplo concat("column1", "column2")). Uma visualização da saída deve ser mostrada abaixo do seu código.
  3. Marque ou desmarque a caixa de seleção "Classificar em ordem crescente" na parte inferior para configurar as instruções de classificação da coluna.
  4. Clique em OK e confirme a classificação.

Essa funcionalidade foi adicionada através do número 1137 e abordada na versão mais recente (de desenvolvimento) do manual do usuário .

Eron Lloyd
fonte
1
Testado com sucesso com o QGIS 3.6.
Che Che
Concatenei a string e um número inteiro que não possui um comprimento fixo; portanto, usei uma concat("col1", right( ('000' || tostring( "col2" )), 4))
solução alternativa
2

Bem, agora é 2018, então não posso acreditar que isso ainda não tenha sido respondido.

  1. Abra a visualização da tabela de atributos e clique com o botão direito do mouse em qualquer coluna e escolha Classificar ...

  2. Janela de diálogo Configurar a ordem de classificação da tabela de atributos está aberta agora com o editor de expressão completo

  3. Use a função COALESCE com as colunas desejadas, por exemplo, isso classificará uma tabela por 3 colunas (primeiro por ID, depois por VERSION e depois por fid)

coalesce("ID","VERSION","fid" )

insira a descrição da imagem aqui

Clicar em OK classificará a tabela

sys49152
fonte
Infelizmente, coalescer não funcionou para mim. Em um teste usando uma tabela de atributos shapefile com duas colunas inteiras (ambas contendo uma mistura de números e valores em branco): 1) com o botão Ascendente Classificar desmarcado, o resultado classificou a primeira coluna correta (descendente), mas a segunda coluna foi classificada incorretamente ascendente para cada valor na primeira coluna. 2) com o botão crescente de classificação marcado, o resultado foi um resultado aleatório que não fazia sentido.
Stu Smith
1
Você pode concatenar campos "" || " operador, coalescer retornará o primeiro valor não NULL que não é válido para classificação. Provavelmente você deve usar alguma formatação ter 1 antes de 11.
Zoltan
1

Você não pode (pelo menos não no momento). Desculpe!

Consulte a documentação do QGIS e role para baixo até a última linha.

Uma solução desagradável seria puxar o DBF do Shapefile para o Excel. Classifique-o lá e salve o resultado. Como alternativa, importe seu Shapefile para o PostGIS ou SpatialLite, onde você tem uma maior funcionalidade de classificação. Basicamente, você terá que ignorar o QGIS para classificação avançada.

MappaGnosis
fonte
2
+1 para a observação correta de que atualmente não é possível, mas -1 para sugerir mexer com o DBF no Excel
underdark
Eu disse que era 'desagradável' :) :)
MappaGnosis
Você menciona o PostGIS e o SpatiaLite: você poderia mostrar um exemplo de como fazer o que o OP solicitou no QGIS, usando também um db-plugin?
STEKO
0

Conforme sugerido por @Sylvester Sneekly, se seus dados forem carregados em um RDBMS como PosGIS ou SpatialLite, considere criar uma exibição de banco de dados no RDBMS que ordena os dados tabulares e carregue a exibição pré-classificada no QGIS como uma camada.

RyanKDalton-OffTheGridMaps
fonte