Pular para o conteúdo principal

Geohash

Geohash é um sistema de geocodificação que subdivide a superfície da Terra em áreas em forma de grade e codifica cada célula como uma sequência curta de letras e dígitos. É uma estrutura de dados hierárquica, portanto, quanto mais longa for a string de geohash, mais precisa será a localização geográfica. Se você precisar converter manualmente coordenadas geográficas em strings de geohash, pode usar geohash.org

geohashEncode

Codifica latitude e longitude como uma string geohash. Sintaxe
geohashEncode(longitude, latitude, [precision])
Valores de entrada
  • longitude — Componente de longitude da coordenada que você deseja codificar. Número de ponto flutuante no intervalo [-180°, 180°]. Float.
  • latitude — Componente de latitude da coordenada que você deseja codificar. Número de ponto flutuante no intervalo [-90°, 90°]. Float.
  • precision (opcional) — Comprimento da string codificada resultante. O padrão é 12. Inteiro no intervalo [1, 12]. Int8.
  • Todos os parâmetros de coordenada devem ser do mesmo tipo: Float32 ou Float64.
  • Para o parâmetro precision, qualquer valor menor que 1 ou maior que 12 é convertido silenciosamente em 12.
Valores retornados
  • String alfanumérica da coordenada codificada (é usada uma versão modificada do alfabeto de codificação base32). String.
Exemplo
Query
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res;
Response
┌─res──────────┐
│ ezs42d000000 │
└──────────────┘

geohashDecode

Decodifica qualquer string codificada em geohash para longitude e latitude. Sintaxe
geohashDecode(hash_str)
Valores de entrada
  • hash_str — sequência de caracteres codificada em Geohash.
Valores retornados
  • Tuple (longitude, latitude) com valores Float64 de longitude e latitude. Tuple(Float64)
Exemplo
SELECT geohashDecode('ezs42') AS res;
┌─res─────────────────────────────┐
│ (-5.60302734375,42.60498046875) │
└─────────────────────────────────┘

geohashesInBox

Retorna um array de strings codificadas em geohash, com a precisão especificada, que ficam dentro da caixa fornecida e cruzam seus limites, basicamente uma grade 2D linearizada em um array. Sintaxe
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision)
Argumentos
  • longitude_min — Longitude mínima. Intervalo: [-180°, 180°]. Float.
  • latitude_min — Latitude mínima. Intervalo: [-90°, 90°]. Float.
  • longitude_max — Longitude máxima. Intervalo: [-180°, 180°]. Float.
  • latitude_max — Latitude máxima. Intervalo: [-90°, 90°]. Float.
  • precision — Precisão do geohash. Intervalo: [1, 12]. UInt8.

Todos os parâmetros de coordenadas devem ser do mesmo tipo: Float32 ou Float64.
Valores retornados
  • Array de strings com comprimento igual à precisão das caixas de geohash que cobrem a área fornecida; não se deve contar com a ordem dos itens. Array(String).
  • [] - Array vazio se os valores mínimos de latitude e longitude não forem menores que os valores máximos correspondentes.

A função lança uma exceção se o array resultante tiver mais de 10’000’000 itens.
Exemplo
Query
SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos;
Response
┌─thasos──────────────────────────────────────┐
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
└─────────────────────────────────────────────┘
Última modificação em 10 de junho de 2026