
瓦片数据集QuadTileSet图片存储管理涉及三个类用于本地储存瓦片的ImageStore用于网络瓦片服务的NltImageStore用于WMS服务器提供瓦片的WmsImageStore。类关系图如下所示基类为ImageStore两个子类有NltImageStore和WmsImageStore。一、ImageStore用于本地路径存储的图片访问类。DataDirectory指定了图片的存储路径可以通过文件系统直接访问。对应配置文件中的PermanentDirectory。基类的属性如下protected string m_dataDirectory; //本地永久存储瓦片的目录 protected double m_levelZeroTileSizeDegrees 36;//0级瓦片大小,以度为单位 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 { get { return false; } }protected virtual void ConvertImage(Texture texture, string filePath)使用D3D将瓦片转换为DDS格式后缀名为.dds可以加快纹理加载速度。并删除旧文件。public virtual void DeleteLocalCopy(QuadTile qt)删除qt对应的本地文件先获取qt对应的本地文件目录如果文件存在则删除。注意可能返回的是备用数据存放路径为一个目录。public virtual string GetLocalPath(QuadTile qt)获得瓦片qt对应的本地文件名。qt的层级、行号、列号和扩展名m_imageFileExtension确定了瓦片的相对目录。{0}\{1:D4}\{1:D4}_{2:D4}.{3}, qt.Level, qt.Row, qt.Col, m_imageFileExtension本地m_dataDirectory不为空且对应的文件存在则返回。缓存目录m_ cacheDirectory为空返回备用数据存放路径。搜索缓存目录如果文件存在就返回不存在再修改后缀名搜索有效的后缀名包括 .bmp.dds.dib.hdr.jpg.jpeg.pfm.png.ppm.tga.gif.tif。如果存在就返回如均不存在则返回不存在的缓存文件文件路径。public Texture LoadFile(QuadTile qt)加载瓦片qt所对应的图片并返回纹理对象。获取瓦片的本地路径如果文件不存在且为可下载瓦片则加入下载队列QueueDownload返回空。如果文件存在调用ImageHelper.LoadTexture加载纹理文件。对于下载的缓存文件检查是否超时超时需要重新下载。可下载瓦片还会根据设置转换为DDS格式。protected virtual string GetDownloadUrl(QuadTile qt)返回瓦片的下载URL网址对于本地瓦片如果存在备用数据存在路径则返回否则返回空。子类会重载该函数以返回网络下载地址。void QueueDownload(QuadTile qt, string filePath)将瓦片添加到下载队列以下载图片。调用瓦片集的函数QuadTileSet.AddToDownloadQueue添加到下载队列下载请求类型为GeoSpatialDownloadRequest。二、NltImageStoreNltImageStore用来读取NLT风格存储在Web服务器上的瓦片数据。 其中NLT是NASA Learning Technologies的首字母缩写。对应配置文件中的ImageTileService项指定服务器URL和数据集的名字通常是基于WEB的XYZ瓦片服务区别于WMS使用参数访问网络数据。NLT-styleNLT风格图像存储是一种面向地形/高程遥感数据的专用存储方案核心依托BILBand Interleaved by Line按行波段交替文件格式实现其中NLT是NASA Learning Technologies的首字母缩写相关读取操作可通过NltImageStore类完成。访问方式类似于http://worldwind25.arc.nasa.qov/wwelevation/wwelevation.aspx?Tsrtm30pluszipL-0x14Y7string m_dataSetName;//数据集名称 string m_serverUri; //瓦片数据网址主要函数//可下载的网络图层 public override bool IsDownloadableLayer { get { return true; } }public NltImageStore( string dataSetName, string serverUri)构造函数初始化两个属性。protected override string GetDownloadUrl(QuadTile qt)重载函数返回瓦片qt对应的下载路径格式为{0}?T{1}L{2}X{3}Y{4}, m_serverUri,m_dataSetName, qt.Level, qt.Col, qt.Row三、WmsImageStoreWmsImageStore用来读取遵循OGC规范的网络地图服务WMS瓦片图像可用于图像和DEM数据的访问。对应配合文件的WMSAccessor字段包括URL版本*1.3.0或1.1.1图片格式图层名等。string m_serverGetMapUrl;//获取WMS服务的URL string m_wmsLayerName; //图层名 string m_wmsLayerStyle;//图层风格,可为空 string m_imageFormat;//图片格式如image/jpeg string m_version; //WMS 规范版本 int m_textureSizePixels 512; //图片纹理大小512*512像素这里没有使用配置文件里的设置。主要函数//可下载的网络图层 public override bool IsDownloadableLayer { get { return true; } }protected override string GetDownloadUrl(WorldWind.Renderable.QuadTile qt)重载函数返回瓦片qt对应的下载路径。m_serverGetMapUrl有“”时如 http://server.net/path?imageformatpngwidth{WIDTH}north{NORTH}... 则替换下载路径Url中的宽、高、四角点经纬度string url m_serverGetMapUrl; url url.Replace({WIDTH}, m_textureSizePixels.ToString(CultureInfo.InvariantCulture)); url url.Replace({HEIGHT}, m_textureSizePixels.ToString(CultureInfo.InvariantCulture)); url url.Replace({WEST}, qt.West.ToString(CultureInfo.InvariantCulture)); url url.Replace({EAST}, qt.East.ToString(CultureInfo.InvariantCulture)); url url.Replace({NORTH}, qt.North.ToString(CultureInfo.InvariantCulture)); url url.Replace({SOUTH}, qt.South.ToString(CultureInfo.InvariantCulture));没有“”时格式化标准的WMS请求为string url string.Format(CultureInfo.InvariantCulture, {0}?requestGetMaplayers{1}srsEPSG:4326width{2}height{3}bbox{4},{5},{6},{7}format{8}version{9}styles{10}, m_serverGetMapUrl, m_wmsLayerName, m_textureSizePixels, m_textureSizePixels, qt.West, qt.South, qt.East, qt.North, m_imageFormat, m_version, m_wmsLayerStyle);配置文件示例ImageAccessor LevelZeroTileSizeDegrees36/LevelZeroTileSizeDegrees NumberLevels5/NumberLevels TextureSizePixels512/TextureSizePixels ImageFileExtensionjpg/ImageFileExtension !-- 注释内容 PermanentDirectoryData\Earth\RIS-DataPrepare\maptile_512/PermanentDirectory -- !-- 注释内容 ImageTileService ServerUrlhttps://worldwind25.arc.nasa.gov/wms/ServerUrl DataSetNameBlueMarble-200405/DataSetName ServerLogoFilePathAdd-ons\ZoomIt_WorldWindCentral\ServerLogo.png/ServerLogoFilePath /ImageTileService -- WMSAccessor ServerGetMapUrlhttps://worldwind25.arc.nasa.gov/wms/ServerGetMapUrl ServiceNameOGC:WMS/ServiceName Version1.3.0/Version ImageFormatimage/jpeg/ImageFormat WMSLayerNameBlueMarble-200405/WMSLayerName UseTransparencytrue/UseTransparency /WMSAccessor /ImageAccessor1.3.0版本代码已经修改protected override string GetDownloadUrl(WorldWind.Renderable.QuadTile qt) { if (m_version 1.3.0) { string url string.Format(CultureInfo.InvariantCulture, {0}?requestGetMaplayers{1}crsCRS:84width{2}height{3}bbox{4},{5},{6},{7}format{8}version{9}styles{10}, m_serverGetMapUrl, m_wmsLayerName, m_textureSizePixels, m_textureSizePixels, qt.West, qt.South, qt.East, qt.North, //qt.South, qt.West, qt.North, qt.East, //先纬度后经度 m_imageFormat, m_version, m_wmsLayerStyle); return url; } }访问方式类似于https://worldwind25.arc.nasa.gov/wms?requestGetMaplayersBlueMarble-200405crsCRS:84width512height512bbox54,-144,90,-108formatimage/jpegversion1.3.0stylesWMS中的坐标系统srs设置为EPSG:4326。EPSG:4326(WGS84) 是目前最流行的地理坐标系统。在国际上每个坐标系统都会被分配一个 EPSG 代码EPSG:4326 就是 WGS84 的代码。GPS是基于WGS84的所以通常我们得到的坐标数据都是WGS84。下一篇介绍场景渲染过程程序在没有消息处理的空闲时调用WorldWindow.OnApplicationIdle进行场景绘制。