WorldWind源码剖析系列:影像存储类ImageStore

影像存储类ImageStore

影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类。该类的类图如下。

影像存储类基类ImageStore提供的主要字段、属性和方法简要描述如下:

protected string     m_dataDirectory;//影像数据目录

protected double m_levelZeroTileSizeDegrees = 36; //金字塔影像的零级瓦片大小度数

protected int m_levelCount = 1; //细节影像层级数

protected string m_imageFileExtension; //源影像文件扩展名

protected string m_cacheDirectory; //本图层影像数据缓冲子目录

protected string m_duplicateTexturePath; //复制纹理路径

protected string m_serverlogo; //影像数据服务器Logo

public virtual bool IsDownloadableLayer//是否是可下载的图层

虚方法public virtual string GetLocalPath(QuadTile qt)先根据所要请求的四叉树瓦片qt中所包含的瓦片层级、行号、列号和源影像文件扩展名m_imageFileExtension构建相对路径,然后,判断如果影像数据目录m_dataDirectory不为空,则将其和相对路径连接起来构建绝对路径并返回;如影像数据目录为空,则判断影像数据缓冲子目录m_ cacheDirectory为空,返回由缓冲子目录和相对目录构建的绝对路径;然后用有效扩展名字符串const string ValidExtensions = ".bmp.dds.dib.hdr.jpg.jpeg.pfm.png.ppm.tga.gif.tif";来验证缓冲子目录下的文件是否为所支持的有效文件,如果是则返回其路径。

虚方法protected virtual string GetDownloadUrl(QuadTile qt) 根据所要请求的四叉树瓦片qt的相关信息返回其URL字符串。需要被子类重载,以控制实现影像是被如何下载的。

虚方法public virtual void DeleteLocalCopy(QuadTile qt)删除本地缓冲的瓦片拷贝。

虚方法protected virtual void ConvertImage(Texture texture, string filePath)将影像转换为DDS格式的压缩纹理文件。

方法public Texture LoadFile(QuadTile qt)载入所要请求的四叉树瓦片qt所对应的影像,并返回纹理对象。

方法void QueueDownload(QuadTile qt, string filePath)根据所要请求的四叉树瓦片qt及其所在的绝对路径,将这一请求转换为GeoSpatialDownloadRequest请求对象,并将该请求对象加入到下载队列中。

Nlt影像存储类类NltImageStore

Nlt影像存储类类NltImageStore用来读取NLT风格存储在BIL文件中的地形/高程数据。 其中,NLT是NASA Learning Technologies的首字母缩写。

string m_dataSetName;//数据集名称

string m_serverUri;//请求服务的URL字符串

public override bool IsDownloadableLayer属性重载父类同名属性

构造函数public NltImageStore(string dataSetName,string serverUri)仅仅完成字段初始化

protected override string GetDownloadUrl(QuadTile qt) 重载父类同名虚方法,具体实现请查阅源码

WMS影像存储类WmsImageStore

WMS影像存储类WmsImageStore用来获取遵循OGC规范的WMS服务。其提供的主要字段、属性和方法简要描述如下:

string m_serverGetMapUrl;//描述WMS服务的URL字符串

string m_wmsLayerName; //WMS服务的图层名称

string m_wmsLayerStyle; //WMS服务的图层风格

string m_imageFormat; //WMS服务的图层影像格式

string m_version; //WMS服务的版本号

int  m_textureSizePixels = 512; //WMS服务的影像纹理大小,用所含像素数衡量

public override bool IsDownloadableLayer属性重载父类同名属性

protected override string GetDownloadUrl(WorldWind.Renderable.QuadTile qt) 重载父类同名虚方法,具体实现请查阅源码

时间: 2024-10-08 09:13:05

WorldWind源码剖析系列:影像存储类ImageStore的相关文章

WorldWind源码剖析系列:挂件类Widgets

WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D进行绘图和处理图标纹理影像等的操作,此处不再对各个类的主要的字段.属性和方法进行描述了.感兴趣的读者可以直接阅读源码.建议阅读源码之前读者应具备一定的DirectX3D开发基础. 挂件PictureBox类被WavingFlags.TimeController等插件引擎子类所引用. 挂件Button

