栅格分带统计分析。

方法中值数据为栅格的数据集,带数据可以是矢量或栅格数据。

命名空间:  SuperMap.Analyst.SpatialAnalyst
程序集:  SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll

语法

C#
public static ZonalStatisticsAnalystResult ZonalStatisticsOnRasterValue(
	ZonalStatisticsAnalystParameter parameter
)

参数

parameter
Type: SuperMap.Analyst.SpatialAnalyst..::.ZonalStatisticsAnalystParameter
指定的分带统计参数设置。

返回值

分带统计分析结果。

备注

栅格分带统计,是以某种统计方法对区域内的单元格的值进行统计,将每个区域内的统计值赋给该区域所覆盖的所有单元格,从而得到结果栅格。栅格分带统计涉及两种数据,值数据和带数据。值数据即被统计的栅格数据,带数据为标识统计区域的数据,可以为栅格或矢量面数据。下图为使用栅格带数据进行分带统计的算法示意,其中灰色单元格代表无值数据。

当带数据为栅格数据集时,连续的栅格值相同的单元格作为一个带(区域);当带数据为矢量面数据集时,要求其属性表中有一个标识带的字段,以数值来区分不同的带,如果两个及以上的面对象(可以相邻,也可以不相邻)的标识值相同,则进行分带统计时,它们将作为一个带进行统计,即在结果栅格中,这些面对象对应位置的栅格值都是这些面对象范围内的所有单元格的栅格值的统计值。

分带统计的结果包含两部分:一是分带统计结果栅格,每个带内的栅格值相同,即按照统计方法计算所得的值;二是一个记录了每个分带内统计信息的属性表,包含 ZONALID(带的标识)、PIXELCOUNT(带内单元格数)、MININUM(最小值)、MAXIMUM(最大值)、RANGE_VALUE(值域)、SUM_VALUE(和)、MEAN(平均值)、STD(标准差)、VARIETY(种类)、MAJORITY(众数)、MINORITY(少数)、MEDIAN(中位数)等字段。

下面通过一个实例来了解分带统计的应用。

  1. 如下图所示,左图是 DEM 栅格值,将其作为值数据,右图为对应区域的行政区划,将其作为带数据,进行分带统计;
  2. 使用上面的数据,将最大值作为统计方法,进行分带统计。结果包括如下图所示的结果栅格,以及对应的统计信息属性表(略)。结果栅格中,每个带内的栅格值均相等,即在该带范围内的值栅格中最大的栅格值,也就是高程值。该例统计了该地区每个行政区内最高的高程。

注意:分带统计的结果栅格的像素类型(PixelFormat)与指定的分带统计类型(通过 ZonalStatisticsAnalystParameter 类的 StatisticsMode 属性设置)有关:

  • 当统计类型为种类(Variety)时,结果栅格像素类型为 Bit32;
  • 当统计类型为最大值(Max)、最小值(Min)、值域(Range)时,结果栅格的像素类型与源栅格保持一致;
  • 当统计类型为平均值(Mean)、标准差(Stdev)、总和(Sum)、众数(Majority)、最少数(Minority)、中位数(Median)时,结果栅格的像素类型为 Double。

示例

以下代码示范了如何实现分带统计分析,并获取分带统计结果。

CopyC#
public DatasetGrid RasterValueZonalStatistics(Dataset ZoneDataset, DatasetGrid ValueDataset, Datasource targetDatasource)
{
    //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除
    String targetDatasetName = "zonalStastisticsResult";
    if (targetDatasource.Datasets.Contains(targetDatasetName))
    {
        targetDatasource.Datasets.Delete(targetDatasetName);
    }

    //设置结果属性表的名称,并检查数据源中是否已存在该数据集,如存在则删除
    String targetTableName = "zonalStastisticsResultTable";
    if (targetDatasource.Datasets.Contains(targetTableName))
    {
        targetDatasource.Datasets.Delete(targetTableName);
    }

    ZonalStatisticsAnalystParameter zonalStatisticsParameter = new ZonalStatisticsAnalystParameter();
    zonalStatisticsParameter.TargetDatasource = targetDatasource;
    zonalStatisticsParameter.TargetDatasetName = targetDatasetName;
    zonalStatisticsParameter.TargetDatasource = targetDatasource;
    zonalStatisticsParameter.TargetTableName = targetTableName;
    zonalStatisticsParameter.IsIgnoreNoValue = false;
    zonalStatisticsParameter.StatisticsMode = GridStatisticsMode.Sum;
    zonalStatisticsParameter.PixelFormat = PixelFormat.Double;
    zonalStatisticsParameter.ValueDataset = ValueDataset;
    zonalStatisticsParameter.ZonalDataset = ZoneDataset;

    //调用ZonalStatisticsOnRasterValue方法,并获取分带统计结果(ZonalStatisticsAnalystResult)对象
    ZonalStatisticsAnalystResult zonalStatisticResult = StatisticsAnalyst.ZonalStatisticsOnRasterValue(zonalStatisticsParameter);
    DatasetGrid resultDatasetGrid = zonalStatisticResult.ResultDatasetGrid;

    return resultDatasetGrid;
}

请参见