欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 基于地形数据计算山体阴影

基于地形数据计算山体阴影

2025/6/13 15:57:46 来源:https://blog.csdn.net/mengjizhiyou/article/details/148565354  浏览:    关键词:基于地形数据计算山体阴影

1 基础知识

3 种最常见的激光雷达派生数据产品:

  • Digital Terrain Model (or DTM):地面高程。
  • Digital Surface Model (or DSM):表面顶部(想象一下在森林的树冠上覆盖一张床单)。
  • Canopy Height Model (CHM):地面与物体顶部离地之间的高度或残差距离。这包括树木、建筑物和地球表面任何其他物体的实际高度。CHM 通过DSM 中减去 DTM 来创建。

2 基于地形数据计算山体阴影

1 读取地形数据

dtm_dataset = rio.open(os.path.join('.\data','NEON_D17_TEAK_DP3_320000_4092000_DTM.tif'))
dtm_data = dtm_dataset.read(1)

2 计算山体阴影

山体阴影用于可视化给定指定光源的表面上每个像素的假设照明值(从 0 到 255)。

要计算山体阴影,需要照明源的天顶(高度)和方位角,以及地形的坡度和坡向。

山体阴影的公式为:

其中所有角度均以弧度为单位。

# function to caluclate hillshade
def hillshade(array,azimuth,angle_altitude):azimuth = 360.0 - azimuth x, y = np.gradient(array)slope = np.pi/2. - np.arctan(np.sqrt(x*x + y*y))aspect = np.arctan2(-x, y)azm_rad = azimuth*np.pi/180. #azimuth in radiansalt_rad = angle_altitude*np.pi/180. #altitude in radiansshaded = np.sin(alt_rad)*np.sin(slope) + np.cos(alt_rad)*np.cos(slope)*np.cos((azm_rad - np.pi/2.) - aspect)return 255*(shaded + 1)/2hs_data = hillshade(dtm_data,225,45)

DTM+山体阴影:

3 计算冠层高度

dsm_dataset = rio.open(os.path.join('.\data','NEON_D17_TEAK_DP3_320000_4092000_DSM.tif'))
dsm_data = dsm_dataset.read(1)
chm_data = dsm_data - dtm_data;

4 三者一起展示

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词