有没有一种好方法可以确定哪个建筑物:部分属于osm文件中的哪个建筑物



我正在尝试用osm数据创建3D建筑并将它们放在地形表面上。有没有一种好方法来确定哪些建筑物/建筑物:部分属于一起。

我正在使用OSMSharp来解析osm文件,但是我没有找到一种方法来检查哪个建筑物/建筑物:部分属于一起。

OSM中建立的3D建筑标记标准称为"简单3D建筑"(S3DB(。

根据此标准,有两种有效情况:

  • 如果存在类型=建筑物关系,则建筑物的所有部分都必须是该关系的成员。
  • 任何不属于这种关系的建筑物:部分区域必须在几何上包含在一个建筑物轮廓中,并且将属于该建筑物。

因此,对于根据标准映射的数据,不应涉及猜测。但是,应用程序应如何针对不正确的数据运行尚未定义。(一些常见的错误包括与建筑物轮廓重叠但未完全包含在其中的建筑部件,以及未完全分解为部分的建筑物。

与scai的回答中所述相反,建立关系并不是应该始终存在的东西 - 截至2019年,S3DB仅在复杂情况下需要它们,否则这些情况将是模棱两可的。你也不能依赖它们在实践中存在,因为90%的建筑部件不是关系的成员:有1M个建筑:部分元素,但关系中只有100k个部分成员。此外,没有进一步的要求,例如需要建筑:零件区域与其建筑轮廓共享节点。(虽然如果你只是在寻找一个快速的黑客,那可能"足够好"了。

根据OSM wiki,标记为building:part的建筑物的所有方式都应包含在type=building的关系中。这种关系的一个例子是关系9533751。

如果这种关系不存在,那么你只能猜测。一个好的开始是假设共享至少一个节点的所有building:part方式都属于一起。

最新更新