如何使用Overpass API构建漏洞?

时间:2016-02-24 09:22:44

标签: openstreetmap overpass-api

我使用Overpass-Turbo和这个XML脚本来下载给定区域中的建筑物:

<osm-script>
  <union>
    <query type="way">
      <has-kv k="building"/>      
      <bbox-query {{bbox}}/>
    </query>
    <query type="relation">
      <has-kv k="building"/>      
      <bbox-query {{bbox}}/>
    </query>    
  </union>
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

除了内有洞的建筑物外,该建筑物下载得很好。 如下例所示,这些建筑物是多边形关系(但未标记建筑物=是),由外部标记建筑物=是和内部未标记。

enter image description here

当我使用我的Overpass脚本时,我只得到外部。

那么,这些建筑物是否正确?这种关系不应该被标记为建筑物吗?

否则,是否有人知道如何从外部建筑儿童中选择关系?

2 个答案:

答案 0 :(得分:2)

查询正确并且还返回“漏洞”,即与角色内部的关系方式。

example。结果包含relation 7621,外way 23316006以及内ways 2331600723316008

关系本身以及内部方式都没有(也不应该)有任何建筑标签也是正确的。有关详细信息,请参阅multipolygon relations in the OSM wiki

您还没有告诉我们哪个应用程序的结果有问题。该应用程序可能没有或不完全支持多面关系。

编辑: 请尝试以下查询:

<osm-script>
  <union>
    <query type="way">
      <has-kv k="building"/>      
      <bbox-query {{bbox}}/>
    </query>
    <query type="relation">
      <has-kv k="building"/>      
      <bbox-query {{bbox}}/>
    </query>    
  </union>
  <print mode="body"/>
  <recurse type="up"/>
  <recurse type="down"/>
  <print mode="skeleton" order="quadtile"/>
</osm-script>

您查询的唯一区别是额外的<recurse type="up"/>电话。

另一个编辑: 如果我理解正确,第一个递归步骤是修改临时数据,从而“破坏”第二个递归步骤。请尝试以下查询:

<osm-script>
  <query type="way">
    <has-kv k="building"/>      
    <bbox-query {{bbox}}/>
  </query>  
  <union>
    <item/>
    <recurse type="up"/>
  </union>
  <union>
    <item/>
    <recurse type="down"/>
  </union>
  <print mode="body"/>
</osm-script>

答案 1 :(得分:0)

如果您希望获得建筑方式,包含建筑方式和其他内部方式的多重多边形以及标记为“#34; building&#34;用他们的外在和内在的方式:

<osm-script>
  <query type="way">
    <has-kv k="building"/>      
    <bbox-query {{bbox}}/>
  </query>  
  <union>
    <item/>
    <recurse type="up"/>
  </union>
  <union>
    <item/>
    <recurse type="down"/>
  </union>
  <print mode="body"/>

  <query type="relation">
    <has-kv k="building"/>      
    <bbox-query {{bbox}}/>
  </query>  
  <union>
    <item/>
    <recurse type="down"/>
  </union>
  <print mode="body"/>
</osm-script>