worldwind技术手册Word文档格式.docx
《worldwind技术手册Word文档格式.docx》由会员分享,可在线阅读,更多相关《worldwind技术手册Word文档格式.docx(50页珍藏版)》请在冰豆网上搜索。
0层瓦片大小;
TileSize:
)―――――――――――14
3.2NLTLandsat处理技术范例―――――――――――――15
3.3dstilehowto―――――――――――――15
4.Creatanewworld―――――――――――――17
4.1WorldWind本地文件说明
4.1.1.Worlds
4.1.2.在安装目录下
4.2创建新的世界模型
5.Makinglayer――――――――――――――18
5.1添加新图层(更详细可参考)
5.2Point―――――――――――――――20
5.3Lines―――――――――――――――20
5.4Polygon―――――――――――――――23
5.5ModelFeature―――――――――――――――25
5.6EffectsandMulti-Texturing―――――――――――――――27
5.7Shapefile―――――――――――――――32
5.8KML/KMZ
6.ddons与plugins―――――――――――――――32
addons与plugins区别
插件总汇及其功能
7.script脚本―――――――――――――――――33
8.编译调试―――――――――――――――――――33
9.读书籍和论文―――――――――――――――――――――34
10.1.4.1版本发展―――――――――――――――35
一、WW软件结构
1.1功能介绍
WorldWind(简称WW,中文有人直翻译为世界风),是NASA发布的一个开放源代码(OpenSource)的地理科普软件(由NASAResearch开发,由NASALearningTechnologies來發展),它是一个可视化地球仪,将NASA、USGS以及其它WMS服务商提供的图像通过一个三维的地球模型展现,近期还包含了月球、金星、火星、天文星系等的展现。
用户可在所观察的行星上随意地旋转、放大、缩小,同时可以看到地名和行政区划.软件还包含了一个软件包,能够浏览地图及其它由因特网上的OpenGISWebMappingService提供的图像。
目前软件所使用的数据:
低分辩率的Bluemarble数据现在包含的初始安装内,当用户放大到特定区域时,附加的高分辩率数据将会自动从NASA服务器上被下载。
A静态数据层:
en:
Bluemarble图像
Landsat图像
USGS图像
SRTM地形数据
B动画数据层:
AnimatedEarth
MODIS
GLOBE
1.2WW与XML
WorldWind是一个优秀的客户端框架引擎,XML实现数据描述和软件设置,通过WW的WorldModel、图层、插件、http和WMS请求、三维渲染等实现交互式浏览。
也就是说XML是数据。
WorldWind则是数据执行的引擎,WW可扩展性和开发性非常强大。
1.3Clinet与Server
1.3.1WW使用链接(附表1)
1.3.2本地缓存路径(附表1)
1.3.3本地功能配置(附表1)
1.3.4http请求与asp
Bluemarble、:
Landsat、SRTM使用直接的http请求。
WhynotuseWMS?
NASALearningTechnologiesandtheNWWusercommunityhastriedinthepasttouseWMStoserveWorldWindtiles.TheimmensedemandoftheNWWuserbasehascrippledanyWMSserverwe’vetriedtodate.Insteadofusinganoverlycomplexformat(forservingpredefinedchunksthatis)weoptedtogowithpre-rendered,pre-definedtilesthatarejuststoredinthefilesystem,andcanbeservedtotheclientwithnofurtherprocessingserverside.Thisreducesthestrainontheserverincredibly.IfyoubelieveyoucansetupaWMSserverthatwouldbeabletowithstandtheNWWuserbase,feelfree,we’dbehappytoseethat.InthemeantimeweareworkingoncreatingaWMSserverthatcanreadtheWorldWindtilestructure(forcompatibilitywithotherprograms).
1.3.WMS、WFS
WMS——webMapserver网络地图服务WFS——webFundationserver网络要素服务
USGS和所有动画数据层使用符合OGC协议的WMS和WFS实现数据网络共享。
二、WorldWind金子塔体系
2.1瓦片金字塔详解及其对应公式
2.1.1NASAWorldWindTileStructure
采取笛卡尔坐标,原点(X=0,Y=0.)在投影坐标左下方,即南极点(-90-180inlatitudeandlongitude),如图:
图1图2
如图2,WorldWind使用“LevelZeroTileSize”来决定每一个瓦片宽和高的大小(所有的瓦片都是正方形。
标准的levelzerotilesize还没有制定,但是它必须满足能被180整除。
Thelevelzerotilesize(以后称作lzts)是层与层间转换的最简单的距离。
在NLTLandsat7中,lzts被默认设置为2.25度。
可用以下公式计算第N层的tilesize:
size=lzts/2^N次方。
也就是说下一层将上一层一分为四。
:
图3显示坐标轴在X、Y方向值的增量:
2.1.2NASAWorldWindMapTileSystem
坐标与图片编号对应公式:
(1)利用下面公式,求某点坐标X,Y(纬,经),在某层N的文件号,图片号
[(X+90)/<
LevelZeroTileSizeDegrees>
值*2的N次方=文件夹号A(取整数如256.65即为256)
[(Y+180)/<
值*2的N次方=图片后缀B(取整数)
(2)利用求得的图片编号A_B反求这张图片的左下角坐标
A*<
值/2的N次方-90=纬度
B*<
值/2的N次方-180=经度
这样求得图片起始分割点坐标,然后以
<
值/2的N次的间隔分割图片,把整幅图分成256*256or512*512
BMNG(500m)
LandSat/Geocover(30m/15m)
OnEarth
(15m)
USGS
(1m)
SRTM
(90m/3m0(US))
36×
36。
2.25×
2.25。
2.0×
2.0。
0.8×
0.8。
20×
20。
2.2瓦片请求调度策略
2.2.1当前显示请求及其显示(客户端)
(1)瓦片金字塔模型构建
金字塔是一种多分辨率层次模型。
在地形场景绘制时,在保证显示精度的前提下为提高显示速度,不同区域通常需要不同分辨率的数字高程模型数据和纹理影像数据。
数字高程模型金字塔和影像金字塔则可以直接提供这些数据而无需进行实时重采样。
尽管金字塔模型增加了数据的存储空间,但能够减少完成地形绘制所需的总机时。
分块的瓦片金塔模型还能够进一步减少数据访问量,提高系统的输入输出执行效率,从而提升系统的整体性能。
当地形显示窗口大小固定时,采用瓦片金字塔模型可以使数据访问量基本保持不变。
瓦片金字塔模型的这一特性对海量地形实时可视化是非常重要的。
在构建地形金字塔时,首先把原始地形数据作为金字塔的底层,即第0层,并对其进行分块,形成第0层瓦片矩阵。
在第0层的基础上,按每2⨯2个像素合成为一个像素的方法生成第1层,并对其进行分块,形成第1层瓦片矩阵。
如此下去,构成整个瓦片金字塔。
以影像为例,设第l层的像素矩阵大小为irl×
icl,分辨率为resl,瓦片大小为is×
is,则瓦片矩阵的大小trl×
tcl为:
trl=⎣irl/is⎦
tcl=⎣icl/is⎦
其中“⎣⎦”为向下取整符,下同。
按每2×
2个像素合成为1个像素后生成的第l+1层的像素矩阵大小irl+1×
icl+1为:
irl+1=⎣irl/2⎦
icl+1=⎣icl/2⎦
其分辨率resl+1为:
resl+1=resl×
2
不失一般性,我们规定像素合成从像素矩阵的左下角开始,从左至右从下到上依次进行。
同时规定瓦片分块也从左下角开始,从左至右从下到上依次进行。
在上述规定的约束下,影像与其瓦片金字塔模型是互逆的。
同时,影像的瓦片金字塔模型也便于转换成具有更明确拓扑关系的四叉树结构。
(2)线性四叉树瓦片索引(WW中应用QST,即quadratsizetree)
四叉树是一种每个非叶子节点最多只有四个分支的树型结构,也是一种层次数据结构,其特性是能够实现空间递归分解。
图2是瓦片金字塔模型的四叉树结构示意图,其中矩形符号代表叶子节点,圆形符号代表非叶子节点。
本文采用四叉树来构建瓦片索引和管理瓦片数据。
在瓦片金字塔基础上构建线性四叉树瓦片索引分三步:
即逻辑分块、节点编码和物理分块。
逻辑分块
与构建瓦片金字塔对应,规定块划分从地形数据左下角开始,从左至右,从下到上依次进行。
同时规定四叉树的层编码与金字塔的层编码保持一致,即四叉树的底层对应金字塔的底层。
设(ix,iy)为像素坐标,is为瓦片大小,io为相邻瓦片重叠度,以像素为单位;
(tx,ty)为瓦片坐标,以块为单位;
l为层号。
若瓦片坐标(tx,ty)已知,则瓦片左下角的像素坐标(ixlb,iylb)为:
ixlb=tx×
is
iylb=ty×
瓦片右上角的像素坐标(ixrt,iyrt)为:
ixrt=(tx+1)×
is+io–1
iyrt=(ty+1)×
如果像素坐标(ix,iy)已知,则像素所属瓦片的坐标为:
tx=⎣ix/is⎦
ty=⎣iy/is⎦
由像素矩阵行数和列数以及瓦片大小,可以计算出瓦片矩阵的行数和列数,然后按从左至右,从下到上的顺序依次生成逻辑瓦片,逻辑瓦片由((ixlb,iylb),(ixrt,iyrt),(tx,ty),l)唯一标识。
节点编码
假定用一维数组来存储瓦片索引,瓦片排序从底层开始,按从左至右,从下到上的顺序依次进行,瓦片在数组中的偏移量即为节点编码。
为了提取瓦片(tx,ty,l),必须计算出其偏移量。
我们采用一个一维数组来存储每层瓦片的起始偏移量,设为osl。
若第l层瓦片矩阵的列数为tcl,则瓦片(tx,ty,l)的偏移量offset为:
offset=ty×
tcl+tx+osl
物理分块
在逻辑分块的基础上对地形数据进行物理分块,生成地形数据子块。
对上边界和右边界瓦片中的多余部分用无效像素值填充。
物理分块完毕,按瓦片编号顺序存储。
(3)瓦片拓扑关系
瓦片拓扑关系包括同一层内邻接关系和上下层之间的双亲与孩子关系两个方面[2]。
邻接关系分别为东(E)、西(W)、南(S)、北(N)四个邻接瓦片,如图3(a)所示;
与下层四个孩子的关系分别为西南(SW)、东南(SE)、西北(NW)、东北(NE)四个孩子瓦片,如图3(b)所示;
与上层双亲的关系是一个双亲瓦片,如图3(c)所示。
若已知瓦片坐标为(tx,ty,l),则该瓦片相关的拓扑关系可表示为:
1)东、西、南、北四个邻接瓦片的坐标分别为:
(tx+1,ty,l)、(tx-1,ty,l)、(tx,ty-1,l)、(tx,ty+1,l);
2)西南、东南、西北、东北四个孩子瓦片的坐标分别为(2tx,2ty,l-1)、(2tx+1,2ty,l-1)、(2tx,2ty+1,l-1)、(2tx+1,2ty+1,l-1);
3)双亲瓦片的坐标为(⎣tx/2⎦,⎣ty/2⎦,l+1)。
(a)邻接瓦片(b)孩子瓦片(c)双亲瓦片
(4)地形场景数据的动态管理
可见区域及最佳地形分辨率计算
根据视点的坐标和视线的方向,就可以计算出视景体与地形平均水平面相交的平面区域范围,即地形可见区域范围。
图4为地形可见区域示意图,图中XOY为地形平均水平面,E为视点,视线EM与地形平均水平面的交点为M,视点在XOY上的投影为M0。
视景体E_ABCD与平面XOY的四个交点分别为A'
、B'
、C'
和D'
,则地形可见区域范围即为四边形A'
B'
C'
D'
。
有关点A'
的坐标的详细计算方法,可参考文献[3]。
地形可见区域的表示若用于地形显示的屏幕窗口宽和高分别为Xw和Yw(以像素为单位),视景体的水平视场角和垂直视场角分别为FovX和FovY。
设当可见区域A'
恰好充满显示窗口时,窗口水平方向和垂直方向平均每个像素所对应的地面距离分别为Dx和Dy,则有:
Dx=EM×
tan(FovX/2)×
2.0/Xw
Dy=EM×
tan(FovY/2)×
2.0/Yw
即当地形分辨率X方向低于Dx或Y方向低于Dy时,地形显示的精度将会降低;
反之,将会产生不必要的数据冗余,影响绘制效率。
也就是说,此时的Dx和Dy即为理论上地形绘制所需的最佳分辨率。
由于通常地形X方向和Y方向的采样间距相同,因此我们在实际应用中取Dx和Dy中的小值作为最佳地形分辨率,用作后续瓦片搜索的重要依据。
需要指出的是,通常该最佳分辨率被用作窗口中心瓦片所对应的分辨率,而窗口其它位置所对应的瓦片分辨率则根据瓦片中心到视点的距离作适当的降低调整,因为这不仅符合人眼的视觉规律,而且还可以减少用于地形绘制的三角形数量。
WorldWind当前视角高度值与图层调度间关系探讨
Howdoesaltituderelatetoalevelinalayerbeingdisplayed?
在WW中,从N-1st转换到Nthlevel的高度值是:
(Level0TileSize*390km/2^N)×
X(因子)
例如对于NLTLS7图层,它的L0TS=2.25deg。
它的0level从390*2.25=877km开始可见,level1在小于439km可见等;
(但这只是从WW的行为分析得到而不是从源代码)
对于较小的高程(小于2000km),X因子近似为1。
然而,高于2000km因子就减少(可能是arctan(x)/x,或者其他)
但是,为什么刚好390km?
为什么非线性\非常量的因子?
肯能只有WW开发者才知!
ASmallAnalyse:
(假定屏幕默认尺寸为wWidth=992px和wHeight=653px,南北方向的视角范围为FOV=45deg)
打开OnEarthlayer(L0TS=2.0deg)并飞行到高度Alt=195km,这时level2的瓦片开始显示。
那么图片区域的南北范围尺寸((N-S)dimension-nsDim)是多少?
nsDim=Alt*2*tan(FOV/2),所以在这里nsDim=195km*2*tan(22.5deg)=161.5km.
将它转换为度数(1deg=111km),得到nsDim=1.454deg。
每个level2的瓦片覆盖0.5×
0.5degree的区域,因此“照相机”(可视屏幕范围)相应有1.454/0.5=2.91个瓦片(南北方向上),或者2.91*512=1489个像素。
数值1489/653=2.28可以称之为线性重采样因子(LOF-LinearOversamplingfactor);
平方后,得到区域重采样因子(AOF-realoversamplingfactor)。
在我们这例子为5.20。
这意味着什么?
5.2个瓦片图片的像素在屏幕上显示为1个像素。
在没有进入下一图层时,这些参数能减少到什么程度?
在例子中,下一层的开端为Alt=97.5km,即195km的一半。
当我们达这里时,thelevel2tiles减少到只有L.O.F.=1.14或者A.O.F.=1.30。
Nowlet'
sgeneralizeit:
WhenaretheseLOFandAOFbecomingbig(givingevidenceaboutvasting)?
Whentheuserhas
-reducedtheWWwindow'
sheight,
-increasedtheFOV(akazoomedout),
-tiltedsignificantly,
-gonenearthePole,
-.whatelsehaveIforgot?
在这些情况下,AOF可能变得非常巨大,例如值为几十,是否意味着100-or-somegabyteoftilesareneededforrenderingofabout-1Mpixpicture.
还有很多问题例如(e.g.theWhendoyouknowwhento'
stop'
?
(ie.howdoyouknowyouareat1:
1)question)
2.2.2目标瓦片快速搜索算法
目标瓦片搜索实际上伴随着分辨率搜索。
如果采用一种分辨率,则只涉及层搜索和区域搜索。
对于采用视点相关LOD技术的地形可视化系统,要求不同的区域对应不同分辨率的地形数据,因此在瓦片搜索过程中需要进行分辨率测试,图5为地形瓦片分辨率需求示意图,图中E为视点,白色矩形表示与视景体相交且需要参与地形绘制的瓦片数据。
矩形越小表示瓦片分辨率越高。
本文目标瓦片搜索采用由粗到细、层层推进的策略。
首先判断可见区域是否在地形数据所表示的范围内,测试与可见区域交叠的顶层瓦片是否满足分辨率要求,如果不满足,则继续测试瓦片的分支,直到搜索出所有满足分辨率要求的瓦片。
完整的算法描述如下:
第1步:
判断可见区域是否与地形数据交叠。
如果交叠,转第2步;
否则,算法结束。
第2步:
逐个判断顶层瓦片是否满足分辨率要求。
如果满足,将其插入到绘制链表;
否则,将其4个分支瓦片插入到测试链表1。
第3步:
判断测试链表1是否为空。
如果为空,算法结束;
否则,转第4步。
第4步:
逐个判断测试链表1中的瓦片是否与可见区域交叠。
如果交叠,将其插入到测试链表2;
否则,将其舍弃。
第5步:
清空测试链表1,转第6步。
第6步:
逐个判断测试链表2中的瓦片是否满足分辨率要求。
第7步:
清空测试链表2,转第3步。
交叠测试时,只要瓦片四个角点的任何一点在可见区域内,即表示该瓦片与可见区域交叠。
对于分辨率测试,首先计算瓦片四个角点的目标分辨率,如果四个角点的目标分辨率数值都大于或等于瓦片所处金字塔层的分辨率数值,则表示该瓦片满足分辨率要求,否则需要测试其四个分支。
如图6所示,假设被测试瓦片的分辨率为2,由于瓦片左上角点目标分辨率数值小于2,则必须对瓦片进行细分,然后再进行交叠测试和分辨率测试。
上述目标瓦片搜索算法是一个递归过程。
在进行分辨率判断时只需对瓦片的四个角点进行判断,因而效率很高。
另外,从瓦片索引数组中提取瓦片的分支无需进行空间位置判断,只需计算出瓦片偏移量即可,这同样能够显著地提高算法的性能。
2.2.3瓦片数据的请求预测(服务器)(在《高分辨率遥感卫星应用》中,本文作者有遥感数据库的详细理论)
(1)预读取:
合适的数据缓冲机制可以提高系统的性能,海量地形实时可视化也不例外。
当地形场景连续运动时,如果应用程序能够提前预测系统即将需要的数据,并能提前从磁盘把这些数据读到缓冲区,那么当应用程序真正需要这些数据的时候,便可以直接从缓冲区读取,从而省去了从磁盘读取这些数据的时间。
由于在海量地形漫游时,数据预测调度和场景绘制需要同时进行,因此,我们利用操作系统的多线程能力,将数据预测调度和场景绘制分别采用两个独立的线程来完成。
数据缓冲通过预测瓦片请求来实现。
我们将瓦片请求划分为高、中、低三种优先级。
高