Khi cắt đa giác của một bảng bằng đa giác trong một bảng khác, ST_Intersection có thể trả về một tập hợp kết quả có thể được xử lý với ST_Dump. Nhiều hình học được trả về không nhất thiết phải là ST_Polygon mà còn là ST_LineString (có thể cũng là một điểm). Vì vậy, khi chạy một truy vấn
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));
khi cố gắng điền vào bảng "c" với đa giác bị cắt, nó không thành công với ERROR: Kiểu hình học (LineString) không khớp với loại cột (Đa giác)
Tôi đã thực hiện một câu lệnh CHỌN lồng nhau khác để chỉ các hình học đa giác đi qua, như:
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');
Vì đây là một chút rườm rà, tôi tự hỏi liệu có một giải pháp thanh lịch hơn cho việc bỏ hình học không hợp lệ?
{}phía trên cửa sổ chỉnh sửa Câu hỏi.