地形瓦片类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. Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了

    目录 引言 构建示例 match operator 参数 analyzer lenient 参数 Fuzziness fuzzniess 参数 什么是模糊搜索? Levenshtein Edit Di ...

  2. php面向对象精要(3)

    1,final关键字定义的方法,不能被重写 由于final修饰了show方法,子类中重写show方法会报错 <?php class MyClass { final function show() ...

  3. JS中深浅拷贝 函数封装代码

    一.了解 基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问. 二.浅拷贝 浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一 ...

  4. tar.xz文件的解压

    xz是绝大数linux默认就带的一个压缩工具. 压缩包xz格式的居然比7z还要小. 不过xz也有一个坏处就是压缩时间比较长,比7z压缩时间还长一些.不过压缩是一次性的,所以可以忽略. xz压缩文件方法 ...

  5. 【代码笔记】iOS-SDWebImage的使用

    一,工程图. 二,代码. RootViewController.m #import "RootViewController.h" //加入头文件 #import "UII ...

  6. 安卓测试【三】adb简单命令及monkey使用

    Ⅰ 配置好android sdk环境变量之后,将android手机连接到电脑上,进行一些adb的简单命令的操作. adb,安卓调试桥,android   sdk的一个工具.直接操作管理安卓模拟器或者真 ...

  7. windows 7 下安装Oracle 9i 解决方法[转]

    这里首先申明下,windows7下安装oracle9i 9.0.1版本肯定是不成功的,楼主安装过无数次,网上也找过很多方法,都不可行,所以就不用试了.这里说下oracle9i 9.2版本安装出现的问题 ...

  8. [原创]RedHat 安装MySQL数据库

    朋友购买了阿里云的服务器,服务器上自带有CentOS操作系统,但是开发软件需要自己安装,接下来将介绍本地RedHat Linux 5.10虚拟机上搭建Mysql数据库. 一.软件准备 (1)jdk-6 ...

  9. windows系统相关命令及问题排查实践

    1. 如何查看哪个端口被哪个程序占用? Netstat –ano|findstr "80" ->找到监听80端口的pid tasklist|findstr “<PID号 ...

  10. “由于这台计算机没有终端服务器客户端访问许可证”解决方案

    由于windows2003默认仅支持2个终端用户的登陆.当"终端连接超出了最大连接"的情况出现导致不能登录. 1.在另外一台Windows2003的机器上运行"tsmmc ...