搜档网
当前位置:搜档网 › osgearth记录文本(编辑)

osgearth记录文本(编辑)

osgearth记录文本(编辑)
osgearth记录文本(编辑)

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文件将数据缓冲到指定的目录:

c:/data/bluemarble.tif

c:/osgearth_cache

jpg

这种缓冲方式只能缓冲在执行该文件时浏览过的地形数据,而不能自动缓冲所有的数据,要想自动缓冲所有的数据,就需要用到osgEarth自带的一个工具,osgearth_seed,通过osgearth_seed --max-level 7 bluemarble.earth将数据全部缓冲到指定位置,通过这种方式缓冲后,我们就拥有了一个完整的TMS数据源,我们可以直接通过文件目录的方式访问该数据源,也可以将该数据源拷贝到我们自己的本地web服务目录下。详情见https://www.sodocs.net/doc/be16500704.html,/wiki/DataPreparation。除此之外还可以用MapTiler以及TileCache 工具创建瓦片数据源,用它创建的瓦片数据源也可以直接在osgEarth下使用;

7. 可以通过两种方式将osgEarth集成到我们自己的osg应用程序中,第一种就是直接通过earth文件的方式,直接将earth文件读入作为一个osg节点加入场景即可,另外一种方式就是通过osgEarth的API。通过API的方式大体需要以下几个步骤:创建map对象——创建影像数据层——创建高程数据层——将影像数据层以及高程数据层加入到map 对象——根据前面创建的map对象创建mapNode节点——将mapNode节点加入到场景;示例见https://www.sodocs.net/doc/be16500704.html,/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文件详解:

C:/myCache

C:/myCache.db

jpg

google

300

prog=latlong +ellps=WGS84 +datum=WGS84

-10.2

-10

20

30

global-geodetic

global-mercator

+proj=latlong +a=6800000 +b=6800000

egm96-meters

nearest/bilinear/average/triangulate

true

auto/multitexture/texture_array/multipass

10

4.5

1.2

0.05

2.0

0.02

true

素,有些是公共的,有些是针对特定的driver的。我们可以给影像数据指定driver(驱动器),不同的驱动器用于驱动不同的影像数据源;可以指定cacheid(影像数据缓冲标识),一个影像缓冲标示对应特定的缓冲目录或缓冲数据库文件,如果不指定,系统会根据驱动器创建默认的缓冲标识;可以指定影像数据细分的最小层数min_level以及最大层数max_level;可以指定可见范围min_range以及max_range,该值是影像数据块距离相机的距离(单位是米),当影像图层数据块不在该范围内时图层将不显示,等同于lod节点的可见范围;可以指定该影像数据的加载权重loading_weight,详情可见loading_policy,权重越大,加载的优先级越高;可以指定影像瓦片数据黑名单文件名blacklist_filename,当系统请求影像数据瓦片时,如果包含该瓦片的影响文件不存在,系统就会把该请求的数据瓦片放入到一个黑名单中,这样可以避免再次请求该无效数据,从而提高数据请求的效率。如果黑名单中没有任何记录,该黑名单就处于被禁用状态,也不会影像系统性能。-->

global_geodetic

someURL

0 0 255 200

true

png

0.5

true

40

20

//特定驱动器属性设置,驱动器分为影像/高程驱动器、模型驱动器、特征驱动器、缓冲驱动器以及地形引擎驱动器5大类;

//影像/高程驱动器

../data/world.shp

通过预先在后台多处理一部分矢量数据,从而在显示区域发生变化时载入数据比较快,从而降低给视觉造成的数据显示延迟-->

ESRI Shapefile

data/world.shp

ESRI Shapefile

french="true"

french="false"

line

//ArcGIS驱动器,是从ESRI的服务器读取影像数据

//复合驱动器,可以将多个影像数据源(可以使用各自不同的驱动器)复合成一个逻辑图层,其实是一个伪装的驱动器,不是真实的驱动器

...

...

...

//GDAL驱动器,使用该驱动器,指定源数据url时可以指定文件也可以指定某个目录(不必将所有的文件都打包成一个文件),如果指定了目录,还可以指定要加载该目录下某些类型的文件(通过指定扩展名),此外,如果指定的是目录,系统递归遍历该目录下的所有文件将要加载的文件生成一个逻辑图层,需要注意的是,该目录下所有的数据必须是统一的坐标系统以及同样的波段和波段插值;基于性能的考虑,最好对源数据预先进行分块分级处理以及坐标重投影预处理,这样可以大大提高系统在运行时的性能。如果系统读取到的源数据与运行时要求的投影方式不匹配,系统就会在运行时对数据进行重投影,这样就会降低系统性能,如果想在这种情况下提高系统性能,可以让系统缓存重投影后的数据:

/files/my_cache_folder

../data/boston-inset.tif

256

//通过指定目录的方式加载高程数据示例:

..\data\terrain

tif

32

10

//osg驱动器,直接通过osg的文件读写插件读取相应类型的影响数据或高程数据

//tilecache驱动器,读取tilecache磁盘缓存数据,通过tilecache工具可以从WMS服务器创建或缓存地图数据到磁盘,然后通过该驱动器进行离线读取。

F:/data/tilecache/mapdata

world

jpeg

//tileservice驱动器,从NASA服务器读取数据

//tms驱动器,通过tms服务的方式读取数据

//wms驱动器,通过wms服务的方式读取数据

//VPB驱动器,从vpb生成的地形数据库读取相应的影像和高程数据,注意,osgEarth只能读取适用VPB使用—terrain选项创建的地形数据库。这样一来我们就可以同时使用vpb 的地形数据库以及原始的影像、高程数据,可以在不改变现有vpb地形数据的基础上在已有的vpb地形上叠加另外的影像数据。

5

11

global-geodetic

0

//模型驱动器

// feature_geom驱动器,该驱动器就是将矢量数据创建成几何对象进行渲染

相关主题