com.supermap.analyst.spatialanalyst
类 StatisticsAnalyst

java.lang.Object
  继承者 com.supermap.analyst.spatialanalyst.StatisticsAnalyst

public class StatisticsAnalyst
extends java.lang.Object

栅格统计分析类。该类提供栅格数据的多种统计分析方法,如栅格数据的基本统计、常用统计、邻域分析、分带统计等。


方法摘要
static void addSteppedListener(SteppedListener l)
          添加一个进度条事件(SteppedEvent)的监听器。
static BasicStatisticsAnalystResult basicStatistics(DatasetGrid statisticsGrid)
          栅格基本统计分析,用于对栅格数据集进行基本的统计分析,包括最大值、最小值、平均值和标准差等。
static BasicStatisticsAnalystResult basicStatistics(DatasetGrid statisticsGrid, FunctionType functionType)
          栅格基本统计分析,可指定变换函数类型。
static DatasetGrid blockStatisticss(NeighbourStatisticsParameter parameter)
          栅格块统计。
static DatasetGrid commonStatistics(DatasetGrid statisticsGrid, DatasetGrid[] compareDatasets, StatisticsCompareType compareType, boolean isIgnoreNoValue, Datasource targetDatasource, java.lang.String targetDatasetName)
          栅格常用统计分析,将输入栅格数据集与一个或多个栅格数据集的对应像元值进行比较,结果栅格数据集的像元值为比较结果为“真”的次数。
static DatasetGrid commonStatistics(DatasetGrid statisticsGrid, double comparedValue, StatisticsCompareType type, boolean isIgnoreNoValue, Datasource targetDatasource, java.lang.String targetDatasetName)
          栅格常用统计分析,将一个栅格数据集逐行逐列按照某种比较方式与一个固定值进行比较,比较结果为“真”的像元值为 1,为“假”的像元值为 0。
static GridHistogram createHistogram(DatasetGrid sourceDataset, int groupCount)
          创建给定栅格数据集的直方图。
static GridHistogram createHistogram(DatasetGrid sourceDataset, int groupCount, FunctionType functionType)
          创建给定栅格数据集的直方图,可指定变换函数类型。
static GridHistogram[] createImageHistogram(DatasetImage statisticsImage, int groupCount, FunctionType functionType)
          创建影像数据集的直方图。
static GridHistogram createImageHistogram(DatasetImage statisticsImage, int groupCount, FunctionType functionType, int bandIndex)
          创建影像数据集某个波段的直方图。
static BasicStatisticsAnalystResult[] imageBasicStatistics(DatasetImage statisticsImage, FunctionType functionType)
          对影像数据集进行基本统计分析。
static BasicStatisticsAnalystResult imageBasicStatistics(DatasetImage statisticsImage, FunctionType functionType, int bandIndex)
          对影像数据集某个波段进行基本统计分析。
static DatasetGrid neighbourStatistics(NeighbourStatisticsParameter parameter)
          栅格邻域统计分析。
static void removeSteppedListener(SteppedListener l)
          移除一个进度条事件(SteppedEvent)的监听器。
static ZonalStatisticsAnalystResult zonalStatisticsOnRasterValue(ZonalStatisticsAnalystParameter parameter)
          栅格分带统计,方法中值数据为栅格的数据集,带数据可以是矢量或栅格数据。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

方法详细信息

basicStatistics

public static BasicStatisticsAnalystResult basicStatistics(DatasetGrid statisticsGrid)
栅格基本统计分析,用于对栅格数据集进行基本的统计分析,包括最大值、最小值、平均值和标准差等。

参数:
statisticsGrid - 指定的待统计的栅格数据。
返回:
基本统计分析结果。
示例:
以下代码示范了如何对给定的栅格数据集进行基本统计分析,并将结果写入一个字符串返回。
 public String gridBasicStatistics(DatasetGrid sourceDatasetGrid) {
        //调用栅格基本统计分析方法,获得基本统计分析结果对象
        BasicStatisticsAnalystResult basicStatisticAnalystResult = StatisticsAnalyst
                        .basicStatistics(sourceDatasetGrid);
 
        //从栅格基本统计分析结果中提取结果
        Double max = basicStatisticAnalystResult.getMax();
        Double min = basicStatisticAnalystResult.getMin();
        Double mean = basicStatisticAnalystResult.getMean();
        Double standardDeviation = basicStatisticAnalystResult
                        .getStandardDeviation();
 
        //将结果写入一个字符串
        String result = "栅格基本统计分析结果:\n" + "最大值:" + max + "\n最小值:" + min + "\n平均值:"
                        + mean + "\n标准差:" + standardDeviation;
 
        return result;
 }
 
 

