如何用Overpass API精准获取纽约市兴趣点(POI)?
如何用Overpass API精准获取指定城市(如纽约市)的POI数据
问题描述
我是Overpass与OpenStreetMap的新手,正在开展项目,需要获取纽约市的兴趣点(POI),未来还要适配任意城市。我用Python调用Overpass API编写查询,但遇到了两个问题:
- 以下查询无法生效:
[out:json]; area["name"="New York City"]->.nyc; ( node(area.nyc)["amenity"]; way(area.nyc)["amenity"]; relation(area.nyc)["amenity"]; ); out center;
- 另一个查询可以运行,但范围覆盖整个纽约州而非仅纽约市,数据过于冗余:
[out:json]; area[{"ISO3166-2"="US-NY"}][admin_level=4]; ( node["amenity"](area); way["amenity"](area); rel["amenity"](area); node["tourism"](area); way["tourism"](area); rel["tourism"](area); ); out center;
优化方案
1. 修复第一个查询的失效问题
"name"="New York City"的匹配逻辑不可靠:OSM中部分区域的名称可能存在拼写变体、多语言标签,或该名称对应的区域未被标记为area类型。
修正后的查询(用Wikidata ID精准定位)
Wikidata ID是全局唯一的标识,纽约市的Wikidata ID为Q60,用它定位区域更稳定:
[out:json]; // 通过Wikidata ID定位纽约市区域 area["wikidata"="Q60"]->.nyc; ( // 同时覆盖amenity和tourism类型的POI node(area.nyc)["amenity"]; way(area.nyc)["amenity"]; relation(area.nyc)["amenity"]; node(area.nyc)["tourism"]; way(area.nyc)["tourism"]; relation(area.nyc)["tourism"]; ); // 输出中心坐标+完整标签,方便后续处理 out center tags;
2. 缩小第二个查询的范围
admin_level=4在美国对应州级行政区(纽约州),而纽约市的admin_level为8,调整过滤条件即可精准定位:
[out:json]; // 定位纽约市:纽约州下admin_level=8的城市区域 area["ISO3166-2"="US-NY"]["admin_level"="8"]["name"="New York City"]->.nyc; ( node(area.nyc)["amenity"]; way(area.nyc)["amenity"]; relation(area.nyc)["amenity"]; node(area.nyc)["tourism"]; way(area.nyc)["tourism"]; relation(area.nyc)["tourism"]; ); out center tags;
3. 适配任意城市的通用方案
为了兼容任意城市,优先使用Wikidata ID作为定位依据(每个城市的Wikidata ID唯一且易查询),通用模板如下:
[out:json]; // 替换为目标城市的Wikidata ID area["wikidata"="TARGET_CITY_WIKIDATA_ID"]->.city; ( node(area.city)["amenity"]; way(area.city)["amenity"]; relation(area.city)["amenity"]; node(area.city)["tourism"]; way(area.city)["tourism"]; relation(area.city)["tourism"]; // 可按需添加shop、leisure等其他POI标签 ); // 可选:添加timeout参数避免大查询超时 [timeout:600]; out center tags;
额外实用建议
- 用
out center tags替代out center,获取POI的完整标签信息,便于后续分类处理 - 若查询数据量较大,添加
[timeout:600]延长超时时间(默认180秒),避免查询中断 - Python调用时,可使用
overpy库简化API交互,自动处理分页和错误捕获
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

