ST_intersect
devuelve varios tipos de geometría, dependiendo de la topología relativa.
Por ejemplo, ejecutar ST_intersect
en dos polígonos adyacentes devuelve la parte común del límite compartido.
Si bien genera una sola tabla (como puede verificar en pgadmin, por ejemplo), en la muestra del navegador de QGIS se mostrará como varias tablas de diferentes tipos de geometría (por ejemplo:POLYGON, MULTIPOLY, LINE y POINT) pero ( algo confuso) con el mismo nombre.
Visualmente, puede diferenciarlos observando los íconos que lo acompañan a la izquierda:
Sin embargo, puede seleccionar qué tipo de geometría desea, por ejemplo, agregando un filtro WHERE con 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;
o, por motivos de rendimiento, reescríbalo de forma similar a:
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;
La última solución crea una tabla temporal anónima, que permite ST_Intersection
ejecutar solo una vez.
Es posible que hayas notado que el truco está en ST_Dimension("clipped"."geom") = 2
.
ST_Dimensions
que filtra las salidas de ST_Intersection
para mantener solo los polígonos (que tienen una dimensión topológica de 2).