9

我试图找出在给定 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;
4

1 回答 1

17

您可能正在寻找的是对键(不仅是值)的正则表达式支持。

这是基于您上面的查询的示例:

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

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

于 2014-07-25T15:42:45.000 回答