Kategorien:

Geodatenfunktionen

ST_INTERSECTION

Gibt bei zwei GEOGRAPHY-Eingabeobjekten ein GEOGRAPHY-Objekt zurück, das die Menge der Punkte darstellt, die beiden Eingabeobjekten gemeinsam sind (d. h. die Schnittmenge der beiden Objekte).

Siehe auch:

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 ist POINT(1 1) und geography_expression_2 ist LINESTRING(1 0, 1 2). In diesem Fall liegt geography_expression_1 auf der Grenze von geography_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

Areas of input objects passed to ST_INTERSECTION Areas of output objects returned by ST_INTERSECTION
Zurück zum Anfang