2016-02-24 24 views
1

我用立交桥涡轮增压与该XML脚本下载建筑物在某一地区:如何使用Overpass API获取建筑漏洞?

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

建筑很好下载,除了那些与内孔。 与以下示例一样,这些建筑物是由多层次多边形关系(但未标记为building = yes)组成的,其中包含外部标记的building = yes和内部未标记的内容。

enter image description here

当我用我的剧本立交桥,我只得到外。

那么,这些建筑是否正确?这个关系不应该被贴上标签吗?

其他人有没有人知道如何从外部建筑物的孩子中选择关系?

回答

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

感谢您的回答!实际上,该应用程序是我自己的用于ArcGIS的OSM数据加载器,采用Java开发。这个应用程序管理良好的multipolygon关系,但在这种情况下(http://overpass-turbo.eu/s/eWp),没有选择洞。 – superrache

+1

对。似乎需要额外的向上递归步骤。看看我更新的答案是否可以解决您的问题。 – scai

+0

好的,我没有看到区别。所以我尝试了递增,现在只选择了包含建筑物外部和内部方式的多面关系。简单的建筑方式不是。示例:http://overpass-turbo.eu/s/flf我试过了,但我没有看到任何解决方案来选择multipolygon关系和简单的构建方法。 – superrache

0

这里是最终的解决方案,如果你想获得建设方式,包含建设方式等内部方式multipolygons和multipolygons标记为“建筑”与他们的内部和外部的方式:

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