表面分析是一组提取地形表面信息的技术。它可用于各种目的,例如自然资源管理、交通规划和环境监测。
在本文中,我们将使用 Python 对数字高程模型 (DEM) 进行表面分析。在深入代码之前,我们先来解释一下有哪些表面分析技术。
表面分析技术
可以使用多种不同的技术来提取地形表面的信息以进行表面分析,其中包括:
- 坡度:坡度是衡量表面陡度的指标。它是通过测量特定距离内的高程变化来计算的。
- 坡向:坡向测量表面朝向。它是通过测量最陡坡度的方向来计算的。
- 山体阴影:山体阴影用于测量地表接收的阳光量。计算时会考虑太阳在天空中的位置、地表的坡度和坡向。
- 曲率:曲率测量表面弯曲的程度。它是通过测量高程数据的二阶导数来计算的。
- 视域:视域测量从特定点看到的面积。它是通过追踪从关注点到地平线的射线来计算的。
Python 中的 DEM
使用你常用的 Python 库,你可以像处理其他栅格图像一样处理 DEM。在本教程中,我们将使用 Rioxarray 读取数据,并使用 Datashader 和 XArrayspatial 库执行不同的表面分析技术。
您可以从多个来源获取 DEM。我们使用的是航天飞机雷达地形测绘任务 (SRTM GL1) Global 30m,您可以从 OpenTopography 门户获取。
因此,让我们首先用 RioXarray 打开光栅文件并绘制它。
import rioxarray
dem = rioxarray.open_rasterio('output_SRTMGL.tif',masked=True).squeeze().drop("band")
dem.plot();
山体阴影
Datashader 的“shade”函数可以用不同的颜色来可视化图像,以表示不同的海拔高度:白色和红色像素表示较高海拔,绿色和浅绿色像素表示中等海拔,黄色和蓝色像素表示较低海拔。我们使用Elevation
色彩图和linear
插值来实现此功能。
from datashader.transfer_functions import shade
from datashader.colors import Elevationshade(da, cmap=Elevation, how='linear')
但是,阴影函数无法在 3D 中显示。使用山体阴影函数,我们可以创建地形的 3D 效果。
from xrspatial import hillshadeillumination = hillshade(dem)hillshade_gray = shade(illumination, alpha=255, how='linear')
hillshade_gray
您还可以叠加地形和山体阴影,以获得更直观、更生动的 3D 高程图。这是山体阴影的颜色阴影和地形的组合。
from datashader.transfer_functions import stack
terrain_elevation = shade(dem, cmap=Elevation, alpha=128, how='linear')
stack(hillshade_gray, terrain_elevation)
山体阴影地形