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

如何用Overpass API精准获取纽约市兴趣点(POI)?

如何用Overpass API精准获取指定城市(如纽约市)的POI数据

问题描述

我是Overpass与OpenStreetMap的新手,正在开展项目,需要获取纽约市的兴趣点(POI),未来还要适配任意城市。我用Python调用Overpass API编写查询,但遇到了两个问题:

  1. 以下查询无法生效:
[out:json];
area["name"="New York City"]->.nyc;
(
  node(area.nyc)["amenity"];
  way(area.nyc)["amenity"];
  relation(area.nyc)["amenity"];
);
out center;
  1. 另一个查询可以运行,但范围覆盖整个纽约州而非仅纽约市,数据过于冗余:
[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:19:55