WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore
影像存储类ImageStore
影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类。当划分完层次的网格,填充完网格的坐标信息后,将先调用LoadFile()函数,若返回NULL,则先下载后渲染,如果非NULL则以返回的Texture直接进行渲染,具体如下:QuadTileSet.ImageStores[i].LoadFile(this),实际调用的是lmageStore.cs文件的LoadFile(QuadTile qt)先通过stringfilePath=GetLocalPath(qt)得到本地该影像数据应该保存的路径,找到该路径和文件就加载。该类的类图如下。

影像存储类基类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) 重载父类同名虚方法,具体实现请查阅源码
WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore的更多相关文章
- WorldWind源码剖析系列:星球类World
星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...
- WorldWind源码剖析系列:星球球体的加载与渲染
WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...
- WorldWind源码剖析系列:表面影像类SurfaceImage
表面影像类SurfaceImage描述星球类(如地球)表面纹理影像.该类的类图如下. 表面影像类SurfaceImage包含的主要的字段.属性和方法如下: string m_ImageFilePath ...
- WorldWind源码剖析系列:影像图层类ImageLayer
影像图层类ImageLayer 影像图层类ImageLayer将单张影像作为纹理映射到星球表面上去.源影像必须是平面笛卡尔坐标系.该类的类图如下. 影像图层类ImageLayer提供的主要字段.属性和 ...
- WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer
星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int ...
- WorldWind源码剖析系列:表面瓦片类SurfaceTile
表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...
- WorldWind源码剖析系列:挂件类Widgets
WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D ...
- WorldWind源码剖析系列:可渲染对象类RenderableObject
RenderableObject是WorldWind中所有需要渲染的对象的父类,继承了接口IRenderable和Icomparable.其派生类体系如下所示.RenderableObject的成员如 ...
- WorldWind源码剖析系列:设置类SettingsBase
PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...
随机推荐
- EF框架的code first
需要添加EntityFramework的引用,在NuGet(在工具--库程序包管理--程序包管理控制台) 控制台输入Install-Package EntityFramework,目前版本是6.1.3 ...
- 设计模式之单例模式(Singleton)(1)
单例模式是一种比较简单的设计模式,简单来说,就是确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式特点: 1)单例类只能有一个实例. 2)单例类必须自己创建自己的唯一实例. 3 ...
- SVN查看所有日志提交记录
1. svn默认显示最近一周的文件提交和修改记录,怎么查看更长时间的日志记录呢? 2. TortoiseSVN 3. 点击show all 或者NEXT 100,就可显示更长时间的文件提交记录.
- JSON 解析工具的封装(FastJSON-->Java)
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.添加依赖包 <dependency> <groupId>com.alibaba< ...
- BZOJ3108 [cqoi2013]图的逆变换
Description 定义一个图的变换:对于一个有向图\(G=(V, E)\),建立一个新的有向图: \(V'=\{v_e|e \in E\}\),\(E'=\{(v_b, v_e)|b=(u,v) ...
- idea配置热部署
第一步:添加依赖使用spring-boot-devtools提供的开发者工具spring-boot项目中引入如下依赖 <dependency><groupId>org.spri ...
- JAVA:函数的定义、使用
本文内容: 什么是函数 函数的定义格式 函数的重载(overload): 函数的调用使用注意 关于形式参数的使用 首发时间:2017-06-23 修改时间:2018-03-21:修改了布局,修改了 ...
- Charles抓取https请求
最近公司将Windows产品的http请求,替换成https请求了,当https请求超过5次失败,就自动切换回http请求.测试时使用Charles抓包测试. 一.http抓包 http抓包比较简单, ...
- Problem2-Project Euler
Even Fibonacci numbers Each new term in the Fibonacci sequence is generated by adding the previous ...
- Oracle EBS INV 更新物料慢
失效 ICX SELECT FA.APPLICATION_SHORT_NAME, FA.APPLICATION_ID, PI.STATUS, PI.PRODUCT_VERSION, PI.PATCH_ ...