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

使用openrouteservice.org POIs服务出现KeyError: osm_tags错误如何解决

错误原因说明

KeyError: 'osm_tags'和点位名称为波斯语无任何关联,该错误是因为你修改坐标后,接口返回的POI结果中部分点位不存在osm_tags字段:openrouteservice POI接口仅对绑定了对应OSM标签的点位返回该字段,未绑定标签的点位不会返回该字段,原示例使用的坐标对应的POI刚好都有该字段所以不会报错。

解决方法
  • 替换直接键访问为安全取值方式:将代码中所有直接读取poi['osm_tags']的逻辑,替换为字典的get方法,不存在时返回默认空字典,避免抛出键错误:
# 原错误写法
osm_tags = poi['osm_tags']
# 修改后安全写法
osm_tags = poi.get('osm_tags', {})
  • 新增分支逻辑兼容无标签点位:读取osm_tags下的子字段时,同样使用get方法或者提前判断字段是否存在,示例逻辑如下:
for poi in pois_response['features']:
    # 安全读取各字段
    poi_name = poi.get('name', '未命名点位')
    osm_tags = poi.get('osm_tags', {})
    amenity_type = osm_tags.get('amenity', '无对应设施类型')
    # 后续业务逻辑
    print(f"点位名称:{poi_name},设施类型:{amenity_type}")
  • 可选:过滤返回结果仅保留带OSM标签的点位:如果你的业务逻辑必须依赖osm_tags字段,可以在发请求时在filters参数中添加规则,接口只会返回符合条件的点位:
# 请求参数新增过滤规则示例
request_params = {
    "request": "pois",
    "geometry": {"geojson": {"type": "Point", "coordinates": [34.798282, 48.514728]}, "buffer": 500},
    # 新增过滤条件
    "filters": {
        "osm_tags": {"exists": True}
    }
}
  • 可选:修改返回名称的语言:如果需要优先获取英文点位名称,可以在请求头中添加Accept-Language: en参数,接口会优先返回英文的name字段,无对应英文值时才会返回本地语言(波斯语)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:36:03