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:
- Identifizieren Sie das Polygon (Vegetation.desc = "main") neben jedem Faserband (Vegetation.desc = "Faserband"), das die längste Kante teilt.
- 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)
- 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.
quelle
Antworten:
Ich verwende dies, wenn ich die Formen aus dem GADM2-Dataset in SQL Server aggregiere:
Das
reduce()
räumt die erweiterten Artefakte aus und beschleunigt die Dinge um den Faktor 100x - etwas rau, aber gut für Annäherungen.quelle