如何获取Overpass API中指定国家城市对应的Area ID?
Overpass API 区域查询问题解决
关于{{geocodeArea}}报错的原因
{{geocodeArea:armenia.yerevan}}是overpass-turbo专属的预处理语法,它会在后台调用Nominatim把地名转成Area ID后再发请求给Overpass API。但Overpass API本身不识别这种带双大括号的语法,所以直接在Flutter或Postman里调用就会触发解析错误。
获取Yerevan Area ID的正确查询语句
用Overpass原生语法精准匹配城市属性,下面的查询可以直接拿到目标城市的Area ID:
[out:json][timeout:25]; // 定位亚美尼亚国家区域 area["ISO3166-1:alpha2"="AM"]["admin_level"="2"]->.country; // 在国家范围内筛选Yerevan城市区域(admin_level=6对应城市级) area["name"="Yerevan"](area.country)["admin_level"="6"]; // 输出区域ID和标签信息 out ids tags;
如果担心名称有本地化差异,也可以加上英文名称匹配,避免遗漏:
[out:json][timeout:25]; area["ISO3166-1:alpha2"="AM"]["admin_level"="2"]->.country; area["name"="Yerevan"]["name:en"="Yerevan"](area.country)["admin_level"="6"]; out ids tags;
执行后就能得到Yerevan对应的Area ID(比如你之前使用的3600364087),之后直接用area(id:3600364087)就能正常限定查询区域。
临时替代方案:坐标范围查询
如果暂时获取不到Area ID,也可以用Yerevan的大致经纬度范围来替代区域筛选:
[out:json][timeout:25]; node["amenity"="pub"](40.17,44.47,40.23,44.53); out;
内容的提问来源于stack exchange,提问作者Cyrus the Great
相关产品推荐
相关产品推荐

