我使用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>
除了内有洞的建筑物外,该建筑物下载得很好。 如下例所示,这些建筑物是多边形关系(但未标记建筑物=是),由外部标记建筑物=是和内部未标记。
当我使用我的Overpass脚本时,我只得到外部。
那么,这些建筑物是否正确?这种关系不应该被标记为建筑物吗?
否则,是否有人知道如何从外部建筑儿童中选择关系?
答案 0 :(得分:2)
查询正确并且还返回“漏洞”,即与角色内部的关系方式。
见example。结果包含relation 7621,外way 23316006以及内ways 23316007和23316008。
关系本身以及内部方式都没有(也不应该)有任何建筑标签也是正确的。有关详细信息,请参阅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>