地形瓦片类TerrainTile 用来抽象封装用户漫游中所请求的地形瓦片数据类型。

地形瓦片服务类TerrainTileService提供了从BIL(Binary Interleaved by Line,按行交叉存储二进制文件)地形文件获取高程的功能。该类主要是用来返回用户漫游中所请求的地形瓦片对象。和影像数据类似,也是先判断所需要的高程数据是否存在,高程数据存储在类TerrainTile类中,TerrainTileFilePath是当前高程数据路径,if(!File.Exists(Ten'ainTileFilePath))就会构造一个下载的TerrainDownloadRequest类:TerrainDownloadRequest(this,m_ownel,Row,Col,TargetLevel)加入下载队列,下载高度信息文件bil的压缩包,并解压到分配的目录,然后可以通过函数GetElevationAt(doublelatitude,doublelongitude)返回float的高度信息。这两个类类图如下。

地形瓦片服务类TerrainTileService各个字段的含义说明如下:

string m_serverUrl;//地形瓦片服务的统一资源定位符字符串

string m_dataSet; //地形瓦片服务的数据集字符串

double m_levelZeroTileSizeDegrees; //零级地形瓦片的大小度数(取double型)

int m_samplesPerTile; //每块地形瓦片的采样数(取int型)

int m_numberLevels; //地形瓦片的划分层级数目

string m_fileExtension; //地形瓦片文件的扩展名

string m_terrainTileDirectory; //地形瓦片的目录

TimeSpan m_terrainTileRetryInterval; //地形瓦片服务请求重试时间间隔

string m_dataType; //地形瓦片数据类型:浮点型或16位整形

该类的构造函数public TerrainTileService()通过给上面成员赋值,完成初始化实例。

public static int GetRowFromLatitude(double latitude, double tileSize)

public static int GetColFromLongitude(double longitude, double tileSize)

这两个静态函数计算并返回指定的经度或纬度值在给定的瓦片大小层级中所对应的列号或行号值。

函数public TerrainTile GetTerrainTile(double latitude, double longitude, double samplesPerDegree)用指定的每一度的采样数构建包含指定坐标的地形瓦片。其中一个重要的逻辑是:通过指定每一度的采样数,来计算瓦片合适的目标层级。因为如果目标层级太高的话,不满足该层级每一度所包含的采样数不小于指定的每一度采样数。然后根据合适的瓦片目标层级计算并返回指定的经度或纬度值在该瓦片目标层级中所对应的列号或行号值,接着就可以利用前面的列号或行号值构建地形瓦片文件路径字符串。其格式为:地形瓦片目录\瓦片层级\瓦片行号\瓦片行号_瓦片列号.文件扩展名。其中“瓦片行号_瓦片列号”表明统一层级瓦片中同一行的瓦片文件都存储在同一行号的文件夹下面。最后再指定或计算所请求的瓦片对象的每一度的采样数、瓦片大小度数、瓦片北部边界度数、瓦片南部边界度数、瓦片西部边界度数、瓦片东部边界度数。最有返回构建好的瓦片对象。可以参阅下面的示意图理解上面的过程。

NASA World Wind 地图瓦片系统

地形瓦片类TerrainTile各个字段的含义说明如下:

public string TerrainTileFilePath; //地形瓦片文件路径

public double TileSizeDegrees; //地形瓦片大小度数

public int SamplesPerTile; //每块地形瓦片的采样数(取int型)

public double South; //瓦片北部边界度数

public double North; //瓦片南部边界度数

public double West; //瓦片西部边界度数

public double East; //瓦片东部边界度数

public int Row;//瓦片行号

public int Col;//瓦片列号

public int TargetLevel; //瓦片目标层级

public TerrainTileService m_owner; //拥有该瓦片的地形瓦片服务类

public bool IsInitialized; //瓦片是否被初始化

public bool IsValid; //瓦片是否有效

public float[,] ElevationData; //瓦片所对应的高程数据二维数组,即存放当前瓦片所有样本点高程值的数值,这是通过TerrainTileService.cs文件总的TerrainTile类的函数Initialize()中读取DEM(.bil)文件来获取的。

protected TerrainDownloadRequest request; //所发出地形瓦片下载请求

该类的构造函数public TerrainTile( TerrainTileService owner )仅仅完成指定拥有该瓦片的地形瓦片服务类。

初始化函数public void Initialize()初始化地形瓦片添加开关,初始化浮点型或16位整形的瓦片。

public float GetElevationAt(double latitude, double longitude)函数从瓦片所对应的高程数据二维数组中得到指定的经度、纬度处的高程值。

WorldWind源码剖析系列:地形瓦片类TerrainTile和地形瓦片服务类TerrainTileService的更多相关文章

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

    星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...

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

    WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...

  3. WorldWind源码剖析系列:表面瓦片类SurfaceTile

    表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...

  4. WorldWind源码剖析系列:四叉树瓦片类QuadTile

    四叉树瓦片类QuadTile提供了对影像和地形数据的四叉树访问模型.该类的类图如下. 四叉树瓦片类QuadTile提供的主要字段.属性和方法简要描述如下: public QuadTileSet Qua ...

  5. WorldWind源码剖析系列:地形访问器类TerrainAccessor

    地形访问器类TerrainAccessor 地形访问器类TerrainAccessor提供了对地形(高程)Terrain (elevation)访问的各种接口interface,是NltTerrain ...

  6. WorldWind源码剖析系列:影像存储类ImageStore、Nlt影像存储类NltImageStore和WMS影像存储类WmsImageStore

    影像存储类ImageStore 影像存储类ImageStore提供了计算本地影像路径和远程影像影像URL访问的各种接口,是WmsImageStore类和NltImageStore类的基类.当划分完层次 ...

  7. WorldWind源码剖析系列:星球表面渲染类WorldSurfaceRenderer

    星球表面渲染类WorldSurfaceRenderer描述如何渲染星球类(如地球)表面影像纹理.该类的类图如下. 星球类World包含的主要的字段.属性和方法如下: public const int ...

  8. WorldWind源码剖析系列:四叉树瓦片集合类QuadTileSet

    四叉树瓦片集合类QuadTileSet是影像瓦片渲染的主要类.使用地形管理器来为3D地形渲染查询高程值.依赖于用来刷新基于经度.纬度.视角范围瓦片的更新线程.该类继承自可渲染对象类Renderable ...

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

    PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...

随机推荐

  1. spring 注解@PathVariable

    @PostMapping(name="获取用户信息", value="/getUser/{userId}") public Object getUser(@Pa ...

  2. MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...

  3. DOM(JavaScript高程笔记)

    一.节点层次 1.Node类型 if (someNode.nodeType == 1){ // 适用于所有浏览器 alert("Node is an element."); } N ...

  4. 设计模式(9)--Composite(组合模式)--结构型

    1.模式定义: 组合模式属于对象的结构模式,有时又叫做“部分——整体”模式.组合模式将对象组织到树结构中,可以用来描述整体与部分的关系.组合模式可以使客户端将单纯元素与复合元素同等看待. 2.模式特点 ...

  5. git 报错:error: failed to push some refs to 'https://github.com/Anderson-An/******.git'(已解决)

    提交push 报错: $ git push origin masterTo https://github.com/Anderson-An/******.git ! [rejected] master ...

  6. 巧用css的border属性完成对图片编辑功能的性能优化

    一.需求场景: 最近闲来无事,boss提出了一个要求,研究相关代码并完成一个关于编辑图片功能的性能优化,该功能的主要界面展示如下: 通过了几分钟的短暂试用,发现就是一个简单的裁剪并保存用户选择并上传的 ...

  7. css翻译名词术语

    原文 本书译法 其它译法(未采用) CSS - 层叠样式表.级联样式表.样式单 cascade 层叠(机制) 级联 fallback 回退(机制.措施.方案) 后备.回落.降级 selector 选择 ...

  8. ubuntu执行sudo apt-get update 时出现的错误及解决办法

    一.错误描述 W: GPG error: http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial InRelease: The followi ...

  9. (Stanford CS224d) Deep Learning and NLP课程笔记(二):word2vec

    本节课将开始学习Deep NLP的基础--词向量模型. 背景 word vector是一种在计算机中表达word meaning的方式.在Webster词典中,关于meaning有三种定义: the ...

  10. ECMAScript5新特性总结

    虽然ECMAScript5早就成为标准推出来了,但之前因为一直用的是ECMAScript3,并且工作中总是要求兼容IE的低版本,所以用的比较少.如今市场上大多数浏览器都能兼容ECMAScript5(I ...