ST_intersect
gibt abhängig von der relativen Topologie mehrere Geometrietypen zurück.
Beispiel:Ausführen von ST_intersect
auf zwei benachbarten Polygonen gibt den gemeinsamen Teil der gemeinsamen Grenze zurück.
Während es eine einzelne Tabelle ausgibt (wie Sie zum Beispiel in pgadmin überprüfen können), wird es im Browsermuster von QGIS als mehrere Tabellen mit verschiedenen Geometrietypen angezeigt (zum Beispiel:POLYGON, MULTIPOLY, LINE und POINT), aber ( etwas verwirrend) mit demselben Namen.
Visuell können Sie sie unterscheiden, indem Sie die begleitenden Symbole auf der linken Seite beobachten:
Sie können jedoch den gewünschten Geometrietyp auswählen, indem Sie beispielsweise einen WHERE-Filter mit ST_Dimension
hinzufügen :
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;
oder schreiben Sie es aus Gründen der Leistung ähnlich wie folgt um:
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;
Die letztere Lösung erstellt eine anonyme temporäre Tabelle, die ST_Intersection
zulässt nur einmal auszuführen.
Sie haben vielleicht bemerkt, dass der Trick in ST_Dimension("clipped"."geom") = 2
liegt .
ST_Dimensionen
der die Ausgaben von ST_Intersection
filtert um nur Polygone zu behalten (die eine topologische Dimension von 2 haben).