Identifizieren Sie doppelte Attribute im Feld mit QGIS?


27

Ich habe ein Punkt-Shapefile mit Tausenden von Punkten. Es hat ein ID-Code-Feld, das eindeutig sein soll. Von Zeit zu Zeit gibt der Dateneingabeschreiber die ID falsch ein und erstellt Duplikate. Im Moment scrolle ich manuell durch das Feld, um das Duplikat zu finden.

Gibt es eine andere Möglichkeit, dies mit dem Search Query Builder zu tun?


5
Wenn Sie die Eindeutigkeit erzwingen müssen, würde ich empfehlen, eine Datenbank zu verwenden, z. B. Postgres / PostGIS, Spatailite
Nathan W

Ich habe ein ähnliches Problem. Ich habe ein großes Shapefile mit UTM-Feldern, in denen bestimmte Arten vorkommen (bis zu 5 in einem Quadrat, meistens 2). Ich habe jedoch ein Problem damit, sie alle auf einer Karte darzustellen, da sie sich genau überlappen. Mischoptionen sehen schrecklich aus. Mein Workaround wäre, die Polygone je nach Anzahl der Arten im UTM-Quadrat zu gleichen Teilen aufzuteilen: Vorher: Quadrat zeigt eine Farbe, sollte aber zwei zeigen, da zwei Arten vorkommen ! [Vorher: Quadrat zeigt eine Farbe, sollte aber zwei zeigen ] ( i.stack.imgur.com/6WqKn.jpg ) nachher: ​​Platz geteilt
Hannes Ledegen

Ich denke, Sie sollten eine neue Frage stellen, anstatt Ihre am Ende hier zu posten.
Jens

Antworten:


7

Wenn die IDs aufeinander folgen , würde ich eine neue temporäre Spalte mit eindeutigen Werten wie @ Ship.shp hinzufügen und dann den Abfrage-Generator verwenden, um nach ID! = UniqueID zu suchen.

Das würde die Duplikate direkt zurückgeben. Entfernen Sie nach dem Festlegen der ursprünglichen IDs die zusätzliche Spalte oder wiederholen Sie den gesamten Vorgang nach Bedarf. Es ist nicht klar, mit welcher Art von Muster Ihre IDs übereinstimmen müssen. Wenn sie nur eindeutig sein müssen, notieren Sie sich zuerst den letzten Wert, und Sie können dann die fehlerhaften IDs in einer Iteration bearbeiten, indem Sie die Zahl nach und nach erhöhen.


18

Eine weitere grafische, dynamische und vor allem einfache Möglichkeit, doppelte Attribute zu erkennen: Verwenden Sie den Ausdrucksgenerator von QGIS.

Markieren Sie Duplikate in der Attributtabelle :

Aktivieren Sie die bedingte Formatierung (siehe roter Pfeil unten) mit der folgenden Bedingung:

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

Um alle Duplikate oben zu gruppieren, klicken Sie mit der rechten Maustaste auf die Spalte, wählen Sie Sortieren
Geben Sie den obigen Ausdruck ohne das >1Symbol ein, und deaktivieren Sie Aufsteigend sortieren.

Doppelte Attribute, die in der QGIS-Attributtabelle hervorgehoben sind

Markieren Sie Features mit doppelten Attributen auf der Leinwand :

Sie können ein neues Symbol oder eine neue Beschriftung hinzufügen, wenn der Filter auf die oben angegebene Bedingung eingestellt ist.

Und natürlich können Sie eine von Daten abgeleitete Überschreibung aktivieren, die auf derselben basiert.

Wenn Sie beispielsweise Beschriftungen für Features mit einem doppelten Attribut hervorheben möchten, können Sie festlegen, dass ein Beschriftungshintergrund (= 1) mit der folgenden Überschreibung gezeichnet wird:

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

um etwas wie das folgende zu erreichen

Doppelte Attributbezeichnungen, die im QGIS-Erstellungsbereich hervorgehoben sind

In beiden Situationen wird die Formatierung / Gestaltung natürlich sofort aktualisiert, sobald Sie die doppelten Attribute löschen oder ändern.


