osgEarth数据加载及组织解析
osgEarth数据加载及组织解析 1.osgEarth的数据加载流程 由前文可知,用户可以使用osgEarth自己的earth文件,简单指定各种数据源,而不用关心数据如何渲染,便能在三维球上显示各种地形数据。本节,将会解读osgEarth如何解析earth文件,利用用户提供的数据源,来构建三维球上的各种地形。 图3.1所示是加载数据的整体流程,本节将就这四个步骤进行具体的解读。
读取earth文件
分解Conf属性构建map对象根据map对象及options对象,创建mapNode节点记录数据属性、渲染属性的Confmap对象options对象
mapNode节点将mapNode节点加入场景图中,通过分页LOD动态调度进行组织渲染
拥有地形的三维
场景
图3.1 osgEarth数据加载整体流程 1.1 读取earth文件 osgEarth继承了OSG的插件机制,所以osgEarth提供了专门读取earth文件的osgdb_earth插件。通过查找并调用此插件,达到读取earh文件的目的。图3.2展示了查找读取earth插件的具体流程: Registry.hReadFile.cppreadNodeFile()
Registry.hReaderWriter::ReadResult readNode()
options->getReadFileCallback()
_readFileCallback.valid()Registry.cpp
readNodeImplementation()ReadNodeFunctor(fileName, options)
readImplementation()read(readFunctor)
doRead(ReaderWrit
er& rw))
根据文件名构建ReadNodeFunctor仿函数,具体的读取函数由ReadNodeFunctoR.doRead()完成
ExampleResources.cppMapNodeHelper::load()ReadFile.hreadNodeFile(filename,Registry::instance()->getOptions())
会根据文件后缀名来查找读写插件,然后调用readFunctor.doRead(*itr)实现文件读取。
图3.2 查找读取earth插件的具体流程 这个具体流程展示了osgEarth如何找到读取earth的插件——osgdb_earth.dll。这个流程其实也是osg插件机制中的具体流程,主要在read函数中根据文件后缀名查找读写插件,查找策略见前文2.1.3的OSG插件机制,找到插件后便根据文件名构建ReadNodeFunctor的仿函数,然后调用doRead()函数来具体读取。 无论读取earth文件,还是读取影像数据、高程数据或一般的文字,都是这样一个流程,通过找到具体插件后调用插件里的doRead函数。 在osgdb_earth中,主要就是将earth文件中的内容转换成后面构造map需要的conf对象。图3.3展示了一个包含标签比较全面的earth文件,图3.4为转换后的conf结果结构图: 图3.3 普通earth文件内部代码 图3.4 earth文件转换后的conf对象结构图 如图所示,将earth文件中的标签转换成就conf对象就是将标签语言的嵌套转换成父子关系,然后每个对象包含自己的属性值。
1.2 构建map 由上一节可知,通过earth插件,将earth文件中的数据属性,渲染属性等构成conf对象。接下来,就是根据这些属性,来构造一个包含影像、高程、模型等的map。图3.5展示了osgEarth构造map流程: EarthFileSerializer2.cppdeserialize()
Config
imagemodelElevation/ heightfieldoverlaymaskimages 为XML文件中的所有image元素ConfigSet images = conf.children( "image" );遍历
layerDriverConf
map.cpp
ImageLayer.hImageLayerOptions
ImageLayer
MaplayerDriverConf为XML一条元素中的所有属性集
addImageLayer()ElevationLayer.hElevationLayerOptionsElevationLayeraddElevationLayer()
ConfigSet heightfields =conf.children("elevation" );遍历layerDriverConf
ConfigSet models = conf.children( "model" );遍历
layerDriverConf
ConfigSet overlays = conf.children( "overlay" );遍历
layerDriverConf
ConfigSet masks = conf.children( "mask" );遍历layerDriverConf
ModelSourceLayer.h
ModelSourceOptions
ModelSourceLayer
MaskLayer.hMaskLayerOptions
MaskLayer
addModelLayer()addTerrainMaskLayer()Default_tile_size 256
Default_tile_size 16
图3.5 通过属性构造map对象 由图可知,此时构造的map,并没有实际的读取数据,仅仅是将从earth文件中获取的conf对象属性进行分类,构造了一个逻辑map,主要指定了map包含什么图层,每个图层的名字、数据源和所需driver插件。
1.3 构建mapNode 这一步将是加载数据中的重点。在这一步,将会通过上一步获取的map对象及options对象,调用具体的driver插件,来构成地形节点。 构建mapNode的过程可以分为两步,第一步是在osgViewer(OSG最基本的场景图形浏览器,osgEarth最基本的场景图形浏览器是在osgViewer基础上改进的osgEarth_viewer,其主要是加载组织地形数据等,核心渲染功能还是osgViewer)渲染前的预处理,主要在地形引擎的preInitialize()中完成。osgEarth2.4的默认地形引擎为MpterrainEngineNode,所以一般是在MpterrainEngineNode::preInitialize()中完成第一步。这其中,主要完成地形节点的初步框架构建,及底图影像的加载。如图3.6所示
创建mapNode节点创建地形节点创建模型节点创建overlay模型节点
加载底图影像属性 图3.6 构建mapNode第一步逻辑 第二步便是在osgviewer开始渲染,创建漫游,相机开始添加场景时,进行后续的添加,并使用TileKey管理构建四叉树组织。此时根据视点范围及距离,通过OSG的PagedLOD分页机制,动态调度选择加载区域瓦片节点。关于数据如何按四叉树进行组织,分页LOD如何动态调度选择加载数据将在后文进行详细解读。此处主要关注构建mapNode的流程和最后mapNode的逻辑节点树。如图3.7所示。
创建地形节点
创建第一层TileKey
创建根节点创建瓦片模型
影像图层:以设置纹理贴图
高程图层以分页lod加入瓦片模型
图3.7 构建mapNode第二步逻辑 下面便来解读每一步的详细流程。 TerrainEngineNode.cpp MapNode.cpp
MapNode.cpp
此时MapNode节点结构osgearth::MapNode : public osg::Group
_terrainEngineContainer = new osg::Group();_terrainEngineContainer->setDataVariance( osg::Object::DYNAMIC );this->addChild( _terrainEngineContainer.get() );
osg::Group()
地形引擎需要一个Container来设置光照状态,而不能直接在引擎上来设置
_terrainInterface = new Terrain( this, map->getProfile(), map->isGeocentric() );
_map->getProfile()->getSRS()->populateCoordinateSystemNode( this );根据_map的空间参考坐标系设置的TerrainEngineNode的坐标系和椭球模型,其中WKT及PROJ4等有默认值
osgEarth:MPTerrainEngineNodeosg::Group()osg::Group()
******
开启一个地形功能界面模型节点Overlay模型节点
地形节点
MapFrame mapf(map, Map::IMAGE_LAYERS);_texCompositor->applyMapModelChange( MapModelChange( MapModelChange::ADD_IMAGE_LAYER, mapf.getRevision(), mapf.getImageLayerAt(i), i ) );首先加入事先存在的影像图层,即底图,此处调用image的driver进行加载数据,主要是因为在applymapModelChange函数中,首先getProfile,因影像先未进行初始化,故需调用相应driver去读取数据信息,获取其profile。
开始只是球体与底图显示,所以此时只用添加底图
_map->addMapCallback( new TerrainEngineNodeCallbackProxy( this ) )注册回调函数,这样就够处理map模型改变的事件
开启背面剔除获取状态设置属性和模式增加Uniform cameraElevationUniform获取Osgearth_ImageLayerAttenuation 并设置
// 创建模型节点:_models = new osg::Group();_models->setName( "osgEarth::MapNode.modelsGroup" );addChild( _models.get() );
// 创建overlay模型节点:_overlayModels = new osg::Group();_overlayModels->setName( "osgEarth::MapNode.overlayModelsGroup" ); // 创建overlay models decorator_overlayDecorator = new OverlayDecorator();addTerrainDecorator( _overlayDecorator.get() );
ArcGIS地理信息系统空间分析实验教程PPT-第3章 空间数据的采集与组织解析
图3.1 新建sharpfile菜单操作
图3.2 新建sharpfile要素选择设定操作
在Spatial Reference属性对 话框中,通过Select按钮、Import 按钮或New按钮定义Shapefile的坐 标系统。
第三章 空间数据的采集与组织
主要内容
• • • • 3.1 3.2 3.3 3.4 Shapefile文件的创建 Coverage文件创建 Geodatabase数据库创建 数据编辑
3.1 Shapefile文件的创建
3.1.1 创建新的Shapefile和dBASE表
1.创建新的Shapefile
图3.3 定义sharpfile的坐标系统
2.创建新的dBASE表
在ArcCatalog目录树中,右键单击需要创建dBASE表 的文件夹,单击New,再单击dBASE表,为其输入一个名称, 并按回车键。
3.1.2 添加或删除属性
在ArcCatalog中,可通过添加、删除属性项来修改 Shapefile和dBASE的结构。 在Shapefile Properties对话框中的Fields标签中添 加属性项。 删除属性项,只需选中需删除的属性项,在键盘上按 Delete键,即可。
图3.7 新建Coverage操作
2. 创建新的INFO表
在Define INFO Table对话框中输入新表的名 字 、选择数据类型等。
图3.8 新建INFO表操作
3.2.2 建立拓扑
在ArcCatalog目录树中, 右键单击需要建立拓扑关系 的Coverage,单击 Properties命令,打开 Coverage Properties对话框 ( General选项卡),在 Feature classes中,选择需 要建立拓扑关系的地理要素 类。
ArcGISEarth数据加载
ArcGISEarth 数据加载ArcGISEarth 数据加载
数据是GIS 的⾎液,没有丰富的、准确的、实时的数据,再好的软件也是空壳。
Google Earth 之所以流⾏,主要是因为它的数据源丰富、更新及时、分辨率⾼。
ArcGIS Earth 默认包括底图和地形图,ESRI 也发布很多类别的地图服务,也可以加载⾃定义的地图。
两种数据类别
第⼀类,底图,默认包括各种样式的中国地图。
与ArcMap 、ArcGIS Pro 中的底图为同⼀数据源,来⾃于捷泰天域公司发布的服务,因此,加载速度还⾏。
在ArcGIS 的map viewer 上也可以看到同⼀底图数据。
第⼆类,地形数据。
有了它,我们才能看到三维⽴体的效果。
三种数据源
除了默认数据,我们可以加载⾃定义的专题数据,包括:
⼀、来⾃于ArcGIS Online 的在线数据,相当丰富,只是速度不佳。
⼆、本地⽂件数据,⽀持多种⽮量格式。
三、在线URL ,添加各种在线服务地址。
osgearth 瓦片 格式
osgEarth 是一个开源的地理信息系统(GIS)框架,旨在提供高性能的地球可视化和地理数据处理功能。
它使用地球瓦片来呈现地球表面的图像和地理信息。
地球瓦片是指将地球表面分割成矩形瓦片网格,并使用不同级别的细节来表示不同的缩放级别。
每个瓦片都是一个独立的图像,可以根据需要加载和显示。
瓦片格式通常使用标准的图像格式,如JPEG、PNG或TIFF。
osgEarth 原生支持许多常见的瓦片数据源,如WMS、TMS、WMTS等。
osgEarth 支持的瓦片格式有以下几种:1.JPEG(Joint Photographic Experts Group)是一种常见的无损压缩格式,可以提供较高的图像质量和较小的文件大小。
JPEG 格式的瓦片适用于需要高质量图像,并且具有较高带宽的应用场景。
2.PNG(Portable Network Graphics)是另一种常见的无损压缩格式,适用于需要透明背景或对图像颜色准确性要求较高的应用场景。
PNG 格式的瓦片可以保持图像的细节和质量,并提供与 JPEG 相当的压缩率。
3.TIFF(Tagged Image File Format)是一种无损压缩和存储高质量图像的格式,支持多种颜色模式和像素深度。
TIFF 格式的瓦片适用于需要存储和处理大型地理数据、卫星图像等的应用。
osgEarth 还支持许多其他的瓦片数据源和格式,如Google Maps、Bing Maps、OpenStreetMap 等。
用户可以根据自己的需求选择适合的瓦片格式来显示地球表面的图像和地理信息。
osgEarth 提供了灵活的配置选项和接口,使用户可以轻松地与不同的数据源集成,并根据自己的需求进行定制和扩展。
总之,osgEarth 是一个强大的地理信息系统框架,通过支持多种瓦片格式和数据源,为用户提供了高性能的地球可视化和地理数据处理功能。
用户可以根据自己的需求选择合适的瓦片格式,并通过 osgEarth 的丰富功能和灵活接口实现自定义的地理信息处理和可视化效果。
osgearth 高度系数
osgearth 高度系数摘要:1.OSGeo 简介2.OSGearth 项目概述3.OSGearth 高度系数的定义与计算方法4.OSGearth 高度系数的应用5.总结正文:1.OSGeo 简介OSGeo(Open Source Geospatial Foundation)是一个致力于地理信息系统(GIS)开源软件发展的非营利组织。
该组织成立于2006 年,旨在为地理信息科学和空间数据处理领域提供高质量、可信赖的开源软件。
OSGeo 的成员包括开发者、用户、研究者和企业家,他们共同推动GIS 技术的创新和发展。
2.OSGearth 项目概述OSGearth 是一个由OSGeo 基金会支持的开源地理信息系统项目。
该项目旨在为地球科学、环境监测、城市规划等领域提供免费的GIS 软件。
OSGearth 项目包括多个模块,例如数据处理、可视化、分析和地图制图等,用户可以根据需求进行自由组合和定制。
3.OSGearth 高度系数的定义与计算方法OSGearth 高度系数(Elevation Coefficient)是OSGearth 项目中一个重要的参数,用于描述地形高程数据的精度。
高度系数的计算方法如下:首先,根据地理坐标(经度和纬度)获取该地点的平均海拔高度。
其次,通过高程数据计算该地点的实际海拔高度。
最后,将实际海拔高度与平均海拔高度相除,得到高度系数。
4.OSGearth 高度系数的应用OSGearth 高度系数在地理信息系统中有广泛的应用,例如:(1)地形分析:通过比较不同地点的高度系数,可以评估地形的陡峭程度,分析山地、平原和丘陵等地貌类型。
(2)洪水风险评估:利用高度系数可以预测洪水发生的可能性,为防洪工程提供参考依据。
(3)生态保护:高度系数可以用于评估生态系统的健康状况,为生物多样性保护提供依据。
(4)城市规划:在城市规划中,高度系数可以用于评估土地使用效率,优化城市空间布局。
5.总结OSGearth 高度系数是OSGeo 基金会支持的开源地理信息系统项目中的一个重要参数,具有广泛的应用前景。
[原][osg][osgearth]倾斜摄影2.文件格式分析:OSGB
[原][osg][osgearth]倾斜摄影2.⽂件格式分析:OSGB
倾斜摄影三维模型格式包含:*.osgb,*.dae等
⽂件格式包含:*.xml, *.desc, *.lfp等
例如:LocaSpace Viewer软件把osgb分块模型⽂件建⽴索引⽣成⼀个lfp⽂件,该lfp⽂件包含三维模型所在的经度、纬度、⾼度值,便于倾斜摄影三维模型在地球上进⾏定位。
osgb节点内部关系:
MatrixTransform (通过ProxyNode关联PageLod)
||
PageLod
||
PageLod
||
PageLod
||
PageLod
.....
||
PageLod
||
Group
/ | | \
PageLod PageLod PageLod PageLod
| | | |
Geode Geode Geode Geode
通过查看每个osgb数据的名称,我们可以发现有的数据带有t1、t3这样的后缀,这是说明这层LOD的下⾯有两个节点、四个节点,⼀个001_001⽂件下⾯有个主⽡⽚模型,每个主⽡⽚可以看做是⼀个主节点,下⾯以树的⽅式组织整个数据,从相应的osgt⽂件中可以看出,每个osgb⽂件中都有⼀个pageLOD节点,⽤来索引下⼀层LOD。
geodata数据加载方式 小内存模式和标准模式
# geodata数据加载方式:小内存模式和标准模式## 1. 介绍地理数据是我们生活中不可缺少的一部分,随着技术的发展,地理信息系统(GIS)的应用越来越广泛。
而在GIS中,geodata的加载方式也是至关重要的一环。
在本文中,我们将探讨geodata数据加载方式中的小内存模式和标准模式,并比较它们各自的优缺点。
## 2. 小内存模式小内存模式是一种基于内存的数据加载方式,它将数据直接加载到内存中进行处理。
这种方式相对于标准模式来说,对计算机的内存要求较低,能够在较小的内存空间中完成数据的加载和处理。
### 2.1 优点- 节约内存:小内存模式能够在有限的内存空间中加载大量的地理数据,适用于内存资源有限的设备。
- 加载速度快:由于数据直接加载到内存中,所以小内存模式在加载数据时速度较快。
### 2.2 缺点- 数据量限制:由于是基于内存的加载方式,所以能够加载的数据量受到内存大小的限制,较大的地理数据可能无法完全加载到内存中进行处理。
- 性能损耗:对于较大的数据量,小内存模式在处理性能上可能会受到一定影响,因为需要不断地进行内存交换操作。
## 3. 标准模式相对于小内存模式,标准模式是一种更加灵活的数据加载方式。
它不再将数据全部加载到内存中,而是通过分块加载的方式,在需要的时候动态加载数据,以降低内存的占用。
### 3.1 优点- 适用于大数据量:标准模式能够处理较大的地理数据,因为数据并不需要一次性加载到内存中,而是根据需要进行动态加载。
- 内存占用低:由于数据并不全部加载到内存中,所以标准模式在内存占用上要优于小内存模式。
### 3.2 缺点- 加载速度相对较慢:相对于小内存模式来说,由于需要动态加载数据,所以标准模式在加载速度上可能会稍慢一些。
- 对内存要求较高:虽然在内存占用上要优于小内存模式,但对于内存资源较少的设备来说,标准模式仍然可能会面临内存不足的问题。
## 4. 小结小内存模式和标准模式各有优缺点,选择合适的加载方式需要根据具体的场景和需求来进行权衡。
geodata数据加载方式 小内存模式和标准模式
geodata数据加载方式小内存模式和标准模式Geodata数据是指地理数据,如地图、地理位置、地点信息等。
在加载Geodata数据时,可以使用小内存模式和标准模式两种方式。
小内存模式是一种适用于内存有限的设备或应用程序的加载方式。
它通过对数据进行压缩和优化,以减少内存的占用。
在小内存模式下,数据通常以较低的分辨率加载,以降低存储和计算成本。
这种加载方式适用于移动设备、低配置的终端或对数据精度要求不高的应用场景。
在小内存模式下,数据可以进行以下优化和压缩操作:1. 简化几何形状:通过减少节点数或使用近似算法,可以压缩几何形状的数据,从而降低内存的使用。
2. 压缩纹理贴图:对于需要加载大量纹理贴图的场景,可以使用压缩算法对纹理数据进行压缩,从而减少内存占用。
3. 使用数据流:将数据分散加载,只在需要时加载,并在不需要时释放,有效地减少内存的使用。
4. 数据分割:根据地理区域、层级或其他特征,将数据进行分割加载,使得只加载当前需要的部分数据,提高加载效率。
标准模式是一种适用于大内存设备或高要求应用程序的加载方式。
在标准模式下,数据以全分辨率加载,保留了所有细节和精度,提供更高的数据质量和更好的用户体验。
这种加载方式适用于高端终端、大规模数据分析或对数据精度要求较高的应用场景。
在标准模式下,数据可以进行以下操作:1. 加载全部数据:将所有数据以全分辨率加载到内存中,从而提供更高的渲染效果和更精确的地理位置。
2. 高质量纹理贴图:在保留所有细节的同时,使用高质量的纹理贴图,提供更逼真的地图效果。
3. 优化计算算法:针对大规模数据的计算,采用高效的算法和数据结构,提高计算效率和处理速度。
4. 数据索引和缓存:针对常用的数据查询和操作,通过建立索引和缓存机制,提高数据访问的效率。
综上所述,小内存模式和标准模式是两种不同的Geodata数据加载方式,适用于不同的应用场景和设备要求。
小内存模式通过压缩和优化数据,降低内存占用;标准模式以全分辨率加载数据,提供高质量和高精度的地理数据。
osgearth 参数
osgearth 参数
osgEarth是一个用于地理信息系统(GIS)的开源软件库,它使用OpenSceneGraph(OSG)作为其3D引擎。
osgEarth提供了许多参数来配置和定制其功能和行为。
以下是一些常见的osgEarth参数:
1. 模型位置:使用`url`字段表示模型的位置路径。
2. 视点图层:使用`viewpoints`关键字来表示,包含了`name`、`heading`、`lat`、`long`、`height`、`pitch`和`range`七个参数,分别表示图层名称、
方位角、位置纬度、经度、高度、俯仰角、范围。
3. 挤压符号:用于创建3D形状的挤压几何,例如从源矢量数据中挤压2D
向量。
4. 图标符号:描述二维图标的外观,常用于点替换,用图标代替几何模型。
5. 模型符号:描述外部的3D模型。
请注意,上述参数只是一部分osgEarth提供的参数,并不详尽无遗。
您应
该参考osgEarth的官方文档或源代码以获取完整的参数列表和详细说明。
osgearth gdalelevationlayer用法
osgEarth GdalElevationLayer用法简介osgEarth是一个用于地理空间可视化的开源工具包,它结合了OSG (OpenSceneGraph)和GDAL(Geospatial Data Abstraction Library)等库的功能,提供了一套强大的地理空间数据处理和可视化工具。
其中,GdalElevationLayer是osgEarth中用于处理高程数据的图层类。
本文将介绍osgEarth中GdalElevationLayer的用法,包括如何创建图层、加载高程数据、设置图层参数以及与其他图层的组合等。
创建图层在osgEarth中,可以通过以下代码创建一个GdalElevationLayer图层对象:osgEarth::Drivers::GdalElevationOptions options;options.url() = "path/to/elevation.tif";osgEarth::GdalElevationLayer* elevationLayer = new osgEarth::GdalElevationLaye r(options);在上述代码中,首先创建了一个GdalElevationOptions对象,用于设置图层的参数。
其中,url()方法用于设置高程数据文件的路径。
然后,利用这个参数对象创建了一个GdalElevationLayer对象。
加载高程数据osgEarth中的GdalElevationLayer支持多种高程数据格式,包括GeoTIFF、DTED 和SRTM等。
可以通过设置url()方法指定高程数据文件的路径,也可以通过设置profile()方法指定高程数据的坐标系。
下面是一个加载GeoTIFF格式高程数据的示例代码:osgEarth::Drivers::GdalElevationOptions options;options.url() = "path/to/elevation.tif";osgEarth::GdalElevationLayer* elevationLayer = new osgEarth::GdalElevationLaye r(options);osgEarth::Map* map = new osgEarth::Map();map->addLayer(elevationLayer);在上述代码中,首先创建了一个GdalElevationOptions对象,并设置了高程数据文件的路径。
osgearth嵌入qt的实现方式
osgearth嵌入qt的实现方式osgEarth是一个基于开源地理信息数据源的3D地球可视化引擎,它使用OpenGL来渲染高质量的地球表面,并且允许用户跨平台、快速开发并拓展新的地球可视化应用程序。
Qt是一个跨平台的应用程序框架,它允许您以C++代码开发高性能、本地主题和易于使用的GUI应用程序。
osgEarth可以通过嵌入qt实现地球可视化在Qt应用程序中的集成。
本文将介绍如何将osgEarth嵌入到Qt应用程序中的实现方式。
主要包括以下几个方面:1.安装和配置osgEarth和Qt要将osgEarth嵌入到Qt应用程序中,首先需要安装和配置好osgEarth和Qt库。
这里不再介绍如何安装和配置这两个库,读者可以自行搜索相关教程进行学习。
2. 创建Qt窗口在Qt中创建一个窗口,可以在Qt Designer中完成,并使用Qt Creator进行编辑和添加相应的代码。
3. 配置osgEarth在Qt应用程序中运行osgEarth需要进行以下配置:3.1创建osgEarth::Map对象创建osgEarth::Map对象是展示地图的第一步。
osgEarth::Map对象加载地理数据源,i.e. imagerylayers, elevation layers, and other geospatial information. The simplest usage of Map involves loading a single layer like an OpenStreetMap service layer.osgEarth::Map对象是一个单例,重新加载地图只需要在原来Map对象的基础上添加新的地图服务即可。
3.2 创建osiEarth::Viewer对象Viewer对象是地球全局显示的对象。
一次显示经纬度为180°至-180°,纬度为90°至-90°地球的最基本配置包括:- 创建视口(viewport) - 创建相机(camera) - 创建场景图(scene graph)通过以上三点,地球才能正常渲染。
