WorldWind学习系列:2、基本流程

WorldWind主要运行流程:

程序运行从WorldWind.cs中的MainApplication.Main函数开始。主要流程如下:

1、GetWWHandle检测是否有程序的实例正在运行,有则将启动参数传递给已有进程并退出。

2、解析启动参数,加载配置文件,默认配置文件路径如下:

C:\Users\<username>\AppData\Roaming\NASA\World Wind\1.4.0.0\WorldWind.xml

C:\Users\<username>\AppData\Roaming\NASA\World Wind\1.4.0.0\World.xml

两个配置文件对应程序设置和球体设置。

3、创建MainApplication 对象,设置当程序空闲时,调用WorldWindow.OnApplicationIdle,更新并渲染场景。

①根据配置启动设置向导。

②在构造函数中创建worldWindow.Cache对象,用于管理缓存。

③加载Config目录下的球体配置文件,根据文件创建World对象,包括地球、月球、火星等,如果创建正常,在菜单中添加菜单项。

④OpenStartupWorld打开默认的地球,OpenWorld加载Config目录下的Earth.xml,先清除已打开的球体,重置工具栏,卸载已加载的插件集,再创建World对象,并赋值给 worldWindow.Current World 。使用InitializePluginCompiler初始化插件编译引擎。初始化插件引擎前的渲染对象列表包含5个对象:

初始化插件引擎后为14个:

 

调用AddLayerMenuButtons添加图层菜单按钮,添加到MenuBar的图层菜单里MenuBar.AddLayersMenuButton,类型为LayerShortcutMenuButton。然后AddInternalPluginMenuButtons加载内部插件的菜单按钮,包括RapidFireModisManager,WMSBrowser和AnimatedEarthManager三个插件,添加到MenuBar的工具菜单里,worldWindow.MenuBar.AddToolsMenuButton ,类型为WindowsControlMenuButton。

⑤添加vertical exaggeration选项菜单,该选项将高程信息进行夸大。设置默认选中的菜单项。

⑥最后WorldWindow.Render球体,并将程序的焦点设置到worldWindow控件。

4、退出主窗体后保存软件配置到配置文件。

加载球体配置,创建球体:

在创建地球对象时,调用WorldWind.ConfigurationLoader.Load加载Config目录下的Earth.xml,创建地球对象,对象名称为“Earth”,World 继承自RenderableObject 。该对象包含一个TerrainAccessor数组;包含RenderableObjectList _renderableObjects 渲染对象列表,名称为“Earth”,RenderableObjectList 也继承自RenderableObject,且包含ArrayList m_children 子对象列表。加载配置过程:

getRenderablesFromLayerDirectory 先初始化一个 RenderableObjectList 根节点对象(名为“Earth”),然后调用 getRenderableFromLayerFile 返回Config\Earth目录下每个一个Xml文件对应的  RenderableObjectList对象,将其添加到 根节点对象的m_children 中。

以@Images.xml文件为例:
@Images.xml :重定向到http://worldwind25.arc.nasa.gov/layerConfig/earthimages.xml ,下载地址:http://worldwind25.arc.nasa.gov/layerConfig/earthimages.xml?BBOX=-180,-90,180,90。
@Images.uri 保存重定向网址,不含BBOX。
@Images.tmp 为实际加载的配置文件。下载时保存文件名为@Images_.tmp ,如果下载失败,则递归解析 @Images.tmp文件,如果下载成功,文件重命名为Images.tmp,并解析该文件。

@Images.tmp的LayerSet 节点可以有一个 Refresh属性,指定刷新的时间间隔,double类型。RenderPriority属性指定渲染的优先级。RenderableObjectList parentRenderable 为配置文件要返回 RenderableObjectList 对象,名为"Images"。它的父结点为地球的渲染对象列表 parentRenderable.ParentList = parentWorld.RenderableObjects;

通过函数加载各种类型的渲染对象。

addImageLayersFromXPathNodeIterator(iter.Current.Select("ImageLayer"), parentWorld, parentRenderable);
addQuadTileLayersFromXPathNodeIterator(iter.Current.Select("QuadTileSet"), parentWorld, parentRenderable, cache);
addPathList(iter.Current.Select("PathList"), parentWorld, parentRenderable);
addPolygonFeature(iter.Current.Select("PolygonFeature"), parentWorld, parentRenderable);
addLineFeature(iter.Current.Select("LineFeature"), parentWorld, parentRenderable);
addModelFeature(iter.Current.Select("ModelFeature"), parentWorld, parentRenderable);
//addWater(iter.Current.Select("Water"), parentWorld, parentRenderable);
addTiledPlacenameSet(iter.Current.Select("TiledPlacenameSet"), parentWorld, parentRenderable);
addTiledWFSPlacenameSet(iter.Current.Select("TiledWFSPlacenameSet"), parentWorld, parentRenderable, cache);
addIcon(iter.Current.Select("Icon"), parentWorld, parentRenderable, cache);
addScreenOverlays(iter.Current.Select("ScreenOverlay"), parentWorld, parentRenderable, cache);
addChildLayerSet(iter.Current.Select("ChildLayerSet"), parentWorld, parentRenderable, cache);
addExtendedInformation(iter.Current.Select("ExtendedInformation"), parentRenderable);

