当前位置: 首页 > news >正文

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

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 三者一起展示

http://www.xdnf.cn/news/988975.html

相关文章:

  • 【指针】(适合考研、专升本)
  • MySQL中外键约束详解 外键在表关系维护中的作用
  • vue定义的组件在外部引入时的问题
  • centos7 安装 zabbix6 -proxy
  • 51la统计怎么用及悟空统计的独特优势
  • C#winform画图代码记录
  • Java八股文——Spring「SpringCloud 篇」
  • 西安java面试总结1
  • 亚马逊Woot黑五策略,快速提升亚马逊业绩
  • Docker三大核心组件详解:镜像、容器、仓库的协作关系
  • 模拟IC设计提高系列5-温度角与蒙特卡洛仿真
  • 基于GA遗传优化的PID控制器最优控制参数整定matlab仿真
  • OpenLayers 加载Geoserver WMTS服务
  • 进程的信号掩码,信号集,sigprocmask函数
  • QMultiMapQHashQList使用区别
  • 中学教资考试面试回忆
  • 学车笔记 变挡
  • 图数据库的理解
  • Python打卡第51天
  • n8n部署步骤
  • AI Engine Kernel and Graph Programming--知识分享9
  • PostgreSQL --数据库操作
  • libyuv的三种缩放模式
  • Verilog:流水线乘法器
  • 【热更新知识】学习三 XLua学习
  • 我们来学mysql -- 8.4版本记录慢查询
  • 1.对结构学习的整体构想
  • 教师端用户操作手册
  • Smartbi双产品线功能更新:主动分析更省心,数据治理更高效
  • tableau 实战工作场景专业仪表盘的搭建(整体思路)详解