Catégories :

Fonctions géospatiales

ST_HAUSDORFFDISTANCE

Renvoie la distance de Hausdorff discrète entre deux objets géospatiaux.

La distance de Hausdorff indique à quel point les deux objets sont similaires. Deux objets sont considérés comme similaires si chaque point d’un objet est proche d’un point de l’autre objet. La distance de Hausdorff est la plus grande distance entre un point dans un objet et un point dans l’autre objet.

ST_HAUSDORFFDISTANCE renvoie la distance de Hausdorff discrète, qui est calculée en comparant uniquement les sommets (points discrets) et non les points arbitraires le long de l’arête.

Syntaxe

ST_HAUSDORFFDISTANCE( <geography_expression_1> , <geography_expression_2> )

Arguments

expression_géographie_1

L’argument doit être une expression de type GEOGRAPHY.

expression_géographie_2

L’argument doit être une expression de type GEOGRAPHY.

Renvoie

Renvoie une valeur de type REAL qui représente la distance de Hausdorff discrète en degrés.

Notes sur l’utilisation

  • Renvoie NULL si un ou plusieurs points d’entrée sont NULL.

Exemples

Cet exemple renvoie la distance de Hausdorff entre deux points (point 0 0 et point 0 1) :

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

L’exemple suivant compare trois polygones (a, b et c).

La distance entre les points les plus éloignés de a et c (point 0 1 et point 0 3) est supérieure à la distance entre les points les plus éloignés de a et b (point 1 0 et point 2 0).

Par conséquent, la valeur renvoyée par ST_HAUSDORFFDISTANCE est plus petite pour a et c. Cela indique que a et c sont plus similaires que a et 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 |
+--------------------------+--------------------------+