如何在Folium地图中添加1公里间距的网格?
在Folium中添加1公里宽度的网格
原代码的问题
range()仅支持整数步长,你用int(1/interval)得到步长为144,生成的网格线间隔极大,根本无法呈现1公里的网格。- 固定的经纬度转公里系数只在赤道附近近似准确,其他纬度的经度每公里对应的度数会随纬度变化,直接用固定值会导致网格宽度不一致。
- 生成全球范围的经纬线完全没必要,既浪费性能,也不会在当前缩放级别下显示。
修正后的代码
import folium import math # 曼谷坐标 center_lat = 13.7563 center_lon = 100.4911 m = folium.Map(location=[center_lat, center_lon], zoom_start=11) # 1公里对应的纬度度数(1度纬度≈111.32公里) lat_km_deg = 1 / 111.32 # 根据中心纬度计算1公里对应的经度度数(经度线间距随纬度余弦变化) lon_km_deg = (1 / 111.32) / math.cos(math.radians(center_lat)) # 网格扩展范围:中心向四周各延伸10公里(可按需调整) extend_km = 10 min_lat = center_lat - extend_km * lat_km_deg max_lat = center_lat + extend_km * lat_km_deg min_lon = center_lon - extend_km * lon_km_deg max_lon = center_lon + extend_km * lon_km_deg # 添加东西方向的纬线(平行于赤道) current_lat = min_lat while current_lat <= max_lat: # 线的范围限制在当前网格的经度区间内 folium.PolyLine( locations=[(current_lat, min_lon), (current_lat, max_lon)], color="black", weight=0.5, opacity=0.5 ).add_to(m) current_lat += lat_km_deg # 添加南北方向的经线(平行于本初子午线) current_lon = min_lon while current_lon <= max_lon: # 线的范围限制在当前网格的纬度区间内 folium.PolyLine( locations=[(min_lat, current_lon), (max_lat, current_lon)], color="black", weight=0.5, opacity=0.5 ).add_to(m) current_lon += lon_km_deg # 显示地图 m
代码关键点说明
- 针对当前中心纬度计算准确的经度间隔,保证网格在该区域的宽度接近1公里。
- 仅生成中心区域附近的网格线,避免无用的全球线,提升渲染性能。
- 使用
while循环处理浮点数步长,替代不支持浮点数的range()。
内容的提问来源于stack exchange,提问作者Arky
相关产品推荐
相关产品推荐

