QGISを使用してフィールド内の重複属性を識別しますか?


27

数千のポイントを持つポイントシェープファイルがあります。一意であると想定されるIDコードフィールドがあります。データ入力担当者は、IDを間違って入力して重複を作成します。現在、手動でフィールドをスクロールして重複を見つけています。

検索クエリビルダーを使用してこれを行う別の方法はありますか?


5
一意性を適用する必要がある場合は、Postgres / PostGIS、Spatailite
Nathan Wの

同様の問題があります。特定の種が発生するUTMスクエアを含む1つの大きなシェープファイルがあります(1スクエアで最大5、ほとんど2)。ただし、それらが正確に重複しているため、マップ上でそれらすべてを視覚化するのに問題があります。ブレンドオプションは恐ろしく見えます。前:私の問題を回避するには、UTMの正方形中の種の量に依存等しい部分にポリゴンを分割することであろう正方形示す1色が、2つの種が発生してから2を示すべきである:[正方形示す1色が、2つを示すべき前!(] i.stack.imgur.com/6WqKn.jpg)後:正方形を
分割

最後にここに質問を投稿するのではなく、新しい質問を開いてください。
イェンス

回答:


7

IDが連続している場合、@ Ship.shpのような一意の値が提案された新しい一時列を追加し、クエリビルダーを使用してID!= uniqueIDを検索します。

それは重複を直接返します。元のIDを修正した後、余分な列を削除するか、必要に応じてプロセス全体を繰り返します。IDがどのようなパターンに一致する必要があるかは明確ではありません。それらが一意である必要がある場合は、最初に最後の値を書き留めてから、1回の繰り返しで不良IDを編集し、そのまま数字を増やします。


18

重複する属性を検出するための、グラフィカルで動的かつ最も重要もう1つの簡単な方法:QGISの式ビルダーを使用します。

属性テーブルの重複を強調表示します

次の条件で条件付き書式設定を有効にします(下の赤い矢印を参照)。

count("FieldWithDuplicates","FieldWithDuplicates") > 1

上部のすべての重複をグループ化するには、列を右クリックし、[並べ替え]を選択します。
上記の式を入力します>1

QGIS属性テーブルで強調表示された重複属性

キャンバス上の属性が重複しているフィーチャを強調表示します

上記の条件に設定されたフィルターで新しいシンボルまたはラベルを追加できます。

そしてもちろん、同じものに基づいてデータ派生オーバーライドを有効にすることができます。

たとえば、重複する属性を持つフィーチャのラベルを強調表示する場合は、次のオーバーライドでラベルの背景(= 1)を描画するように設定できます。

CASE WHEN
count("FieldWithDuplicates","FieldWithDuplicates") > 1
THEN 1
ELSE 0
END

次のようなものを達成するために

QGISキャンバスで強調表示された属性ラベルの複製

もちろん、どちらの状況でも、重複する属性を削除または変更すると、フォーマット/スタイルが即座に更新されます。


1
これは、ここで最も正当な答えです。式を標準クエリツールでも直接使用できることを追加したかっただけです。
maxwhere

@maxwhereは、レイヤーのフィルタリングに使用されるクエリビルダのことですか?実際にQ 3.4または3.8で結果をフィルター処理するようには思えませんが、Q 2.xで使用されていたようなエラーをスローしなかったことに驚いています。
she_weeds

14

Group Statsプラグインを使用して、IDをフィールド分類として設定します。「count」列に各値が入力された回数を確認できます。


13

これを行うための簡単な(エレガントではない)方法は、レイヤープロパティに移動し、目的の列を使用して[スタイル-分類]を選択します。これを適用し、レイヤーウィンドウでレイヤーを右クリックし、[フィーチャカウントを表示]チェックボックス。次に、レイヤーウィンドウでレイヤーを展開すると、各値が入力された回数をすぐに確認できます。


11

これは私がつまずいたばかりの良い質問です。これまでに出された答えはどれも好きではありません。連続しておらず整数ではない一意のIDを持つ有効なデータセットがあります。問題は、データセットに単一のジオメトリが含まれているが、実際にはいくつかの境界が複数のジオメトリであるということです。私の仕事は、これらの形状を識別して結合することです。

この種の作業には、DBマネージャーとSQLを使用することをお勧めします。DBマネージャーはQGISの一部になりました。データをPostGISまたはSpatiaLiteデータセットにエクスポートする必要があります。とにかく、SpatiaLiteはファイルベースのデータ形式である必要があります。

これで、count()、group by、order byを好きなように使用でき、この問題やその他の問題をかなり迅速に解決できるはずです。

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


1
SQLプラグインを使用するのが最善の方法です!
Devdatta Tengshe

うまくいきました。別の属性列に最小値/最大値を持つフィーチャを(重複から)選択するにはどうすればよいですか?理解できませんでした。私を手伝ってくれますか?
christian.gobel

わかりません。範囲(最小/最大)は、レコードが重複するかどうかを定義しますか?
デニスバウスズ

4

ええ、同様の問題で頭を壁にぶつけました。

同じIDの機能を削除するためのスクリプトを次に示します。複数のインデックス属性を持つ最初のフィーチャを取得し、それを新しいフィーチャクラスに書き込みます。

#Definition of inputs and outputs
# Written by: Gregor Skrt 
#==================================
##[Example scripts]=group
##input=vector
##unique_field=field input
##output=output vector

#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from processing.core.VectorWriter import VectorWriter

# "input" contains the location of the selected layer.
# We get the actual object, so we can get its bounds
layer = processing.getobject(input)
provider = layer.dataProvider()
fields = provider.fields()
writer = VectorWriter(output, None, fields, provider.geometryType(), layer.crs() )

inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0
values = {}

value_field_index = layer.fieldNameIndex(unique_field)

feats = processing.getfeatures(layer)
nFeat = len(feats)

for inFeat in feats:
    progress.setPercentage(int((100 * nElement)/nFeat))
    nElement += 1
    inGeom = inFeat.geometry()
    attrs = inFeat.attributes()
    value = attrs[value_field_index]

    if value not in values:
    #to ne vem ce bo drzalo ???
        values[value]=[]
    outFeat.setGeometry(inGeom)
    outFeat.setAttributes(attrs)
    writer.addFeature(outFeat)
del writer

2

また、属性による分割を使用して、各値ごとに個別のテーブルを作成することもできます。

しかし、Rayoの提案は気に入っています。統計学者が思ったほどうまくいかないことを除いて。
一意の値のカウントを提供しますが、それらの値が何であるかを助けません。
別のソフトウェアがカウントフィールドを追加し、csvまたは他のスプレッドシート形式にエクスポートできるようにする場合があります。

統計
属性による分割レイヤーの私の提案は、ベクトル管理ツールにあります
管理も

スプリット
データを任意の1つのフィールドに分割して、カウントを取得します。
ship.shipのソリューションよりも洗練されていない方法


2
好きな答えを投票してみてください!
whuber

3
自己投票は許可されていません!
ブラッドネソム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.