Saat memotong poligon dari satu tabel dengan poligon di yang lain, ST_Intersection dapat mengembalikan serangkaian hasil yang dapat ditangani dengan ST_Dump. Beberapa geometri yang dikembalikan tidak harus ST_Polygon tetapi juga ST_LineString (mungkin juga sebuah titik). Jadi saat menjalankan kueri
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));
ketika mencoba mengisi tabel "c" dengan poligon terpotong, ia gagal dengan ERROR: Tipe geometri (LineString) tidak cocok dengan tipe kolom (Poligon)
Saya melakukan pernyataan SELECT bersarang lain sehingga hanya geometri poligon yang datang, seperti:
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');
Karena ini agak rumit saya bertanya-tanya apakah ada solusi yang lebih elegan untuk menjatuhkan geometri yang tidak valid?
{}atas jendela pengeditan Pertanyaan.