【问题标题】:How to get building holes using Overpass API?如何使用 Overpass API 获得建筑洞?
【发布时间】:2016-04-01 15:50:35
【问题描述】:

我使用 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>

除了里面有洞的建筑物外,建筑物都很好下载。 如下例所示,这些建筑物是多面体关系(但未标记的建筑物=yes),由外部标记的建筑物=yes 和内部未标记的建筑物组成。

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

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

还有谁知道如何从它的外部建筑孩子中选择关系?

【问题讨论】:

    标签: openstreetmap overpass-api


    【解决方案1】:

    查询正确,也返回“孔”,即与角色inner的关系方式。

    看到这个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>
    

    您的查询的唯一区别是额外的&lt;recurse type="up"/&gt; 调用。

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

    <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>
    

    【讨论】:

    • 感谢您的回答!实际上,该应用程序是我自己的用于 ArcGIS 的 OSM 数据加载器,使用 Java 开发。这个应用程序管理良好的多面关系,但在这种情况下(overpass-turbo.eu/s/eWp),没有选择孔。
    • 对。似乎需要一个额外的向上递归步骤。看看我更新的答案是否解决了你的问题。
    • 好吧,我没看出区别。所以我尝试了递归,现在只选择了包含建筑物外部和内部方式的多面体关系。简单的构建方式不是。示例:overpass-turbo.eu/s/flf 我试过了,但我没有看到任何解决方案可以同时选择多面体关系和简单的构建方式。
    • 下次试试,看看我更新的答案。现在结果包含常规建筑物以及映射为多面体的建筑物,包括内部方式。它也只需要使用构建键查询方式,不需要额外查询关系。
    • 效果很好,非常感谢!我不知道这种结构可以做到。我通过添加与 type="relation" 相同的查询完成了这个查询,没有递归“up”,对于这种情况,关系是 building="yes",multilitpolygon="yes" 并且组成它的方式除了外部或内部没有标签角色。
    【解决方案2】:

    如果您想获得构建方式、包含构建方式和其他内部方式的多面体以及使用外部和内部方式标记为“构建”的多面体,这是最终解决方案:

    <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>
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2021-06-07
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多