Entfernen Sie doppelte Polygone mit Open Source Tools

13

Ich habe ein Shapefile, das Features mit doppelten Geometrien, aber unterschiedlichen Attributen enthält (z. B. ein Polygon mit Attribut XX und ein identisches Polygon mit Attribut XY). Ich möchte die Duplikate identifizieren, dann das mit den richtigen Attributen auswählen und das andere löschen.

Ich habe Topologie-Tools in OpenJump / Kosmo ausprobiert, aber ohne Erfolg. Sie haben ein Tool zum Löschen von Duplikaten, das tut, was ich will, außer dass es scheinbar willkürlich eines der Features löscht, anstatt mir zu überlassen, welches ich behalten soll.

Ich habe Zugriff auf QGIS, OpenJUMP, Kosmo usw. und kann bei Bedarf weitere Open Source / Free Tools installieren.

Gedanken?

Darren Cope
quelle

Antworten:

7

Neben PostGIS können Sie auch ein topologisches Open-Source-GIS (GRASS) verwenden:

  1. Herunterladen und installieren
  2. Starten Sie den Location Manager und wählen Sie ihn aus. Verwenden Sie das Tool, um eine neue Projektdatenbank aus Ihrer SHAPE-Datei ("GRASS Location") zu generieren. Hier finden Sie eine schrittweise Anleitung
  3. Importieren Sie die SHAPE-Datei
  4. Verwenden Sie das Tool "v.clean", das eine Reihe von Optionen bietet
  5. Exportiere die Karte mit "v.out.ogr" zurück in das SHAPE-Dateiformat

Hinweis: Wir planen, hierfür ein WPS anzubieten, damit Sie Ihre Daten über unser Webportal polieren können.

markusN
quelle
Ich glaube nicht, dass v.clean es Benutzern erlaubt, Topologiefehler nacheinander 'interaktiv' zu identifizieren und zu beheben. Bitte korrigieren Sie mich, wenn ich falsch liege.
Darren Cope
Ich habe vermisst, dass du es interaktiv machen wolltest. Der v.digit Digitizer ist also das zu verwendende Werkzeug.
markusN
Markus, Ein kurzer Durchlauf durch v.digit hört sich nicht so an, als würde es tun, was ich will. Können Sie vielleicht ein Beispiel geben, wie ich meine Aufgabe mit v.digit erfüllen würde?
Darren Cope
1
Wenn Sie das Shapefile einfach in GRASS importieren, wird eine Ebene mit überlappenden Polygonen als 2_Polygon-Ebene erstellt. Ich denke, das sollte ausreichen, damit ich weitermachen kann!
Darren Cope
3

Dies ist, was ich in diesen Fällen zu tun habe. Soweit ich weiß, müssen Sie manuell prüfen, welches Attribut das richtige ist. Dann mache ich es in zwei Schritten. Zuerst erstelle ich eine Tabelle oder eine Ansicht in PostGIS mit den duplizierten Polygonen, dann öffne ich diese Tabelle in einem Desktop-GIS zusammen mit der ursprünglichen Ebene, auf der ich die Duplikate löschen möchte. Das führt mich zu den Duplikaten in meiner Duplikattabelle und ich kann sie in der Originaltabelle oder im Shapefile oder was auch immer löschen.

Die Abfrage zum Finden der Duplikate sieht ungefähr so ​​aus, wenn Sie eine eindeutige ID mit dem Namen gid und eine Geometriespalte mit dem Namen the_geom haben:

create table duplicates as
select a.the_geom, a.gid, b.gid from mytable a, mytable b 
where ST_Equals(a.the_geom, b.the_geom) and a.gid!=b.gid;

Es gibt einige Varianten von ST_Equals, aber ich denke, ST_Equals ist diejenige, die Sie wollen. Dadurch erhalten Sie eine Tabelle mit den doppelten Geometrien und der GID (ID) der ersten und zweiten Gelegenheit des Polygons. Sie werden zwar zweimal dasselbe Duplikat erhalten, aber das sollte keine Rolle spielen, da Sie nur möchten, dass sie Ihnen zeigen, wo sie sich befinden.

HTH Nicklas

Nicklas Avén
quelle
3

Wenn Sie PostGIS 1.5.x verwenden, überprüfen Sie die Funktion ST_HausdorffDistance ().
Doppelte Geometrien ergeben einen Wert von 0. Verwenden Sie ihn wie die erwähnten Self Joins. Ziemlich ordentlich zum Vergleichen von Polygonformen.

eprand
quelle
0

Eine einfachere Möglichkeit. Berechnen Sie die Fläche in Ihrem Desktop-GIS und sortieren Sie sie nach aufsteigender oder absteigender Fläche. Sie müssen jetzt jede Zeile überprüfen, um die duplizierten Objekte in Ihrer Attributtabelle zu sehen. Es basiert auf der Annahme, dass Sie für nicht duplizierte Objekte nie genau den gleichen Bereich haben, obwohl dies manchmal falsch sein kann.

ThomasG77
quelle