如何使用 OpenStreetMap 中的标签搜索位置

How to search for locations using Tags inside OpenStreetMap

使用 Nominatim API,我能够根据查询进行搜索。但是,所有返回的结果都有一个与之关联的标签,例如 leisure=fitness_centre.

因此,我如何使用 OpenStreetMap APIs 搜索给定位置(比如伦敦)的所有 fitness_centre 标签?想法是能够搜索地图,在某个位置(比如伦敦、牛津等)中归零,然后搜索所有带有标签 [leisure=fitness_centre]

的 places/locations

使用 Google 地点 API,可以使用如下所示的标签进行搜索(指定 type=gym)-

https://maps.googleapis.com/maps/api/place/search/json?location=51.509865,-0.118092&radius=50000&sensor=true&key=&types=健身房

Google 地点 API 的唯一问题是它们非常昂贵!!,因此寻找 OpenStreetMap 作为替代方案。

要在 OSM 中搜索特定对象,Overpass API 通常是一个不错的选择。

有一个名为 overpass turbo 的不错的前端可用。打开向导,输入“leisure=fitness_centre in London”,它会生成一个合适的查询:

[out:json][timeout:25];
{{geocodeArea:London}}->.searchArea;
(
  node["leisure"="fitness_centre"](area.searchArea);
  way["leisure"="fitness_centre"](area.searchArea);
  relation["leisure"="fitness_centre"](area.searchArea);
);
out body;
>;
out skel qt;

然后点击运行在地图上查看结果:https://overpass-turbo.eu/s/1fbg

请注意,{{geocodeArea:London}}->.searchArea; 部分是立交桥 Turbo 前端添加的功能。 Overpass API 无法理解此地理编码请求。相反,您必须将其替换为区域查询和相应的关系 ID(在本例中为 area(id:3600065606)->.searchArea;)。

另一件需要注意的事情是,Overpass API 服务器不应该用于繁重的查询或商业目的。如果您需要这种服务,请安装您自己的 Overpass API 实例或使用商业 Overpass API 提供商。