Categorias:

Funções geoespaciais

ST_HAUSDORFFDISTANCE

Retorna a distância Hausdorff discreta entre dois objetos GEOGRAPHY.

A distância Hausdorff indica o nível de semelhança entre os dois objetos. Dois objetos são considerados similares se cada ponto em um objeto estiver próximo a um ponto no outro objeto. A distância de Hausdorff é a maior distância entre um ponto em um objeto e um ponto no outro objeto.

ST_HAUSDORFFDISTANCE retorna a distância discreta de Hausdorff, que é calculada comparando apenas os vértices (pontos discretos) e não os pontos arbitrários ao longo da borda.

Sintaxe

ST_HAUSDORFFDISTANCE( <geography_expression_1> , <geography_expression_2> )
Copy

Argumentos

geography_expression_1

O argumento deve ser uma expressão do tipo GEOGRAPHY.

geography_expression_2

O argumento deve ser uma expressão do tipo GEOGRAPHY.

Retornos

Retorna um valor do tipo REAL que representa a distância discreta Hausdorff em graus.

Notas de uso

  • Retorna NULL se um ou mais pontos de entrada forem NULL.

Exemplos

Este exemplo retorna a distância Hausdorff entre dois pontos (ponto 0 0 e ponto 0 1):

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

O exemplo seguinte compara três polígonos (a, b e c).

A distância entre os pontos mais distantes em a e c (ponto 0 1 e ponto 0 3) é maior do que a distância entre os pontos mais distantes em a e b (ponto 1 0 e ponto 2 0).

Como resultado, o valor devolvido por ST_HAUSDORFFDISTANCE é menor para a e c. Isso indica que a e c são mais semelhantes que a e 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 |
+--------------------------+--------------------------+
Copy