Kategorien:

Geodatenfunktionen

ST_HAUSDORFFDISTANCE

Gibt den diskreten Hausdorff-Abstand zwischen zwei Geodatenobjekten zurück.

Der Hausdorff-Abstand gibt an, wie ähnlich die beiden Objekte sind. Zwei Objekte gelten als ähnlich, wenn sich jeder Punkt in einem Objekt in der Nähe eines Punkts im anderen Objekt befindet. Der Hausdorff-Abstand ist der größte Abstand zwischen einem Punkt in einem Objekt und einem Punkt in einem anderen Objekt.

ST_HAUSDORFFDISTANCE gibt den diskreten Hausdorff-Abstand zurück, der berechnet wird, indem nur die Eckpunkte (diskrete Punkte) und keine beliebigen Punkte entlang der Kante verglichen werden.

Syntax

ST_HAUSDORFFDISTANCE( <geography_expression_1> , <geography_expression_2> )

Argumente

Geografischer_Ausdruck_1

Das Argument muss ein Ausdruck vom Typ GEOGRAPHY sein.

Geografischer_Ausdruck_2

Das Argument muss ein Ausdruck vom Typ GEOGRAPHY sein.

Rückgabewerte

Gibt einen Wert vom Typ REAL zurück, der den diskreten Hausdorff-Abstand in Grad repräsentiert.

Nutzungshinweise

  • Gibt NULL zurück, wenn ein oder mehrere Eingabepunkte NULL sind.

Beispiele

Dieses Beispiel gibt den Hausdorff-Abstand zwischen zwei Punkten (Punkt 0 0 und Punkt 0 1) zurück:

SELECT ST_HAUSDORFFDISTANCE(ST_POINT(0, 0), ST_POINT(0, 1));
+------------------------------------------------------+
| ST_HAUSDORFFDISTANCE(ST_POINT(0, 0), ST_POINT(0, 1)) |
|------------------------------------------------------|
|                                                    1 |
+------------------------------------------------------+

Im nächsten Beispiel werden drei Polygone (a, b und c) verglichen.

Der Abstand zwischen den am weitesten entfernten Punkten in a und c (Punkt 0 1 und Punkt 0 3) ist größer als der Abstand zwischen den am weitesten entfernten Punkten in a und b (Punkt 1 0 und Punkt 2 0).

Infolgedessen ist der von ST_HAUSDORFFDISTANCE zurückgegebene Wert für a und c kleiner. Dies zeigt an, dass a und c ähnlicher sind als a und b.

WITH
    a AS (TO_GEOGRAPHY('POLYGON((-1 0, 0 1, 1 0, 0 -1, -1 0))')),
    b AS (TO_GEOGRAPHY('POLYGON((-1 0, 0 1, 2 0, 0 -1, -1 0))')),
    c AS (TO_GEOGRAPHY('POLYGON((-1 0, 0 3, 1 0, 0 -1, -1 0))'))
SELECT
    ST_HAUSDORFFDISTANCE(a, b) as distance_between_a_and_b,
    ST_HAUSDORFFDISTANCE(a, c) as distance_between_a_and_c;
+--------------------------+--------------------------+
| DISTANCE_BETWEEN_A_AND_B | DISTANCE_BETWEEN_A_AND_C |
|--------------------------+--------------------------|
|                        1 |                        2 |
+--------------------------+--------------------------+