使用Python从OSM查询POI并Folium可视化时的Tags参数错误
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
相关产品推荐
相关产品推荐

