- Categorias:
ST_GEOHASH¶
Retorna o geohash para um objeto GEOGRAPHY. 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:
Sintaxe¶
ST_GEOHASH( <geography_expression> [, <precision> ] )
Argumentos¶
Obrigatório:
geography_expression
O argumento deve ser uma expressão do tipo GEOGRAPHY.
Opcional:
precision
O número de caracteres a serem utilizados no geohash. Você pode especificar um valor de
1
a20
.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.
SELECT ST_GEOHASH( TO_GEOGRAPHY('POINT(-122.306100 37.554162)')) AS geohash_of_point_a; +----------------------+ | GEOHASH_OF_POINT_A | |----------------------| | 9q9j8ue2v71y5zzy0s4q | +----------------------+
O exemplo seguinte retorna um geohash para o mesmo ponto com menos precisão:
SELECT ST_GEOHASH( TO_GEOGRAPHY('POINT(-122.306100 37.554162)'), 5) AS less_precise_geohash_a; +------------------------+ | LESS_PRECISE_GEOHASH_A | |------------------------| | 9q9j8 | +------------------------+
O exemplo seguinte mostra dois geohashes que compartilham o mesmo prefixo, o que indica que os dois pontos 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; +----------------------+----------------------+ | 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; +------------------------+------------------------+ | 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 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; +--------------------+ | GEOHASH_OF_POLYGON | |--------------------| | 9q9j8 | +--------------------+