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

使用Python从OSM查询POI并Folium可视化时的Tags参数错误

解决osmnx features_from_bbox的tags参数TypeError问题

1. 明确tags参数的合法格式

osmnx对features_from_bbox的tags参数有严格要求:字典的每个值只能是以下三种类型之一:

  • True:抓取所有带该键的POI
  • 单个字符串(比如'school'):精确匹配键对应的这个值
  • 字符串列表(比如['school', 'kindergarten']):匹配键对应列表里的任意值

你写的{"amenity":True, "building":'school'}格式本身合规,报错大概率是其他原因导致,下面是具体排查和解决步骤:

2. 排查常见问题

  • 升级osmnx版本:旧版本的osmnx对tags格式兼容性较差,先升级到最新版:
    pip install --upgrade osmnx
    
  • 检查参数传递是否正确:确保调用函数时,tags参数确实传的是合规字典,没有变量名写错或者传成其他类型(比如列表、字符串)。给你一份可直接运行的示例代码:
    import osmnx as ox
    import folium
    
    # 自定义边界框(替换成你需要的区域经纬度)
    north, south, east, west = 39.92, 39.90, 116.39, 116.37
    
    # 合法的tags字典
    tags = {
        "amenity": True,
        "building": "school"
    }
    
    # 获取POI数据
    pois = ox.features_from_bbox(north, south, east, west, tags=tags)
    
    # 用Folium可视化
    m = folium.Map(location=[(north+south)/2, (east+west)/2], zoom_start=15)
    for idx, row in pois.iterrows():
        if 'geometry' in row:
            if row.geometry.geom_type == 'Point':
                folium.Marker(
                    location=[row.geometry.y, row.geometry.x],
                    popup=row.get('name', '未命名POI')
                ).add_to(m)
            else:
                folium.GeoJson(row.geometry).add_to(m)
    m.save('poi_visual.html')
    
  • 检查字典内是否有非法值:确认tags里没有嵌套字典、数字这类不符合要求的内容,比如别写{"amenity": {"school": True}}这种格式。

3. 备选方案:拆分查询再合并

如果升级后还是报错,可以拆分tags分别查询,再合并结果:

# 单独获取所有amenity类POI
amenity_pois = ox.features_from_bbox(north, south, east, west, tags={"amenity": True})
# 单独获取building为school的POI
school_pois = ox.features_from_bbox(north, south, east, west, tags={"building": "school"})
# 合并两组数据
pois = amenity_pois._append(school_pois, ignore_index=True)

内容的提问来源于stack exchange,提问作者Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:42:19