ST_intersect
restituisce diversi tipi di geometria, a seconda della relativa topologia.
Ad esempio, eseguendo ST_intersect
su due poligoni adiacenti restituisce la parte comune del confine condiviso.
Mentre crea una singola tabella (come puoi verificare in pgadmin, ad esempio), nel campione del browser di QGIS verrà mostrato come più tabelle di diversi tipi di geometria (ad esempio:POLYGON, MULTIPOLY, LINE e POINT) ma ( un po' confusamente) con lo stesso nome.
Visivamente, puoi distinguerli osservando le icone di accompagnamento sulla sinistra:
Puoi comunque selezionare quale tipo di geometria desideri, ad esempio aggiungendo 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;
oppure, per motivi di prestazioni, riscrivilo in modo simile 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;
Quest'ultima soluzione crea una tabella temporanea anonima, che consente ST_Intersection
da eseguire solo una volta.
Potresti aver notato che il trucco è in ST_Dimension("clipped"."geom") = 2
.
ST_Dimensions
che filtra gli output da ST_Intersection
in modo da mantenere solo i poligoni (che hanno dimensione topologica 2).