ST_Intersection — Berechnet eine Geometrie, die den gemeinsamen Teil der Geometrien A und B darstellt.
geometry ST_Intersection( geometry geomA , geometry geomB , float8 gridSize = -1 );
geography ST_Intersection( geography geogA , geography geogB );
Gibt eine Geometrie zurück, die die Punktmengenüberschneidung zweier Geometrien darstellt. Mit anderen Worten: der Teil von Geometrie A und Geometrie B, der von den beiden Geometrien gemeinsam genutzt wird.
Wenn die Geometrien keine gemeinsamen Punkte haben (d. h. disjunkt sind), wird eine leere atomare Geometrie des entsprechenden Typs zurückgegeben.
If the optional gridSize parameter is given (GEOS-3.9.0 or higher required), all result vertices are guaranteed to fall on a snap-rounded grid of the specified size. Note that operations performed on a grid may contain small artifacts produced during grid alignment, see ST_ReducePrecision.
ST_Intersection in Verbindung mit ST_Intersects ist nützlich, um Geometrien zu beschneiden, z. B. in Bounding Box-, Puffer- oder Regionsabfragen, bei denen Sie nur den Teil einer Geometrie benötigen, der sich innerhalb eines Landes oder einer Region von Interesse befindet.
|
|
|
Spatial predicates such as ST_Intersects and overlay functions such as |
|
|
|
|
|
|
|
Mit dieser Funktion werden die M-Koordinatenwerte, falls vorhanden, gelöscht. |
|
|
|
If working with 3D geometries, you may want to use SFCGAL based CG_3DIntersection which does a proper 3D intersection for 3D geometries. Although this function works with Z-coordinate, it does an averaging of Z-Coordinate. |
Wird durch das GEOS Modul ausgeführt
Verbessert: 3.1.0 akzeptiert einen gridSize Parameter
Erfordert GEOS >= 3.9.0 zur Verwendung des Parameters gridSize
Geändert: 3.0.0 ist nicht von SFCGAL abhängig.
Verfügbarkeit: Mit Version 1.5 wurde die Unterstützung für den Datentyp Geographie eingeführt.
Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3
Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.18
Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen. Das Ergebnis wird jedoch nur mit XY berechnet. Die Z-Werte des Ergebnisses werden kopiert, gemittelt oder interpoliert.
SELECT ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0,0 2 )'::geometry);
PUNKT LEER
SELECT ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 0 0,0 2 )'::geometry);
POINT(0 0)
Schneiden Sie alle Linien (Trails) nach Land. Hier nehmen wir an, dass die Ländergeometrien POLYGON oder MULTIPOLYGON sind. HINWEIS: Wir behalten nur Schnittpunkte, die zu einem LINESTRING oder MULTILINESTRING führen, da wir uns nicht um Wege kümmern, die nur einen Punkt teilen. Der Dump wird benötigt, um eine Geometriesammlung in einzelne MULT*-Teile zu zerlegen. Das folgende Beispiel ist recht allgemein gehalten und funktioniert auch für Polygone usw., indem einfach die Where-Klausel geändert wird.
select clipped.gid, clipped.f_name, clipped_geom
from (
select trails.gid, trails.f_name,
(ST_Dump(ST_Intersection(country.geom, trails.geom))).geom clipped_geom
from country
inner join trails on ST_Intersects(country.geom, trails.geom)
) as clipped
where ST_Dimension(clipped.clipped_geom) = 1;
Für Polygone, z. B. Polygon-Landmarken, können Sie auch den manchmal schnelleren Hack verwenden, dass das Puffern von allem um 0,0 außer einem Polygon zu einer leeren Geometriesammlung führt. (Eine Geometriesammlung mit Polygonen, Linien und Punkten, die mit 0,0 gepuffert wird, würde also nur die Polygone übrig lassen und die Sammlungshülle auflösen).
select poly.gid,
ST_Multi(ST_Buffer(ST_Intersection(country.geom, poly.geom),
0.0
)
) clipped_geom
from country
inner join poly on ST_Intersects(country.geom, poly.geom)
where not ST_IsEmpty(ST_Buffer(ST_Intersection(country.geom, poly.geom), 0.0));
Note this is not a true 3D intersection. It uses 2.5D geometries (geometries with Z ordinates, but where calculations are performed in 2D). The same input is compared with CG_3DIntersection, which performs a true 3D intersection.
WITH data AS (
SELECT 'LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10)'::geometry AS input_linestring,
'POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8))'::geometry AS input_polygon
)
SELECT input_linestring AS input_linestring,
input_polygon AS input_polygon,
ST_Intersection(input_linestring, input_polygon) AS intersection_2d,
CG_3DIntersection(input_linestring, input_polygon) AS intersection_3d
FROM data;
LINESTRING Z (2 2 6,1.5 1.5 7,1 1 8,0.5 0.5 8,0 0 10) | POLYGON Z ((0 0 8,0 1 8,1 1 8,1 0 8,0 0 8)) | LINESTRING Z (1 1 8,0.5 0.5 8,0 0 10) | LINESTRING Z (1 1 8,0.5 0.5 8)