分享

制作3D地形(二):高程数据处理

 GIS荟 2021-09-19

前言:为了能在建模软件 Blender 中成功建立起3D模型,需要对高程数据进行预处理。

高程数据,你也可以叫 DEM(数字高程模型)数据。这种数据有多种表现形式,同样也有多种储存方式,或者说格式;最常见的就是以灰度值来表示高程的灰度栅格数据 TIFF,后缀为 tif 的格式。后文说的高程数据都是指高程灰度图栅格数据

Blender 就是通过读取高程数据中各像素的灰度值来获取相应的高度信息,然后建立起3D模型。

Blender 仅读取灰度值,对其空间坐标信息不敏感,读入到 Blender 中的空间坐标信息就没了,所以不一定非要 TIFF 数据才行,只要是灰度栅格图像,比如 PNG 和 JPEG 格式,在保证像素类型正确的前提前,都是可以通过 Blender 建立3D模型的。

根据具体的情况和相应的场景可能需要不同的格式,不过一般使用 TIFF 格式的就可以了。

数据处理分为以下4个部分,其中最后两个部分才是重中之重,并且所有的操作都同时提供 ArcGIS 和 QGIS 两种处理方式

  • 数据获取;

  • 合并-裁剪-投影-重采样;

  • 范围拉伸;

  • 转换像素类型。

理论非常简单,但是制作出的地形模型好坏的关键就是数据处理。

文章最后会提供原始高程数据以及处理完成后的数据,你可以在后续的教程和个人的试验中使用,需要的可以自取。

第一步 数据获取

制作3D模型需要高程数据,现在获取高程数据的有效途径非常多,读者可以根据自己的需要选择合适分辨率的高程数据,如果你想制作小比例尺大范围的地图,最好选择较大空间分辨率的高程数据,比如1千米x1千米分辨率;而如果你想制作大比例尺较为精细的地图的话,就可以选择10米x10米、甚至更小空间分辨率的高程数据。

特别提醒一点,小心使用保密数据,尽量不用。你能在网上下载到的数据想怎么折腾都可以。

网上有很多关于高程数据的获取指南,各位可以根据自己的实际情况获取相应的数据。

笔者目前使用较多的是下面这个网站:

  • http:///Coverage%20map%20viewfinderpanoramas_org3.htm

该网站可以下载全球的高程数据,其中中国区域高程数据的空间分辨率一般都是90米,最重要的是下载速度不慢;打开网址可以看到很多小格子,点击就可以下载这个区域内的 DEM 数据,解压后数据格式是 HGT 格式,可以直接用 ArcGIS 或者 QGIS 打开。

第二步 合并-裁剪-投影-重采样

其实这四个操作都是可选的,因为并不是所有数据都需要全部走一遍这些流程,因为你完全可以使用一个已经处理好、同时已经设置了投影系的 tif 数据。

不过可能并不是所有读者都有 GIS 相关背景经验,可能有的读者仅仅是兴趣使然,所以为了不落下每一个人,这里讲一下如何合并-裁剪-投影-重采样,对此非常熟悉的读者朋友可以跳过这一小节,直接进入下一小节。

2.1 合并

通常来说,高程数据都是一块一块的矩形;所以你很有可能需要通过将多个矩形合并起来获取目标范围区。

将周围的高程数据添加进来,将其合并(也叫镶嵌)成一个整块。

4块高程数据

>>工具位置

ArcGIS 可以使用镶嵌至新栅格工具,该工具位于数据管理工具->栅格->栅格数据集->镶嵌至新栅格。

QGIS 中使用 Merge 工具可以镶嵌栅格;该工具来自于 GADL 包。位于QGIS 右侧工具栏,GDAL->Raster miscellaneous->Merge。或者在上方工具栏中快捷打开:

>>

2.2 裁剪

>>工具位置

ArcGIS 可以使用裁剪工具;位于数据管理工具->栅格->栅格处理->裁剪

QGIS 中依然在上方的 Raster 菜单中,依次点击 Extraction-> Clip raster by mask layer 即可。

>>

2.3 投影

在 Blender 读取高程数据之前应该确保高程数据已经正确设置好了投影。不然 Blender 读取的形状就是扁的,因为这个扁扁的形状才是投影前高程数据的真实情况。

那为什么 ArcGIS 中就显示正常呢?因为 GIS 软件会自动做一个投影显示。所以设置投影系是必不可少的一步操作。

左:投影前的真实形状,形状更扁;右:投影后

>>工具位置

ArcGIS 中的投影工具在数据管理工具->投影和变换->栅格->投影栅格

QGIS 的投影工具在菜单栏上方的 Raster-Projections-Warp

>>

2.4 重采样

重采样:根据一部分像素的信息赋值给其他像素信息的过程。

