Skyline软件系列平台提供了从数据生产、编辑到网络发布的一整套的成熟的商业解决方案。无论是单机环境还是网络环境,用户都能够根据自己的需求进行功能定制,建立起自己的三维地理信息系统。本文主要从skyline软件的工作流程出发,介绍一下skyline的软件体系结构。

 


一、数据生产----TerraBuilder

     我们知道,要建立起一个真正的三维地理信息系统,首先必须要有DEM以及遥感影像数据,它们是构成三维场景的基础。skyline软件家族中的TerraBuilder 所扮演的角色就是利用DEM以及遥感影像数据来搭建自己的三维场景。

    TerraBuilder 支持绝大数格式的DEM以及影像数据,并且可以支持多CPU服务器或多台机器同时运算(TerraBuilder  Fuser模块)。

    TerraBuilder 有两种方式产生出skyline自己的三维场景数据:一种是MPT数据,它是TerraBuilder计算出来的一个三维场景文件(后缀名是.mpt);还有一种方式是不事先计算好mpt文件,而是实时运算DEM和影像数据(DirectConnect模块,并且与TerraGate结合),实时发布给浏览器(TerraExplorer Pro或TerraExplorer Viewer),这时的数据是.tbp后缀的文件。后面这种实时发布模式显然可以避免耗时很长的运算MPT文件的时间,实现快速发布更新较为频繁的数据。

 


二、数据编辑----TerraExplorer Pro

    在TerraBuilder创建好MPT文件或tbp文件后,便可以在TerraExplorer Pro软件中打开三维地形数据,然后便可以进行各种编辑工作,包括添加GIS专题图层、标绘、3D模型等等,从而建立起更加真实丰富的三维虚拟环境。经过TerraExplorer Pro的各项处理和编辑工作,再进行打包(Basic kit)存储,生成一个.FLY后缀的文件,它存储了区域的三维地形信息(注意并不是地形数据)以及在地形场景中创建的各种对象信息(二维的以及三维的)。FLY文件有点类似于ArcGIS的mxd文件,它可以在本地由pro或viewer打开,或通过IIS发布,供客户端打开。

 


三、数据网络发布----三维地形数据发布TerraGate、矢量数据发布Streaming Feature Server(SFS)

    TerraGate是一款强大的地形传输服务器,它能够同时向数以千计的客户传送三维地形数据(MPT文件或DirectConnect实时形成的三维地形数据)。TerraGate的运行是基于网络无缝可变带宽的,并且不会被连通性的潜伏和中断而影响。当网速较慢而地形数据传送不畅时,初始影像便以低分辨率的形式被用户接收,用户就可以进行三维浏览显示,而不用等到所有数据传送完毕。

    SFS是skyline自己的矢量数据发布工具,即skyline自己构建的WFS。它能够读取各种数据源,包括Oracle Spatial、ArcSDE、Shape文件数据等等,通过缓存机制实现矢量数据的高效传输。

四、二次开发

    TerraExplorer API提供了一套强大的接口用来集成TerraExplorer、TerraExplorer Pro和用户自定义应用,同时也提供了一套ActiveX控件,可将三维窗口、信息树和导航图以控件对象的方式嵌入到用户自定义的可视化界面中。skyline开发只有一个组件类入口,那就是TerraExplorerClass,在实例化TerraExplorerClass后,其他TerraExplorer CoClass Interfaces中所有的接口都实现了TerraExplorerClass类,而skyline中的各种对象(ITerraExplorerObject5 Interface中,如ITerrainPolyline5、ITerrainLabel5、ITerrainBuilding5等等)则都是由CoClass Interfaces中的IObjectManager接口创建。

         //skyline中的接口定义

        private TerraExplorer objTerraExplorer;

        private ITerraExplorer51 objITerraExplorer;

        private IMenu objIMenu;

        private IInformationTree5 objIInformationTree5;

        private ISnapShot2 objISnapShot;

        private IPlane5 objIPlane5;

        private IRender5 objIRender5;

        private IObjectManager5 objIObjectManager5;

        private ICoordSys3 objICoordSys3;

        private ITerrain5 objITerrain5;

        private IContainer2 objIContainer2;

        private ILayer5 objILayer5;

        /// <summary>

        /// 初始化对象和事件

        /// </summary>

        private void InitializeTerraExplorer()

        {

            objTerraExplorer = new TerraExplorerClass();

            objITerraExplorer = objTerraExplorer as ITerraExplorer51;

            objIMenu = objTerraExplorer as IMenu;

            objICoordSys3 = objTerraExplorer as ICoordSys3;

            objIObjectManager5 = objTerraExplorer as IObjectManager5;

            objIInformationTree5 = objTerraExplorer as IInformationTree5;

            objIPlane5 = objTerraExplorer as IPlane5;

            objIRender5 = objTerraExplorer as IRender5;

            objISnapShot = objTerraExplorer as ISnapShot2;

            objITerrain5 = objTerraExplorer as ITerrain5;

            objIContainer2 = objTerraExplorer as IContainer2;

            objILayer5 = objTerraExplorer as ILayer5;

            objTerraExplorer.OnLButtonDown += new _ITerraExplorerEvents5_OnLButtonDownEventHandler(objTerraExplorer_OnLButtonDown);

            objTerraExplorer.OnObjectAction += new _ITerraExplorerEvents5_OnObjectActionEventHandler(objTerraExplorer_OnObjectAction);

        }

            //加载数据

            objITerraExplorer.Load(@"D:\Default.fly");

    关于各个接口的使用在本文中就不作介绍了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/westdusk/archive/2010/05/22/5617196.aspx

posted on 2011-05-11 13:31  醉意人间  阅读(1591)  评论(0编辑  收藏  举报