程序集: SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll
语法
C# |
---|
public static DistanceAnalystResult SurfaceDistance( DistanceAnalystParameter parameter ) |
参数
- parameter
- Type: SuperMap.Analyst.SpatialAnalyst..::.DistanceAnalystParameter
指定的距离栅格分析参数。
返回值
表面距离栅格分析的结果。备注
该方法根据源数据集和表面栅格生成相应的表面距离栅格、表面方向栅格(可选)和表面分配栅格(可选)。源数据可以是矢量数据(点、线、面),也可以是栅格数据。对于栅格数据,要求除标识源以外的单元格为无值。
- 表面距离栅格的值表示表面栅格上该单元格到最近源的表面最短距离。最近源是指当前单元格到达所有的源中表面距离最短的一个源。表面栅格中为无值的单元格在输出的表面距离栅格中仍为无值。
- 表面方向栅格的值表达的是从该单元格到达最近源的最短表面距离路径的行进方向。在表面方向栅格中,可能的行进方向共有八个(正北、正南、正西、正东、西北、西南、东南、东北),使用 1 到 8 八个整数对这八个方向进行编码,如下图所示。注意,源所在的单元格在表面方向栅格中的值为 0,表面栅格中为无值的单元格在输出的表面方向栅格中将被赋值为 15。
- 表面分配栅格的值为单元格的最近源的值(源为栅格时,为最近源的栅格值;源为矢量对象时,为最近源的 SMID),单元格到达最近的源具有最短表面距离。表面栅格中为无值的单元格在输出的表面分配栅格中仍为无值。
从当前单元格(设为 g1)到达下一个单元格(设为 g2)的表面距离 d 的计算方法为:
其中,b 为 g1 的栅格值(即高程)与 g2 的栅格值的差;a 为 g1 与 g2 的中心点之间的直线距离,其值考虑两种情况,当 g2 是与 g1 相邻的上、下、左、右四个单元格之一时,a 的值等于单元格大小;当 g2 是与 g1 对角相邻的四个单元格之一时,a 的值为单元格大小乘以根号 2。
当前单元格到达最近源的距离值就是沿着最短路径的表面距离值。在下面的示意图中,源栅格和表面栅格的单元格大小(CellSize)均为 1,单元格(2,1)到达源(0,0)的表面最短路径如右图中红线所示:
那么单元格(2,1)到达源的最短表面距离为:
下图为生成表面距离栅格的示意图。其中,在表面栅格上,根据结果表面方向栅格,使用蓝色箭头标识了单元格到达最近源的行进方向。
通过上面的介绍,可以了解到,结合表面距离栅格及对应的方向、分配栅格,可以知道表面栅格上每个单元格最近的源是哪个,表面距离是多少以及如何到达该最近源。
注意,生成表面距离时可以指定最大上坡角度(MaxUpslopeDegree)和最大下坡角度(MaxDownslopeDegree),从而在寻找最近源时避免经过上下坡角度超过指定值的单元格。从当前单元格行进到下一个高程更高的单元格为上坡,上坡角度即上坡方向与水平面的夹角,如果上坡角度大于给定值,则不会考虑此行进方向;从当前单元格行进到下一个高程小于当前高程的单元格为下坡,下坡角度即下坡方向与水平面的夹角。同样的,如果下坡角度大于给定值,则不会考虑此行进方向。如果由于上下坡角度限制,使得当前单元格没能找到最近源,那么在表面距离栅格中该单元格的值为无值,在方向栅格和分配栅格中也为无值。
通过该方法生成表面距离栅格,以及表面方向栅格和表面分配栅格,需要通过距离栅格分析参数(DistanceAnalystParameter)对象设置相关的参数,需要设置哪些参数请参阅 DistanceAnalystParameter 类。
下图为生成表面距离栅格的一个实例,其中源数据集为点数据集,表面栅格为对应区域的 DEM 栅格,生成了表面距离栅格、表面方向栅格和表面分配栅格。