basicStatistics

public static BasicStatisticsAnalystResult basicStatistics(DatasetGrid statisticsGrid,
                                                           FunctionType functionType)
栅格基本统计分析,可指定变换函数类型。用于对栅格数据集进行基本的统计分析,包括最大值、最小值、平均值和标准差等。

指定变换函数时,用来统计的数据是原始栅格值经过函数变换后得到的值。

参数:
statisticsGrid - 指定的待统计的栅格数据。
functionType - 指定的变换函数类型。
返回:
基本统计分析结果。
示例:
以下代码示范了如何对给定的栅格数据集进行基本统计分析,并将结果写入一个字符串返回。
 public String gridBasicStatistics(DatasetGrid sourceDatasetGrid) {
        //调用栅格基本统计分析方法,获得基本统计分析结果对象
        BasicStatisticsAnalystResult basicStatisticAnalystResult = StatisticsAnalyst
                        .basicStatistics(sourceDatasetGrid, FunctionType.LOG);
 
        //从栅格基本统计分析结果中提取结果
        Double max = basicStatisticAnalystResult.getMax();
        Double min = basicStatisticAnalystResult.getMin();
        Double mean = basicStatisticAnalystResult.getMean();
        Double standardDeviation = basicStatisticAnalystResult
                        .getStandardDeviation();
 
        //将结果写入一个字符串
        String result = "栅格基本统计分析结果:\n" + "最大值:" + max + "\n最小值:" + min + "\n平均值:"
                        + mean + "\n标准差:" + standardDeviation;
 
        return result;
 }
 
 

注意:

  • 当变换函数类型为LOG时,待统计栅格数据集的值域最小值需要大于0,否则会抛出异常。
  • 当变换函数类型为ARCSIN时,待统计栅格数据集的值域需要在[-1,1]之内,否则会抛出异常。

commonStatistics

public static DatasetGrid commonStatistics(DatasetGrid statisticsGrid,
                                           double comparedValue,
                                           StatisticsCompareType type,
                                           boolean isIgnoreNoValue,
                                           Datasource targetDatasource,
                                           java.lang.String targetDatasetName)
栅格常用统计分析,将一个栅格数据集逐行逐列按照某种比较方式与一个固定值进行比较,比较结果为“真”的像元值为 1,为“假”的像元值为 0。

参数:
statisticsGrid - 指定的待统计的栅格数据。
comparedValue - 指定的比较的值。单位与待统计的栅格数据集的栅格值单位相同。
type - 指定的比较类型。
isIgnoreNoValue - 指定是否忽略无值。如果为 true,即忽略无值,则计算区域内的无值不参与计算,结果栅格值仍为无值;若为 false,则计算区域内的无值参与计算。
targetDatasource - 指定的用于存储结果数据的数据源。
targetDatasetName - 指定的结果数据集的名称。
返回:
统计结果栅格数据集。
示例:
以下代码示范了如何对给定的栅格数据集进行常用统计分析,分析的方式是与一个固定值进行比较,比较方式为“大于”,且无值不参与运算。
 public DatasetGrid gridCommonStatisticsCompareWithValue(
                DatasetGrid sourceDatasetGrid, Datasource targetDatasource) {
        //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除
        String targetDatasetName = "commonStastisticsResult";
        if (targetDatasource.getDatasets().contains(targetDatasetName)) {
                targetDatasource.getDatasets().delete(targetDatasetName);
        }
 
        //设置与待统计的栅格数据集进行比较的值
        double comparedValue = 8000;
 
        //调用栅格常用统计分析方法,并获取分析结果栅格数据集
        DatasetGrid resultDatasetGrid = StatisticsAnalyst.commonStatistics(
                        sourceDatasetGrid, comparedValue, StatisticsCompareType.GREATER, false,
                        targetDatasource, targetDatasetName);
 
        return resultDatasetGrid;
 }
 

commonStatistics

public static DatasetGrid commonStatistics(DatasetGrid statisticsGrid,
                                           DatasetGrid[] compareDatasets,
                                           StatisticsCompareType compareType,
                                           boolean isIgnoreNoValue,
                                           Datasource targetDatasource,
                                           java.lang.String targetDatasetName)
栅格常用统计分析,将输入栅格数据集与一个或多个栅格数据集的对应像元值进行比较,结果栅格数据集的像元值为比较结果为“真”的次数。

