La page que vous avez liée aux indices de la réponse; trouver la zone de votre boîte englobante et diviser par la zone du seau. Il laisse cependant de côté la façon de calculer la taille de chaque seau de geohash, bien qu'il donne un exemple avec une précision 5.
Selon la page à laquelle vous avez lié, cela arrêtera la requête à 10000 compartiments.
Calculez la surface de votre boîte englobante en degrés carrés (n'essayez pas de le faire en km, gardez-le en lat / long)
La capture d'écran ci-dessous montre les limites de la précision 2 (la couleur est classée par précision 1).
Ce ne sont pas vraiment des tuiles - un geohash représente un point avec des erreurs en lat / lon - et ces erreurs varient parfois entre la longitude et la latitude (l'erreur est plus grande avec les latitudes, lorsque la précision est égale)
Utilisé un peu de Python (en utilisant la bibliothèque Geohash ) pour estimer la taille de chaque 'tuile' pour différentes précisions.
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))
cela donne la sortie suivante
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
Donc, une approche serait,
- calculer la "surface" (en degrés carrés) de votre boîte englobante basée sur lat / lon
- descendez ce tableau, en commençant à la précision 1, et divisez votre zone bbox (en degrés carrés) par la zone de cette précision
- choisir la valeur de précision avec la plus petite valeur de division acceptable
Pour clarifier «acceptable»: -
une valeur de division très faible comme 0,001 signifie probablement que la précision est trop faible. Vous n'allez pas chercher de nombreux seaux, mais vous envisagerez de nombreux points distants dont vous n'avez pas besoin.
Pour une valeur supérieure à 10000, la précision est trop élevée. Vous rejetterez les coups possibles et souffrirez de performances plus lentes.
Vous devrez expérimenter pour trouver une valeur qui donne les meilleures performances.