Categorias:

Funções geoespaciais

ST_GEOHASH

Retorna o geohash para um objeto GEOGRAPHY ou GEOMETRY. Um geohash é uma pequena cadeia de caracteres de base32 que identifica um retângulo geodésico contendo uma localização no mundo.

O número de caracteres em um geohash determina a precisão. A remoção de caracteres do fim de um geohash resulta em um geohash que é menos preciso e que identifica uma área retangular maior.

ST_GEOHASH retorna um geohash com 20 caracteres. O argumento opcional precision especifica a precisão do geohash devolvido. Por exemplo, passar 5 para precision devolve um geohash mais curto (com 5 caracteres) que é menos preciso.

Nota

Para um objeto geoespacial que não é um ponto, a função pode retornar um geohash de menor precisão, independentemente do valor padrão ou especificado para precision.

Nesses casos, a precisão é determinada pela caixa delimitadora do objeto geoespacial. ST_GEOHASH primeiro determina os geohashes dos cantos inferior esquerdo e superior direito da caixa de delimitação e depois devolve o prefixo que é comum a esses dois geohashes.

Consulte também:

ST_GEOGFROMGEOHASH, ST_GEOGPOINTFROMGEOHASH

Sintaxe

ST_GEOHASH( <geography_expression> [, <precision> ] )

ST_GEOHASH( <geometry_expression> [, <precision> ] )
Copy

Argumentos

Obrigatório:

geography_expression

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

geometry_expression

O argumento deve ser uma expressão do tipo GEOMETRY com o SRID 4326.

Opcional:

precision

O número de caracteres a serem utilizados no geohash. Você pode especificar um valor de 1 a 20.

Por padrão, precision é 20, o que produz um geohash com 20 caracteres.

Retornos

Retorna o geohash (um valor do tipo STRING) para o objeto especificado.

Se o objeto for um polígono e os dois pontos da caixa delimitadora não compartilharem o mesmo prefixo geohash, a função pode retornar uma cadeia de caracteres vazia.

Exemplos

O exemplo seguinte devolve o geohash para um ponto GEOGRAPHY.

SELECT ST_GEOHASH(
  TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
  AS geohash_of_point_a;
Copy
+----------------------+
| GEOHASH_OF_POINT_A   |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+

O exemplo seguinte retorna um geohash para o mesmo ponto GEOGRAPHY com menos precisão:

SELECT ST_GEOHASH(
  TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
  5) AS less_precise_geohash_a;
Copy
+------------------------+
| LESS_PRECISE_GEOHASH_A |
|------------------------|
| 9q9j8                  |
+------------------------+

O exemplo seguinte devolve o geohash para um ponto GEOMETRY.

SELECT ST_GEOHASH(
  TO_GEOMETRY('POINT(-122.306100 37.554162)', 4326))
  AS geohash_of_point_a;
Copy
+----------------------+
| GEOHASH_OF_POINT_A   |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+

O exemplo seguinte mostra dois geohashes que compartilham o mesmo prefixo, o que indica que os dois pontos GEOGRAPHY estão próximos um do outro.

SELECT
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
    AS geohash_of_point_a,
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.323111 37.562333)'))
    AS geohash_of_point_b;
Copy
+----------------------+----------------------+
| GEOHASH_OF_POINT_A   | GEOHASH_OF_POINT_B   |
|----------------------+----------------------|
| 9q9j8ue2v71y5zzy0s4q | 9q9j8qp02yms1tpjesmc |
+----------------------+----------------------+
SELECT
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
    5) AS less_precise_geohash_a,
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.323111 37.562333)'),
    5) AS less_precise_geohash_b;
Copy
+------------------------+------------------------+
| LESS_PRECISE_GEOHASH_A | LESS_PRECISE_GEOHASH_B |
|------------------------+------------------------|
| 9q9j8                  | 9q9j8                  |
+------------------------+------------------------+

O exemplo seguinte devolve o geohash para um polígono. Os cantos inferior esquerdo e superior direito da caixa delimitadora deste polígono são os mesmos dois pontos GEOGRAPHY utilizados nos exemplos anteriores. Como mostrado neste exemplo, ST_GEOHASH retorna o prefixo comum aos geohashes dos cantos inferior esquerdo e superior direito da caixa delimitadora.

SELECT
  ST_GEOHASH(
    TO_GEOGRAPHY(
      'POLYGON((-122.306100 37.554162, -122.306100 37.562333, -122.323111 37.562333, -122.323111 37.554162, -122.306100 37.554162))'
    )
  ) AS geohash_of_polygon;
Copy
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8              |
+--------------------+