Ekaropolus 4c56529c96
All checks were successful
continuous-integration/drone/push Build is passing
steward functionality to bost reality
2026-01-03 21:30:49 -06:00

36 lines
945 B
Python

_BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz"
_BITS = [16, 8, 4, 2, 1]
def encode_geohash(lat: float, lon: float, precision: int = 7) -> str:
lat_interval = [-90.0, 90.0]
lon_interval = [-180.0, 180.0]
geohash = []
bit = 0
ch = 0
even = True
while len(geohash) < precision:
if even:
mid = (lon_interval[0] + lon_interval[1]) / 2
if lon >= mid:
ch |= _BITS[bit]
lon_interval[0] = mid
else:
lon_interval[1] = mid
else:
mid = (lat_interval[0] + lat_interval[1]) / 2
if lat >= mid:
ch |= _BITS[bit]
lat_interval[0] = mid
else:
lat_interval[1] = mid
even = not even
if bit < 4:
bit += 1
else:
geohash.append(_BASE32[ch])
bit = 0
ch = 0
return "".join(geohash)