55 osgdem(VPB)
登录

osgdem(VPB)

作者: osgChina 发布于2018-10-22 14:50:41 分类 : 用户指南

本文介绍了如何使用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 ...