You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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,无法转换为浮点数供热力图使用。
  • 代码中存在两处关键问题:
    1. 芝加哥的州名拼写错误:Illinios应为Illinois,拼写错误导致OSM地理编码服务无法识别该地点,返回空结果。
    2. 缺少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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:15:49