关于无值的说明:

  1. 当待统计源数据集的栅格有无值时,如果忽略无值,则统计结果栅格也为无值,否则使用该无值参与统计;当各比较数据集的栅格有无值时,如果忽略无值,则此次统计(待统计栅格与该比较数据集的计算)不计入结果,否则使用该无值进行比较。
  2. 当无值不参与运算(即忽略无值)时,统计结果数据集中无值的值,由结果栅格的像素格式决定,为最大像元值,例如,结果栅格数据集像素格式为 PixelFormat.UBIT8,即每个像元使用 8 个比特表示,则无值的值为 255。在此方法中,结果栅格的像素格式是由比较栅格数据集的数量来决定的。比较数据集得个数、结果栅格的像素格式和结果栅格中无值的值三者的对应关系如下所示:
  3. 参数:
    statisticsGrid - 指定的待统计的栅格数据。
    compareDatasets - 指定的比较的数据集集合。
    compareType - 指定的比较的类型。
    isIgnoreNoValue - 指定是否忽略无值。如果为 true,即忽略无值,则计算区域内的无值不参与计算,结果栅格值仍为无值;若为 false,则计算区域内的无值参与计算。
    targetDatasource - 指定的用于存储结果数据的数据源。
    targetDatasetName - 指定的结果数据集的名称。
    返回:
    统计结果栅格数据集。
    示例:
    以下代码示范了如何对给定的栅格数据集进行常用统计分析,分析的方式是与栅格数据集集合进行比较,即使用该方法可以与一个或多个栅格数据集进行比较 ,比较方式为“小于或等于”,且无值不参与运算。
     public DatasetGrid gridCommonStatisticsCompareWithGrid(
                    DatasetGrid sourceDatasetGrid, DatasetGrid[] comparedDatasetsGrid,
                    Datasource targetDatasource) {
            //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除
            String targetDatasetName = "commonStastisticsResult";
            if (targetDatasource.getDatasets().contains(targetDatasetName)) {
                    targetDatasource.getDatasets().delete(targetDatasetName);
            }
     
            //调用栅格常用统计分析方法,并获取分析结果栅格数据集
            DatasetGrid resultDatasetGrid = StatisticsAnalyst.commonStatistics(
                            sourceDatasetGrid, comparedDatasetsGrid, StatisticsCompareType.LESS_OR_EQUAL,
                            false, targetDatasource, targetDatasetName);
     
            return resultDatasetGrid;
     }
     

neighbourStatistics

public static DatasetGrid neighbourStatistics(NeighbourStatisticsParameter parameter)
栅格邻域统计分析。

邻域统计分析,是对输入数据集中的每个像元的指定扩展区域中的像元进行统计,将运算结果作为像元的值。统计的方法包括:总和、最大值、最小值、众数、少数、中位数等,请参见 GridStatisticsMode 枚举类型。目前提供的邻域范围类型(请参见 NeighbourShapeType 枚举类型)有:矩形、圆形、圆环和扇形。

下图为邻域统计的原理示意,假设使用“总和”作为统计方法做矩形邻域统计,邻域大小为 3×3,那么对于图中位于第二行第三列的单元格,它的值则由以其为中心向周围扩散得到的一个 3×3 的矩形内所有像元值的和来决定。

邻域统计的应用十分广泛。例如:

该方法通过 NeighbourStatisticsParameter 类对邻域分析的形状、输入与输出、单位类型、统计方式进行设置。

参数:
parameter - 指定的邻域分析参数设置。
返回:
统计结果栅格数据集。
示例:
以下代码示范了如何对栅格数据集进行矩形邻域分析,通过矩形邻域统计分析参数设置对象来设置矩形邻域统计分析所需参数, 最终获得矩形邻域统计分析结果栅格数据集。
 public DatasetGrid gridRectangleNeighbourStatistics(
                DatasetGrid sourceDatasetGrid, Datasource targetDatasource) {
        //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除
        String targetDatasetName = "neighbourStastisticsResult";
        if (targetDatasource.getDatasets().contains(targetDatasetName)) {
                targetDatasource.getDatasets().delete(targetDatasetName);
        }
 
        //设置邻域统计分析参数
        NeighbourStatisticsRectangleParameter neighbourParameter = new NeighbourStatisticsRectangleParameter();
        neighbourParameter.setWidth(6.0);
        neighbourParameter.setHeight(4.0);
        neighbourParameter.setIgnoreNoValue(false);
        neighbourParameter.setStatisticsMode(GridStatisticsMode.MAJORITY);
        neighbourParameter.setUnitType(NeighbourUnitType.CELL);
        neighbourParameter.setSourceDataset(sourceDatasetGrid);
        neighbourParameter.setTargetDatasource(targetDatasource);
        neighbourParameter.setTargetDatasetName(targetDatasetName);
 
        //调用栅格邻域统计分析方法,并获取分析结果栅格数据集
        DatasetGrid resultDatasetGrid = StatisticsAnalyst
                        .neighbourStatistics(neighbourParameter);
 
        return resultDatasetGrid;
 }
 

