ST_intersect
retorna vários tipos de geometria, dependendo da topologia relativa. Por exemplo, executando
ST_intersect
em dois polígonos adjacentes retorna a parte comum do limite compartilhado. Enquanto ele produz uma única tabela (como você pode verificar no pgadmin, por exemplo), na amostra do navegador do QGIS ele será mostrado como várias tabelas de diferentes tipos de geometria (por exemplo:POLYGON, MULTIPOLY, LINE e POINT), mas ( um tanto confuso) com o mesmo nome.
Visualmente, você pode diferenciá-los observando os ícones de acompanhamento à esquerda:
No entanto, você pode selecionar o tipo de geometria que deseja, por exemplo, adicionando um filtro WHERE com
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;
ou, por uma questão de desempenho, reescreva-o de maneira semelhante 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;
A última solução cria uma tabela temporária anônima, que permite
ST_Intersection
para correr apenas uma vez. Você deve ter notado que o truque está em
ST_Dimension("clipped"."geom") = 2
. ST_Dimensions que filtra as saídas de
ST_Intersection
de modo a manter apenas polígonos (que têm uma dimensão topológica de 2).