ST_intersect
trả về một số loại hình học, tùy thuộc vào cấu trúc liên kết tương đối.
Ví dụ:chạy ST_intersect
trên hai đa giác liền kề trả về phần chung của ranh giới được chia sẻ.
Trong khi nó xuất hiện một bảng (ví dụ như bạn có thể xác minh trong pgadmin), trong mẫu trình duyệt của QGIS, nó sẽ được hiển thị dưới dạng nhiều bảng thuộc các loại hình học khác nhau (ví dụ:POLYGON, MULTIPOLY, LINE và POINT) nhưng ( hơi khó hiểu) với cùng một tên.
Bằng mắt thường, bạn có thể phân biệt chúng khi quan sát các biểu tượng bên trái:
Tuy nhiên, bạn có thể chọn loại hình bạn muốn, ví dụ:bằng cách thêm bộ lọc WHERE với ST_Dimension
:
SELECT a.*,
b.*,
st_intersection(a.geom, b.geom) as geom
FROM a,b
WHERE st_intersects(a.geom, b.geom)
AND ST_Dimension(st_intersects(a.geom, b.geom)) = 2;
hoặc, vì lợi ích của hiệu suất, viết lại nó theo cách tương tự như:
SELECT clipped.*
FROM (
SELECT a.id, b."fieldName",
(ST_Dump(ST_Intersection(a.geom, b.geom))).geom AS geom
FROM "public"."table_A_name" AS a INNER JOIN "public"."table_B_name" AS b
ON ST_Intersects(a.geom, b.geom)
) AS clipped
WHERE ST_Dimension("clipped"."geom") = 2;
Giải pháp thứ hai tạo một bảng tạm thời ẩn danh, cho phép ST_Intersection
chỉ chạy một lần.
Bạn có thể nhận thấy rằng thủ thuật nằm trong ST_Dimension("clipped"."geom") = 2
.
ST_Dimensions
bộ lọc đầu ra từ ST_Intersection
để chỉ giữ lại các đa giác (có kích thước tôpô là 2).