- Kategorien:
ST_INTERSECTION¶
Gibt bei zwei GEOGRAPHY-Eingabeobjekten ein GEOGRAPHY-Objekt zurück, das die Form mit der Menge der Punkte darstellt, die beiden Eingabeobjekten gemeinsam sind (d. h. die Schnittmenge der beiden Objekte).
- Siehe auch:
ST_INTERSECTION_AGG , ST_UNION , ST_DIFFERENCE , ST_SYMDIFFERENCE
Syntax¶
ST_INTERSECTION( <geography_expression_1> , <geography_expression_2> )
Argumente¶
geography_expression_1
Ein GEOGRAPHY-Objekt.
geography_expression_2
Ein GEOGRAPHY-Objekt.
Rückgabewerte¶
Gibt einen Wert vom Typ GEOGRAPHY zurück.
Nutzungshinweise¶
Befindet sich ein beliebiger Punkt eines Eingabeobjekts auf der Grenze des anderen Eingabeobjekts (ohne Punkte), kann die Ausgabe diesen Punkt möglicherweise enthalten oder auch nicht.
Nehmen wir zum Beispiel an,
geography_expression_1
istPOINT(1 1)
undgeography_expression_2
istLINESTRING(1 0, 1 2)
. In diesem Fall liegtgeography_expression_1
auf der Grenze vongeography_expression_2
, ist aber kein Punkt davon.In diesem Beispiel ist die erwartete Ausgabe
POINT(1 1)
, aber die tatsächliche Ausgabe könnte ein leeres geographisches Objekt sein (dargestellt durch NULL).Um diese Fälle zu erkennen und zu umgehen, könnte beispielsweise mit ST_DWITHIN festgestellt werden, ob der Mindestabstand zwischen den beiden Eingabeobjekten
0
beträgt. Sie können auch prüfen, ob ein Punkt auf einem LineString liegt, indem Sie prüfen, ob der Mindestabstand zwischen den beiden Objekten null ist:SELECT TO_GEOGRAPHY('POLYGON((0 0, 1 0, 2 1, 1 2, 2 3, 1 4, 0 4, 0 0))') AS polygon, TO_GEOGRAPHY('POINT(0 2)') AS point, ST_DWITHIN(polygon, point, 0) AS point_is_on_top_of_polygon, ST_INTERSECTION(polygon, point);
Diese Anweisung erzeugt die folgende Ausgabe:
+--------------------------------------------+------------+----------------------------+---------------------------------+ | POLYGON | POINT | POINT_IS_ON_TOP_OF_POLYGON | ST_INTERSECTION(POLYGON, POINT) | |--------------------------------------------+------------+----------------------------+---------------------------------| | POLYGON((0 0,1 0,2 1,1 2,2 3,1 4,0 4,0 0)) | POINT(0 2) | True | NULL | +--------------------------------------------+------------+----------------------------+---------------------------------+
Es wird nicht garantiert, dass die Funktion normalisierte und/oder minimale Ergebnisse liefert. Eine Ausgabe könnte zum Beispiel aus einem LineString-Objekt bestehen, das mehrere Punkte enthält, die eigentlich nur ein gerades Segment bilden.
Beispiele¶
Im folgende Beispiel wird ein GEOGRAPHY-Objekt zurückgegeben, das die Schnittmenge der beiden GEOGRAPHY-Eingabeobjekte darstellt:
ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT'; SELECT ST_INTERSECTION( TO_GEOGRAPHY('POLYGON((0 0, 1 0, 2 1, 1 2, 2 3, 1 4, 0 4, 0 0))'), TO_GEOGRAPHY('POLYGON((3 0, 3 4, 2 4, 1 3, 2 2, 1 1, 2 0, 3 0))')) AS intersection_of_objects;
Dieses Beispiel ergibt die folgende Ausgabe:
+-----------------------------------------------------------------------------------------------------------------------------------------+ | INTERSECTION_OF_OBJECTS | |-----------------------------------------------------------------------------------------------------------------------------------------| | MULTIPOLYGON(((1.5 0.5000571198,2 1,1.5 1.500171359,1 1,1.5 0.5000571198)),((1.5 2.500285599,2 3,1.5 3.500399839,1 3,1.5 2.500285599))) | +-----------------------------------------------------------------------------------------------------------------------------------------+
Die folgenden Bilder veranschaulichen die Unterschiede in den Flächen, die die Eingabe- und Ausgabeobjekte darstellen:
Eingabe |
Ausgabe |
---|---|