geoHash+folium绘制热力图

本文详细介绍了GeoHash编码的原理,通过解码获取矩形区域,并利用folium库绘制矩形边界。进一步地,文章展示了如何计算每个矩形的中心点,用于生成热力图,从而帮助理解GeoHash在地理数据可视化的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

geoHash的原理不多叙述。这一流程的难点在于在热力图上找到正确的矩形中心点。

从geoHash的编码值获得中心点坐标(转载自https://blog.csdn.net/qq1195365047/article/details/93720533):

__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]
del 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 [(lat_range[1],lon_range[0]),(lat_range[0],lon_range[1])]

如:

bbox('wqve') ,可以得到  [(38.671875, 108.984375), (38.49609375, 109.3359375)]

如果使用folium的rectangle绘制,可以得到矩形区域

for k,v in gh_ratio2.items():
    bounds = gh_codes_bds[k]
    
    
    m.add_child(folium.Rectangle(
        bounds=bounds, # 坐标列表, Latitude and Longitude of line (Northing, Easting)
        weight=2, # 线条宽度
        tooltip = str(v),
        color='blue'))

之后可以求出每个rectangle的中心点坐标,画图就是


from folium.plugins import HeatMap

def get_bounds_center(bounds):
    u1 = bounds[0]
    u2 = bounds[1]
    lat_center = (u1[0] + u2[0]) / 2
    lng_center = (u1[1] + u2[1]) / 2
    return [lat_center, lng_center]


# for k,v in u2_gh_count.items():
for k,v in gh_ratio2.items():
    bounds = gh_codes_bds[k]
    
    center = get_bounds_center(bounds)
    res = [center[0], center[1], v/2]
    heatMapDatas.append(res)
    

HeatMap(heatMapDatas).add_to(m)     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值