geohash bbox 生成四个顶点坐标

编码实现-硬扣代码

_all__ = ['encode', 'decode', 'bbox', 'neighbors']
_base32 = '0123456789bcdefghjkmnpqrstuvwxyz'
# 10进制和32进制转换,32进制去掉了ailo
_decode_map = {}
_encode_map = {}
for i in range(len(_base32)):
    _decode_map[_base32[i]] = i
    _encode_map[i]=_base32[i]


def bbox(geohash):
    lat_range, lon_range = [-90.0, 90.0], [-180.0, 180.0]
    is_lon = True
    for letter in geohash:
        code = str(bin(_decode_map[letter]))[2:].rjust(5, '0')
        for bi in code:
            if is_lon and bi == '0':
                lon_range[1] = sum(lon_range) / 2
            elif is_lon and bi == '1':
                lon_range[0] = sum(lon_range) / 2
            elif (not is_lon) and bi == '0':
                lat_range[1] = sum(lat_range) / 2
            elif (not is_lon) and bi == '1':
                lat_range[0] = sum(lat_range) / 2
            is_lon = not is_lon
    # 左上、右下;(lat_max,lon_min),(lat_min,lon_max)

    return [[lon_range[0], lat_range[1]], [lon_range[1], lat_range[1]], [lon_range[1], lat_range[0]],
            [lon_range[0], lat_range[0]]]


m = bbox('wtw3sks')
print(m)

用高德验证:
在这里插入图片描述

使用geohash2

效果一样的, 简单方便, 3行代码搞定

from geohash2 import decode_exactly
g = 'wtw3sks'
lat, lon, x, y = decode_exactly(g)
print([[lon-y, lat+x], [lon+y, lat+x], [lon+y, lat-x], [lon-y, lat-x]])

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值