ST_intersect
vrátí několik typů geometrie v závislosti na relativní topologii.
Například spuštění ST_intersect
na dvou sousedních polygonech vrátí společnou část sdílené hranice.
I když vytiskne jednu tabulku (jak si můžete ověřit například v pgadmin), ve vzorníku prohlížeče QGIS se zobrazí jako více tabulek různých typů geometrie (například:POLYGON, MULTIPOLY, LINE a POINT), ale ( poněkud matoucí) se stejným názvem.
Vizuálně je můžete rozlišit podle doprovodných ikon nalevo:
Můžete si však vybrat, jaký typ geometrie chcete, například přidáním filtru WHERE s 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;
nebo jej z důvodu výkonu přepište podobným způsobem jako:
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;
Posledně uvedené řešení vytváří anonymní dočasnou tabulku, která umožňuje ST_Intersection
spustit pouze jednou.
Možná jste si všimli, že trik je v ST_Dimension("clipped"."geom") = 2
.
ST_Dimensions
který filtruje výstupy z ST_Intersection
tak, aby zůstaly pouze polygony (které mají topologický rozměr 2).