Ich versuche, ein Polygon in kleinere Polygone von einer Linie zu trennen, aber ich glaube, ich kann die Funktion st_split nicht verwenden. Was ich brauche, ist das Erstellen kleiner Polygone in einem großen Polygongitter.
Ich habe einige Möglichkeiten ausprobiert, aber ich kann das Ergebnis nicht erhalten. Was ich versucht habe:
Teilen Sie ein Polygon von einem LineString mit st_split ()
Aus einem Grenzpolygon.
Und Linestring-Tabelle:
Ich würde die folgenden Polygone brauchen:
Problem : Ich kann weder ein Polygon aus mehreren Linien noch ein Polygon aus einer Multilinienfolge teilen.
Die andere Methode, die ich versuche, ist, mit st_polygonize () ein Polygon aus den Zeilen zu erstellen. Die SQL, die ich versucht habe, ist:
SELECT
g.path[1] as gid,
g.geom::geometry(polygon, 22033) as geom
FROM
(SELECT
(ST_Dump(ST_Polygonize(geom))).*
FROM linestable
) as g;
Extrahiert aus Erstellen von Polygonen aus Liniensegmenten mit PostgreSQL und PostGIS
Problem : Ich kann nur ein Polygon (die Grenze) erhalten.
Kann mir jemand sagen, was der beste Weg wäre, um die Polygone aus dem Linestring zu holen, oder ob ich etwas vermisse?
Hinweis: Tabellen haben dieselbe SRID und Geometrien werden in ein Raster gefangen. In QGIS kann ich den Polygonisierungsprozess von Linien zu Polygonen perfekt ausführen.
Wie John es verlangt, ist hier die Tabelle mit den Zeilenfolgen. https://drive.google.com/file/d/0B603y_m735jfS014S0EyVnpMUEU/view?usp=sharing
Antworten:
Ich habe dies funktioniert, indem ich zuerst ST_Node in Verbindung mit ST_Collect verwendet habe , um die Linien in einen Satz von geknoteten Linienfolgen in einem MultiLinestring zu konvertieren .
Wie es in den Dokumenten für heißt ST_Node heißt :
Dies bedeutet, dass alle Linienfolgen in allen möglichen Kombinationen kombiniert werden, um das Äquivalent zum äußeren Ring eines Polygons zu bilden. Wobei , wenn Sie versuchen, ST_Polygonize eine Reihe von Linestrings, von denen keine auf sie selbst ist ein Polygon beschreibt, erhalten Sie einfach die Linestrings zurück. Das funktioniert also:
Wenn Sie nur den ersten Teil davon ausführen, dh den CTE multi, sieht die Ausgabe folgendermaßen aus:
Wenn Sie jetzt diesen MultiLinestring an ST_Polygonize weiterleiten er wie erwartet, z.
Offensichtlich dient ST_AsText nur zur Veranschaulichung und Sie müssen Anpassungen vornehmen, wenn Sie auch die Pfad-ID benötigen.
Der Schlüssel zum Mitnehmen ist, dass ST_Polygonize Linienfolgen erwartet, die bereits den Umriss eines Polygons beschreiben .
quelle
ST_Polygonize()
sagt, dass esST_Node()