osgEarth中Viewpoint 参数意义
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中法向量的计算方法和应用技巧,对于开发高质量的地理信息系统应用具有重要的意义。
Google Maps地图投影全解析
• •
•
事实上,地球表面是曲面,而地图是二维的平面,两者之间必然有个映射关系,(数学上的射影几 何?)才可对应出大地坐标系。分三个步骤来完成投影: 1) 确定地球椭球体(Spheroid/Ellipsoid),需要长半轴、短半轴、曲率三个参数。(模拟地球的形 状) 2) 若要逼近某特定地区,则需要大地基准(Geodetic Datum)。(椭球体的原点the position of the origin、方向 the orientation、缩放比例 the scale等)我国现在采取西安1980坐标系基准点,同时也 有国家1985高程基准。 3) 如何投影,这就涉及高斯-克吕格投影等诸多投影方式的存在,等角等积等距离,方位圆柱圆锥 等分类。 – 就地图投影坐标系参数来看,分为两个部分:Ellipsoid 、 Datum ;Projection。Ellipsoid与 Datum是相关联的,一般提到某个Datum,则其Ellipsoid也包含在内;两者的对应关系是一对多, 即一个Ellipsoid可以为多个Datum所用,不同的Datum的Ellipsoid可以是相同的。 – 话说我国的地图投影中1:100万地形图采用了Lambert(兰勃特)投影(正轴等角割圆锥投影), 大于1:100万的基本比例尺地形图 采用高斯—克吕格投影(横轴等角切圆柱投影)。
• 由于世界各地区投影类型的不同,因此在叠加、复合不同来源空间数 据时,必需首先进行投影转换、配准等设置。
Web墨卡托投影坐标系
• • 相关坐标计算 Ground Resolution,地面分辨率,类似Spatial Resolution(空间分辨率),我们这 里主要关注用象元(pixel size)表示的形式:一个像素(pixel)代表的地面尺寸(米)。以 Virtual Earth为例,Level为1时,图片大小为512*512(4个Tile),那么赤道空间分 辨率为:赤道周长/512。其他纬度的空间分辨率则为 纬度圈长度/512,极端的北 极则为0。Level为2时,赤道的空间分辨率为 赤道周长/1024,其他纬度为 纬度圈 长度1024。很明显,Ground Resolution取决于两个参数,缩放级别Level和纬度 latitude ,Level决定像素的多少,latitude决定地面距离的长短。地面分辨率的公式 为,单位:米/像素: ground resolution = (cos(latitude * pi/180) * 2 * pi * 6378137 meters) / (256 * 2level pixels) Map Scale,即地图比例尺,小学知识,图上距离比实地距离,两者单位一般都是 米。在Ground Resolution的计算中,由Level可得到图片的像素大小,那么需要把其 转换为以米为单位的距离,涉及到DPI(dot per inch),暂时可理解为类似的PPI( pixelper inch),即每英寸代表多少个像素。256 * 2level / DPI 即得到相应的英寸 inch,再把英寸inch除以0.0254转换为米。实地距离仍旧是:cos(latitude * pi/180) * 2 * pi * 6378137 meters; 因此比例尺的公式为,一般都化为1:XXX,无单位: map scale = 256 * 2level / screen dpi / 0.0254 / (cos(latitude * pi/180) * 2 * pi * 6378137) = 1 : (cos(latitude * pi/180) * 2 * pi * 6378137 * screen dpi) / (256 * 2level * 0.0254) 其实,Map Scale 和 Ground Resolution存在对应关系,毕竟都和实地距离相关联, 两者关系:map scale = 1 : ground resolution * screen dpi / 0.0254 meters/inch
万能地图下载器中的七参数是什么
万能地图下载器中七参数的含义是什么?1.概述两个不同的三维空间直角坐标系之间转换时,通常使用七参数模型(数学方程组),在该模型中有七个未知参数,即:三个坐标轴的旋转角度(△α,△β,△γ)、三个坐标平移量(△X,△Y,△Z)和尺度因子K,这七个数字合称七参数。
七参数计算界面2.坐标转换首先了解一下坐标转换,来看两张图,下面两张图分别是两个不同的椭球,不同的椭球之间代表的是不同的坐标系。
假设我们看到的地图是像贴纸一样“贴”在椭球的表面,那么坐标转换就相当于是将一个椭球上的地图“撕”下来再“贴”到另一个椭球上去,而且位置对应要正确。
WGS84参考椭球某个坐标系下的参考椭球由于两个椭球的表面不完全一样,为了保证重新“贴”到另一个椭球后位置对应准确,在“贴”之前需要对之前的地图进行相关的处理,处理需要按照相关的参数来,这个参数就是我们常说的“七参数”。
3.七参数各参数含义接下来分别说一说七个参数的各个参数,首先是三个方向的旋转角度(△α,△β,△γ),通过按顺序旋转三个坐标轴指定角度,可以使两个空间直角坐标系的XYZ轴重合在一起。
从下图中可以看到,有两个空间坐标系X1Y1Z1和X2Y2Z2,假设要将X1Y1Z1坐标系和X2Y2Z2坐标系完全重合,首先需要将XYZ轴旋转一定的角度,这个旋转的角度就是七参数中的三个旋转角度:△α,△β和△γ。
变换方式然后是三个方向的平移量(△X,△Y,△Z),即两个空间坐标系的坐标原点之间坐标差值。
如上图所示,旋转虽然三个方向的坐标轴是重合,但是长度却不一致,所以需要对三个方向坐标轴进行移动,向坐标点移动,这个移动的多少就是七参数中的三个移动量:△X,△Y和△Z。
最后是尺度因子K,即两个空间坐标系内的同一段直线的长度比值,实现尺度的比例转换。
通常K值几乎等于1。
K也可以叫变形系数,就是坐标系由原来的比如斜坐标系变成直角坐标系,变形系数K反映了变化程度或者说是如何变化的。
4.七参数计算七参数计算包括布尔莎模型,一步法模型,海尔曼特等,常见的为布尔莎模型。
osgearth实践应用案例
osgearth实践应用案例
1. 地理信息系统(GIS)应用:osgEarth可以与GIS软件集成,用于创建高度精确的地理信息系统。
例如,osgEarth可以用于创建地图、分析地形数据、显示地理位置等。
2. 3D可视化:osgEarth可以将地理数据转化为3D模型,实现地理数据的可视化展示。
例如,osgEarth可以用于创建虚拟地球模型,展示地球上的地形、水域、建筑物等。
3. 地理数据分析:osgEarth提供了丰富的地理数据分析功能,可以进行地形分析、地理数据可视化等。
例如,osgEarth可以用于分析地形高程数据,计算坡度、坡向等地形指标。
4. 场景模拟与规划:osgEarth可以用于场景模拟与规划,例如城市规划、交通规划等。
osgEarth可以将地理数据与实时数据结合,进行场景模拟和规划分析。
5. 航空航天应用:osgEarth可以用于航空航天应用,例如飞行模拟、无人机导航等。
osgEarth可以创建高度精确的地球模型,用于飞行仿真和导航。
6. 智能交通系统:osgEarth可以与交通系统集成,用于交通数据可视化和分析。
例如,osgEarth可以显示交通拥堵情况,进行交通流量预测等。
以上仅为osgEarth的一些实践应用案例,osgEarth还可以应用于许多其他领域,如农业、环境保护、水资源管理等。
投影参数中的基准纬度-概述说明以及解释
投影参数中的基准纬度-概述说明以及解释1. 引言1.1 概述在地图投影中,基准纬度是一个重要的参数,它可以影响地图的形状和大小。
基准纬度通常是投影中的某个特定纬度,通过调整基准纬度可以使地图在不同区域展示更为准确的形状和大小。
本文将探讨基准纬度在投影参数中的作用,以及基准纬度的选择对地图投影的影响。
通过深入了解基准纬度的重要性,我们可以更好地理解地图投影的原理并为未来的研究工作指明方向。
1.2 文章结构本文主要分为三个部分: 引言、正文和结论。
在引言部分,将介绍文章的背景和基本概念,为读者提供对基准纬度的整体认识。
在正文部分,将详细探讨基准纬度的定义、作用以及选择与影响。
结合实际案例和数据,对基准纬度在地图投影中的重要性进行分析和讨论。
在结论部分,将总结基准纬度在地图投影中的重要性,并探讨其对地图投影的影响以及未来研究方向。
整体结构清晰,逻辑严谨,旨在帮助读者全面理解和掌握基准纬度在地图投影中的重要作用。
1.3 目的:本文旨在探讨投影参数中的基准纬度,分析其在地图投影中的作用和影响。
通过深入研究基准纬度的选择与影响,旨在帮助读者更好地理解地图投影的原理和方法,以及如何选择适合特定目的的基准纬度。
同时,通过总结基准纬度的重要性和对地图投影的影响,为未来的相关研究和实践提供参考和指导,促进地图投影技术的发展和应用。
章1.3 目的部分的内容2. 正文2.1 什么是基准纬度基准纬度是地图投影中的一个重要参数,它是指在某种具体的地图投影中所选取的一个特定纬度值。
在地图投影中,为了将地球表面上的三维空间投影到平面上的二维地图上,需要选择一些参数来确定投影的方式。
其中基准纬度就是其中一个关键参数。
基准纬度的选择通常是根据具体的地图投影方式来确定的。
基准纬度的作用是帮助确定投影中的一些参数,例如缩放因子、角度等。
通过设定基准纬度,可以使地图在特定区域内保持形状和比例的准确性,减少地图投影带来的形变和失真。
基准纬度通常与投影中心纬度是相关的,两者共同决定了地图投影的性质。
GIS学习笔记地图投影与GPS参数计算
参数计算学习笔记——地图投影与GPSGIS、椭球体1而基准面的定义则由特定椭球体及其对应的转GIS中的坐标系定义由基准面和地图投影两组参数确定,换参数确定。
基准面基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面。
是在椭球体基础上建立的,椭球体可以对应多个基准面,而基准面只一个椭球体。
椭球体的几何定义:为短半轴。
为长半轴,b为旋转轴,O是椭球中心,NSa 子午圈:包含旋转轴的平面与椭球面相截所得的椭圆。
纬圈:垂直于旋转轴的平面与椭球面相截所得的圆,也叫平行圈。
赤道:通过椭球中心的平行圈。
基本几何参数:是子午椭圆的焦点离开中心'和α反映了椭球体的扁平程度。
偏心率ee称为长度元素;扁率、其中ab 的距离与椭圆半径之比,它们也反映椭球体的扁平程度,偏心率愈大,椭球愈扁。
套用不同的椭球体,同一个地点会测量到不同的经纬度。
下面是几种常见的椭球体及参数列表。
几种常见的椭球体参数值2、地图投影地球是一个球体,球面上的位置,是以经纬度来表示,我们把它称为“球面坐标系統”或“地理坐标系統”。
在球面上计算角度距离十分麻烦,而且地图是印刷在平面纸张上,要将球面上的物体画到紙上,就必须展平,这种将球面转化为平面的过程,称为“投影”。
经由投影的过程,把球面坐标换算为平面直角坐标,便于印刷与计算角度与距离。
由于球面無法百分之百展为平面而不变形,所以除了地球仪外,所有地图都有某些程度的变形,有些可保持面积不变,有些可保持方位不变,视其用途而定。
目前国际间普遍采用的一种投影,是即横轴墨卡托投影(Transverse Mecator Projection),又称为高斯-克吕格投影(Gauss-Kruger Projection),在小范围内保持形状不变,对于各种应用较为方便。
我们可以想象成将一个圆柱体橫躺,套在地球外面,再将地表投影到这个圆柱上,然后将圆柱体展开成平面。
圆柱与地球沿南北经线方向相切,我们将这条切线称为“中央经线”。
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("http://xxx.xxx.xxx.xxx.:xxxx/arcgis/rest/services/world/ma p003/MapServer");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基础入门
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时有很多帮助,所以特发上来,希望对大家也有帮助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会对源数据进行坐标投影变换,这将降低数据的加载及处理速度。
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学习文档
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 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 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 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 TmsDemLayer = new osgEarth::ElevationLayer(tmslayerOpt);m_pMap->addElevationLayer(TmsDemLayer.get());//初始化图层并加⼊到地球中(2)加载⽹上数据a 加载ArcGIS Server 发布的数据加载⽅式与上⾯提到的类似osgEarth::Drivers::ArcGISOptions MapImageLayer;MapImageLayer.url()=osgEarth::URI("http://xxx.xxx.xxx.xxx.:xxxx/arcgis/rest/services/world/ma p003/MapServer");std::string CdlayerName="worldimage";osg::ref_ptr cdlayer =new osgEarth::ImageLayer(osgEarth::ImageLayerOptions(CdlayerName,MapImageLayer));m_pMap->addImageLayer(cdlayer.get());//这⾥注意,当osgearth访问ArcGIS Server 发布数据的时候有些问题很奇怪,⽤上⾯的⽅式访问ArcGIS Server 国外发布的数据没问题,但是访问⾃⼰发布的数据就会有问题,经过试验投影要设成3857才能正常访问。
osgearth pointsymbol sizestring函数 -回复
osgearth pointsymbol sizestring函数-回复osgearth是一个开源的地理信息系统(GIS)渲染引擎,用于在地球上绘制和渲染矢量数据。
osgearth提供了一个灵活的符号系统,可用于在地图上展示不同类型的数据。
在osgearth中,可以使用sizestring函数来定义点符号的大小。
在这篇文章中,我们将深入研究osgearth的pointsymbol和sizestring函数,并逐步解释它们的用法和功能。
第一部分:osgearth简介首先,让我们简要介绍一下osgearth。
osgearth是一个使用开源地理信息系统(GIS)库OpenSceneGraph开发的引擎,旨在帮助开发人员构建交互式地理可视化应用程序。
osgearth支持从各种数据源(如矢量、栅格和地形数据)加载地理数据,并提供强大的绘图和渲染功能,以实现高度自定义的地图显示效果。
第二部分:点符号在osgearth中,点符号(PointSymbol)是用于表示点要素的图形符号。
点要素通常用于表示地图上的位置、位置或特定事件。
osgearth的点符号系统很灵活,可以根据用户需要定义点的大小、形状、颜色和其他属性。
sizestring函数是osgearth中的一个关键函数,用于确定点符号的大小。
第三部分:sizestring函数sizestring函数是osgearth中的一个函数,用于确定点符号的大小。
它接受一个字符串作为参数,并根据该字符串的值计算点符号的大小。
sizestring函数的语法如下:sizestring("sizeExpression")其中,sizeExpression是一个表示大小的表达式。
该表达式可以包含变量、数学操作和函数调用。
第四部分:使用sizestring函数要使用sizestring函数,首先需要初始化一个点符号对象。
可以使用osgearth::PointSymbol类来创建一个新的点符号,并设置其属性。
地图学几种投影的主要参数
几种投影的主要参数Gauss Kruger(高斯-克吕格投影):除中央经线和赤道为直线外,其他经线均为对称于中央经线的曲线。
该投影没有角度变形,在长度和面积上变形也很小,中央经线无变形,自中央经线向投影带边缘,变形逐渐增加,变形最大处在投影带内赤道的两端。
限制长度变形最有效的方法是将地球椭球面沿子午线划分成经差相等的瓜瓣形地带,以便分带投影。
经差6度为六度带,经差3度为三度带。
六度带自0度子午线起自西向东分带,带号为1—60带。
三度带基于六度带,自1.5度子午线起每隔经差3度自西向东分带,带号为1—120带。
我国经度范围73W—135E,十一个六度带。
各带中央经线:75,75+6n。
三度带为二十二个。
主要参数:投影代号(Type),基准面(Datum),单位(Unit),中央经度(OriginLongitude),原点纬度(OriginLatitude),比例系数(ScaleFactor),东伪偏移(FalseEasting),北纬偏移(FalseNorthing)Transverse Mercator(横轴墨卡托投影):墨卡托投影没有角度变形,由每一点向各方向的长度比相等,它的经纬线都是平行直线,且相交成直角,经线间隔相等,纬线间隔从标准纬线向两极逐渐增大。
墨卡托投影的地图上长度和面积变形明显,但标准纬线无变形,从标准纬线向两极变形逐渐增大,但因为它具有各个方向均等扩大的特性,保持了方向和相互位置关系的正确。
主要参数有:投影代号(Type),基准面(Datum),单位(Unit),原点经度(Origin Longitude),原点纬度(Origin Latitude),标准纬度(Standard ParallelOne)。
UTM(通用横轴墨卡托投影):是一种“等角横轴割圆柱投影”,椭圆柱割地球于南纬80度、北纬84度两条等高圈,投影后两条相割的经线上没有变形,而中央经线上长度比0.9996,是为了保证离中央经线左右约330km处有两条不失真的标准经线。
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手册
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模块执行各种几何处理操作,如缓冲和交集。
OSG学习过程中的笔记
一旋转其中trans->setMatrix(osg::Matrix::translate(0,0,20));就是用来平移物体,这个表示象Z轴正方向平移也就是屏幕正上方。
o sg::Matrix::scale(0.5,0.5,0.5)表示缩放的比例,也就是原来物体的一般大小osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。
当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转osg笔记(一)2011-07-05 19:37:29| 分类:OSG | 标签:|字号大中小订阅场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。
根节点和各个组节点都可以有零个(实际上是没有执行任何操作)或多个子成员。
在场景图形的最底部,各个叶节点包含了构成场景中物体的实际几何信息。
Osg程序使用组节点来组织和排列场景中的几何体。
场景图形通常包含了多种类型的节点以执行各种各样的用户功能,例如开关节点可以设置其子节点可用或不可用,细节层次节点(LOD)可以根据观察者的距离调用不同的子节点,变换节点可以改变子节点几何体的坐标变换状态。
场景图形特征:1. 提供底层渲染API中具备的几何信息和状态管理功能之外,还兼备以下的附加特征和功能:2. 空间结构:3. 场景拣选,投影面剔除和隐藏面剔除。
4. 细节层次:5. 透明6. 状态改动最少化7. 文件I/O8. 更多高性能函数:全特征文字支持,渲染特效的支持,渲染优化,3d模型文件读写支持,跨平台输入渲染及显示设备的访问.场景图形渲染方式:三种遍历操作1. 更新2. 拣选3. 绘制Osg设计所采用的设计理念和工具:Ansi标准C++C++标准模板库设计模式Osg命名习惯:命名空间:小写字母开头,然后大写字母避免混淆。