(Definierte) Splitterpolygone mit PostGIS entfernen? [geschlossen]

9

Wie schreibe ich SQL (für PostGIS in PostgreSQL), um Splitterpolygone (einschließlich langer schmaler Splitter und einiger kleiner unregelmäßiger Polygone, die fehlerhafte "Lücken" im ursprünglichen Datensatz waren) aus meinem Datensatz zu entfernen, indem ich sie mit einem benachbarten Polygon mit der längsten Kante zusammenführe?

Ich habe einen Datensatz (Tabellenname: "Vegetation"), der mehrere tausend Polygone enthält, die entweder als Splitter oder als "echtes" Polygon in einer Beschreibungsspalte (Spaltenname: "desc") als "Splitter" oder "Haupt" identifiziert sind. [Bearbeiten: Prior Um meinen Datensatz in PostGIS zu importieren, habe ich ihn bereinigt, indem ich ihn in GRASS importiert habe. Auf diese Weise habe ich auch alle Lücken in kleine Polygone konvertiert, die ich anschließend mit dem Hauptdatensatz zusammengeführt habe. Ich habe festgestellt, ob ich die Fangtoleranz und die Mindestfläche nach 'erhöht habe. 1 'beim GRASS-Import habe ich angefangen, die gewünschten Funktionen zu verlieren.]

Mein Verständnis ist, dass ich möglicherweise die folgenden Schritte benötige:

  1. Identifizieren Sie das Polygon (Vegetation.desc = "main") neben jedem Faserband (Vegetation.desc = "Faserband"), das die längste Kante teilt.
  2. Identifizieren Sie die Kante zwischen jedem Faserband und dem angrenzenden Hauptpolygon, das sich die längste in Schritt 1 identifizierte Kante teilt. (Möglicherweise mit ST_Relate)
  3. Entfernen Sie die Kante zwischen jedem Faserband und dem angrenzenden Hauptpolygon, das sich die längste Kante teilt, mithilfe der in Schritt 2 zurückgegebenen Kantenkennung. (Möglicherweise mithilfe von ST_RemEdgeModFace)

Ich habe nur ein sehr grundlegendes Verständnis von SQL und der obige Prozess übersteigt meine Fähigkeiten.

DavidM
quelle
Erweiterung "postgis topology", wenn ich richtig verstanden habe, nur eine Topologie mit größerer Toleranz als Ihr durchschnittliches Faserband zu erstellen, werden Geometrien reinigen. aber ich habe so etwas nicht getan
simplexio
Ich glaube, ich würde zu viel Auflösung verlieren, wenn ich eine Topologie mit einer ausreichend großen Toleranz aufgrund der Größe einiger der "Splitter" erstellen würde (siehe Erläuterung im Text). Dies kann an meinem begrenzten Verständnis liegen, und einfachere Lösungen werden sehr begrüßt!
DavidM
Willkommen bei GIS und Datenbereinigung. Haben Sie Zugang zu FME? Dieser ist recht einfach zu bedienen und bietet die Möglichkeit, Splitter aus Polygonen zu entfernen. Alternativen zu gis.stackexchange.com/questions/24365/… und Google scheinen pl / pgsql-Antworten auf Ihre Frage zu finden (keine Ahnung, wie gut sie sind). Das heißt, es gibt keinen super einfachen Weg, es zu tun, den ich kenne, es von Hand zu reinigen ist "einfach", aber ich kann mir lange Zeit nehmen
Simplexio
Das silberne Zeug hinterlässt Löcher, wenn Sie eine Vereinigung bilden, oder gibt es dazwischen liegende Artefakte oder beide Arten von "Rundungsfehlern"?
Huckfinn
1
Ich habe mein Problem (für das aktuelle Projekt) vorübergehend gelöst, indem ich die ARCGIS-Testversion verwendet und die Eliminierungsfunktion angewendet habe. Das hat gut funktioniert. Ich würde immer noch gerne eine SQL-Lösung mit Postgis erarbeiten.
DavidM

Antworten:

3

Ich verwende dies, wenn ich die Formen aus dem GADM2-Dataset in SQL Server aggregiere:

SET @g2 = @g1.STBuffer(1).Reduce(1).STBuffer(-1).Reduce(1)

Das reduce()räumt die erweiterten Artefakte aus und beschleunigt die Dinge um den Faktor 100x - etwas rau, aber gut für Annäherungen.

Daniel
quelle