1、osgEarth学习笔记 这是个人在学习osgEarth时依照体会或从别地方看到做一种简朴整顿,有些东东就是官方文档翻译过来,都是依照自己需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。对个人在初期使用osgEarth时有诸多协助,因此特发上来,但愿对人们也有协助 osgEarth学习笔记 1. 通过earth文献创立图层时,可以指定各种影像数据源和各种高程数据源,数据源顺序决定渲染顺序,在earth文献中处在最前在渲染时处在最底层渲染;因此如果有高低精度不同影响数据或者高程数据,在创立earth文献时要将粗精度数据放在上方xml节点,高精度放在其下
2、面节点; 2. osgEarth自带各种驱动器,不同驱动器驱动不同数据源,自己也可以扩展驱动器读取相应数据; 3. 可以通过profile属性指定数据投影方式或者数据分页方式以及地理空间延展;osgEarth通过profile创立数据四叉树,每个四叉树节点数据瓦片通过TileKey类来标示;一种地形数据能否正常工作要看创立它驱动器与否可以创立和相应profile兼容数据瓦片;例如,如果要生成地球数据,就需要指定global-geodetic 或者global-mercator profile,相应数据源要可以在这种profile下生成相应地形数据; 4.通过earth文献,最基本也是最重
3、要功能是咱们可以指定生成地形坐标属性(地理坐标或投影坐标)影像数据、高程数据、矢量数据、模型数据、以及缓冲位置,通过这些基本要素就可以容易生成咱们想要地形; 5. osgEarth只能使用16或32位高程数据源; 6. 如果直接使用原始影像、高程以及矢量数据,可以用GDAL驱动器,在这种状况下需要注意几种性能问题。第一,将数据源预先进行坐标变换,变换为目的地形坐标,否则osgEarth会对源数据进行坐标投影变换,这将减少数据加载及解决速度。如果预先已经将数据源进行对的坐标变换,osgEarth就可以省略这个环节,从而提高其实时解决速度;第二,预先对影像数据进行瓦片解决,例如tiff格式影像
4、数据,它是逐行扫描存储,而osgEarth是每次读取一种瓦片数据,如果预先对影像数据进行瓦片解决,在动态过程中osgEarth就不需要每次读取整个大块影像数据然后提取其需要瓦片数据,而可以直接读取相应瓦片数据即可,这样就大大提高了瓦片数据读取速度。可以通过gdal_translate工具对影像数据进行瓦片解决;第三,创立金字塔数据集可以使osgEarth读取数据更加高效,可以用gdaladdo工具创立金字塔数据集;总之,要想提高osgEarth解决效率,就要预先创立高效数据瓦片构造,除了用gdal、vpb等工具外,也可以通过osgEarth数据缓冲机制创立预解决瓦片数据集。例如咱们可以创立一种
5、如下earth文献将数据缓冲到指定目录: 这种缓冲方式只能缓冲在执行该文献时浏览过地形数据,而不能自动缓冲所有数据,要想自动缓冲所有数据,就需要用到osgEarth自带一种工具,osgearth_se
7、ed,通过osgearth_seed --max-level 7 bluemarble.earth将数据所有缓冲到指定位置,通过这种方式缓冲后,咱们就拥有了一种完整TMS数据源,咱们可以直接通过文献目录方式访问该数据源,也可以将该数据源拷贝到咱们自己本地web服务目录下。详情见http://osgearth.org/wiki/DataPreparation。除此之外还可以用MapTiler以及TileCache工具创立瓦片数据源,用它创立瓦片数据源也可以直接在osgEarth下使用; 7. 可以通过两种方式将osgEarth集成到咱们自己osg应用程序中,第一种就是直接通过ea
8、rth文献方式,直接将earth文献读入作为一种osg节点加入场景即可,此外一种方式就是通过osgEarthAPI。通过API方式大体需要如下几种环节:创立map对象——创立影像数据层——创立高程数据层——将影像数据层以及高程数据层加入到map对象——依照前面创立map对象创立mapNode节点——将mapNode节点加入到场景;示例见http://osgearth.org/wiki/DevelopersGuide。无论是通过earth文献创立地形还是通过API创立地形,咱们都可以在运营时对其进行修改,如果是用earth文献创立地形,需要先找到该earth文献相应mapNode,通过以上两种方
9、式创立mapNode,咱们可以对地形进行修改操作,如添加新影像、高程数据,移除特定影像、高程数据,重新制定影像、高程数据顺序等; 8. 如果咱们地形用是地心坐标系,可以会遇到当相机距离地面非常近时候地形被裁减掉问题,要解决这个问题咱们可以通过设立相机远近裁剪比率或者创立AutoClipPlaneHandler来解决。AutoClipPlaneHandler可以动态监视相机,当相机距离地面很近时动态调节相机近裁减面; 9. 在地形上放置模型对象时可以使用ObjectPlacer类,通过该类可以直接通过经纬度坐标进行模型放置操作; 10. osgEa
10、rth目的是可以在osg中开发基于地理信息应用,可以以便地浏览地理模型数据,可以与开放原则地理数据兼容;osgEarth渲染地形模式分为两种:实时在线模式(直接使用原始数据渲染生成)以及离线模式(数据预解决成瓦片数据或地形数据库); 11. osgEarth使用于如下几种状况应用:迅速以便地运营地形地图数据;使用开放原则地形地图数据,如WMS、TMS、WCS等;通过Web服务方式集成本地存储地形地图数据;系统规定以瘦客户端方式运营;经常解决随着时间变化数据;集成商业数据; 12. 在使用osgEarth自带漫游器EarthManipulator时,如果给漫游器设
11、立一种矩阵或者给漫游器设立一种TetherNode然后再解除,然后再移动相机位置,这时计算出Center会有一种跳跃,然后才正常,导致这个问题因素是给漫游器设立了参照节点(通过SetNode函数)导致,设立了参照节点后漫游器要依照参照节点重新计算Center和相机姿态等参数,在以上两种状况发生时,在重新计算Center时浮现了偏差,要想避免以上两种状况下导致移动异常,可以不让相机结合参照节点重新计算Center,即将Pan函数中recalculateCenter注释掉即可; 13. Map类型分为geocentric和projected两种类型,即地心方式和投影方式,要建立圆形
12、地球就用geocentric类型,用这种类型如果要制定profile,只有geodetic(WGS84投影)和mercator(墨卡托投影)两种模式; 14. Earth文献详解:
13、
14、yCache.db
15、统以哪种方式将世界坐标数据投影到屏幕像素。为了对的渲染影像数据以及高程数据,osgEarth需要懂得数据源profile以及渲染时profile以进行必要转换。-->
16、10.2
17、方式,简化方式使用默认椭球体,也可以通过定义srs自己定义椭球体-->
18、集方式,分别是nearest(采集近来相邻点)、bilinear(双线插值)、average(平均值插值)、triangulate(依照相邻四个点插值)-->
19、及preemptive(优先级加载模式),默认是原则加载模式,preemptive加载模式不同于顺序加载模式,当需要加载最高档瓦片时需要从最低档开始逐级加载,而preemptive模式可以直接跳过中间级直接加载最高档,同步还可以设定不同数据加载优先级,例如可以设定优先加载影像数据而后加载高程数据等,这样可以在视觉上得到优化解决。此外还可以指定加载数据时每个CPU创立线程数量(loading_threads_per_core)或者加载数据使用总线程数量(loading_threads),以及编译地形数据即构建地形瓦片所使用线程数量(compile_threads),注意,加载数据时每个CPU创立 20、线程数量和加载数据使用总线程数量不能同步指定,只能指定其中一种-->
21、xture方式会为每个影像层指定它自己影响纹理单元然后通过GPU进行组合,容许最大纹理层数量要受GPU限制,texture_array是使用一种二维纹理数组通过GPU进行组合,multipass方式是通过创立各种渲染通道进行纹理组合,这种方式没有纹理层数量限制,但会影像系统性能,由于它要给每个纹理层创立一种渲染通道-->
22、最大值系数,系统默认是依照瓦片宽度与该系数相乘作为范畴最大值,该值默认是4,通过该系数可以对不同地形图层lod可见范畴进行控制以提高效率,特别是对于带有文本图层或者测绘标记图层,可以将该系数设小以大大提高系统渲染性能-->
23、沿以防止不同瓦片之间浮现缝隙,该值默认是0.02,如果该值太小,在不同瓦片之间就也许会浮现缝隙,如果太大,也许会导致不必要渲染而影响系统渲染性能,对于高度变化比较大地形或者是做了高程夸张地形可以尽量将该值设大某些,以免浮现缝隙-->
24、2,放宽倍数就是1.02-->
25、照驱动器创立默认缓冲标记;可以指定影像数据细分最小层数min_level以及最大层数max_level;可以指定可见范畴min_range以及max_range,该值是影像数据块距离相机距离(单位是米),当影像图层数据块不在该范畴内时图层将不显示,等同于lod节点可见范畴;可以指定该影像数据加载权重loading_weight,详情可见loading_policy,权重越大,加载优先级越高;可以指定影像瓦片数据黑名单文献名blacklist_filename,当系统祈求影像数据瓦片时,如果包括该瓦片影响文献不存在,系统就会把该祈求数据瓦片放入到一种黑名单中,这样可以避免再次祈求该无效数据,从而
26、提高数据祈求效率。如果黑名单中没有任何记录,该黑名单就处在被禁用状态,也不会影像系统性能。-->
27、示无数据提示,通过设定该属性可以让系统也显示无数据状态提示图片信息-->
28、ng
29、为影像/高程驱动器、模型驱动器、特性驱动器、缓冲驱动器以及地形引擎驱动器5大类;
//影像/高程驱动器
30、ures name=”myWorld” driver=”ogr”>
31、RI Shapefile
33、res name="world" driver="ogr">
35、
36、器)复合成一种逻辑图层,其实是一种伪装驱动器,不是真实驱动器
37、献都打包成一种文献),如果指定了目录,还可以指定要加载该目录下某些类型文献(通过指定扩展名),此外,如果指定是目录,系统递归遍历该目录下所有文献将要加载文献生成一种逻辑图层,需要注意是,该目录下所有数据必要是统一坐标系统以及同样波段和波段插值;基于性能考虑,最佳对源数据预先进行分块分级解决以及坐标重投影预解决,这样可以大大提高系统在运营时性能。如果系统读取到源数据与运营时规定投影方式不匹配,系统就会在运营时对数据进行重投影,这样就会减少系统性能,如果想在这种状况下提高系统性能,可以让系统缓存重投影后数据:
38、 40、>
42、步使用vpb地形数据库以及原始影像、高程数据,可以在不变化既有vpb地形数据基本上在已有vpb地形上叠加此外影像数据。
43、定vpb地形数据库使用目录构造,分为nested,task,以及 flat三种类型. 默认是 flat类型 -->
44、偏移特定高度重要是为理解决z-fighting问题-->
45、透效果。
46、器采用模板缓冲技术将矢量数据覆盖到地形上
47、及子要素基本与影像数据相似,特别需要注意是,在定义瓦片大小时,默认值是256,这个值对于影像数据是适当,但对于高程数据来说太大,应当将其设为比较小值,例如32,否则会减少系统性能-->
48、
49、将非地形数据图层添加到地形地形图上,某些驱动器可以将矢量数据或者特性数据转换为几何体或者覆盖层,对于海量特性数据或者覆盖区域范畴特别大数据如果不对其进行优化解决,将严重影响系统性能,其中方式之一就是对其进行网格划分,对于不同驱动器,网格划分实现方式也不同样,自带模型特性数据驱动器,例如feature_stencil和feature_geom驱动器就可以将几何体数据划分为一种个小网格-->
50、割,不同某些分别属于不同网格即可,centroid形心方式是判断几何体形心,形心落在哪个网格,就以为该几何体属于哪个网格-->






