这是个人在学习osgEarth时根据体会或从别的地方看到的做.docx
- 文档编号:11761591
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:17
- 大小:26.71KB
这是个人在学习osgEarth时根据体会或从别的地方看到的做.docx
《这是个人在学习osgEarth时根据体会或从别的地方看到的做.docx》由会员分享,可在线阅读,更多相关《这是个人在学习osgEarth时根据体会或从别的地方看到的做.docx(17页珍藏版)》请在冰豆网上搜索。
这是个人在学习osgEarth时根据体会或从别的地方看到的做
这是个人在学习osgEarth时根据体会或从别的地方看到的做的一个简单整理,有些东东就是官方文档翻译过来的,都是根据自己的需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。
对个人在初期使用osgEarth时有很多帮助,所以特发上来,希望对大家也有帮助
osgEarth学习笔记
1. 通过earth文件创建图层时,可以指定多个影像数据源和多个高程数据源,数据源的顺序决定渲染顺序,在earth文件中处于最前的在渲染时处于最底层渲染;所以如果有高低精度不同的影响数据或者高程数据,在创建earth文件时要将粗精度的数据放在上方xml节点,高精度的放在其下面的节点;
2. osgEarth自带多种驱动器,不同的驱动器驱动不同的数据源,自己也可以扩展驱动器读取相应的数据;
3. 可以通过profile属性指定数据的投影方式或者数据分页方式以及地理空间延展;osgEarth通过profile创建数据四叉树,每个四叉树节点数据瓦片通过TileKey类来标示;一个地形数据能否正常工作要看创建它的驱动器是否能够创建和对应profile兼容的数据瓦片;比如,如果要生成地球数据,就需要指定global-geodetic或者global-mercatorprofile,相应的数据源要能够在这种profile下生成相应的地形数据;
4. 通过earth文件,最基本的也是最主要的功能是我们可以指定生成地形的坐标属性(地理坐标或投影坐标)影像数据、高程数据、矢量数据、模型数据、以及缓冲位置,通过这些基本要素就可以轻易生成我们想要的地形;
5. osgEarth只能使用16或32位的高程数据源;
6. 如果直接使用原始的影像、高程以及矢量数据,可以用GDAL驱动器,在这种情况下需要注意几个性能的问题。
第一,将数据源预先进行坐标变换,变换为目标地形坐标,否则osgEarth会对源数据进行坐标投影变换,这将降低数据的加载及处理速度。
如果预先已经将数据源进行正确的坐标变换,osgEarth就可以省略这个步骤,从而提高其实时处理速度;第二,预先对影像数据进行瓦片处理,比如tiff格式的影像数据,它是逐行扫描存储的,而osgEarth是每次读取一个瓦片数据,如果预先对影像数据进行瓦片处理,在动态过程中osgEarth就不需要每次读取整个大块影像数据然后提取其需要的瓦片数据,而可以直接读取相应的瓦片数据即可,这样就大大提高了瓦片数据的读取速度。
可以通过gdal_translate工具对影像数据进行瓦片处理;第三,创建金字塔数据集可以使osgEarth读取数据更加高效,可以用gdaladdo工具创建金字塔数据集;总之,要想提高osgEarth的处理效率,就要预先创建高效的数据瓦片结构,除了用gdal、vpb等工具外,也可以通过osgEarth的数据缓冲机制创建预处理的瓦片数据集。
比如我们可以创建一个如下的earth文件将数据缓冲到指定的目录:
--Addareferencetotheimage-->
/data/bluemarble.tif
--TellosgEarthtocachethetilesinaTMSformat-->
/osgearth_cache
--TellosgEarthtocachethetilestoJPGtosavediskspace-->
这种缓冲方式只能缓冲在执行该文件时浏览过的地形数据,而不能自动缓冲所有的数据,要想自动缓冲所有的数据,就需要用到osgEarth自带的一个工具,osgearth_seed,通过osgearth_seed--max-level7bluemarble.earth将数据全部缓冲到指定位置,通过这种方式缓冲后,我们就拥有了一个完整的TMS数据源,我们可以直接通过文件目录的方式访问该数据源,也可以将该数据源拷贝到我们自己的本地web服务目录下。
详情见http:
//osgearth.org/wiki/DataPreparation。
除此之外还可以用MapTiler以及TileCache工具创建瓦片数据源,用它创建的瓦片数据源也可以直接在osgEarth下使用;
7. 可以通过两种方式将osgEarth集成到我们自己的osg应用程序中,第一种就是直接通过earth文件的方式,直接将earth文件读入作为一个osg节点加入场景即可,另外一种方式就是通过osgEarth的API。
通过API的方式大体需要以下几个步骤:
创建map对象——创建影像数据层——创建高程数据层——将影像数据层以及高程数据层加入到map对象——根据前面创建的map对象创建mapNode节点——将mapNode节点加入到场景;示例见http:
//osgearth.org/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的主版本号,必须有版本号-->
—定义地图各图层的运行时显示属性-->
—定义数据缓冲机制,缓冲类型有三种,tms、sqlite3以及tilecache,默认是tms,如果将cache_only设为true,osgEarth将只加载缓冲的数据,不加载任何非缓冲的数据,默认是false-->
—缓冲数据存放目标目录,适用于tms以及tilecache两种类型,直接指定缓冲目录-->
/myCache
—缓冲数据存放目标文件,适用于sqlite3,指定数据库文件名-->
/myCache.db
—缓冲目标文件类型,适用于tms以及tilecache两种类型,如果没有指定类型,将默认用影像数据或高程数据的类型-->
—tms类型,仅适用于tms类型,注意如果该类型是google,索引就是反的-->
—缓冲文件最大值,单位是MB,不知道该属性是否只是适用于sqlite3,有待确定-->
—坐标投影属性,该属性相当于渲染数据的地理空间上下文,它决定了系统以哪种方式将世界坐标数据投影到屏幕像素。
为了正确渲染影像数据以及高程数据,osgEarth需要知道数据源的profile以及渲染时的profile以进行必要的转换。
-->
—空间参考系统初始化字符串,该字符串的值可以参考PROJ4或WKT,下面是用PROJ4定义的WGS84投影profile,srs以及作用范围的定义同样适用于平面投影模式-->
—如果只想让该profile作用在某个区域,可以给其指定范围-->
—由于WGS84比较著名,所以可以用下面的简化方式代替上面的定义-->
—另外一个著名的球体投影就是墨卡托投影(yahoo、google、微软、openstreetmap都是用的这种投影方式),这种投影方式的优点是可以在任何纬度或者预留区域正确地显示文本信息,可以用下面的简化方式定义-->
—也可以不用简化方式,简化方式使用默认的椭球体,也可以通过定义srs自己定义椭球体-->
—定义垂直空间参考系统,相当于垂直高程大地基准-->
—定义地形引擎如何渲染影像数据和高程数据-->
—定义如何从上层高程数据采集当前层需要的高程数据,比如如果影像数据可以分割到17层,而高程数据到7层,那么8-17层的高程数据就需要从第7层去采集,下面的属性就指定了以何种方式去采集相应的高程值,一共有四种采集方式,分别是nearest(采集最近相邻点)、bilinear(双线插值)、average(平均值插值)、triangulate(根据相邻的四个点插值)-->
—定义是否开启地形表面的光照,默认是开启-->
—定义如何加载地形数据(数据加载策略),可以定义加载模式mode,分为standard(标准加载模式)、sequential(顺序加载模式)以及preemptive(优先级加载模式),默认是标准加载模式,preemptive加载模式不同于顺序加载模式,当需要加载最高级瓦片时需要从最低级开始逐层加载,而preemptive模式可以直接跳过中间级直接加载最高级,同时还可以设定不同数据的加载优先级,比如可以设定优先加载影像数据而后加载高程数据等,这样可以在视觉上得到优化处理。
此外还可以指定加载数据时每个CPU创建的线程数量(loading_threads_per_core)或者加载数据使用的总的线程数量(loading_threads),以及编译地形数据即构建地形瓦片所使用的线程数量(compile_threads),注意,加载数据时每个CPU创建的线程数量和加载数据使用的总的线程数量不能同时指定,只能指定其中一种-->
—定义多个影像数据叠加时如何集成最终的影像数据,一共有四种方式,分别是auto(自动)、multitexture(多重纹理)、texture_array(纹理数组)、multipass(多通道),默认是auto方式,这种方式是系统自动选择一种纹理组合方法,它首先检测硬件所支持的各种方法然后选择第一种。
Multitexture方式会为每个影像层指定它自己的影响纹理单元然后通过GPU进行组合,允许的最大纹理层的数量要受GPU的限制,texture_array是使用一个二维纹理数组通过GPU进行组合,multipass方式是通过创建多个渲染通道进行纹理的组合,这种方式没有纹理层数量的限制,但会影像系统的性能,因为它要给每个纹理层创建一个渲染通道-->
—定义地形瓦片分割的最大层数-->
—定义瓦片范围系数,也就是瓦片Lod范围的最大值系数,系统默认是根据瓦片的宽度与该系数相乘作为范围最大值,该值默认是4,通过该系数可以对不同的地形图层的lod可见范围进行控制以提高效率,特别是对于带有文本的图层或者测绘标记图层,可以将该系数设小以大大提高系统的渲染性能-->
—定义瓦片数据的采样率,通过设定不同的采样率以得到不同精细程度的地形瓦片,默认是1.0,详情可参考osgTerrain-->
—定义地形瓦片边缘率,osgTerrain会在不同的瓦片之间绘制边缘以防止不同的瓦片之间出现缝隙,该值默认是0.02,如果该值太小,在不同瓦片之间就可能会出现缝隙,如果太大,可能会造成不必要的渲染而影响系统的渲染性能,对于高度变化比较大的地形或者是做了高程夸张的地形可以尽量将该值设的大一些,以免出现缝隙-->
—定义高程夸张系数,默认是1.0,也就是正常渲染高程的真实高度-->
—定义边缘缓冲率,就是地形瓦片的延展率,比如将地形做镶嵌或者重投影时为了能够准确覆盖到所有的瓦片数据需要将瓦片范围进行适当的放宽,如果设定0.2,放宽的倍数就是1.02-->
—指定是否对整个map启用光照-->
—指定影像数据,在同一个map中image的name必需是唯一的;在image下的子要素,有些是公共的,有些是针对特定的driver的。
我们可以给影像数据指定driver(驱动器),不同的驱动器用于驱动不同的影像数据源;可以指定cacheid(影像数据缓冲标识),一个影像缓冲标示对应特定的缓冲目录或缓冲数据库文件,如果不指定,系统会根据驱动器创建默认的缓冲标识;可以指定影像数据细分的最小层数min_level以及最大层数max_level;可以指定可见范围min_range以及max_range,该值是影像数据块距离相机的距离(单位是米),当影像图层数据块不在该范围内时图层将不显示,等同于lod节点的可见范围;可以指定该影像数据的加载权重loading_weight,详情可见loading_policy,权重越大,加载的优先级越高;可以指定影像瓦片数据黑名单文件名blacklist_filename,当系统请求影像数据瓦片时,如果包含该瓦片的影响文件不存在,系统就会把该请求的数据瓦片放入到一个黑名单中,这样可以避免再次请求该无效数据,从而提高数据请求的效率。
如果黑名单中没有任何记录,该黑名单就处于被禁用状态,也不会影像系统性能。
-->
—指定该影像数据使用的profile,给该数据源指定profile后将覆盖map的全局profile,默认情况下,影像驱动器会自动判断数据源应该使用的profile,如果我们觉得驱动器无法自动判断得到数据源的profile时就要手动指定profile;-->
—指定无数据页nodata_image,某些影像数据服务器,如果客户端请求的某些层上没有请求的相应影像数据,就会显示无数据提示,通过设定该属性可以让系统也显示无数据的状态提示图片信息-->
—指定无数据信息图片的透明背景色-->
—指定该图层是否启用数据缓冲,默认是启用的-->
—指定缓冲数据文件格式,为该数据源指定缓冲格式后将覆盖该map的全局缓冲格式,如果不指定,系统将默认使用源数据的文件格式-->
—指定影像数据的不透明度,默认是1.0,完全不透明,值越小越透明-->
—指定是否启用该图层,默认是启用-->
—指定该影像数据被分割时单个瓦片的大小(像素的宽、高)-->
—指定最大瓦片缓冲个数,指定该值是为了提高瓦片拼接的效率,默认值是16-->
//特定驱动器属性设置,驱动器分为影像/高程驱动器、模型驱动器、特征驱动器、缓冲驱动器以及地形引擎驱动器5大类;
//影像/高程驱动器
—agglite驱动器,该驱动器将矢量数据栅格化为位图然后然后将其转换为地形瓦片纹理层-->
—定义矢量特征(features)数据,矢量数据的属性定义都要通过特征节点features来定义,矢量特征数据也要指定自己的驱动器,它不直接创建矢量数据几何体,只是用来读取矢量数据,目前矢量数据驱动器主要是ogr及GDAL,支持的矢量数据文件格式就是驱动器支持的所有文件格式-->
—指定矢量数据源的位置-->
—指定读取数据源的某一层,只有数据源包含多个层时才可用-->
—指定预处理几何体缓冲,所有的矢量几何体都将作为面对象进行缓冲,相当于后台缓冲,通过预先在后台多处理一部分矢量数据,从而在显示区域发生变化时载入数据比较快,从而降低给视觉造成的数据显示延迟-->
—指定驱动器要驱动的文件类型-->
—指定数据绘制的风格,如颜色、透明度、纹理贴图等等,这种风格的设置一般是用于矢量数据的绘制,osgEarth可以通过两种方式定义风格,一种是CSS(重叠样式表),一种是SLD(通过xml指定样式,还在开发中),当给数据指定风格时,可以各整个数据层指定通过的风格,也可以将数据分解成多个类class,然后给每个类指定不同的风格(数据源需要能够分解成不同的类)-->
—指定线的风格,颜色、宽度、透明度-->
element{
stroke:
#FF0000;
stroke-width:
2.0;
stroke-opacity:
0.5;
}
—指定面的风格-->
element{
fill:
#FF0000;
fill-opacity:
0.5;
}
—分解成不同的类分别设置不同的风格,下面是根据frence变量进行类的划分并设置不同的风格-->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 学习 osgEarth 根据 体会 别的 地方 看到
![提示](https://static.bdocx.com/images/bang_tan.gif)