1
Dies ist bei weitem die legitimste Antwort hier. Ich wollte nur hinzufügen, dass der Ausdruck auch direkt mit dem Standard-Abfrage-Tool verwendet werden kann.
Bis zum

@maxwhere, meinen Sie im Abfrage-Generator, der zum Filtern von Layern verwendet wird? Es scheint nicht möglich zu sein, die Ergebnisse in Q 3.4 oder 3.8 tatsächlich zu filtern, obwohl ich überrascht bin, dass dadurch kein Fehler wie in Q 2.x aufgetreten ist.
she_weeds

14

Verwenden Sie das Plugin für Gruppenstatistiken und legen Sie die ID als Feldklassifizierung fest. In der Spalte "Anzahl" können Sie sehen, wie oft jeder Wert eingegeben wurde.


13

Eine schnelle (wenn auch unelegante) Möglichkeit, dies zu tun, besteht darin, die Ebeneneigenschaften aufzurufen, Stil - Kategorisiert anhand der gewünschten Spalte auszuwählen. Wenden Sie diese Option an, und klicken Sie dann mit der rechten Maustaste auf die Ebene im Ebenenfenster, und aktivieren Sie die Option Feature-Anzahl anzeigen Kontrollkästchen. Erweitern Sie dann die Ebene im Ebenenfenster und Sie können sofort sehen, wie oft jeder Wert eingegeben wurde.


11

Dies ist eine gute Frage, über die ich gerade gestolpert bin. Ich mag keine der bisher gegebenen Antworten. Ich habe einen gültigen Datensatz mit eindeutigen IDs, die nicht sequentiell und nicht ganzzahlig sind. Das Problem besteht darin, dass das Dataset einzelne Geometrien enthält, einige Grenzen jedoch mehrere Geometrien enthalten. Meine Aufgabe ist es, diese Geometrien zu identifizieren und zu vereinen.

Ich empfehle, den DB Manager und SQL für diese Art von Arbeit zu verwenden. Der DB Manager ist jetzt Teil von QGIS. Sie müssen Ihre Daten entweder in PostGIS oder in ein SpatiaLite-Dataset exportieren. SpatiaLite sollte sowieso das dateibasierte Datenformat der Wahl sein.

Jetzt können Sie count () verwenden, gruppieren und sortieren nach, wie Sie möchten, und sollten in der Lage sein, dieses und andere Probleme relativ schnell zu lösen.

Bildbeschreibung hier eingeben


1
Die Verwendung eines SQL-Plug-Ins ist der beste Weg!
Devdatta Tengshe

Schön, dass es funktioniert. Wie wäre es, das Feature (aus Duplikaten) mit einem Minimal- / Maximalwert in einer anderen Attributspalte auszuwählen? Ich konnte es nicht herausfinden. Kannst du mir bitte helfen?
christian.gobel

Nicht sicher ob ich verstehe. Definiert der Bereich (zwischen Minimum / Maximum), ob ein Datensatz ein Duplikat ist?
Dennis Bauszus

4

Ja, ich habe meinen Kopf wegen eines ähnlichen Problems gegen die Wand geschlagen.

Hier ist mein Skript zum Entfernen von Features mit denselben IDs. Das erste Feature mit mehr als einem Indexattribut wird verwendet und in eine neue Feature-Class geschrieben.

#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

Sie können auch das Attribut split by verwenden und für jeden Wert eine eigene Tabelle erstellen.

Ich mag Rayos Vorschlag. außer dass statist nicht so funktioniert, wie ich dachte.
Es gibt eine Anzahl eindeutiger Werte, hilft jedoch nicht bei der Bestimmung dieser Werte.
Eine andere Software fügt möglicherweise ein Zählfeld hinzu und ermöglicht es Ihnen, es in eine CSV-Datei oder ein anderes Tabellenformat zu exportieren.

statst
Mein Vorschlag für die geteilte Ebene nach Attribut ist in den Vektorverwaltungswerkzeugen
Management auch

Teilt
Teilen Sie Ihre Daten auf ein beliebiges Feld auf, und Sie erhalten Ihre Zählung.
viel uneleganter als die Lösung von ship.ship


2
Bitte überlegen Sie, welche Antworten Ihnen gefallen!
Whuber

3
Selbst-Upvote ist nicht erlaubt!
Brad Nesom
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.