WorldWind源码剖析系列:设置类SettingsBase

PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类SettingsBase内嵌了枚举型LocationType,子类WorldSettings的定义文件中附带了定义了测量模式的枚举型. 父类SettingsBase主要是对设置文件相关的设置文件名.版本.路径.载入.保存等于文件处理相关的顶层抽象.主要是以XML文件保存的,采用.NET平台提供的XmlSerial

WorldWind源码剖析系列:BMNG类构造函数深入分析

BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括“ \Data\Earth\BmngBathy\”目录下的随源代码发布的12幅图像.从NASA服务器上下载的经过分层分级过的瓦片影像.根节点m_RenderableList主要用来存放下面三个RenderableObjectList类型对象:m_BlueMarbleList.m_ShadedList

WorldWind源码剖析系列:角度类

PluginSDK中的角度结构体Angle类图如下所示. 角度结构体主要定义了一个弧度表示角度值的字段:double Radians.还有几个表示角度最大值.最小值.非数值和零角度等字段.定义了一个Degrees属性,分别用数学引擎类的弧度和角度相互转换函数完成Radians字段值的设置与获取. public double Degrees { get { return MathEngine.RadiansToDegrees(this.Radians);} set { this.Radians =

WorldWind源码剖析系列:日志类Log

Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs : EventArgs//日志事件参数 { public int level; public string category; public string message; public LogEventArgs(int _l, string _c, string _m) { level = _l

WorldWind源码剖析系列:相机类[未完]

PluginSDK中的相机类CameraBase是三维计算机图形学中的概念.观察者在三维场景中漫游时,通过眼睛看到的场景和相机拍摄过程非常一致.实际上,Direct3D和OpenGL都是先通过对现实世界中的场景先进行世界变换,再通过设置观察矩阵以在场景中安置一个虚拟相机,构建一个视景体来裁剪场景的可见区域,然后在通过投影变换(平行投影或透视投影),获取三维场景的“像”,最后再通过视口变换,将场景的“像”光栅化输出到二维显示屏幕上.如下图所示. 在三维地形系统中,通常定义一个虚拟相机来实现对三维场

WorldWind源码剖析系列:四元数类

PluginSDK中的Quaternion4d类可能是感觉Microsoft.DirectX. Quaternion类不太实用或不够用,自己有重新写的. 四元数是英国数学家哈密顿(W.R.Hamilton)在1843年发现的,由于矩阵论的不断丰富和不断完善,人们更乐意采用矩阵来解决实际工程中的问题,这导致四元数在相当长的时间里没有被人们重视,更没有得到实际的应用.随着计算机图形学的发展,人们发现利用四元数可以很好地处理解决旋转运算等问题,这一理论又开始被人们重视,并在许多领域逐渐得到应用. 四元

WorldWind源码剖析系列:缓冲类Cache

缓冲类Cache主要用于在最小的限制条件下保存从远程服务器通过网络下载下来的地理空间数据,以便当用户处于离线状态时能够使用这些已经缓冲好的数据.Google Earth也采用类似机制处理用户离线浏览漫游问题.该类类图如下. 提供的主要参数设置有:缓冲区上限CacheUpperLimit(默认最大为2GB).缓冲区上限CacheUpperLimit(默认最大为2GB).缓冲区下限CacheLowerLimit(默认上限的75%,即1.5GB).缓冲区目录CacheDirectory.缓冲区清理频率

WorldWind源码剖析系列:星球类World

星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染过程请参见文章<WorldWind源码剖析系列:星球经纬度格网的绘制>,是通过Form.OnPaint()函数激活.刷新和绘制的.星球球体的渲染过程请参见文章<WorldWind源码剖析系列:星球球体的加载与渲染>.而星球类World是绘制过程中从XML配置文件中读取参数构造的用来代表

WorldWind源码剖析系列:星球球体的加载与渲染

WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()依次作以下几个事情: 1.  使用System.Version在内部,读取软件版本信息,并格式化输出.我们在外面配置软件版本,“关于”部分中版本自动更改. 获取格式化版本号 // Establish the version number string used for user display, // such as the Splash and