ST_intersect
returnerar flera geometrityper, beroende på den relativa topologin.
Till exempel köra ST_intersect
på två intilliggande polygoner returnerar den gemensamma delen av den delade gränsen.
Medan den skickar en enskild tabell (som du kan verifiera i till exempel pgadmin), kommer den i webbläsarprovet för QGIS att visas som flera tabeller av olika geometrityper (till exempel:POLYGON, MULTIPOLY, LINE och POINT) men ( något förvirrande) med samma namn.
Visuellt kan du skilja dem åt genom att observera de medföljande ikonerna till vänster:
Du kan dock välja vilken typ av geometri du vill ha, till exempel genom att lägga till ett 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, för prestations skull, skriv om det på ett sätt som liknar:
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;
Den senare lösningen skapar en anonym temporär tabell, som tillåter ST_Intersection
att köra endast en gång.
Du kanske har märkt att tricket är i ST_Dimension("clipped"."geom") = 2
.
ST_Dimensions
som filtrerar utdata från ST_Intersection
för att bara behålla polygoner (som har en topologisk dimension på 2).