zonalStatisticsOnRasterValue

public static ZonalStatisticsAnalystResult zonalStatisticsOnRasterValue(ZonalStatisticsAnalystParameter parameter)
栅格分带统计,方法中值数据为栅格的数据集,带数据可以是矢量或栅格数据。

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

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

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

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

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

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

参数:
parameter - 指定的分带统计参数设置。
返回:
分带统计分析结果。
示例:
以下代码示范了如何实现分带统计分析,并获取分带统计结果。
 public DatasetGrid rasterValueZonalStatistics(Dataset ZoneDataset,
                DatasetGrid ValueDataset, Datasource targetDatasource) {
        //设置结果栅格数据集的名称,并检查数据源中是否已存在该数据集,如存在则删除
        String targetDatasetName = "zonalStastisticsResult";
        if (targetDatasource.getDatasets().contains(targetDatasetName)) {
                targetDatasource.getDatasets().delete(targetDatasetName);
        }
 
        //设置结果属性表的名称,并检查数据源中是否已存在该数据集,如存在则删除
        String outputTableName = "zonalStastisticsResultTable";
        if (targetDatasource.getDatasets().contains(outputTableName)) {
                targetDatasource.getDatasets().delete(outputTableName);
        }
 
        ZonalStatisticsAnalystParameter zonalStatisticParameter = new ZonalStatisticsAnalystParameter();
        zonalStatisticParameter.setTargetDatasource(targetDatasource);
        zonalStatisticParameter.setTargetDatasetName(targetDatasetName);
        zonalStatisticParameter.setTargetDatasource(targetDatasource);
        zonalStatisticParameter.setTargetTableName(outputTableName);
        zonalStatisticParameter.setIgnoreNoValue(false);
        zonalStatisticParameter.setStatisticsMode(GridStatisticsMode.SUM);
        zonalStatisticParameter.setValueDataset(ValueDataset);
        zonalStatisticParameter.setZonalDataset(ZoneDataset);
 
        //调用zonalStatisticsOnRasterValue方法,并获取分带统计结果(ZonalStatisticsAnalystResult)对象
        ZonalStatisticsAnalystResult zonalStatisticResult = StatisticsAnalyst
                        .zonalStatisticsOnRasterValue(zonalStatisticParameter);
        DatasetGrid resultDatasetGrid = zonalStatisticResult.getResultDatasetGrid();
 
        return resultDatasetGrid;
 }
 

createHistogram

public static GridHistogram createHistogram(DatasetGrid sourceDataset,
                                            int groupCount)
创建给定栅格数据集的直方图。

直方图,又称柱状图,由一系列高度不等的矩形块来表示一份数据的分布情况。一般横轴表示类别,纵轴表示分布情况。

栅格直方图的横轴表示栅格值的分组,栅格值将被划分到这 N(默认为 100)个组中,即每个组对应着一个栅格值范围;纵轴表示频数,即栅格值在每组的值范围内的单元格的个数。

下图是栅格直方图的示意图。该栅格数据的最小值和最大值分别为 0 和 100,取组数为 10,得出每组的频数,绘制如下的直方图。矩形块上方标注了该组的频数,例如,第 6 组的栅格值范围为 [50,60),栅格数据中值在此范围内的单元格共有 3 个,因此该组的频数为 3。

注:直方图分组的最后一组的值范围为前闭后闭,其余均为前闭后开。

在通过此方法获得栅格数据集的直方图(GridHistogram)对象后,可以通过该对象的 getFrequencies 方法返回每个组的频数,还可以通过 setGroupCount 方法重新指定栅格直方图的组数,然后再通过 getFrequencies 方法返回每组的频数。

下图为创建栅格直方图的一个实例。本例中,最小栅格值为 250,最大栅格值为 1243,组数为 500,获取各组的频数,绘制出如右侧所示的栅格直方图。从右侧的栅格直方图,可以非常直观的了解栅格数据集栅格值的分布情况。

参数:
sourceDataset - 指定的栅格数据集。
groupCount - 指定的直方图的组数。必须大于 0。
返回:
栅格直方图对象。
抛出:
java.lang.IllegalArgumentException - 如果 groupCount 小于或等于 0

createHistogram

public static GridHistogram createHistogram(DatasetGrid sourceDataset,
                                            int groupCount,
                                            FunctionType functionType)
创建给定栅格数据集的直方图,可指定变换函数类型。

