使用Folium与Geocoder生成热力图时触发ValueError错误求助
问题排查与修复方案
错误根源分析
报错ValueError: Location should consist of two numerical values, but None of type <class 'NoneType'> is not convertible to float.的核心原因是:
- 地理编码返回的经纬度(
lat/lng)为None,无法转换为浮点数供热力图使用。 - 代码中存在两处关键问题:
- 芝加哥的州名拼写错误:
Illinios应为Illinois,拼写错误导致OSM地理编码服务无法识别该地点,返回空结果。 - 缺少
import folium和import geocoder语句,模块未导入会导致后续调用报错。
- 芝加哥的州名拼写错误:
修复步骤与完整代码
修复点说明
- 修正芝加哥州名拼写错误
- 补充必要的模块导入语句
- 增加地理编码结果校验,过滤无效数据
- 优化代码结构,用循环批量处理城市数据,减少重复代码
修复后代码
# HEAT MAP # GET LOCATION DATA FOR LARGE CITIES import folium import geocoder from folium import plugins from folium.plugins import HeatMap # 定义城市数据:(城市名称, 人口数) city_data = [ ('New York City, New York', 8398748), ('Los Angeles, California', 3990456), ('Chicago, Illinois', 2705994), # 修正州名拼写错误 ('San Diego, California', 1425976) ] large_cities = [] for city_name, population in city_data: # 调用OSM地理编码服务 loc = geocoder.osm(city_name) # 校验经纬度是否有效,避免None值进入热力图数据列表 if loc.lat and loc.lng: # 缩放人口数,提升热力图视觉可读性 large_cities.append([loc.lat, loc.lng, population / 1000]) # 创建地图实例 map_heatmap = folium.Map([40, -99], tiles='CartoDB Positron', zoom_start=4) # 仅当存在有效地理数据时添加热力图层 if large_cities: plugins.HeatMap(large_cities).add_to(map_heatmap) else: print("无有效地理编码数据,无法生成热力图") map_heatmap
额外注意事项
- 确保已安装所需依赖:执行
pip install folium geocoder完成安装 - 地理编码依赖网络服务,若网络不稳定可能导致返回空值,可考虑添加重试逻辑
- 热力图的强度缩放比例可根据实际需求调整,优化可视化效果
内容的提问来源于stack exchange,提问作者Geno
相关产品推荐
相关产品推荐

