A página que você vinculou sugere a resposta; encontre a área da sua caixa delimitadora e divida pela área do balde. Porém, deixa de fora como calcular o tamanho de cada bloco de geohash, embora dê um exemplo com precisão 5.
De acordo com a página à qual você vinculou, a consulta será interrompida em 10000 buckets.
Calcule a área da sua caixa delimitadora em graus ao quadrado (não tente fazer isso em km, mantenha-a em lat / long)
A captura de tela abaixo mostra os limites da precisão 2 (a cor é categorizada pela precisão 1).
Porém, não são realmente blocos - uma geohash representa um ponto com erros em lat / lon - e esses erros às vezes variam entre longitude e latitude (o erro é maior com latitudes, quando a precisão é uniforme)
Usou um pouco de Python (usando a biblioteca Geohash ) para estimar o tamanho de cada 'bloco' para diferentes precisões.
from Geohash import geohash
strg = geohash.encode(56.9,-3.2,precision=15)
for prec in range(1,10):
y,x,yerror,xerror = geohash.decode_exactly(strg[:prec])
xsize = 2*xerror
ysize = 2*yerror
area = xsize*ysize
print("Precision {}".format(prec))
print("\tSize approx {} long by {} lat".format(xsize,ysize))
print("\tArea is {}".format(area))
isso fornece a seguinte saída
Precision 1
Size approx 45.0 long by 45.0 lat
Area is 2025.0
Precision 2
Size approx 11.25 long by 5.625 lat
Area is 63.28125
Precision 3
Size approx 1.40625 long by 1.40625 lat
Area is 1.9775390625
Precision 4
Size approx 0.3515625 long by 0.17578125 lat
Area is 0.061798095703125
Precision 5
Size approx 0.0439453125 long by 0.0439453125 lat
Area is 0.0019311904907226562
Precision 6
Size approx 0.010986328125 long by 0.0054931640625 lat
Area is 6.034970283508301e-05
Precision 7
Size approx 0.001373291015625 long by 0.001373291015625 lat
Area is 1.885928213596344e-06
Precision 8
Size approx 0.00034332275390625 long by 0.000171661376953125 lat
Area is 5.893525667488575e-08
Então, uma abordagem seria,
- calcule a "área" (em graus quadrados) da sua caixa delimitadora lat / lon
- desça a tabela, começando na precisão 1, e divida sua área bbox (em graus quadrados) pela área para essa precisão
- escolha o valor de precisão com o menor valor de divisão aceitável
Para esclarecer 'aceitável': -
um valor de divisão muito baixo como 0,001 provavelmente significa que a precisão é muito baixa. Você não estará buscando muitos baldes, mas estará considerando muitos pontos distantes dos quais não precisa.
Para um valor acima de 10000, a precisão é muito alta. Você descartará possíveis ocorrências e sofrerá um desempenho mais lento.
Você precisará experimentar para encontrar um valor que ofereça o melhor desempenho.