如何在一个位置搜索多个标签?

时间:2014-07-24 10:46:19

标签: overpass-api

我试图找出在给定GPS位置周围查找某些类型的所有节点的最佳解决方案。

让我们说我想把所有的咖啡馆,酒吧,餐馆和公园都围绕给定点X.xx,Y.yy。

[out:json];(node[amenity][leisure](around:500,52.2740711,10.5222147););out;

这不会返回任何内容,因为我认为它会搜索既不可能的舒适性和休闲节点。

[out:json];(node[amenity or leisure](around:500,52.2740711,10.5222147););out;
[out:json];(node[amenity,leisure](around:500,52.2740711,10.5222147););out;
[out:json];(node[amenity;leisure](around:500,52.2740711,10.5222147););out;
[out:json];(node[amenity|leisure](around:500,52.2740711,10.5222147););out;
[out:json];(node[amenity]|[leisure](around:500,52.2740711,10.5222147););out;
[out:json];(node[amenity],[leisure](around:500,52.2740711,10.5222147););out;
[out:json];(node[amenity];[leisure](around:500,52.2740711,10.5222147););out;

这些解决方案导致错误(400:错误请求)

我找到的唯一可行解决方案是以下一个导致查询非常长的问题

[out:json];(node[amenity=cafe](around:500,52.2740711,10.5222147);node[leisure=park](around:500,52.2740711,10.5222147);node[amenity=pub](around:500,52.2740711,10.5222147);node[amenity=restaurant](around:500,52.2740711,10.5222147););out;

没有多个"周围"没有更容易的解决方案。语句?

编辑: 发现这个有点短。但仍有多个"周围"语句。

[out:json];(node["leisure"~"park"](around:400,52.2784715,10.5249662);node["ameni‌​ty"~"cafe|pub|restaurant"](around:400,52.2784715,10.5249662););out;

1 个答案:

答案 0 :(得分:7)

您可能正在寻找的是regular expression support for keys(不仅是值)。

以下是基于您的查询的示例:

[out:json];
node[~"^(amenity|leisure)$"~"."](around:500,52.2740711,10.5222147);
out;

注意:自0.7.54版(2017年第一季度发布)以来,Overpass API还支持使用'或'条件。有关如何使用此新(if: )过滤器的信息,请参见this example