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

如何用Python从OpenStreetMap Overpass API结果中提取name和id

如何从Overpass API返回的JSON中提取id和name字段?

问题背景

我正在使用Python调用OpenStreetMap的Overpass API,执行了以下代码:

import requests
import json
lat='51.404924'
lon='12.444895'
overpass_url = "http://overpass-api.de/api/interpreter"
overpass_query = "[out:json][timeout:600];(way(around:700,"+lat+","+lon+")[landuse=industrial];);out geom;"
response = requests.get(overpass_url, params={'data': overpass_query})
data = response.json()
for key in data:
    print("dict has", key)
elements=data["elements"]
print(type(elements))

得到的简化返回结果如下:

{
  "version": 0.6,
  "generator": "Overpass API 0.7.55 579b1eec",
  "elements": [
    {
      "type": "way",
      "id": 12805981,
      "geometry": [
        {
          "lat": 51.410593,
          "lon": 12.4327856
        }
      ],
      "tags": {
        "addr:housenumber": "1",
        "addr:street": "BMW-Allee",
        "landuse": "industrial",
        "name": "BMW Werk 07.10 Leipzig"
      }
    }
  ]
}

我原本以为elements是字典,但实际它是列表,导致我最初尝试的print(data["elements"]["tags"]["name"])无法运行。请问该如何提取其中的name和id?


解决方案

别担心,这个问题很常见——你混淆了字典和列表的访问方式!返回结果里的elements是列表类型(因为API可能返回多个匹配的工业用地条目),而不是单个字典,所以必须先访问列表中的元素,再去提取字典里的字段。

情况1:确定只有一个返回结果

如果你的查询逻辑只会返回一个匹配项,可以直接通过索引[0]获取列表的第一个元素,再提取字段:

# 从elements列表中取出第一个元素(字典类型)
target_element = data["elements"][0]

# 提取id和name
element_id = target_element["id"]
element_name = target_element["tags"]["name"]

print(f"元素ID: {element_id}")
print(f"元素名称: {element_name}")

情况2:兼容多个返回结果

如果查询可能返回多个条目,推荐用循环遍历整个elements列表,这样不管结果数量多少都能处理,还能避免因没有name标签导致的报错:

for element in data["elements"]:
    # 提取id
    element_id = element["id"]
    # 用get方法获取name,不存在时返回默认值"无名称"
    element_name = element["tags"].get("name", "无名称")
    
    print(f"ID: {element_id}, 名称: {element_name}")

错误原因说明

你之前的代码data["elements"]["tags"]["name"]试图直接对列表使用字典的键访问方式,但列表只能通过数字索引访问元素,因此会抛出TypeError。正确的步骤是:先从列表中拿到字典元素,再通过键访问对应的字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:17:36