这里的重采样应该叫修改像素空间分辨率,只不过也是用重采样的方式实现而已。

什么叫空间分辨率?一个像素所表示的实际地理大小就是空间分辨率。比如这个教程使用的高程数据空间分辨率是90米,那么这就代表一个像素映射现实生活中一个90米长、90米宽的方形区域。

如果想要制作整个中国的3D模型,90米分辨率就太精细了,整个数据量就非常庞大,直接让电脑死机,所以可以通过重采样为1千米或者10千米。

单独的重采样工具不是所有 GIS 软件中都有,GIS 软件中一些和栅格相关的工具通常会自带修改空间分辨率的选项,所以可以顺便设置好空间分辨率大小;比如使用 QGIS 时我就喜欢使用栅格投影工具来顺便修改空间分辨率。

该教程提供的高程数据空间分辨率大小合适,不需要修改。

>>工具位置

ArcGIS 中的单独重采样工具在数据管理工具->栅格->栅格处理->重采样;ArcGIS 10.3版本有4种方法。

QGIS 的话我是直接使用投影工具来解决,因为 QGIS 本身没有独立的重采样工具,在 QGIS 主界面上面的菜单栏中选择 Raster-Projections-Warp 即可。

将投影工具中的投影选项空着,只需要设置好 Output file resolution in target georeferenced units 这个选项,就可以在不修改投影的前提下修改空间分辨率。

>>

第三步 范围拉伸

范围拉伸,英文:rescale。

范围拉伸是指把高程数据的范围扩大,普通的高程数据一般就在0到4000左右,教程提供的高程数据范围是42到2283(是否构建栅格金字塔会导致范围些许的不同,不过影响不大),那么为什么要拉伸?有以下两个重要原因:

  • 适配 Blender;如果以42到2283这样的范围导入 Blender,最终的成果建模是非常平坦,就像一张白纸,就像下面这样,看的见嘛?快瞅瞅:

  • 保留细节;一般来说,高程数据的像素数据类型是浮点型,是小数形式,而 Blender 支持整数,所以需要转换。如果不拉伸直接转换,小数会被四舍五入成整数,数据丢失,反映到模型上就是细节丢失、不连续。

由于这两个原因,所以我们必须先对高程数据进行拉伸。

那么具体拉伸到多大呢?大神 Daniel Huffman 提供了参考,或许这不是参考,这就是答案 👍

>>工具位置

ArcGIS 中使用栅格计算器,工具栏中依次打开 Spatial Analyst 工具->地图代数,最后打开栅格计算器工具执行栅格拉伸操作。

然后输入以下计算表达式:

你每一个输入的整数最好使用 ArcGIS 提供的关键字 Float 括起来,否则输出的数据就有可能自动四舍五入到整数位,最后导致的结果要么是0要么是65535(是否会四舍五入到整数取决于高程数据当前的像素类型,不过保险起见,都统一加上 Float 吧)。

QGIS 使用 Raster Calculator。点击主界面上方菜单栏中的 Raster->Raster Calculator

然后输入以下计算表达式:

>>

Note:①这里没有考虑高程数据范围涉及到负数(海底)的情况。②可能会遇到高程数据中有空值 Nodata,请注意。

第四步 转换像素类型

简单理解,像素类型描述了图像的最小储存单元所使用的格式。

查看像素类型

在创建3D模型时,Blender 只能支持特定的像素类型,那就是16位无符号整型;所以现在要做的就是把像素类型装换为6位无符号整型。

16位无符号整型,英文:16 unsigned int 或者 16 bit unsigned;无符号表示正数,从0开始到2的16次方的整数。

从0到2的16次方正好有65536个数(包括0),那么最大数就是65535,这就是公式最后乘数字65535的原因。

>>工具位置

ArcGIS 可以使用复制栅格工具来修改像素类型:数据管理工具->栅格->栅格数据集->复制栅格;然后像素类型选择:16_BIT_UNSIGNED

QGIS 可以使用 translate 工具:上方菜单栏依次点击 Raster->conversion->translate;然后在 Output data type 中选择 UInt16。

>>

最后

本章节你可以了解到:

  • 使用高程灰度图栅格数据可以在 Blender 中创建3D地形模型;

  • 高程数据的基本预处理操作(包括 ArcGIS 和 QGIS);

  • 高程范围拉伸的重要性和操作;

  • Blender 建模需要像素类型为16位无符号整型的栅格图像。

好的,学完这章,距离下面的成果又近了一大步!

资料下载:

  1. 提供原始高程数据以及处理好后的高程数据;

    1. 1 原始高程数据:原始未投影 TIFF 数据。

    2. 2 成果高程数据:完成所有处理步骤,可直接建模的 TIFF 数据。

  2. Blender 文件(后续章节会提供);

  3. 系列教程PDF文档。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多