生成三维晕渲图。
命名空间:
SuperMap.Analyst.SpatialAnalyst程序集: SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll
语法
C# |
---|
public static DatasetGrid CalculateHillShade( DatasetGrid sourceDatasetGrid, ShadowMode shadowMode, double azimuth, double altitudeAngle, double zFactor, Datasource targetDatasource, string targetDatasetName ) |
参数
- sourceDatasetGrid
- Type: SuperMap.Data..::.DatasetGrid
指定的待生成三维晕渲图的 DEM 栅格。
- shadowMode
- Type: SuperMap.Analyst.SpatialAnalyst..::.ShadowMode
指定的三维晕渲图的渲染类型。
- azimuth
- Type: System..::.Double
指定的光源方位角。用于确定光源的方向,是从光源所在位置的正北方向线起,依顺时针方向到光源与目标方向线的夹角,范围为 0-360 度,以正北方向为 0 度,依顺时针方向递增。
- altitudeAngle
- Type: System..::.Double
指定的光源高度角。用于确定光源照射的倾斜角度,是光源与目标的方向线与水平面间的夹角,范围为 0-90 度。当光源高度角为 90 度时,光源正射地表。
- zFactor
- Type: System..::.Double
指定的高程缩放系数。该值是指在DEM 栅格中,栅格值(Z 坐标,即高程值)相对于 X 和 Y 坐标的单位变换系数。通常有 X,Y,Z 都参加的计算中,需要将高程值乘以一个高程缩放系数,使得三者单位一致。例如,X、Y 方向上的单位是米,而 Z 方向的单位是英尺,由于 1 英尺等于 0.3048 米,则需要指定缩放系数为 0.3048。如果设置为 1.0,表示不缩放。
- targetDatasource
- Type: SuperMap.Data..::.Datasource
指定的用于存储输出结果的数据源。
- targetDatasetName
- Type: System..::.String
指定的结果数据集的名称。
返回值
生成的三维晕渲图。备注
三维晕渲图是指通过模拟实际地表的本影与落影的方式反映地形起伏状况的栅格图。通过采用假想的光源照射地表,结合栅格数据得到的坡度坡向信息,得到各像元的灰度值,面向光源的斜坡的灰度值较高,背向光源的灰度值较低,即为阴影区,从而形象表现出实际地表的地貌和地势。由栅格数据计算得出的这种山体阴影图往往具有非常逼真的立体效果,因而称其为三维晕渲图。
三维晕渲图在描述地表三维状况和地形分析中都具有比较重要的价值,当将其他专题信息叠加在三维晕渲图之上时,将会更加提高三维晕渲图的应用价值和直观效果。
在生成三维晕渲图时,需要指定假想光源的位置,该位置由光源的方位角和高度角确定。方位角确定光源的方向,高度角是光源照射时倾斜角度。例如,当光源的方位角为 315 度,高度角为 45 度时,其与地表的相对位置如下图所示。
三维晕渲图有三种类型:渲染阴影效果、渲染效果和阴影效果,通过 ShadowMode 枚举类型来指定。
示例
以下代码示范了如何对给定的 DEM 栅格数据集计算三维晕渲图,并返回计算结果(一个栅格数据集)。本示例中使用的渲染方式为渲染和阴影(ShadowMode.IlluminationAndShadow)。
CopyC#
private DatasetGrid HillShadeCalculate(DatasetGrid sourceDatasetGrid, Datasource targetDatasource) { //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除 String targetDatasetName = "hillShade"; if (targetDatasource.Datasets.Contains(targetDatasetName)) { targetDatasource.Datasets.Delete(targetDatasetName); } //设置光源的方位角和高度角 Double azimuth = 300.0; Double altitudeAngle = 60.0; //调用三维晕渲图计算方法,并获取计算结果栅格数据集 DatasetGrid resultDatasetGrid = CalculationTerrain.CalculateHillShade(sourceDatasetGrid, ShadowMode.IlluminationAndShadow, azimuth, altitudeAngle, 1.0, targetDatasource, targetDatasetName); return resultDatasetGrid; }