overpass language 笔记

overpass turbo的query语言分为QL和XML两种,所获得的结果是一样的。

XML语言需要以<osm-script></osm-script>包围,<osm-script output="json">可以定义输出数据的格式。

—— query

任何检索都要以query开始,<query></query>,通过<query type="node/way/relatipn/area">定义搜索数据的类型。
如果<query></query>缺失,则默认为<query type="node"></query>

—— bbox

<query>
<!-- replace by an effective query type; if this element is missing, a default <query type="node"> is assumed -->
    <bbox-query s="51.0" w="7.0" n="52.0" e="8.0"/>
</query>


通过定义bounding box选择了这个范围内的所有地理信息, w=left  |  e=right |  n=top |  s=bottom

<osm-script>
  <query type="way">
    <bbox-query e="7.157" n="50.748" s="50.746" w="7.154"/>
  </query>
  <print/>
</osm-script>

完整query代码,选择了bounding box下所有way的数据, node, way, relation, area都可以通过这种方式获取


—— tags

有时候我们不想通过bbox查找,而想通过一些我们已知的属性(property)进行查找,必须我们要搜索整个密云水库( 不造为啥选了这里当试验点XD)的相关数据:

通过openstreetmap我们知道密云水库是一个relation,并且知道它的一些关键属性,比如name="密云水库",  natural="water"等,下面我们喜欢通过这些属性搜索到密云水库的相关数据。

<osm-script>
  <query type="relation">
    <has-kv k="name" v="密云水库"/>
  </query>
  <print/></osm-script>

这样我们提取了密云水库这个relation下的所有数据,但是查看结果发现数据全是way的,没有node(这也是浪费了几天时间折腾爬虫的原因),这个时候我们需要一个recurse的过程,具体方法下面再讲。

当然,也可以同时使用bbox和tag作为条件进行检索:

<osm-script>
  <query type="relation">
    <has-kv k="name" v="密云水库"/>
    <bbox-query e="116.9254" n="40.5111" s="40.4851" w="116.8770"/>
  </query>
  <print/>
</osm-script>


以及多个tag作为条件的检索:

<osm-script>
  <query type="node">
    <has-kv k="highway" v="bus_stop"/>
    <has-kv k="shelter" v="yes"/>
    <bbox-query e="7.25" n="50.8" s="50.7" w="7.1"/>
  </query>
  <print/></osm-script>

反向选择:

<osm-script>
  <query type="way">
    <has-kv k="highway" modv="not" regv="."/>
    <bbox-query e="7.18" n="50.75" s="50.74" w="7.17"/>
  </query>
</osm-script>

选择了不包含highway tag的way数据




—— tags特别篇,关于针对name的检索

有时候并不清楚某个地点的确切名称,这时候需要使用模糊检索的功能(其实就是正则表达式啦):

<has-kv k="name" regv="holtorf"/>

选择了包含holtorf的所有结果。

<has-kv k="name" regv="^Holtorf"/>
选择了holtorf作为名字开头的所有结果。
<has-kv k="name" regv="Holtorf$"/>

holtorf作为名字结尾。

 <has-kv k="name" regv="holtorf|Gielgen"/>

名为holtorf或gielgen的都符合搜索条件。


—— union operator

union顾名思义,起到的是集合的作用。我们使用<query></query>进行检索的时候,一次只能选择一种数据类型: <query  type= "node" > ,union的作用就是将多个query集合起来。

<osm-script>
  <union>
    <query type="node">
      <has-kv k="amenity" v="fire_station"/>
      <bbox-query e="7.3" n="50.8" s="50.6" w="7.0"/>
    </query>
    <query type="way">
      <has-kv k="amenity" modv="" v="fire_station"/>
      <bbox-query e="7.3" n="50.8" s="50.6" w="7.0"/>
    </query>
    <query type="relation">
      <has-kv k="amenity" modv="" v="fire_station"/>
      <bbox-query e="7.3" n="50.8" s="50.6" w="7.0"/>
    </query>
  </union>
  <union>
    <item/>
    <recurse type="down"/>
  </union>
  <print/>
</osm-script>



注意第一个union中三个query的排列顺序,这和第二个union有关。
在第二个union中定义了递归 (recurse) ,即将node、way和relation的数据根据层级相互绑定,并规定了递归的模式为down,意为从顶部开始递归。

——————————————————————————————
<osm-script>
  <union>
    <query type="node">
      <has-kv k="name" v="密云水库"/>
    </query>
    <query type="way">
      <has-kv k="name"  v="密云水库"/>
    </query>
    <query type="relation">
      <has-kv k="name"  v="密云水库"/>
    </query>
  </union>
  <union>
    <item/>
    <recurse type="down"/>
  </union>
  <print/>
</osm-script>

——————————————————————————————


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Overpass Turbo是一个在线的地理信息系统工具,用于查询和可视化OpenStreetMap(开放街图)的数据。它通过使用Overpass API(一种基于HTTP的接口)来获取OpenStreetMap的数据,并以交互式和可视化的方式呈现查询结果。 使用Overpass Turbo,我们可以执行各种查询操作,以获取我们需要的地理数据。比如,我们可以根据地理位置、标签、关键词等条件来查询OpenStreetMap中的点、线、面等地理要素。这些查询可以是简单的,比如查找某个特定地点的信息,也可以是复杂的,比如查找某个区域内特定类型的设施。 Overpass Turbo提供了一个直观友好的用户界面,让我们可以轻松地构建查询并实时预览查询结果。我们可以使用简单的操作来缩放、平移地图,以便更好地查看查询结果。此外,Overpass Turbo还提供了一些功能强大的过滤器,可以帮助我们根据特定的标签和属性来筛选查询结果,从而更好地满足我们的需求。 除了查询和可视化功能,Overpass Turbo还提供了一些其他实用的功能。例如,我们可以将查询结果导出为GeoJSON、KML等格式,方便我们在其他地理信息系统中使用。我们还可以保存和分享我们的查询和可视化结果,以便与他人合作或记录我们的工作。 总的来说,Overpass Turbo是一个功能强大且易于使用的工具,可以帮助我们查询和可视化OpenStreetMap的数据。无论是专业的地理信息系统专家还是普通用户,都可以通过使用Overpass Turbo来满足他们的地理信息需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值