从Openstreetmap数据渲染3D Map 可能非常漂亮cumbersome .
但是,如果要求的要求低于渲染世界上任何城市的3D要求呢?
如果我只需要渲染某个受特定边界限制的城市,该怎么办?不应该渲染很多多边形,特别是如果我选择只渲染那些在屏幕上实际看到的建筑物和道路(我听说这种技术用于游戏开发) .
我希望实现像this这样的东西,但是对于具有近似高度且没有纹理的建筑物来说,只需要简单的盒子就可以了 . 所以,基本上我只需要一个基于OSM的道路网络和用3D表示建筑物的简单框 .
所以,计划可能如下:
-
将OSM数据提取到.osm文件中;
-
将"height"数据添加到此文件中的每个建筑物(手动);
-
使用某种3D引擎从.osm文件(需要自定义解析器)渲染 Map 的3D视图 .
这个计划可行吗?是否有任何开源3D引擎可以使用/自定义从.osm文件渲染OSM Map ?是否存在可以[可能]自定义以呈现OSM Map 的任何Linux兼容(OpenGL?)3D引擎?
4 回答
请注意,在大多数地区,OpenStreetMap只有很多路段和其他东西,但不是单独的建筑物 . 这是我上次检查时的情况,但这取决于您感兴趣的区域 .
据我所知,没有现成的方法可以做到这一点,但如果你只是想要简单的东西,那就不应该那么复杂了 . 简要描述;简介:
1 - 从osm xml文件中提取脚印多边形数据 .
2 - 投射到你选择的笛卡儿,例如使用PROJ.4,因为osm坐标是lat-long .
3 -Triangulate以避免非凸多边形 .
4 - 挤出三角形多边形,为每个边界边生成一个四边形 .
5 - 最后,您可以将生成的模型插入到您喜欢的3d引擎中,例如OpenSceneGraph,或者使用OpenGL自行渲染它们 .
在那之后,你想要添加的东西越多,如纹理,建模细节,它就越复杂 .
你可能想看看 OSM2World . 它是一个转换器应用程序,可以读取各种文件格式的OSM数据并计算3D模型,同时考虑建筑物的高度,屋顶形状和材料属性以及各种其他细节 . 它可以使用内置的OpenGL查看器显示场景,也可以将模型导出为.pov或.obj等格式,后者几乎可以被所有开源建模者和引擎读取 .
如果该区域中的建筑物被良好映射,则场景如下所示:
还有OpenStreetMap社区中3D development活动的概述,展示了其他几个工具 .
以下是一些开源项目,您可以根据自己的需求进行调整(见下文),大多数使用的是opengl,它们也可以满足您的需求 .
https://github.com/AMDmi3/glosm
http://wiki.openstreetmap.org/wiki/OSM2World
我做了你想做的大部分工作 . 你可以看到它的一些屏幕截图here
许多城市都可以在线访问Real Estate records,包括建筑尺寸 .