Respostas:
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.
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.
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.
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.
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:
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 !!!
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:
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.Essa funcionalidade foi adicionada através do número 1137 e abordada na versão mais recente (de desenvolvimento) do manual do usuário .
concat("col1", right( ('000' || tostring( "col2" )), 4))
Bem, agora é 2018, então não posso acreditar que isso ainda não tenha sido respondido.
Abra a visualização da tabela de atributos e clique com o botão direito do mouse em qualquer coluna e escolha Classificar ...
Janela de diálogo Configurar a ordem de classificação da tabela de atributos está aberta agora com o editor de expressão completo
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" )
Clicar em OK classificará a tabela
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.
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.