如何在 Overpass API 查询/osm 脚本中使密钥可选?
How can I make keys optional in Overpass API queries / osm-scripts?
我找到了
<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"/>
它删除了私有的,但也删除了几个 public 似乎没有该属性的。有没有办法 (a) "subtract" 元素(例如 <has-kv k="access" v="private"/>
)或 (b) 使键的存在(例如 access
)可选但强制执行一个值(例如 public
) 如果是 public?
您可以使用 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;
我找到了
<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"/>
它删除了私有的,但也删除了几个 public 似乎没有该属性的。有没有办法 (a) "subtract" 元素(例如 <has-kv k="access" v="private"/>
)或 (b) 使键的存在(例如 access
)可选但强制执行一个值(例如 public
) 如果是 public?
您可以使用 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;