OSGEarth学习
osgearth gdalelevationlayer用法
osgearth gdalelevationlayer用法osgEarth是一个用于渲染和将地理空间数据可视化的C++开源库。
osgEarth的GDALElevationLayer是osgEarth中用于加载和显示基于GDAL库的栅格高程数据集的图层。
要使用GDALElevationLayer,首先需要在osgEarth应用程序中包含以下头文件:```cpp#include <osgEarth/GDAL>```然后,可以创建一个GDALElevationLayer对象并将其添加到osgEarth的地图图层中。
以下是一个使用GDALElevationLayer 的示例代码:```cpp#include <osgEarth/GDAL>#include <osgEarth/Map>#include <osgEarth/MapNode>#include <osgViewer/Viewer>int main(){// 初始化osgEarthosgEarth::GDAL::Register();// 创建一个地图对象osgEarth::Map* map = new osgEarth::Map();// 创建一个GDALElevationLayer对象osgEarth::GDALElevationLayer* elevationLayer = new osgEarth::GDALElevationLayer();// 设置GDALElevationLayer的属性,例如数据集路径、最小、最大高程等elevationLayer->setURL("path_to_elevation_dataset.tif");elevationLayer->setMinValidValue(0.0);elevationLayer->setMaxValidValue(1000.0);// 将GDALElevationLayer添加到地图中map->addLayer(elevationLayer);// 创建一个地图节点osgEarth::MapNode* mapNode = newosgEarth::MapNode(map);// 创建一个OSG查看器osgViewer::Viewer viewer;// 设置查看器的根节点为地图节点viewer.setSceneData(mapNode);// 运行查看器主循环return viewer.run();}```上述示例代码中,首先通过调用osgEarth::GDAL::Register()函数来初始化osgEarth中的GDAL支持。
osgearth_conv 用法
osgearth_conv 用法关于osgearth_conv 的用法osgearth_conv 是一个开源的命令行工具,用于在OpenSceneGraph 环境中进行地理数据转换和处理。
它提供了丰富的功能和选项,使用户能够灵活地处理地理数据以支持各种地理可视化和分析应用。
本文将一步一步地回答关于osgearth_conv 的用法。
一、安装osgearth_conv要使用osgearth_conv,首先需要安装OpenSceneGraph 和OsgEarth。
OpenSceneGraph 是一个高性能的、跨平台的3D 编程工具包,而OsgEarth 是基于OpenSceneGraph 的地理可视化工具包。
安装这两个工具包后,就可以使用osgearth_conv 了。
二、osgearth_conv 的基本用法osgearth_conv 的基本用法如下:osgearth_conv input_file [options]其中,input_file 是输入的地理数据文件路径,而options 表示一些可选的参数和选项。
三、地理数据格式支持osgearth_conv 支持多种地理数据格式,包括常见的地理信息系统(Geographic Information System,简称GIS) 格式如Shapefile、GeoJSON、KML 等,以及常用的栅格数据格式如GeoTIFF、JPEG2000 等。
用户可以根据自己的需要选择相应的输入格式。
四、地理数据投影转换osgearth_conv 提供了投影转换的功能,用户可以将输入数据从一个坐标系转换到另一个坐标系。
例如,如果输入数据使用的是WGS84 坐标系(经纬度坐标),而用户希望将其转换为投影坐标系,可以使用如下命令:osgearth_conv input_file in-epsg 4326 out-epsg 3857其中,in-epsg 表示输入数据的坐标系编码,4326 表示WGS84 坐标系;out-epsg 表示输出数据的坐标系编码,3857 表示Web Mercator 投影坐标系。
osgearth 法向量
osgearth 法向量
osgEarth是一个开源的地理信息系统(GIS)工具包,它基于OpenSceneGraph(OSG)和GDAL库,提供了一系列的地理信息处理和可视化功能。
其中,法向量是osgEarth中一个重要的概念,它在地形渲染和光照计算中扮演着重要的角色。
法向量是指在三维空间中,一个平面或曲面上每个点的法线方向。
在osgEarth中,地形通常是由一系列的三角形组成的,每个三角形都有一个法向量。
osgEarth使用法向量来计算地形的光照效果,以及进行地形的阴影计算。
在osgEarth中,法向量的计算是通过对地形的高度图进行采样得到的。
osgEarth提供了多种采样算法,包括最近邻采样、双线性插值、三次样条插值等。
这些算法可以根据不同的需求进行选择,以达到最优的
效果。
除了用于光照和阴影计算外,法向量还可以用于地形的平滑处理。
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 基金会支持的开源地理信息系统项目中的一个重要参数,具有广泛的应用前景。
osgEarth数据加载及组织解析
osgEarth数据加载及组织解析1.osgEarth的数据加载流程由前文可知,用户可以使用osgEarth自己的earth文件,简单指定各种数据源,而不用关心数据如何渲染,便能在三维球上显示各种地形数据。
本节,将会解读osgEarth如何解析earth文件,利用用户提供的数据源,来构建三维球上的各种地形。
图3.1所示是加载数据的整体流程,本节将就这四个步骤进行具体的解读。
图3.1 osgEarth数据加载整体流程1.1 读取earth文件osgEarth继承了OSG的插件机制,所以osgEarth提供了专门读取earth文件的osgdb_earth插件。
通过查找并调用此插件,达到读取earh文件的目的。
图3.2展示了查找读取earth插件的具体流程:图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对象。
osgearth学习文档
osgEarth::Drivers::TMSOptions Class Reference通过程序加载数据赶紧进入正题,程序加载各种数据,首先介绍一下总体的方式/*这里XXXOptions 是根据不同的数据类型选择不同驱动,比如加载本地数据可以使用GDALOptions ,加载TMS数据可以使用TMSOptions(注意TMSOptions可以加载本地也可以加载网上数据),WMSOptions可以加载网上数据(注意这个options主要加载影像和图片数据),ArcGISOptions加载ArcGIS Server发布数据。
*/osgEarth::Drivers::XXXOptions XXXLayer;/*这里就是加载的数据路径,如果加载的本地数据就是本地数据的路径,如果加载是网上数据就是相应的网址*/XXXLayer.url()=osgEarth::URI(".................................");/*加载的数据是分层管理,每加载进来一个数据在earth上就是一个数据层,这里给数据层付个名字。
*/std::string LayerName="earth";/*osgearth里layer主要有三种类型ImageLayer、ElevationLayer和ModleLayer ,前两个大家从字面就可以知道第一个是加载影像和第二个是加载高程数据的,第三个是主要用来加载shp数据,至少我是这样用的,不知道还能否加载其他数据类型。
确定加载用的驱动、数据源位置(路径)、数据层名和初始化了数据层,接下来就是把数据层加到地球中如下所示。
*/osg::ref_ptr<osgEarth::XXXLayer> layer =new osgEarth::XXXLayer(osgEarth::XXXLayerOptions(LayerName,XXXLayer));m_pMap->addImageLayer(layer.get());(1)加载本地数据a 本地影像数据,数据类型为tifosgEarth::Drivers::GDALOptions imagelayerOpt;//选择GDALOptionsimagelayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\world.tif");//影像数据路径std::string imagelayerName = "worldimage"; //影像数据层名osg::ref_ptr<osgEarth::ImageLayer> imageLayer = new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(imagelayerName ,imagelayerOpt));//初始数据层m_pMap->addImageLayer(imageLayer .get());b 本地高程数据,数据类型为tifosgEarth::Drivers::GDALOptions demlayerOpt;//使用还是GDALOptionsdemlayerOpt.url() = osgEarth::URI("E:\\vs2010Progam Files\\osgVR74\\osgVR74\\worlddem.tif");//高程数据路径std::string demlayerName = "worlddem";//高程数据层名osg::ref_ptr<osgEarth::ImageLayer> demLayer = new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(demlayerName,demlayerOpt));//初始数据层m_pMap->addImageLayer(demLayer.get());加载本地经过package 切片的数据还可以用TMSOptions,osgEarth::Drivers::TMSOptions tmsOpt;////选择TMSOptions 驱动tmsOpt.url()=osgEarth::URI("//Edvis_-1/Layer_0/tms.xml");//package切片生成金字塔文件下的xmlstd::stringDemtmslayerName="TmsDem";//图层名osgEarth::ElevationLayerOptionstmslayerOpt(DemtmslayerName,tmsOpt);osg::ref_ptr<osgEarth::ElevationLayer> TmsDemLayer = new osgEarth::ElevationLayer(tmslayerOpt);m_pMap->addElevationLayer(TmsDemLayer.get());//初始化图层并加入到地球中(2)加载网上数据a 加载ArcGIS Server 发布的数据加载方式与上面提到的类似osgEarth::Drivers::ArcGISOptions MapImageLayer;MapImageLayer.url()=osgEarth::URI("");std::string CdlayerName="worldimage";osg::ref_ptr<osgEarth::ImageLayer> cdlayer =new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(CdlayerName,MapImageLayer));m_pMap->addImageLayer(cdlayer.get());//这里注意,当osgearth访问ArcGIS Server 发布数据的时候有些问题很奇怪,用上面的方式访问ArcGIS Server 国外发布的数据没问题,但是访问自己发布的数据就会有问题,经过试验投影要设成3857才能正常访问。
osgEarth编译总结
首先在osg的编译上有一点记录一下:1 我们下载的第三方依赖3rdParty_x86_x64 这个文件对于VS2008和VS2010来说可能VS2008的提供库要全一些。
2 对于3rdParty_x86_x64文件夹下的x86和x64来说我们的系统如果是32位的应该就只能选x86 对于x64来说我们两个包都是可以选择的,据说在64位的系统上的32位程序是模拟运行的。
如果我们编译时选择直接编译。
那最好是选x86那个包。
在这次的选择中选择x64包结果编译到osgDB库的时候出现了错误。
如果想编译出来的程序只是用于x64 那么可以尝试在x64包的基础上对VS进行相关的设置,应该是不会有很大问题的。
下面主要是对osgEarth进行编译由于osgEarth没有对第三方依赖进行打包,所以我们就不得不自己进行配置相关的依赖。
首先下载源码包,我们进入官网/wiki/Downloads下载源码简单明了。
接下来我们下载第三方依赖:1 GDAL下载:/gdal/wiki/DownloadSource在这里我们选择1.8.1版本,因为在1.9.0版本使用中出现了编译不能通过的情况。
当然我们也可以自己将编译过程中出现的问题解决。
在这里我们只是为了编译GDAL“不节外生枝”下面我们来对这个库进行编译:对于这个版本有两种方法可以编译1 它里面有两个.sln,使用其中之一编译就行2 下载完GDAL的源码后,还需要先运行makegdal_gen.bat这个文件,然后打开X:\Program Files\Microsoft Visual Studio\VC98\bin\VCVARS32.BAT,X代表你VS的安装盘.打开后用cd命令切换到你GDAL的目录下执行命令,nmake /f makefile.vc MSVC_VER=1500 BUILD_DEBUG=YES,其中1500代表VS版本2008,当然你也可以进入nmake配置文件修改.文件编译完成后我们有两种不同的处理方法方法一将生成的lib dll 包括: gdal_i.lib gdal.lib cpl.lib(port目录下) ogr.lib(ogr目录下), 以及gdal17.dll 拷贝到E:\OSG\GDAL\apps下,这一种在后面的使用中会直接将这个作为cmake的应用目录(在工程中添加包含目录时会很麻烦,不推荐采用)方法二GDAL编译完成后的文件存放于C0:\warmerda\bld,包含文件include,lib,data,bin,可将它们拷贝到GDAL文件夹下,置于OSG目录下。
OSGEarth地形和影像的数据预处理
OSGEarth地形和影像的数据预处理OSGEarth是一个GIS工具,主要用来实现三维GIS的基本功能,其中最为基础当属对地形和影像的处理以及进行三维地形的构建与渲染。
下面简要说明下osgearth中对数据的要求以及数据处理的方法。
一、数据来源OSGEarth的地形和影像数据来源是以常见的地形和影像,包括各种高程数据和遥感影像数据。
osgearth中地形和影像数据主要以TIFF格式为主,其来源是测量数据、CAD数据、或者是直接从网上下载的数据。
二、数据处理OSGearth中数据必须要有坐标系。
坐标系可以是地理坐标系和投影坐标系。
当为了生成地球场景时,需要数据为地理坐标系;当生成平面场景时,数据必须为投影坐标系。
1、数据配准数据坐标存在的问题时,地形和影像数据部匹配的时候,需要进行配准。
配准:利用道路图层和jpg影像,使用georeferencing 工具选取标志性地物进行配准。
2、数据没有坐标系的情况下(可以通过ArcGIS的查看图层的坐标系),我们需要自己定义一个坐标系。
自定义一个坐标系的方法:用Arctoolbox工具中的Data Management Tools ->Projections and Transformations->Define Projection工具定义坐标系(包括投影坐标系个地理坐标系)图1 定义坐标系注意:在完全不知道坐标系的情况下,在定义坐标系时,可以随便指定一个坐标系(不管是地理坐标系还是投影坐标系都可以)。
但是如果知道了数据的坐标(比如,有的数据是CAD数据(一般是平面坐标,即是X、Y是六位和七位数组成的一个数值))。
在这中情况下,我们可以查看X、Y的坐标值,确定此数据的带号以及在定义投影坐标时是否需要做500公里的偏移处理。
(你们公司的专业GIS人员应该知道!!!)。
3、osgearth的数据需要的是投影坐标系时,而原始数据却是地理坐标系(比如,数据是从google earth或测绘部门的获得,其坐标系一般都是地理坐标系),此时需要将地理坐标系转为投影坐标系。
osgearth各个例子功能概述
osgearth各个例⼦功能概述转⾃:/wl198302/article/details/21177309最近在学习osgearth,对其还不是很理解,有些例⼦不会运⾏,有些可以,把可以的做个统计,以备后⾯查⽤。
1、osgearth_graticule:⽣成经纬线。
2、osgearth_annotation:各类标注(点、线、⾯、模型、⽂本等)。
3、osgearth_city:加载⼀个城市三维模型,可以浏览。
4、osgearth_clamp:在⼀个区域加载⽣成5000个树⽊的三维模型展⽰。
5、osgearth_colorfilter:运⾏不起来……6、osgeatth_controls:有⼀个osg的图标,可以控制透明度与⽅向。
还有⼀些⽂本矩形框之类的。
7、osgearth_demo:qt的⼀个集成地球的例⼦8、osgearth_elevation:显⽰⿏标所指位置的经纬度、坐标系、⾼程(MSL\HAE)、分辨率。
不过运⾏⾮常缓慢。
9、osgearth_featureeditor:添加⼀条线,并可以修改线的节点与颜⾊(编辑时,线的形状变为虚线段)。
10、osgearth_featurfilter:出来⼀个地球,不知道需要什么数据才能运⾏出效果。
例⼦给出的⽤途为-简单的功能过滤,改变数据源特征属性的值。
11、osgearth_featureinfo:不是界⾯程序,不知道⼲嘛的……12、osgearth_featuremanip:出现⼀个地球,没明⽩⼲嘛的……13、osgearth_featurequery:同上……14、osgearth_imageoverlay:在地图上叠加⼀张gif图⽚,并可以控制图⽚的透明度。
15、osgearth_features:代码建⽴地图,并加载各国分界线的shp数据。
16、osgearth_los:以稍稍⽔平的视⾓,显⽰飞机模型绕⼀点旋转,还有⼀些运动对象。
17、osgearth_manip:地球上⽣成⼀个⽴体的helloworld⽂字,并且可以控制⽂字⾏⾛,快速定位不同级别的视点,让⽂字始终在屏幕中央,地球滚动,很好的功能 O(∩_∩)O~18、osgearth_map:代码⽣成地球tms地图图层。
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手册
1、OSGEARTH 安装OsgEarth是一个跨平台的库,可以使用版本号为2.6.2或更新版本的Cmake 对其进行编译。
1.1、获取源码三个方法可以获取osgearth源码:Option1:使用GITosgEarth源码托管于GitHub,所以我们需要一个Git客户端。
Windows下推荐T ortoiseGit,SVN 小乌龟的Git 版本。
评价:该有的功能基本都有了,还是不错的。
备注:GitHub是一个为那些使用Git版本控制系统的项目提供基于互联网的存取服务的Git存取站点。
它是由GItHub公司(先前被称作用Logical Awesome)的开发者Chris Wanstrath, PJ Hyett, 和Tom Preston-Werner 使用Ruby on Rails写成的。
最新版本是Version 2.0,osgearth_2.0_T2011-02-24。
Option2: 下载tarballtarball是linux下最方便的打包工具,是以tar这个指令来打包与压缩的档案。
下载页面: /gwaldron/osgearth/downloadsOption3:使用版本控制SVN在您的SVN客户端上键入:/gwaldron/osgearth.git1.2、准备工作osgEarth需要第三方支持库才能编译。
所需的依赖服务如下:●OpenSceneGraph 2.8或更新的●GDAL 1.6或更新的,Geospatial Data Abstraction Layer的缩写。
是一个在X/MIT许可协议下的开源栅格空间数据转换库●CURL- HTTP transfer library,是一个利用URL语法在命令行方式下工作的文件传输工具。
可选依赖如下(没有他们,osgEarth可以运行,但将会失去一些功能):●GEOS3.2.0或更高版本-C++拓展库,这个库是用来osgEarthFeatures模块执行各种几何处理操作,如缓冲和交集。
osgEarth基础入门
osgEarth基础⼊门osgEarth基础⼊门2015年3⽉21⽇16:19osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了⽡⽚调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,TMS,VPB,filesystem等),再结合⼀套地理投影转换插件,这样就能够实现⾼效处理加载调度地理数据在三维地球上的显⽰,实现三维虚拟地球。
想要实现⼀个简单的基于osgEarth的三维地球,有两种⽅式,这两种⽅式是互通的。
⼀种基于XML标签的earth⽂件加载,另外⼀种是采⽤C++代码,本质是⼀样的,osgEarth内部⽀持直接解析XML标签⽂件,转换为代码实现,具体参考tests⽂件夹例⼦,代码则参考application 下⾯例⼦。
但是⼤多数情况下,你需要更灵活掌控性更强的代码来实现功能,因为只有⼀个加载了基础数据的三维地球是只能看,不能解决实际问题的,需要界⾯通常采⽤QT,更多的三维渲染和仿真业务则由osg来完成。
因此学好osg是做这⼀切的基础。
osgEarth的特点:⽀持加载常见的栅格数据(影像和DEM),但是⼤数据必须建⽴⾦字塔,设置为地理投影,想要⾼效率最好处理为⽡⽚,这样也便于部署在服务端。
⽮量数据,最好尽可能的简化,因为⼤的⽮量会⼗分影响渲染速度,当然也可以对⽮量栅格化处理加快速度,对于模型的话,⼤数据量⼀定要做LOD或者pageLod。
osgEarth程序的常规流程:创建osgViewer---->创建MapNode---->设置Earth操作器---->设置场景参数----->runMapNode是继承⾃osg的Node,是osgEarth中地球节点,你所添加的影像,DEM,模型都包含在MapNode中,因为它们都加⼊到Map中,Map则类似⼆维中的Map可以添加各种图层。
剩余的不管是模型节点Node,或者是标注Node,还是其他的都是可以直接添加到MapNode中或者另外的Group中。
osgearth取高程方法
osgearth取高程方法osgEarth是一个开源的地理信息系统(GIS)工具包,它提供了一种简单而强大的方法来显示和分析地球空间数据。
在osgEarth中,取得高程数据的方法是通过使用高程图层。
本文将详细介绍osgEarth中的高程图层及其使用方法。
高程图层是osgEarth中用于显示地球表面高程的一种图层类型。
它可以从各种数据源获取高程数据,如地形数据集、DEM数据等。
osgEarth支持多种高程数据格式,包括ESRI Grid、GeoTIFF、DTED 等。
用户可以根据自己的需求选择合适的高程数据源。
在osgEarth中,要使用高程图层,首先需要创建一个Map对象,并将高程图层添加到地图中。
可以使用代码如下所示:```cpposgEarth::Map* map = new osgEarth::Map();osgEarth::ElevationLayer* elevationLayer = new osgEarth::ElevationLayer();map->addLayer(elevationLayer);```接下来,需要指定高程图层的数据源。
osgEarth提供了多种数据源类型,包括本地文件、在线服务等。
例如,可以使用以下代码将高程图层的数据源设置为本地的DEM文件:```cpposgEarth::ElevationLayerOptions elevationLayerOptions; elevationLayerOptions.url() = "path/to/dem.tif"; elevationLayer->setOptions(elevationLayerOptions);```除了本地文件,osgEarth还支持从在线服务获取高程数据。
例如,可以使用以下代码将高程图层的数据源设置为NASA的SRTM数据:```cpposgEarth::ElevationLayerOptions elevationLayerOptions; elevationLayerOptions.url() = "http://elevation/nasa_srtm"; elevationLayer->setOptions(elevationLayerOptions);```在设置好高程图层的数据源后,还可以对高程图层进行一些其他设置。
osgearthsetelevation范围 -回复
osgearthsetelevation范围-回复关于osgearth.setElevation范围的一步一步解析在使用osgEarth进行地理信息系统(GIS)开发时,一个常见的需求是设置地形的高程范围。
osgEarth是一个强大的地理可视化引擎,它结合了OpenSceneGraph和地理空间数据,可以为用户提供高效、灵活的地球可视化、地图生成和地理空间分析工具。
在osgEarth中,通过osgearth.setElevation方法可以设置地形(或海底)的高程范围。
本文将一步一步地解析关于osgearth.setElevation范围的相关知识。
第一步:理解osgearth.setElevation方法的作用osgearth.setElevation方法用于设置地形的高程范围。
地形高程通常表示地球表面的海拔高度,可以用来模拟山脉、山谷、平原等地貌特征。
通过设置地形的高程范围,可以控制地形的细节和表现效果,从而实现更加真实和精细的地球模拟。
第二步:了解osgearth.setElevation方法的参数osgearth.setElevation方法接受两个参数:minElevation和maxElevation。
minElevation表示地形的最低高程,maxElevation表示地形的最高高程。
这两个参数可以指定为绝对高程值,也可以指定为离散的离地高度。
第三步:理解最低和最高高程的含义最低高程和最高高程决定了地形的高程范围。
设置最低高程可以控制地形的最低部分,比如海平面或低洼地区。
设置最高高程可以控制地形的最高部分,比如山峰或高原。
通过调整最低和最高高程的数值,可以实现对地形的局部或整体高程范围的控制。
第四步:确定合适的高程范围数值确定合适的高程范围数值需要考虑具体的需求和数据情况。
一般来说,可以通过查看地理数据源的高程信息来获取合适的数值范围。
比如,可以查看DEM(数字高程模型)数据,了解地形的高程分布情况。
osgEarth使用笔记4—加载矢量数据
osgEarth使用笔记4—加载矢量数据目录1. 概述2. 详论2.1. 基本绘制2.2. 矢量符号化2.2.1. 可见性2.2.2. 高度设置2.2.3. 符号化2.2.4. 显示标注2.3. 其他3. 结果4. 问题1. 概述前面文章加载的底图数据是一种栅格数据,还有一种很重要的地理信息表现形式是矢量数据。
在osgEarth中,这部分包含的内容还是很丰富的,这里就总结一二。
2. 详论在《osgEarth使用笔记1——显示一个数字地球》这篇文章中代码的基础之上,添加加载显示矢量的代码:1.#include<Windows.h>2.#include<iostream>3.#include<string>4.5.#include<osgViewer/Viewer>6.#include<osgDB/ReadFile>7.8.#include<osgEarth/MapNode>9.#include<osgEarth/ImageLayer>10.11.#include<osgEarthDrivers/gdal/GDALOptions>12.#include<osgEarthDrivers/cache_filesystem/FileSystemCache>13.#include<osgEarthDrivers/feature_ogr/OGRFeatureOptions>14.15.#include<osgEarthFeatures/FeatureSourceLayer>16.#include<osgEarthFeatures/FeatureModelLayer>17.18.#include<osgEarthUtil/EarthManipulator>19.ing namespace std;21.22.void AddVector(osg::ref_ptr<osgEarth::Map> map)23.{24.//25.std::string filePath ="D:/Work/OSGNewBuild/osgearth-2.10.1/data/world.shp";26.osgEarth::Drivers::OGRFeatureOptions featureData;27.featureData.url()= filePath;28.29.// 如果缺少空间参考,可以手动指定30.// ifstreaminfile("C:/Data/vector/hs/23.prj");31.// string line;32.// getline(infile, line);33.// featureData.profile()->srsString() = line;34.35.// Make a feature source layer and add itto the Map:36.osgEarth::Features::FeatureSourceLayerOptio ns ogrLayer;()= filePath +"_source";38.ogrLayer.featureSource()= featureData;39.osgEarth::Features::FeatureSourceLayer* featureSourceLayer =newosgEarth::Features::FeatureSourceLayer(ogrLayer);40.map->addLayer(featureSourceLayer);41.osgEarth::Features::FeatureSource*features = featureSourceLayer->getFeatureSource();42.if(!features)43.{44.printf(("无法打开该矢量文件!"));45.return;46.}47.48.//49.osgEarth::Features::FeatureModelLayerOption s fmlOpt;()= filePath;51.fmlOpt.featureSourceLayer()= filePath +"_source";52.fmlOpt.enableLighting()=false;53.54.osg::ref_ptr<osgEarth::Features::FeatureMod elLayer> fml =newosgEarth::Features::FeatureModelLayer(fmlOpt);55.map->addLayer(fml);56.}57.58.int main()59.{60.osgEarth::ProfileOptions profileOpts;61.62.//地图配置:设置缓存目录63.osgEarth::Drivers::FileSystemCacheOptions cacheOpts;64.string cacheDir ="D:/Work/OSGNewBuild/tmp";65.cacheOpts.rootPath()= cacheDir;66.67.//68.osgEarth::MapOptions mapOpts;69.mapOpts.cache()= cacheOpts;70.mapOpts.profile()= profileOpts;71.72.//创建地图节点73.osg::ref_ptr<osgEarth::Map> map =new osgEarth::Map(mapOpts);74.osg::ref_ptr<osgEarth::MapNode> mapNode = new osgEarth::MapNode(map);75.76.osgEarth::Drivers::GDALOptions gdal;77.gdal.url()="D:/Work/OSGNewBuild/osgearth-2.10.1/data/world.tif";78.osg::ref_ptr<osgEarth::ImageLayer> layer = new osgEarth::ImageLayer("BlueMarble", gdal);79.map->addLayer(layer);80.81.AddVector(map);82.83.osgViewer::Viewer viewer;84.viewer.setSceneData(mapNode);85.86.osg::ref_ptr<osgEarth::Util::EarthManipulator> mainManipulator = new osgEarth::Util::EarthManipulator;87.viewer.setCameraManipulator(mainManipulator);88.89.viewer.setUpViewInWindow(100,100,800,600);90.91.return viewer.run();92.}osgEarth表达矢量的基本思路是,先将其读取到矢量源图层FeatureSourceLayer中,这个图层加载到osgEarth的图层列表中是不显示的,必须得再加载一个专门的符号化图层,将其符号号,才能正常显示。
osgearth 简单的例子
1. 介绍osgEarthosgEarth是一个开源的地理空间3D渲染引擎,它建立在OpenSceneGraph(OSG)之上,提供了一套方便易用的工具和库,用于构建高性能的3D地球可视化应用程序。
osgEarth支持多种数据格式和地理空间数据源,包括地形数据、卫星影像、矢量数据等,用户可以利用osgEarth快速、灵活地构建出各种类型的地球可视化应用。
2. osgEarth的基本概念在了解osgEarth之前,需要了解一些基本概念。
osgEarth使用用于地球可视化的场景图,其中包含了地形、卫星影像、矢量数据和其他图层信息。
osgEarth使用图层树来管理这些数据,每个图层都有自己的样式和渲染规则。
osgEarth还提供了一套简单的、高效的符号渲染系统,可以用于在地图中显示各种地理要素。
3. osgEarth的简单例子下面通过一个简单的例子来介绍osgEarth的基本用法。
假设我们有一些地形数据和卫星影像数据,我们希望将它们加载到osgEarth中进行可视化展示。
(1)我们需要创建一个OSG Viewer实例,作为osgEarth可视化的窗口。
(2)我们需要创建一个Map实例,用于管理地理空间数据。
我们可以向Map实例中添加地形图层和卫星影像图层。
(3)接下来,我们需要创建一个MapNode实例,它是地球可视化的根节点。
我们可以将Map实例和OSG Viewer实例传递给MapNode实例。
(4)我们将MapNode实例添加到OSG Viewer中,这样就完成了地球可视化的搭建工作。
通过以上简单的步骤,我们就可以将地形数据和卫星影像数据加载到osgEarth中进行可视化展示了。
当然,osgEarth还提供了丰富的样式和渲染规则设置,可以根据实际需求进行定制化操作。
4. 总结osgEarth作为一个开源的地理空间3D渲染引擎,提供了丰富的功能和灵活的工具,可以帮助用户快速、高效地构建各种类型的地球可视化应用。
osgEarth数据加载及组织解析
osgEarth数据加载及组织解析1.osgEarth的数据加载流程由前文可知,用户可以使用osgEarth自己的earth文件,简单指定各种数据源,而不用关心数据如何渲染,便能在三维球上显示各种地形数据。
本节,将会解读osgEarth如何解析earth文件,利用用户提供的数据源,来构建三维球上的各种地形。
图3.1所示是加载数据的整体流程,本节将就这四个步骤进行具体的解读。
图3.1 osgEarth数据加载整体流程1.1 读取earth文件osgEarth继承了OSG的插件机制,所以osgEarth提供了专门读取earth文件的osgdb_earth插件。
通过查找并调用此插件,达到读取earh文件的目的。
图3.2展示了查找读取earth插件的具体流程:图3.2 查找读取earth插件的具体流程这个具体流程展示了osgEarth如何找到读取earth的插件——osgdb_earth.dll。
这个流程其实也是osg插件机制中的具体流程,主要在read函数中根据文件后缀名查找读写插件,查找策略见前文,找到插件后便根据文件名构建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对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章OSGEarth学习这是个人在学习osgEarth时根据体会或从别的地方看到的做的一个简单整理,有些东东就是官方文档翻译过来的,都是根据自己的需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。
对个人在初期使用osgEarth时有很多帮助,所以特发上来,希望对大家也有帮助osgEarth学习笔记1. 通过earth文件创建图层时,可以指定多个影像数据源和多个高程数据源,数据源的顺序决定渲染顺序,在earth文件中处于最前的在渲染时处于最底层渲染;所以如果有高低精度不同的影响数据或者高程数据,在创建earth文件时要将粗精度的数据放在上方xml节点,高精度的放在其下面的节点;2. osgEarth自带多种驱动器,不同的驱动器驱动不同的数据源,自己也可以扩展驱动器读取相应的数据;3. 可以通过profile属性指定数据的投影方式或者数据分页方式以及地理空间延展;osgEarth通过profile创建数据四叉树,每个四叉树节点数据瓦片通过TileKey类来标示;一个地形数据能否正常工作要看创建它的驱动器是否能够创建和对应profile兼容的数据瓦片;比如,如果要生成地球数据,就需要指定global-geodetic 或者global-mercator profile,相应的数据源要能够在这种profile下生成相应的地形数据;4. 通过earth文件,最基本的也是最主要的功能是我们可以指定生成地形的坐标属性(地理坐标或投影坐标)影像数据、高程数据、矢量数据、模型数据、以及缓冲位置,通过这些基本要素就可以轻易生成我们想要的地形;5. osgEarth只能使用16或32位的高程数据源;6. 如果直接使用原始的影像、高程以及矢量数据,可以用GDAL驱动器,在这种情况下需要注意几个性能的问题。
第一,将数据源预先进行坐标变换,变换为目标地形坐标,否则osgEarth会对源数据进行坐标投影变换,这将降低数据的加载及处理速度。
如果预先已经将数据源进行正确的坐标变换,osgEarth 就可以省略这个步骤,从而提高其实时处理速度;第二,预先对影像数据进行瓦片处理,比如tiff格式的影像数据,它是逐行扫描存储的,而osgEarth是每次读取一个瓦片数据,如果预先对影像数据进行瓦片处理,在动态过程中osgEarth就不需要每次读取整个大块影像数据然后提取其需要的瓦片数据,而可以直接读取相应的瓦片数据即可,这样就大大提高了瓦片数据的读取速度。
可以通过gdal_translate工具对影像数据进行瓦片处理;第三,创建金字塔数据集可以使osgEarth读取数据更加高效,可以用gdaladdo工具创建金字塔数据集;总之,要想提高osgEarth的处理效率,就要预先创建高效的数据瓦片结构,除了用gdal、vpb等工具外,也可以通过osgEarth的数据缓冲机制创建预处理的瓦片数据集。
比如我们可以创建一个如下的earth 文件将数据缓冲到指定的目录:<map name="bluemarble" type="geocentric" version="2"><!--Add a reference to the image --><image name="bluemarble" driver="gdal"><url>c:/data/bluemarble.tif</url></image><options><!--Tell osgEarth to cache the tiles in a TMS format--><cache type="tms"><path>c:/osgearth_cache</path><!--Tell osgEarth to cache the tiles to JPG to save disk space--><format>jpg</format></cache></options></map>这种缓冲方式只能缓冲在执行该文件时浏览过的地形数据,而不能自动缓冲所有的数据,要想自动缓冲所有的数据,就需要用到osgEarth自带的一个工具,osgearth_seed,通过osgearth_seed --max-level 7 bluemarble.earth将数据全部缓冲到指定位置,通过这种方式缓冲后,我们就拥有了一个完整的TMS数据源,我们可以直接通过文件目录的方式访问该数据源,也可以将该数据源拷贝到我们自己的本地web服务目录下。
详情见/wiki/DataPreparation。
除此之外还可以用MapTiler以及TileCache工具创建瓦片数据源,用它创建的瓦片数据源也可以直接在osgEarth下使用;7. 可以通过两种方式将osgEarth集成到我们自己的osg应用程序中,第一种就是直接通过earth文件的方式,直接将earth文件读入作为一个osg节点加入场景即可,另外一种方式就是通过osgEarth的API。
通过API的方式大体需要以下几个步骤:创建map对象——创建影像数据层——创建高程数据层——将影像数据层以及高程数据层加入到map对象——根据前面创建的map对象创建mapNode节点——将mapNode节点加入到场景;示例见/wiki/DevelopersGuide。
无论是通过earth文件创建的地形还是通过API创建的地形,我们都可以在运行时对其进行修改,如果是用earth文件创建的地形,需要先找到该earth文件对应的mapNode,通过以上两种方式创建的mapNode,我们可以对地形进行修改操作,如添加新的影像、高程数据,移除特定的影像、高程数据,重新制定影像、高程数据的顺序等;8. 如果我们的地形用的是地心坐标系,可以会碰到当相机距离地面非常近的时候地形被裁减掉的问题,要解决这个问题我们可以通过设置相机的远近裁剪比率或者创建AutoClipPlaneHandler来解决。
AutoClipPlaneHandler可以动态监视相机,当相机距离地面很近时动态调整相机的近裁减面;9. 在地形上放置模型对象时可以使用ObjectPlacer类,通过该类可以直接通过经纬度坐标进行模型的放置操作;10. osgEarth的目标是能够在osg中开发基于地理信息的应用,能够方便地浏览地理模型数据,能够与开放标准的地理数据兼容;osgEarth渲染地形的模式分为两种:实时在线模式(直接使用原始数据渲染生成)以及离线模式(数据预处理成瓦片数据或地形数据库);11. osgEarth使用于以下几种情况的应用:快速方便地运行地形地图数据;使用开放标准的地形地图数据,如WMS、TMS、WCS等;通过Web服务的方式集成本地存储的地形地图数据;系统要求以瘦客户端的方式运行;经常处理随着时间改变的数据;集成商业数据;12. 在使用osgEarth自带的漫游器EarthManipulator时,如果给漫游器设置一个矩阵或者给漫游器设置一个TetherNode然后再解除,然后再移动相机位置,这时计算出的Center会有一个跳跃,然后才正常,造成这个问题的原因是给漫游器设置了参考节点(通过SetNode函数)造成的,设置了参考节点后漫游器要根据参考节点重新计算Center和相机姿态等参数,在以上两种情况发生时,在重新计算Center时出现了偏差,要想避免以上两种情况下造成的移动异常,可以不让相机结合参考节点重新计算Center,即将Pan函数中的recalculateCenter注释掉即可;13. Map的类型分为geocentric和projected两种类型,即地心方式和投影方式,要建立圆形地球就用geocentric类型,用这种类型如果要制定profile,只有geodetic(WGS84投影)和mercator(墨卡托投影)两种模式;14. Earth文件详解:<!—type 属性可以是geocentric和projected两种模式,分别对应地心坐标系和平面投影坐标系,默认是地心坐标模式。
Version是osgEarth的主版本号,必须有版本号--><map name=”myMap” type=”geocentric”/”projected” version=”2”><!—定义地图各图层的运行时显示属性--><options><!—定义数据缓冲机制,缓冲类型有三种,tms、sqlite3以及tile cache,默认是tms,如果将cache_only设为true,osgEarth将只加载缓冲的数据,不加载任何非缓冲的数据,默认是false--><cache type=”tms”/”sqlite3”/”tilecache” cache_only=”false”><!—缓冲数据存放目标目录,适用于tms以及tilecache 两种类型,直接指定缓冲目录--><path>C:/myCache</path><!—缓冲数据存放目标文件,适用于sqlite3,指定数据库文件名--><path>C:/myCache.db</path><!—缓冲目标文件类型,适用于tms以及tilecache两种类型,如果没有指定类型,将默认用影像数据或高程数据的类型--><format>jpg</format><!—tms类型,仅适用于tms类型,注意如果该类型是google,索引就是反的--><tms_type>google</tms_type><!—缓冲文件最大值,单位是MB,不知道该属性是否只是适用于sqlite3,有待确定--><max_size>300</max_size></cache><!—坐标投影属性,该属性相当于渲染数据的地理空间上下文,它决定了系统以哪种方式将世界坐标数据投影到屏幕像素。
为了正确渲染影像数据以及高程数据,osgEarth需要知道数据源的profile以及渲染时的profile 以进行必要的转换。
--><profile name=”myProfile”><!—空间参考系统初始化字符串,该字符串的值可以参考PROJ4或WKT,下面是用PROJ4定义的WGS84投影profile,srs以及作用范围的定义同样适用于平面投影模式--><srs>prog=latlong +ellps=WGS84 +datum=WGS84</srs><!—如果只想让该profile作用在某个区域,可以给其指定范围--><xmin>-10.2</xmin><xmax>-10</xmax><ymin>20</ymin><ymax>30</ymax><!—由于WGS84比较著名,所以可以用下面的简化方式代替上面的定义--><profile>global-geodetic</profile><!—另外一个著名的球体投影就是墨卡托投影(yahoo、google、微软、openstreetmap都是用的这种投影方式),这种投影方式的优点是可以在任何纬度或者预留区域正确地显示文本信息,可以用下面的简化方式定义--><profile>global-mercator</profile><!—也可以不用简化方式,简化方式使用默认的椭球体,也可以通过定义srs自己定义椭球体--><srs>+proj=latlong +a=6800000 +b=6800000</srs><!—定义垂直空间参考系统,相当于垂直高程大地基准--><vsrs>egm96-meters</vsrs></profile><!—定义地形引擎如何渲染影像数据和高程数据--><terrain><!—定义如何从上层高程数据采集当前层需要的高程数据,比如如果影像数据可以分割到17层,而高程数据到7层,那么8-17层的高程数据就需要从第7层去采集,下面的属性就指定了以何种方式去采集相应的高程值,一共有四种采集方式,分别是nearest(采集最近相邻点)、bilinear(双线插值)、average(平均值插值)、triangulate(根据相邻的四个点插值)--><elevation_interpolation>nearest/bilinear/average/triangulate</elevation_interpolation><!—定义是否开启地形表面的光照,默认是开启--><lighting>true</lighting><!—定义如何加载地形数据(数据加载策略),可以定义加载模式mode,分为standard(标准加载模式)、sequential(顺序加载模式)以及preemptive(优先级加载模式),默认是标准加载模式,preemptive加载模式不同于顺序加载模式,当需要加载最高级瓦片时需要从最低级开始逐层加载,而preemptive模式可以直接跳过中间级直接加载最高级,同时还可以设定不同数据的加载优先级,比如可以设定优先加载影像数据而后加载高程数据等,这样可以在视觉上得到优化处理。