本文介绍了如何使用osgdem根据影像和高程图生成基于pagedLOD的三维地形。这其中内容众多,下面是一个step by step的方式介绍一个实例。
QUICK STEP BY STEP GUIDE
下面来介绍使用VPB(osgdem)来根据影像和高程逐步生成地形的过程。
1. 下载、编译GDAL, 和OSG,其中在编译OSG时必须配置GDAL插件。下载 VirtualPlanetBuilder.
2. UNIX:
cd VirtualPlanetBuilder ./configure make sudo make install
3. 确认有GB以上的空间,是GB不是TB :-)
4. 从此处下载示例数据:
http://www.cc.gatech.edu/projects/large_models/ps.html
Download Elevation Map: 16385 × 16385 PNG: 188MB
Download Texture Map: 16384 × 16384 PNG: 268MB
5. 为了避免锯齿和处理快速,给tif建立金字塔(是基于mip map的):
gdal_translate ps_height_16k.png ps_height_16k.tif gdaladdo -r average ps_height_16k.tif 2 4 8 16 32 gdal_translate ps_texture_16k.png ps_texture_16k.tif gdaladdo -r average ps_texture_16k.tif 2 4 8 16 32
6.使用如下命令建立地形,-l表示级别,级别越高,时间越久,数据量越大。数据的分辩率一旦确定下来,是有个可以分的最大级别的。osgdem只是前端运行的程序,后端其中使用的osgTerrain::DataSet:
osgdem --xx 10 --yy 10 -t ps_texture_16k.tif \ --xx 10 --yy 10 -d ps_height_16k.tif \ -l 8 -v 0.1 -o puget.ive -a pegout.osga
等一段时间即出结果。可以使用osgviewer puget.ive查看结果。
下面对osgdem后跟的参数进行解释:
--xx --yy指定了x与y方向每个像素代表的长度,单位是米。
-t是纹理,你可以指定多个纹理,当指定多个纹理是后台osgTerrain::DataSet会根据纹理坐标进行拼接。
-d是高程,同上。
-l是最大生成级别。实际分级取数据可分别与当前级别的小值。
-v是指高程夸张的倍数,默认不夸张是1。
-o是输出文件名。
-a是把文件都放到osga当中。osga是文件的压缩格式,有启动文件。
7. 使用下面命令去查看文件,也可以打开pegout.ive
osgviewer pegout.osga
8. 如果你的影像和高程数据有坐标信息,则不需要--xx与--yy参数,-v参数也可以不输。
9. 注意通过-t指定多个影像或-d指定多个高程时,后台会跟据坐标信息自动拼接。
Usage of VPB source file
把osgdem的命令信息输入到source文件中,这样可以可视化编辑,避免敲着不方便。
// Create the build.source file osgdem --bluemarble-west -t ../land_shallow_topo_west.tif \ --bluemarble-east -t ../land_shallow_topo_east.tif \ --geocentric \ -o earth/earth.ive \ --so build.source // run the build osgdem -s build.source // have a look at the file - it's just an extended form of a .osg file cat build.source // override the number of levels osgdem -s build.source -l 4 // run build adding your extra imagery osgdem -s build.source -t MyOrthoImage.tif
坐标系统
WKT 坐标系统定义清晰,应用广泛,但是字符串太复杂,人类难以自己手写。而PROJ4就方便多了……,不管如何,拿到的影像和高程尽量是已经有坐标系统的,如果没有坐标系统就需要使用GlobalMapper或者Erdas进行校正,可以上网查一下相关教程。最终osgdem都是使用GDAL处理的。如果非要手工指定,可以使用--cs来指定。下面是例子。
示例:
osgdem ... --cs "+proj=latlong +datum=WGS84" -o ...
osgdem ... --cs "+proj=utm +zone=47" -o ...
osgdem ... --geocentric -o ...
浏览次数:60981 次