Archie osgEarth Step By Step②Earth File分析
来源:互联网 发布:潘建伟事件 知乎 编辑:程序博客网 时间:2024/05/22 08:03
osgEarth Step By Step①
在①中介绍了osgEarth 开发最简单的方式,在OSG中加载一个被称为Earth File的文件。
这里对Earth File进行详细介绍
有关osgearth请参考官方文档http://osgearth.org/wiki/Documentation官方链接
什么是Earth File
osgEarth开发的一种方式是在osg中加载以.earth为后缀的文件,这种文件称为Earth File,它使用XML标记语言定义自己的文件格式,它有一个通俗的名称叫做地图。
Earth File的核心作用是指明以下3点:
- 你创建的地图类型(geocentric 或projected)
- 可使用的图像、三面图elevation、矢量和模型数据
- 你的数据缓存在哪里
这是Earth File 文件库,包含大量Earth files并告诉你如何使用它们:https://github.com/gwaldron/osgearth/tree/master/tests/
(摘自osgEarth用户手册)
首先来说明一下XML
可扩展标记语言 (Extensible Markup Language, XML)
用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
XML使用标签<tag></tag>,其采用的语法如下:
1 、任何的起始标签都必须有一个结束标签。
2 、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<tag/ >。XML解析器会将其翻译成<tag></tag>。
3 、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is a samplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
4 、所有的特性都必须有值。
5 、所有的特性都必须在值的周围加上双引号。
下面对Earth File各部分分别进行介绍
地图文件元素索引
1、简单图像文件
这是一个很简单的例子,从WMS服务器读取数据,并渲染在一个圆形地球的三维模型上。
<map name="MyMap" type="geocentric" version="2"> <image name="bluemarble" driver="gdal"> <url>/data/world.tif</url> </image></map>
这个文件建立了一个地图“MyMap”,geocentric类型,GeoTIFF图片源名称是“bluemarble”(GeoTiff是包含地理信息的一种Tiff格式的文件)。驱动driver属性告诉osgearth哪个驱动去加载这些图片,所有子元素针对特定的驱动。
关于tiff和geotiff文件格式,请参考这篇文章tif及geotiff简明分析
在①中已经进行了介绍分析,这里不再赘述。
2、多重图像层
osgEarth支持有多个图像源的地图。这允许你创建地图时,在基础层上覆盖高分辨率的插图。基础图层必须是较低分辨率的底图。
要添加多个图像到Earth File,只需添加多个“image”元素到你的Earth file。
<map name="Transportation" type="geocentric" version="2"><!--添加基础底图of the blue marble data--><image name="bluemarble" driver="gdal"><url>c:/data/bluemarble.tif</url></image><!--添加高分辨率插图inset of Washington, DC--><image name="dc" driver="gdal"><url>c:/data/dc_high_res.tif</url></image></map>
注:在XML语言中<!--和-->用来注释。
上述地图使用本地数据源(使用GDAL插件)提供的两个图像。osgEarth使用各种方法来渲染图像层,所以可以渲染多少图像层的限制取决于您的硬件。
osgEarth在渲染图像层时,按照图像在earth文件中的顺序依次渲染,也就是说在前面的图像先渲染,排在后面的图像后渲染,当有多个图像源时,低分辨率图像要放在靠前的位置,然后放高分辨率图层。
3、高程数据
高程数据可以通过将高程元素<elevation></elevation>加入到XML从而添加到地球文件中去。
<map name="Elevation" type="geocentric" version="2"> <!--Add a base map of the blue marble data--> <image name="bluemarble" driver="gdal"> <url>c:/data/bluemarble.tif</url> </image> <!--Add SRTM data--> <elevation name="srtm" driver="gdal"> <url>c:/data/SRTM.tif</url> </elevation></map>
这个earth file有基础层image:bluemarble,以及一个从本地加载 的GEOTIFF文件作为高程网格。
Earth 文件可以添加任意的高程数据,他们将通过osgEarth结合在一起。高程图像的数据指定顺序也是很重要的,例如,如果你有一个基地海拔的数据源,低分辨率覆盖整个世界和一个高分辨率的科罗拉多州丹佛市的插图,必须先指定低分辨率的数据,然后才是高分辨率数据。
多数驱动在osgEarth支持阅读heightfields以及图像。但是,重要的是要注意,只有16位和32位数据源可以作为heightfield数据源使用。
SRTM(Shuttle Radar Topography Mission,可以参考国际科学数据服务平台)由美国太空总署(NASA)和国防部国家测绘局(NIMA)联合测量。2000年2月11日,美国发射的“奋进”号航天飞机上搭载SRTM系统,共计进行了222小时23分钟的数据采集工作,获取北纬60度至南纬60度之间总面积超过1.19亿平方公里的雷达影像数据,覆盖地球80%以上的陆地表面。 SRTM系统获取的雷达影像的数据量约9.8万亿字节,经过两年多的数据处理,制成了数字地形高程模型(DEM),即现在的SRTM地形产品数据。此数据产品2003年开始公开发布,经历多修订,目前的数据修订版本为V4.1版本。该版本由CIAT(国际热带农业中心)利用新的插值算法得到的SRTM地形数据,此方法更好的填补了SRTM 90的数据空洞。插值算法来自于Reuter et al.(2007)
SRTM地形数据按精度可以分为SRTM1和SRTM3,分别对应的分辨率精度为30米和90米数据(目前公开数据为90米分辨率的数据)。
SRTM的数据组织方式
每5度经纬度方格划分一个文件,共分为24行(-60至60度)和72列(-180至180度)。文件命名规则为srtm_XX_YY.zip,XX表示列数(01-72),YY表示行数(01-24)。示意图如下:
Earth文件索引
前面有一个简单例子
<map name="MyMap" type="geocentric" version="2"> <image name="bluemarble" driver="gdal"> <url>/data/world.tif</url> </image></map>
map标签
属性
与上面例子对应,map属性有3种,如下
name可读的地图名称可选type读取地图类型: geocentric for round-earth (默认), projected for flat-earth (默认: geocentric)可选version指定earth文件格式的版本. 使用osgEarth 2.x. 那版本号就是“2”必须其中第二个属性type指明了读取的地图类型,Osgearth能够识别或者读取2种方式的地图:
- Geocentric: 如果地图类型属性是geocentric(地心的),round(圆形的), globe(球体的) 或者是earth(地球),那么这个地图就是一个完整地球形状的。请注意只有以地心为坐标的墨卡托模型才能被呈现成一个地心坐标的球体。
- Projected:如果地图类型属性是Projected或者是平面(flat)的,那么这个地图就是一个平面投影的样子,这个类型的map在投影坐标系统中是非常有用的,比如UTM。当然了墨卡托模型和整个地球也是可以用这种类型的map来表现的,比如2D制图应用程序。
地图模型和投影:墨卡托投影、高斯克吕格投影、UTM投影介绍见博客地图投影
map子元素
例子
<map name="earth" type="geocentric" version="2"><options>...</options><image ...></image><elevation...></elevation></map>
options标签
Compositor标签
示例 选项:地形(terrain)
<map><options><terrain><compositor>multitexture</compositor></terrain>...</options>...</map>
驱动Driver
有图像驱动、高程驱动、模型驱动
一、图像/高程图层驱动
二、模型驱动(Model Driver)
模型驱动程序采集数据,并创建地形上可以放置的节点。这些可能是”褶皱”层,也可以是三维模型。
Feature GeometryOSG的几何渲染矢量数据 Feature Stencil使用模板缓冲技术褶皱化地形矢量数据 Simple加载外部模型,并放置在场景图使用Feature_geom驱动的模型子节点,可以建立矢量特征数据的OSG几何形状
驱动程序可以简单的将矢量数据嵌合进几何图形中,同时会有一个可选择的高度偏移(这样你可以将几何图形放置于地形上),将来它将支持足迹挤压,纹理化和其他一些功能。
Feature_geom驱动模型
结构如下
<features>描述要渲染的特点必须<style>定义矢量数据的整体外观可选<class>定义一个或多个要素类的功能分类可选<max_triangle_size>指定一个三角形边的最大长度,角度。仅适用于geocentric型地图。可控制几何图形的细分曲面,使大型的形状可以更好地符合地球椭球的形状可选默认="5.0"<feature_name>每个功能的表达式解析。名称在osg::Geometry中设置
示例Feature_geom.earth
<map name="Feature Geometry Demo" type="geocentric"><image name="world" driver="gdal"><url>../data/world.tif</url></image><model name="states" driver="feature_geom"><!-- 设置OGR feature 驱动读取shapefile --><features name="states" driver="ogr"><url>../data/usa.shp</url></features><!-- Sets the name property on each geometry to the value of the "name" attribute --><feature_name>[name]</feature_name><!-- 外观细节--><style type="text/css">states {stroke: #ffff00;stroke-width: 1.0;altitude-offset: 1000;}</style></model><lighting>false</lighting></map>
Feature Stencil model driver特征模板模型驱动
Earth文件结构比较复杂,仅说明到这来,请参考osgEarth用户手册。
- Archie osgEarth Step By Step②Earth File分析
- Archie osgEarth Step By Step②Earth File分析
- Archie osgEarth Step By Step③tif及geotiff文件格式简明分析
- Archie osgEarth Step By Step③tif及geotiff文件格式简明分析
- Archie osgEarth Step By Step ⑤OsgEarth开发指南——使用osgearth API编程动态建立地图
- Archie osgEarth Step By Step ⑤OsgEarth开发指南——使用osgearth API编程动态建立地图
- Archie osgEarth Step By Step④地图投影类型——墨卡托投影、高斯克吕格投影、UTM投影
- Archie osgEarth Step By Step④地图投影类型——墨卡托投影、高斯克吕格投影、UTM投影
- Archie OSG Step By Step④ MFC+OSG添加事件
- Archie OSG Step By Step⑤ 显示位置及拾取
- Archie OSG Step By Step⑥ 对象选取
- Archie OSGStep By Step① 绘制简单多边形
- Archie OSG Step By Step③ OSG+VS2010+MFC单文档程序框架构建
- Archie OSG Step By Step( 0) -OpenSceneGraph环境设置及第一个程序
- osgEarth Step By Step①我的第一个osgEarth程序
- osgEarth Step By Step①我的第一个osgEarth程序
- Archie OSGStep By Step② 写入OSG场景图形到文件(从文件读取OSG场景图形)
- NHibernate Step by Step
- rails+mysql环境
- 怎样编写出优雅代码
- 自己用
- JAVA RandomAccessFile 类
- 杭电ACM 2036 改革春风吹满地
- Archie osgEarth Step By Step②Earth File分析
- SAP HANA HDB 命令
- 金山软件宣布王育林为旗下子公司金山云总裁
- 2013微软WP系统或与安卓、iOS成三足鼎立
- java mail学习笔记4——Message类详解
- 项目管理入门
- 《vi和vim》 学习手记(2)
- My First Plug-in - Inventor API .NET 开发从0开始-课程4
- Latex 图片 表格 公式