首页 > 代码库 > 基于Ogre的谷歌3D地图引擎

基于Ogre的谷歌3D地图引擎

最近因为项目的需要,使用Ogre3D引擎开发了一套3D地图(GIS)com组件,附demo程序,下载后,请阅读readme.txt了解如何运行。支持谷歌、百度等地图源,离线,在线数据, 支持IE浏览器运行,道路和卫星地图。之所以称为3D地图(GIS)引擎,相比百度、谷歌的原版网页地图有以下不同:

1. 3D:地图是绘制在3D场景里,自然支持视角的旋转,俯视角,视角高度拉升等。可以与其他的3D建筑,设备,车辆,船舶,标签等模型混合绘制。但是与google earth 3D地图不同,google earth有高度数据,山脉等有高度,是真3D,本地图没有高度数据,是伪3D。但是两者都是在3D场景绘制,能方便的与其他3D模型混合。

 

 

 

2. 流畅性: 百度,谷歌网页版地图在视角高度拉升,平移过程中有很明显的卡顿。本引擎可以指定下载线程的数目,使用多线程下载在线地图,并且使用了大量的线程和数据缓冲优化,在普通网络下,可以非常浏览的视角高度拉升和平移,没有任何卡顿。附件附带演示程序。

3. 离线:可以将地图下载到本地,离线使用。

4. 网络数据:支持http, tcp多种方式从数据库,或者经由web服务连接数据交互数据。

5. 精确性:与百度,谷歌网页版地图API不同,本引擎自己根据每个地图引擎实现大地坐标系、世界坐标系、3D场景坐标系将的转换。实现大尺寸范围内的角度、距离测量。距离测量精度至少>1m(没有详细测试过)。

6. 俯视效果:传统网页地图始终是从正上方向下看的,属于平行投影。但是3D视角里,可以俯视,在看近景的同时,可以看到远景。例如从北京附近的上空俯视北方,即可以看到北京,也可以看到俄罗斯。但是北京的地图是清晰的,俄罗斯的地图是比较模糊的。

 

为了实现上面的目标,有非常多的问题需要解决,总结如下以供参考:

1. 地图源:如何得到地图数据。

2. 拼接地图:如何将地图数据拼接到3D场景。一般地图都是基于瓦片(Tile)拼接方式。

3. 地图绘制:这是比较复杂的问题。要得到操作流畅,低内存消耗(本系统地图所占内存最大值在300M左右,比google earth小,内存稳定),响应速度快,用户可以浏览任何区域的地图,绝不可能是简单的将地图图片绘制出来。为了得到流畅,自然过渡的视觉效果,同时内存必须控制在一个合理,尽量小的范围,那么视角的中心需要使用高精度的地图图片,而随着视角变远,需要使用低精度的图片。这样,即使在俯视角很大情况下(也就是可以看很远地方),绘制的资源也很少,但是视觉效果真实。而且高低精度的渐变混合,在视角从高到低,或者从低到高的拉升过程中,地图也是渐变,流畅的。

   地图绘制需要比较复杂的调度方案和混合机制,而不是简单的把图片绘制出来。

 

4. 下载线程: 下载地图数据,必须在另外一个线程里,在后台进行,才可能保证操作的流畅性。为了最大化的利用网络带宽,需要一个下载调度器,调度器决定开启多少线程去下载每一个图片,以及从哪里下载。在用户操作比较快的时候,中间一些图片刚刚被调度器启动下载,这时如果继续下载他们是没有意义的,因为用户操作比较快,例如快速拉低视角,中间这些图片是会被跳过,用户看不到的。所以,调度器还需要决定何时已经如何丢弃正在下载的资源,已经保证用户当前视角的中心位置地图的下载优先级最高,可以插入到已经在下载的资源的前面。

      因此,下载器实际上比一个比常规多线程以及多区块下载软件更为复杂。这也是使地图流程的关键。

 

5.  地图坐标系转换: 大地坐标,世界坐标,场景坐标之间的转换也是至关重要的,当然,这只是个数学过程,并复杂。

 

6. 其他的诸如鼠标操作,动画的从一个视点移动到另外一个视点等,都需要开启多线程进行异步操作,才能保证操作的流程。相比地图的绘制,下载,这些只是比较繁琐的简单的工作。

 

7. 当然,本系统是基于Physoft Scene SDK, 因此是插件模式,可以方便的插入新的功能,开发不同的项目。

 

本系统的核心结构:

 Scene Manager (3D场景控制器,包括GIS对象,船舶,车辆,管道等3D绘制, Scene Manager可以拓展其他插件,实现其他绘制功能)->Tile Scene Manger(只负责Tile类型地图的绘制)->Map View Ctrl, Map Source Connector(地图下载器)->Tile Http Download, Local Download, Map Source Provider.

   Map Source Provider接口下已实现了 Google, Goole.cn, baidu等地图提供商。

 

总的来说,3D地图的绘制,远比做之前想象的复杂,要做出一个流畅,省内存的高效地图引擎不是一件简单的事情。

 

运行demo前,请先:

1.本demo使用的地图引擎为com组件版本,为免去运行安装程序,请运行install.bat,注册OgreWebX.ocx到电脑。
    a. 必须使用 管理员身份运行 install.bat,因为install.bat注册com组件式向注册表增加键值,不使用管理员将没有权限修改注册表。
    b. 注册com组件需要知道OgreWebX.ocx的全路径,因此请修改install.bat,将里面的路径修改为你的OgreWebX.ocx路径。

2. 当不需要本demo时,使用管理员身份运行uninstall.bat卸载com组件。

3. 运行GISWebX.exe

4. demo使用VS 2012 c++编译,请下载2012 c++ runtime:
http://www.microsoft.com/en-us/download/details.aspx?id=30679