ST_intersect
returnerer flere geometrityper, afhængigt af den relative topologi.
For eksempel at køre ST_intersect
på to tilstødende polygoner returnerer den fælles del af den delte grænse.
Mens den udsender en enkelt tabel (som du for eksempel kan verificere i pgadmin), vil den i browserprøven i QGIS blive vist som flere tabeller af forskellige geometrityper (for eksempel:POLYGON, MULTIPOLY, LINE og POINT) men ( noget forvirrende) med samme navn.
Visuelt kan du adskille dem ved at observere de tilhørende ikoner til venstre:
Du kan dog vælge hvilken type geometri du ønsker, for eksempel ved at tilføje et WHERE-filter med 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;
eller, for ydeevnens skyld, genskriv det på en måde, der ligner:
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;
Sidstnævnte løsning opretter en anonym midlertidig tabel, som tillader ST_Intersection
kun at køre én gang.
Du har måske bemærket, at tricket er i ST_Dimension("clipped"."geom") = 2
.
ST_Dimensions
som filtrerer output fra ST_Intersection
for kun at beholde polygoner (som har en topologisk dimension på 2).