在①中介绍了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子元素
<options> | 配置地图和所有的地形引擎的运行时行为。 | 可选optional |
<image> | 图像图层。随着osgearth的合成器compositor使用,你的电脑硬件将决定<image>层可以显示的最大数量。 | 可选 |
<elevation> | 高层图层. 不同大小和分辨率的高层图层可以堆叠。Osgearth对于高层图层的数量没有仿真限制 | 可选 |
<model> | 一个模型的数据源(例如,功能,数据,外部模型) | 可选 |
<overlay> | 地形褶状几何层 | 可选 |
例子
<map name="earth" type="geocentric" version="2">
<options>
...
</options>
<image ...>
</image>
<elevation...>
</elevation>
</map>
options标签
Compositor标签
Auto | 这种模式是默认的。osgEarth会自动选择一个基于图形硬件的构图方法。 | |
multitexture | ||
texture_array | ||
multipass | ||
示例 选项:地形(terrain)
<map>
<options>
<terrain>
<compositor>multitexture</compositor>
</terrain>
...
</options>
...
</map>
驱动Driver
有图像驱动、高程驱动、模型驱动
一、图像/高程图层驱动
AGGLite | 将数据栅格化成若干图像片 | |
ArcGIS | 从ESRI ArcGIS 地图服务系统或者网上ArcGIS服务读取图像数据 | |
Composite | 融合多层<image>层使之成为一个本地图像层 | |
GDAL | 支持大量带地理参考的影像和高程数据(包括GeoTIFF) | |
OSG | 使用 OpenSceneGraph 图片reader/writers 来读取那些非地理参考的图像比如jpeg格式的图片 | |
TileCache | Reads image tiles from a MetaCarta TileCache cache folder | |
TileService | 从NASA WorldWind TileService库读取图像片 | |
TMS | 从OSGeo TileMapService库读取图像片 | |
WCS | 从OGC Web Coverage Service 读取图像片 | |
WMS | 从OGC Web Mapping Service 读取图像片 | |
VPB | 融合 VirtualPlanetBuilder地形 | |
二、模型驱动(Model Driver)
模型驱动程序采集数据,并创建地形上可以放置的节点。这些可能是”褶皱”层,也可以是三维模型。
Feature Geometry | OSG的几何渲染矢量数据 | |
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用户手册。