如何在Overpass API查询/ osm脚本中将密钥设置为可选?

时间:2018-07-31 08:35:50

标签: openstreetmap overpass-api

我发现了

<osm-script output="json" timeout="25">
  <!-- gather results -->
  <union>
    <!-- query part for: “waterway=*” -->
    <query type="way">
      <has-kv k="amenity" v="parking"/>
      <bbox-query {{bbox}}/>
    </query>
  </union>
  <!-- print results -->
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

提供许多停车位(但不考虑可以在边境停放的街道-可能缺少可用信息)。

但是,它确实也提供了私人停车位。

当我添加

<has-kv k="access" v="public"/>

它删除了私有属性,但也删除了一些似乎没有该属性的公共属性。是否有办法(a)“减去”元素(例如<has-kv k="access" v="private"/>)或(b)使键(例如access)的存在可选,但强制使用值(例如public )是否公开?

1 个答案:

答案 0 :(得分:2)

您可以使用negation运算符:

<has-kv k="access" modv="not" v="private"/>

您的整个查询,上面有否定项:

<osm-script output="json" timeout="25">
  <!-- gather results -->
  <union>
    <!-- query part for: “waterway=*” -->
    <query type="way">
      <has-kv k="amenity" v="parking"/>
      <has-kv k="access" modv="not" v="private"/>
      <bbox-query {{bbox}}/>
    </query>
  </union>
  <!-- print results -->
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

或者在更具可读性的OverpassQL中:

[timeout:25]
[out:json]
;
(
  way
    ["amenity"="parking"]
    ["access"!="private"]
    {{bbox}};
);
out;
>;
out skel qt;