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 ...
随机推荐
- 记一次SQL注入实战
刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布.今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了. 本文仅供学习交流,目的是为了构建更加安全的网络环境! ...
- php命令行按模板生成应用的入口文件
接着这篇文章php命令行生成项目结构 继续改造: ghostwu@dev:~/php/php1/12$ tree . ├── app │ └── index.php ├── core │ ├─ ...
- css3 flex弹性盒子布局梳理,打通任督二脉
挺早就接触了css的flex布局,深入使用也就是在近期移动端开发.老来多健忘,只能自己梳理一下知识点,当做温故知新吧. ,请原谅小白的才疏学浅,写的不到位的地方请指正. flex属性用于设置或检索弹性 ...
- 微信公众号获取acess_token并存储(php)
<?php define("appid", "你的appid"); define("appsecret", "你的appse ...
- ES6——TDZ(暂时性死区)
暂时性的死区(Temporal Dead Zone),简写为 TDZ: 只要块级作用域里存在let命令,它所声明的变量就绑定这个区域,不在受外部的影响 let 和 const 声明的变量不会被提升到作 ...
- 图片圆角显示与手机版文章页面CSS布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 活字格Web应用平台学习笔记3-显示数据列表
活字格第二课的目标,用活字格创建一个简单的在线数据管理系统. 看下设计界面.刚开始跟着点,有点懵圈,到做完,回忆了一下,其实就是先建一张表,然后,把表和页面联系起来,即在页面中划出一些区域,和表的字段 ...
- 原生JSON解析
原生JSON解析 JSONObject:JSON数据封装对象JSONArray:JSON数据封装数组 布局: <?xml version="1.0" encoding=&qu ...
- 我正在参加 CSDN 2018 年博客之星评选,希望大家能支持我
我正在参加 CSDN 2018 年博客之星评选,希望大家能支持我 我是[No. 001]号,感谢大家宝贵的一票 ^_^/ 投票地址:https://bss.csdn.net/m/topic/blog_ ...
- Android--listView的divider分割线样式和边距
1.建立一个drawable文件list_divider.xml <?xml version="1.0" encoding="utf-8"?> &l ...