【问题标题】:How can I make keys optional in Overpass API queries / osm-scripts?如何在 Overpass API 查询/osm-scripts 中使键成为可选?
【发布时间】:2023-03-31 00:10:01
【问题描述】:

我找到了

<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)“减去”元素(例如&lt;has-kv k="access" v="private"/&gt;)或(b)使键(例如access)的存在是可选的,但如果它是公共的则强制执行一个值(例如public)?

【问题讨论】:

  • 附注:access=public 不是 OSM 中的正确标签!正确的标签是access=yes,但您不会经常找到它,因为它通常是默认值。
  • 另一个注意事项:您应该真正考虑切换到 Overpass QL 格式。 Overpass XML 现在真的过时了,所有当前的文档和示例都只关注 Overpass QL!这在 overpass turbo 中很容易实现 --> 导出 --> 查询 --> 转换为 Overpass QL。

标签: openstreetmap overpass-api


【解决方案1】:

您可以使用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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多