QGISで同時に複数のフィールドでソートしますか?


17

QGISで複数のフィールドを同時にソートすることは可能ですか?

たとえば、州名でテーブルをソートし、次に各州内で郡名でソートしたいと思います。

これは、ArcMapで利用可能な[高度な並べ替え]オプションと同じです。

回答:


3

実際には非常に簡単なトリックがあります。最初にフィールド「A」でソートし、次に「A」内のフィールド「B」でソートするとします。最初に、属性テーブルのフィールド「B」のヘッダーを左クリックします(昇順でソートするには1回クリックし、降順では2回クリックします)。次に、フィールド「A」のヘッダーを左クリックします(ASCの場合は1回、DESCの場合は2回目)。この最後のアクションでは、フィールド「A」がソートされますが、フィールド「B」のソートは「A」の同一値内に保持されます。3つのフィールドで試してみましたが、それも機能します(退屈しました)。QGIS 3.6.3-Noosaを使用しています。


優秀な!また、3つのフィールド(州、郡、市)でテストし、昇順または降順で完全に機能しました。3.8.3。
スチュスミス

8

Sort and Numberプラグインを使用できます。最大3つのフィールドで属性テーブルを並べ替えることができ、並べ替えられた機能の順序を含む追加のフィールドを作成します。

免責事項:私はプラグインの著者です。


うまくいけばうまくいくでしょう。私はそれを150kレコードデータセットに設定しましたが、それはまだ10分後です。これにより、新しい列の並べ替えがハードコーディングされるため、それで並べ替えることができます。Excelまたは列を追加しないArcMapのように機能する方法はありますか。desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/…を
GeorgeC

1
また、それが機能することを願っています。このような大規模なデータセットでテストしたことはありません。ArcMapのように表示順序を単純に変更することはできないと思います。QGIS APIはそうするためのメソッドを提供していません。そのため、回避策として番号フィールドを追加することにしました。
-ArMoraer

まだ進行中です-ArcMapは約30秒でそれを行いました。しかたがない。解決策をありがとうございます-他の提案があるかどうかを確認するために、これを24時間開いたままにします。
GeorgeC

OK、フィードバックをありがとう。プラグインはPythonのsort()機能に直接依存していますが、なぜそれがそんなに遅いのかと思います。将来のバージョンでプロセスを高速化するためのトリックを見つけようとします。
-ArMoraer

素敵なツール...私は多くの仕事を救ってくれました...ありがたいことに
K_Man

7

結果を永続的に保存してもよい場合は、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

100万ポリゴンのシェープファイルで3分もかかりませんでした。


1
感謝しますが、複数のデータセットを生成するため、永続的な操作を行わないことを好みます。また、QGIS自体からの方法を望んでいました。
GeorgeC

2
次に、シェープファイルをSpatialiteに変換します。DBマネージャーを使用すると、SQLクエリを作成して実行できます。また、将来のニーズに備えて、頻繁に使用されるクエリを保存できます。
user30184

5

QGISのDBマネージャープラグインには、QGISプロジェクトに読み込まれたシェープファイルに対してSQLコマンドを記述できる「仮想レイヤー」ノードがあります。

したがって、この機能を使用できるようになったので、複数フィールドでソートするSQLロジックは、asc(昇順)、desc(降順)を使用するORDER BYステートメントにあり、それらを一緒にストリング化して複数の列でソートできます。

ここに画像の説明を入力してください

追加のボーナスは、より多くのSQLを学習できることです。したがって、シェープファイルにうんざりしていて、ほとんどの場合、PostGISの飛躍はそれほど大きくありません。


ありがとう-これは素晴らしい解決策ですが、このユースケースでは、データ形式を他のものに変更したくありません。
GeorgeC

2
このソリューションでは.SHPを使用できます-これによりデータ形式は変更されません。それを試してみてください...
DPSSpatial

1
@GeorgeCはこれを試しましたか?
-DPSSpatial

5

これは、少なくともバージョン3.2以降では、プラグインやデータベース固有の作業なしで実行できます。複数の列でソートするには:

  1. 属性テーブルの列ヘッダーを右クリックして、「ソート...」を選択します
  2. 関数をconcat()適切な順序で並べ替えたいフィールドとともに追加します(例:)concat("column1", "column2")。コードの下に出力プレビューが表示されます。
  3. 列の並べ替え方向を設定するには、下部の[昇順で並べ替え]チェックボックスをオンまたはオフにします。
  4. [OK]をクリックして、並べ替えを確認します。

この機能は問題#1137で追加され、ユーザーマニュアルの最新(開発)バージョンで説明されています


1
QGIS 3.6で正常にテストされました。
チェ氏

文字列と固定長のない整数を連結したので、concat("col1", right( ('000' || tostring( "col2" )), 4))
回避策

2

まあ、それは2018年ですので、私はこれがまだ答えられていないとは信じられません。

  1. 属性テーブルビューを開き、任意の列を右クリックして、[ 並べ替え... ]を選択します

  2. ダイアログウィンドウの属性テーブルの並べ替え順序の設定は、完全な式エディターでも開いています。

  3. 目的の列でCOALESCE関数を使用します。たとえば、3列でテーブルをソートします(最初にID、次にVERSION、次にfid)。

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

ここに画像の説明を入力してください

[OK]をクリックすると、テーブルが並べ替えられます


残念なことに、合体は私にはうまくいきませんでした。2つの整数列(数値と空白値の両方を含む)を持つシェープファイル属性テーブルを使用したテスト:1)昇順並べ替えボタンがオフの場合、結果は最初の列を正しく(降順)並べ替えましたが、2番目の列は誤って並べ替えられました最初の列内の値ごとに昇順。2)[昇順で並べ替え]ボタンをオンにすると、結果は無意味なランダムな結果になりました。
スチュ・スミス

1
「||」でフィールドを連結できます 合、合体はソートに無効な最初の非NULL値を返します。おそらく、11の前に1になるようにいくつかのフォーマットを使用する必要があります
ゾルタン

1

できません(少なくとも現時点では)。ごめんなさい!

QGISドキュメントを参照して、最後の行までスクロールします。

厄介な回避策は、ShapefileのDBFをExcelに取り込むことです。そこでソートして、結果を保存します。または、シェープファイルをPostGISまたはSpatialLiteにインポートして、より優れた並べ替え機能を提供します。基本的に、高度なソートのためにQGISをバイパスする必要があります。


2
それはExcelでDBFをいじり示唆するために、現在は不可能だが-1という正しいノートの1
アンダーダーク

私はそれが「厄介だ」と言った:)
MappaGnosis

あなたはPostGISとSpatiaLiteについて言及しました:OPプラグインを使用して、QGIS内からOPが要求したことを行う方法の例を示していただけますか?
ステコ

0

@Sylvester Sneeklyから示唆されているように、PosGISやSpatialLiteなどのRDBMSにデータが読み込まれる場合、RDBMSでデータベースデータを作成して、表形式のデータを事前に並べ替えてから、事前に並べ替えられたビューをQGISにレイヤーとして読み込むことができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.