使用开源的3D引擎从Openstreetmap数据中渲染地图?

6

从Openstreetmap数据渲染3D地图可能相当繁琐

但如果需求不像渲染世界上任何城市的3D那么苛刻呢?

如果我只需要渲染特定边界内的某个城市?要渲染的多边形应该不会太多,尤其是如果我选择仅渲染屏幕上实际可见的建筑和道路(我听说这种技术在游戏开发中被使用)。

我希望实现类似于this的效果,但仅使用简单的盒子表示具有近似高度但没有纹理的建筑物也可以。因此,基本上我只需要一个基于OSM的道路网络和简单的盒子来表示3D建筑。

因此,计划可能如下:

  • 将OSM数据提取到.osm文件中;
  • 在该文件中为每个建筑物添加“高度”数据(手动);
  • 使用某种3D引擎从.osm文件渲染地图的3D视图(需要自定义解析器)。

这个计划可行吗?有没有开源的3D引擎可以用来/定制渲染OSM地图从.osm文件中?是否存在适用于Linux(OpenGL?)的3D引擎可以被[可能]定制以渲染OSM地图?


我对使用渲染街道并能够旋转/倾斜的OpenGl渲染器很感兴趣。你成功了吗? - Patrick Jackson
Patrick,我暂停了这个项目,因为它涉及到很多需要“手工完成”的事情。 - skanatek
4个回答

3
你可能想看一下OSM2World。这是一个转换应用程序,可以读取各种文件格式中的OSM数据,并计算三维模型,考虑建筑物的高度、屋顶形状和材质属性以及其他各种细节。它可以使用内置的OpenGL查看器显示场景,也可以将模型导出到像.pov或.obj这样的格式,后者几乎可以被所有开源建模工具和引擎所读取。
如果该地区的建筑物有良好的映射,场景看起来像这样:

OSM2World rendering

此外,还有一个 3D开发活动的概述,展示了OpenStreetMap社区中的其他几个工具。


2

1

请注意,在大多数地区,OpenStreetMap 只有很多地块和道路等其他东西,但没有单独的建筑物。这是我上次检查的情况,但这取决于您感兴趣的区域。

据我所知,目前没有现成的方法可以做到这一点,但如果您只想要简单的东西,那么它应该不会太复杂。简要描述如下:

1- 从 osm xml 文件中提取楼房轮廓多边形数据。

2- 投影到您选择的笛卡尔坐标系中,例如使用 PROJ.4,因为 osm 坐标在纬度和经度之间。

3- 进行三角剖分以避免非凸多边形。

4- 挤出您的三角剖分多边形,为每个边界边生成一个四边形。

5- 最后,您可以将生成的模型插入您喜欢的 3D 引擎,例如 OpenSceneGraph,或者使用 OpenGL 自己渲染它们。

之后,您想添加的越多,例如纹理、建模细节,就越复杂。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接