QGIS'te aynı anda birden çok alana göre sıralama?


17

QGIS'de aynı anda birden çok alanı sıralamak mümkün müdür?

Örneğin, bir tabloyu eyalet adına göre sıralamak istiyorum ve sonra her eyalet içinde ilçe adına göre sıralamak istiyorum.

Bu, ArcMap'te bulunan Gelişmiş Sıralama seçeneğiyle aynı olacaktır.

Yanıtlar:


4

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.


Mükemmel! Ayrıca 3 alan (eyalet, ilçe, şehir) ile test ve mükemmel çalıştı - artan veya azalan. 3.8.3.
Stu Smith

8

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.


umarım işe yarar. 150k kayıt veri setime koydum ve hala 10 dakika sonra gidiyor. Bu, yeni sütundaki sıralamayı kodlar, böylece buna göre sıralayabilirsiniz - bir sütun eklemeyen excel veya ArcMap gibi çalışan bir yol var mı? bkz. desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/…
GeorgeC

1
Umarım işe yarayacaktır, böyle büyük veri kümelerinde hiç test etmedim. ArcMap'teki gibi ekran sırasını değiştirmenin mümkün olduğunu düşünmüyorum; QGIS API bunu yapmak için herhangi bir yöntem sağlamaz. Bu yüzden geçici çözüm olarak bir numaralandırma alanı eklemeyi seçtim.
ArMoraer

Hala devam ediyor -ArcMap bunu 30'larda yaptı. Oh iyi. Yine de çözüm için teşekkürler -Başka bir önerinin olup olmadığını görmek için bunu 24 saat boyunca açık tutacağım.
GeorgeC

Tamam, geri bildiriminiz için teşekkürler. Eklenti doğrudan Python'un 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.
ArMoraer

Nice Tool ... beni çok fazla işten kurtardı ... çok takdir
K_Man

7

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ü.


1
teşekkürler ama birden fazla veri kümesi üreteceği için kalıcı bir şey yapmamayı tercih ediyorum ve ayrıca QGIS'in içinden bir yol bekliyordum.
GeorgeC

2
Sonra şekil dosyasını Spatialite dönüştürürüm. DB Manager ile SQL sorguları oluşturabilir ve çalıştırabilirsiniz. Gelecekteki ihtiyaçlar için sık kullanılan sorguları da kaydedebilirsiniz.
user30184

5

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:

resim açıklamasını buraya girin

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!


Teşekkürler-bu harika bir çözüm ancak bu kullanım durumunda ben de veri biçimini başka bir şeye değiştirmek istemiyorum.
GeorgeC

2
Bu çözüm için .SHP ile çalışabilirsiniz - bu veri biçimini değiştirmez. Deneyin ...
DPSSpatial

1
@GeorgeC bunu denedin mi?
DPSSpatial

5

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:

  1. Özellik tablosu sütun başlığına sağ tıklayın ve "Sırala ..." yı seçin
  2. İşlevi concat()sıralamak istediğiniz alanlarla birlikte uygun sırada ekleyin (örn. concat("column1", "column2")). Bir çıktı önizlemesi kodunuzun altında gösterilmelidir.
  3. Sütun sıralama yönlerini yapılandırmak için alttaki "Artan Sırala" onay kutusunu işaretleyin veya işaretini kaldırın.
  4. Tamam'ı tıklayın ve sıralamayı onaylayın.

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 .


1
QGIS 3.6 ile başarıyla test edildi.
Bay Che

Dize ve sabit bir uzunluğu olmayan bir tamsayı birleştirdim, bu yüzden sabit uzunluklu bir dize tamsayı sıfır doldurmak için bir çalışma etrafında kullanılır:concat("col1", right( ('000' || tostring( "col2" )), 4))
NettaB

2

Şimdi 2018, bu yüzden henüz cevaplanmadığına inanamıyorum.

  1. Ö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 .

  2. İletişim penceresi Özellik tablosu sıralama düzenini yapılandır , şimdi tam ifade düzenleyicisiyle de açık

  3. İ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" )

resim açıklamasını buraya girin

Tamam'ı tıklattığınızda tablo sıralanır


Ne yazık ki, birleşme benim için işe yaramadı. İki tamsayı sütunu (her ikisi de bir sayı ve boş değer karışımı içeren) bir şekil dosyası özellik tablosu kullanan bir testte: 1) Artan sıralama düğmesi işaretlenmemişse, sonuç ilk sütunu doğru (azalan) sıraladı, ancak ikinci sütun yanlış sıralandı ilk sütundaki her değer için artan. 2) Artan sıralama düğmesi işaretlendiğinde, sonuç hiçbir anlam ifade etmeyen rastgele bir sonuçtur.
Stu Smith

1
Alanları "||" ile birleştirebilirsiniz. işleci, birleştirme, sıralama için geçerli olmayan ilk NULL olmayan değeri döndürür. Muhtemelen 11'den önce 1'e sahip olmak için bazı biçimlendirme kullanmalısınız.
Zoltan

1

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.


2
Şu anda mümkün olmadığını doğru not için +1 ama Excel'de DBF ile karışıklık önermek için -1
underdark

Ben 'kötü' olduğunu söyledi mi :)
MappaGnosis

PostGIS ve SpatiaLite'dan bahsediyorsunuz: OP'nin QGIS içinden istediği şeyi nasıl yapacağınıza, ayrıca bir db eklentisi kullanarak bir örnek gösterebilir misiniz?
steko

0

@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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.