包括:ImageLayer 、 QuadTileSet、PathList、PolygonFeature、LineFeature、ModelFeature、Water、TiledPlacenameSet、TiledWFSPlacenameSet、Icon、ScreenOverlay、ChildLayerSet等类型,最后添加附加信息ExtendedInformation,通常是ToolBarImagePath 路径,用于在工具栏添按钮的图片。

@Images.tmp 对应图层名为 Images,包含两个子集 ChildLayerSet ,名称分别为 :"NASA Landsat Imagery"和 "USGS Imagery" 。ChildLayerSet和LayerSet相似,作为LayerSet的子节点。它也可以重定向,也对应一个RenderableObjectList对象,也可以加载各种类型的渲染对象。

addImageLayersFromXPathNodeIterator(iter.Current.Select("ImageLayer"), parentWorld, rol);
addQuadTileLayersFromXPathNodeIterator(iter.Current.Select("QuadTileSet"), parentWorld, rol, cache);
addPolygonFeature(iter.Current.Select("PolygonFeature"), parentWorld, rol);
addLineFeature(iter.Current.Select("LineFeature"), parentWorld, rol);
addPathList(iter.Current.Select("PathList"), parentWorld, rol);
addTiledPlacenameSet(iter.Current.Select("TiledPlacenameSet"), parentWorld, rol);
addIcon(iter.Current.Select("Icon"), parentWorld, rol, cache);
addScreenOverlays(iter.Current.Select("ScreenOverlay"), parentWorld, rol, cache);
addChildLayerSet(iter.Current.Select("ChildLayerSet"), parentWorld, rol, cache);

addExtendedInformation(iter.Current.Select("ExtendedInformation"), rol);

这里是QuadTileSet 瓦片集。addQuadTileLayersFromXPathNodeIterator  创建一个QuadTileSet 并将其添加到父节点的子节点列表中。每个QuadTileSet 瓦片集至少拥有一个ImageAccessor 节点,对应ImageStore对象,用于图片存储管理。按功能可分为三种类型:

1、指定PermanentDirectory,图像为本地储存的瓦片,为ImageStore类型

2、指定ImageTileService,图像为网络瓦片服务提供的瓦片,为NltImageStore类型

3、指定WMSAccessor,图像为WMS服务器提供的瓦片,WMS服务全称是Web Map Service (web地图服务),目前开放地理空间信息联盟(Open Geospatial Consortium)提供的WMS最新版本为1.3.0。为WmsImageStore类型

^Placenames.tmp对应的图层名为“Placenames”。包含23个TiledWFSPlacenameSet子集。每个子集对应一个WFS(网络要素服务)服务, addTiledWFSPlacenameSet 创建一个TiledWFSPlacenameSet对象,网址为:http://worldwind25.arc.nasa.gov/geoservercache/geoservercache.aspx?TypeName=topp:countries&Request=GetFeature&Service=WFS


网络要素服务WFS(Web Feature Service)允许用户在网络的环境下通过HTTP对空间数据进行增删改查等操作。

一般支持如下功能:

GetCapabilities: 获取WFS服务的元数据(介绍服务中的要素类和支持的操作)。
DescribeFeatureType: 获取WFS服务支持的要素类的定义(要素类的元数据,比如要素包含哪些字段)。
GetFeature : 获取要素数据。
GetGmlObject :通过XLink获取GML对象。
Transaction: 创建、更新、删除要素数据的事务操作。
LockFeature:在事务过程中锁定要素。


根据依据这些功能的支持与否,可以将WFS分为3类:

Basic WFS: 必须支持GetCapabilities、DescribeFeature Type、GetFeature功能。
XLink WFS:必须在Basic WFS基础上加上GetGmlObject操作。
Transaction WFS: 也称为WFS-T,必须在Basic WFS基础上加上Transaction功能以及支持编辑数据,另外也可以加上GetGmlObject或LockFeature功能。


下一篇分析瓦片集QuadTileSet 中用于图片存储管理相关的类。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值