我试图找出在给定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["amenity"~"cafe|pub|restaurant"](around:400,52.2784715,10.5249662););out;
答案 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。