Wenn Sie die Polygone einer Tabelle mit Polygonen in einer anderen beschneiden, kann ST_Intersection eine Reihe von Ergebnissen zurückgeben, die mit ST_Dump verarbeitet werden können. Die zurückgegebenen Mehrfachgeometrien sind nicht unbedingt ST_Polygon, sondern auch ST_LineString (wahrscheinlich auch ein Punkt). Also beim Ausführen einer Abfrage
INSERT INTO c (geom)
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom));
Beim Versuch, die Tabelle "c" mit abgeschnittenen Polygonen zu füllen, schlägt dies mit ERROR fehl: Der Geometrietyp (LineString) stimmt nicht mit dem Spaltentyp (Polygon) überein.
Ich habe eine weitere verschachtelte SELECT-Anweisung ausgeführt, sodass nur die Polygongeometrien durchgekommen sind, z.
INSERT INTO c (geom)
(SELECT geom FROM
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom))) AS cl
WHERE ST_GeometryType(cl.geom)='ST_Polygon');
Da dies etwas umständlich ist, frage ich mich, ob es eine elegantere Lösung gibt, um ungültige Geometrien zu löschen.
{}über dem Fenster zum Bearbeiten von Fragen.