ST_intersect
renvoie plusieurs types de géométrie, en fonction de la topologie relative.
Par exemple, en exécutant ST_intersect
sur deux polygones adjacents renvoie la partie commune de la limite partagée.
Bien qu'il produise une seule table (comme vous pouvez le vérifier dans pgadmin, par exemple), dans l'échantillon du navigateur de QGIS, il sera affiché sous la forme de plusieurs tables de différents types de géométrie (par exemple :POLYGON, MULTIPOLY, LINE et POINT) mais ( quelque peu déroutant) avec le même nom.
Visuellement, vous pouvez les différencier en observant les icônes d'accompagnement sur la gauche :
Vous pouvez cependant sélectionner le type de géométrie que vous souhaitez, par exemple en ajoutant un filtre WHERE avec 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, pour des raisons de performance, réécrivez-le d'une manière similaire à :
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;
Cette dernière solution crée une table temporaire anonyme, qui permet à ST_Intersection
à exécuter une seule fois.
Vous avez peut-être remarqué que l'astuce est dans ST_Dimension("clipped"."geom") = 2
.
ST_Dimensions
qui filtre les sorties de ST_Intersection
afin de ne conserver que les polygones (qui ont une dimension topologique de 2).