指定变换函数时,直方图统计的数据是原始栅格值经过函数变换后得到的值。

关于栅格直方图相关介绍请参考 createHistogram(DatasetGrid, int)方法。

参数:
sourceDataset - 指定的栅格数据集。
groupCount - 指定的直方图的组数。必须大于 0。
functionType - 指定的变换函数类型。
返回:
栅格直方图对象。
抛出:
java.lang.IllegalArgumentException - 如果 groupCount 小于或等于 0

注意:

  • 当变换函数类型为LOG时,待统计栅格数据集的值域最小值需要大于0,否则会抛出异常。
  • 当变换函数类型为ARCSIN时,待统计栅格数据集的值域需要在[-1,1]之内,否则会抛出异常。

createImageHistogram

public static GridHistogram createImageHistogram(DatasetImage statisticsImage,
                                                 int groupCount,
                                                 FunctionType functionType,
                                                 int bandIndex)
创建影像数据集某个波段的直方图。

影像直方图与栅格直方图类似。关于栅格直方图相关介绍请参考 createHistogram(DatasetGrid, int)方法。

参数:
statisticsImage - 指定的影像数据集。
groupCount - 指定的直方图的组数。必须大于 0。
functionType - 指定的变换函数类型。
bandIndex - 影像数据波段索引。
返回:
影像数据集该波段的直方图对象。
抛出:
java.lang.IllegalArgumentException - 如果 groupCount 小于或等于 0。

注意:

  • 当变换函数类型为Log时,待统计影像数据集波段的值域最小值需要大于0,否则会抛出异常。
  • 当变换函数类型为ArcSin时,待统计影像数据集波段的值域需要在[-1,1]之内,否则会抛出异常。

createImageHistogram

public static GridHistogram[] createImageHistogram(DatasetImage statisticsImage,
                                                   int groupCount,
                                                   FunctionType functionType)
创建影像数据集的直方图。

影像直方图与栅格直方图类似。关于栅格直方图相关介绍请参考 createHistogram(DatasetGrid, int)方法。

参数:
statisticsImage - 指定的影像数据集。
groupCount - 指定的直方图的组数。必须大于 0。
functionType - 指定的变换函数类型。
返回:
影像数据集所有波段的直方图对象,每个波段索引对应一个直方图对象,结果索引与波段索引一致。
抛出:
java.lang.IllegalArgumentException - 如果 groupCount 小于或等于 0。

注意:

  • 当变换函数类型为Log时,待统计影像数据集每个波段的值域最小值需要大于0,否则会抛出异常。
  • 当变换函数类型为ArcSin时,待统计影像数据集每个波段的值域需要在[-1,1]之内,否则会抛出异常。

blockStatisticss

public static DatasetGrid blockStatisticss(NeighbourStatisticsParameter parameter)
栅格块统计。

对非重叠邻域(块)中的像元进行统计计算。在输出时,将统计值分配给块中的所有像元。

邻域(块)形状可以为矩形邻域、圆形邻域、环形邻域和扇形邻域,可参考NeighbourStatisticsParametere;统计方法如众数、最大值、平均值等,可参考GridStatisticsMode

下图为当统计方式为众数时,栅格块统计的示意图:

参数:
parameter - 邻域设置参数。
返回:
结果栅格

imageBasicStatistics

public static BasicStatisticsAnalystResult imageBasicStatistics(DatasetImage statisticsImage,
                                                                FunctionType functionType,
                                                                int bandIndex)
对影像数据集某个波段进行基本统计分析。用于对影像数据集进行基本的统计分析,包括最大值、最小值、平均值和标准差等。

参数:
statisticsImage - 指定的待统计的影像数据。
functionType - 指定的变换函数类型。
bandIndex - 影像数据波段索引。
返回:
基本统计分析结果。

imageBasicStatistics

public static BasicStatisticsAnalystResult[] imageBasicStatistics(DatasetImage statisticsImage,
                                                                  FunctionType functionType)
对影像数据集进行基本统计分析。用于对影像数据集进行基本的统计分析,包括最大值、最小值、平均值和标准差等。

参数:
statisticsImage - 指定的待统计的影像数据。
functionType - 指定的变换函数类型。
返回:
基本统计分析结果。

addSteppedListener

public static void addSteppedListener(SteppedListener l)
添加一个进度条事件(SteppedEvent)的监听器。

参数:
l - 一个用于接收进度条事件的监听器。

removeSteppedListener

public static void removeSteppedListener(SteppedListener l)
移除一个进度条事件(SteppedEvent)的监听器。

参数:
l - 一个用于接收进度条事件的监听器。