Yanıtlar:
Aslında çok basit bir hile var. Önce "A" alanına, ardından "A" içindeki "B" alanına göre sıralamak istediğinizi varsayalım. Öznitelik tablosunda ilk olarak "B" alanının başlığına sol tıklayın (artan sıralama için bir kez, azalan için ikinci kez tıklayın). Sonra "A" alanının başlığına sol tıklayın (ASC için bir kez, DESC için 2. kez). Bu son eylem "A" alanını, "B" alanının aynı "A" değerleri içinde sıralamasını koruyarak sıralayacaktır. 3 alan ile çalıştı ve o da çalışır (sonra sıkıldım). QGIS 3.6.3-Noosa kullanıyorum.
Sen kullanabilirsiniz Sıralama ve Numarası eklentisi. Bir öznitelik tablosunu 3 alana kadar sıralamanızı sağlar, ardından sıralanan özelliklerin sırasını içeren ek bir alan oluşturur.
Feragatname: Eklentinin yazarıyım.
sort()
işlevine dayanıyor , neden bu kadar yavaş olduğunu merak ediyorum. Gelecekteki bir sürümde süreci daha hızlı hale getirmek için bazı hileler bulmaya çalışacağım.
Sonucu kalıcı olarak kaydetmek için Tamam ise, şekil dosyasını GDAL ile sıralayabilirsiniz
ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp
Bir milyon çokgen içeren bir şekil dosyası ile 3 dakikadan az sürdü.
QGIS'teki DB Manager eklentisinde artık QGIS projenize yüklenen şekil dosyalarına SQL komutları yazmanıza izin veren bir 'Sanal Katmanlar' düğümü var.
Artık bu yeteneğe sahip olduğunuza göre, birden çok alana göre sıralamak için SQL mantığı, ASC (artan), desc (Azalan) kullanarak ORDER BY deyimindedir ve birden çok sütuna göre sıralamak için bunları bir araya getirebilirsiniz:
Ek bir bonus daha fazla SQL öğreneceksiniz, bu yüzden şekil dosyalarından bıktığınız ve çoğu PostGIS için sıçrama o kadar da büyük olmayacak!
Bu, en azından sürüm 3.2+ için herhangi bir eklenti veya veritabanına özgü çalışma olmadan yapılabilir. Birden çok sütuna göre sıralamak için:
concat()
sıralamak istediğiniz alanlarla birlikte uygun sırada ekleyin (örn. concat("column1", "column2")
). Bir çıktı önizlemesi kodunuzun altında gösterilmelidir.Bu işlevsellik, # 1137 numaralı sorun aracılığıyla eklenmiştir ve kullanım kılavuzunun en son (geliştirme) sürümü kapsamındadır .
concat("col1", right( ('000' || tostring( "col2" )), 4))
Şimdi 2018, bu yüzden henüz cevaplanmadığına inanamıyorum.
Özellik tablosu görünümünü açın ve herhangi bir sütuna sağ tıklayın, ardından Sırala ... ' yı seçin .
İletişim penceresi Özellik tablosu sıralama düzenini yapılandır , şimdi tam ifade düzenleyicisiyle de açık
İstediğiniz sütunlarla COALESCE işlevini kullanın; örneğin, bu bir tabloyu 3 sütuna göre sıralar (önce kimliğe göre, sonra SÜRÜM ardından fid)
coalesce("ID","VERSION","fid" )
Tamam'ı tıklattığınızda tablo sıralanır
Yapamazsınız (en azından şu anda değil). Afedersiniz!
QGIS belgelerine bakın ve en son satıra gidin.
Kötü bir çözüm, Shapefile'ın DBF'sini Excel'e çekmek olacaktır. Orada sıralayın ve sonucu kaydedin. Alternatif olarak Shapefile'ınızı daha büyük sıralama işlevine sahip olduğunuz PostGIS veya SpatialLite'a aktarın. Temel olarak, gelişmiş sıralama için QGIS'i atlamanız gerekecektir.
@Sylvester Sneekly tarafından önerildiği gibi, verileriniz PosGIS veya SpatialLite gibi bir RDBMS'ye yüklenirse, RDBMS'de sekmeli verileri sunan bir veritabanı görünümü oluşturmayı ve ardından sunulan görünümü QGIS'ye katman olarak yüklemeyi düşünebilirsiniz.