com.supermap.analyst.spatialanalyst

类 MathAnalyst



  • public class MathAnalyst
    extends Object
    栅格代数运算类。用于提供对一个或多个栅格数据集的数学运算及函数运算。

    栅格代数运算的思想是运用代数学的观点对地理特征和现象进行空间分析。实质上,是对多个栅格数据集(DatasetGrid)进行数学运算以及函数运算。运算结果栅格的像元值是由输入的一个或多个栅格同一位置的像元的值通过代数规则运算得到的。

    栅格分析中很多功能都是基于栅格代数运算的,作为栅格分析的核心内容,栅格代数运算用途十分广泛,能够帮助我们解决各种类型的实际问题。如建筑工程中的计算填挖方量,将工程实施前的DEM栅格与实施后的DEM栅格相减,就能够从结果栅格中得到施工前后的高程差,将结果栅格的像元值与像元所代表的实际面积相乘,就可以得知工程的填方量与挖方量;又如,想要提取2000年全国范围内平均降雨量介于20毫米和50毫米的地区,可以通过“20<年平均降雨量<50”关系运算表达式,对年平均降雨量栅格数据进行运算而获得。

    通过该类的方法进行栅格代数运算主要有以下两种途径:

    1. 使用该类提供的基础运算方法。该类提供了六个用于进行基础运算的方法,包括 plus(加法运算)、minus(减法运算)、multiply(乘法运算)、divide(除法运算)、toInt(取整运算)和 toFloat(浮点运算)。使用这几个方法可以完成一个或多个栅格数据对应栅格值的算术运算。对于相对简单的运算,可以通过多次调用这几个方法来实现,如 (A/B)-(A/C)。
    2. 执行运算表达式。使用表达式不仅可以对一个或多个栅格数据集实现运算符运算,还能够进行函数运算。运算符包括算术运算符、关系运算符和布尔运算符,算术运算主要包括加法(+)、减法(-)、乘法(*)、除法(/);布尔运算主要包括和(And)、或(Or)、异或(Xor)、非(Not);关系运算主要包括 =、<、>、<>、>=、<=。注意,对于布尔运算和关系运算均有三种可能的输出结果:真=1、假=0及无值(只要有一个输入值为无值,结果即为无值)。此外,还支持 21 种常用的函数运算,如下图所示:
    3. 通过运算表达式执行栅格代数运算有两种方式,一种是使用 execute 方法直接输入运算表达式来计算,另一种是使用 executeFromXML 方法从存储有运算表达式的 XML 文件中读取并执行表达式。该类的 toXMLFile 方法用于将运算表达式及相关参数写入 XML 文件中,也可以手动建立该文件。

    注意:

    • 有关栅格代数运算表达式应遵循的规则,请参见 execute 方法的介绍。
    • 参与运算的两个数据集,如果其像素类型(PixelFormat)不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。例如,一个为32位整型,一个为单精度浮点型,那么进行加法运算后,结果数据集的像素类型将为单精度浮点型。
    • 对于栅格数据集中的无值数据,如果忽略无值,则无论何种运算,结果仍为无值;如果不忽略无值,意味着无值将参与运算。例如,两栅格数据集 A 和 B 相加,A 某单元格为无值,值为-9999,B 对应单元格值为3000,如果不忽略无值,则运算结果该单元格值为-6999。
    • 该类支持栅格分析环境设置。通过 setAnalystSetting 方法设置相应的栅格分析环境设置对象(GridAnalystSetting)来使栅格分析环境设置生效。如使用栅格分析环境中的设置,那么在调用该类的方法时需要将对应的参数设置为 null,否则将优先使用方法中参数的设置。
    示范代码:
    以下代码示范了如何进行栅格代数运算,包括使用基础运算方法进行运算、执行运算表达式、输出运算表达式到 XML 文件以及从 XML 文件中读取并执行运算表达式。

    假设已存在一个工作空间(Workspace),并在该工作空间中打开一个名为 m_datasource 的数据源(Datasource),该数据源中包含 grid_a、grid_b 和 grid_c 三个栅格数据集。

            public void MathAnalystExample() {
                    DatasetGrid grid_a = (DatasetGrid) m_datasource.getDatasets().get("grid_a");
                    DatasetGrid grid_b = (DatasetGrid) m_datasource.getDatasets().get("grid_b");
                    DatasetGrid grid_c = (DatasetGrid) m_datasource.getDatasets().get("grid_c");
    
                    // 使用 Plus、Divide 等基础运算方法计算(grid_a + grid_b)/grid_c
                    DatasetGrid result_ab_plus = MathAnalyst.plus(grid_a, grid_b, null,
                                    m_datasource, "result_ab_plus");
                    DatasetGrid resultGridBasic = MathAnalyst.divide(result_ab_plus,
                                    grid_c, null, m_datasource, "result_basic");
                    if (resultGridBasic != null) {
                            System.out.println("(grid_a + grid_b)/grid_c 计算完毕!");
            }
    
                    // 使用 Execute 方法执行运算表达式
                    String expression = "cos([" + m_datasource.getAlias() + "."
                                    + grid_a.getName() + "])*Con([" + m_datasource.getAlias() + "."
                                    + grid_b.getName() + "]<200,2,1)";
                    DatasetGrid resultGridExpression = MathAnalyst.execute(expression,
                                    null, PixelFormat.DOUBLE, false, true, m_datasource,
                                    "result_expression");
                    if (resultGridExpression != null) {
                            System.out.println("执行运算表达式完毕!");
            }
    
                    // 将上一步中的运算表达式输出到XML文件中
                    String xmlFileName = "D:/expression.xml";
                    Boolean isSuccessful = MathAnalyst.toXMLFile(xmlFileName, expression,
                                    null, PixelFormat.DOUBLE, false, true);
                    if (isSuccessful) {
                            System.out.println("导出运算表达式到XML文件成功!");
            }
    
                    // 从XML文件中读取运算表达式及相关参数并执行
                    DatasetGrid resultGridXML = MathAnalyst.executeFromXML(xmlFileName,
                                    m_datasource, "result_fromXML");
                    if (resultGridXML != null) {
                            System.out.println("从XML执行运算表达式完毕!");
            }
        }
     
    • 方法详细资料

      • getAnalystSetting

        public static GridAnalystSetting getAnalystSetting()
        返回栅格分析的环境设置对象。

        有关“栅格分析环境设置”请参见 GridAnalystSetting 类的介绍。

        返回:
        栅格分析的环境设置对象。
      • setAnalystSetting

        public static void setAnalystSetting(GridAnalystSetting gridAnalystSetting)
        设置栅格分析的环境设置对象。

        有关“栅格分析环境设置”请参见 GridAnalystSetting 类的介绍。

        参数:
        gridAnalystSetting - 栅格分析的环境设置对象。
      • plus

        @Deprecated
        public static DatasetGrid plus(DatasetGrid firstOperand,
                                                    DatasetGrid secondOperand,
                                                    GeoRegion userRegion,
                                                    Datasource targetDatasource,
                                                    String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.plus(DatasetGrid, DatasetGrid, GeoRegion, Datasource, String, SteppedListener...) 替换。
        栅格加法运算。将输入的两个栅格数据集的栅格值逐个像元地相加。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格加法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        栅格加法运算结果,是一个栅格数据集。
        示范代码:
        请参见 MathAnalyst 类的示例。
      • plus

        public static DatasetGrid plus(DatasetGrid firstOperand,
                                       DatasetGrid secondOperand,
                                       GeoRegion userRegion,
                                       Datasource targetDatasource,
                                       String targetDatasetName,
                                       SteppedListener... listeners)
        栅格加法运算。将输入的两个栅格数据集的栅格值逐个像元地相加。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格加法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        栅格加法运算结果,是一个栅格数据集。
        示范代码:
        请参见 MathAnalyst 类的示例。
      • minus

        @Deprecated
        public static DatasetGrid minus(DatasetGrid firstOperand,
                                                     DatasetGrid secondOperand,
                                                     GeoRegion userRegion,
                                                     Datasource targetDatasource,
                                                     String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.minus(DatasetGrid, DatasetGrid, GeoRegion, Datasource, String, SteppedListener...) 替换。
        栅格减法运算。逐个像元地从第一个栅格数据集的栅格值中减去第二个数据集的栅格值。

        进行此运算时,输入栅格数据集的顺序很重要,顺序不同,结果通常也是不相同的。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格减法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        栅格减法运算结果,是一个栅格数据集。 请参见 MathAnalyst 类的示例。
      • minus

        public static DatasetGrid minus(DatasetGrid firstOperand,
                                        DatasetGrid secondOperand,
                                        GeoRegion userRegion,
                                        Datasource targetDatasource,
                                        String targetDatasetName,
                                        SteppedListener... listeners)
        栅格减法运算。逐个像元地从第一个栅格数据集的栅格值中减去第二个数据集的栅格值。

        进行此运算时,输入栅格数据集的顺序很重要,顺序不同,结果通常也是不相同的。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格减法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        栅格减法运算结果,是一个栅格数据集。 请参见 MathAnalyst 类的示例。
      • multiply

        @Deprecated
        public static DatasetGrid multiply(DatasetGrid firstOperand,
                                                        DatasetGrid secondOperand,
                                                        GeoRegion userRegion,
                                                        Datasource targetDatasource,
                                                        String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.multiply(DatasetGrid, DatasetGrid, GeoRegion, Datasource, String, SteppedListener...) 替换。
        栅格乘法运算。将输入的两个栅格数据集的栅格值逐个像元地相乘。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格乘法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        栅格乘法运算结果,是一个栅格数据集。
      • multiply

        public static DatasetGrid multiply(DatasetGrid firstOperand,
                                           DatasetGrid secondOperand,
                                           GeoRegion userRegion,
                                           Datasource targetDatasource,
                                           String targetDatasetName,
                                           SteppedListener... listeners)
        栅格乘法运算。将输入的两个栅格数据集的栅格值逐个像元地相乘。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格乘法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        栅格乘法运算结果,是一个栅格数据集。
      • divide

        @Deprecated
        public static DatasetGrid divide(DatasetGrid firstOperand,
                                                      DatasetGrid secondOperand,
                                                      GeoRegion userRegion,
                                                      Datasource targetDatasource,
                                                      String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.divide(DatasetGrid, DatasetGrid, GeoRegion, Datasource, String, SteppedListener...) 替换。
        栅格除法运算。将输入的两个栅格数据集的栅格值逐个像元地相除。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格除法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        栅格除法运算结果,是一个栅格数据集。
      • divide

        public static DatasetGrid divide(DatasetGrid firstOperand,
                                         DatasetGrid secondOperand,
                                         GeoRegion userRegion,
                                         Datasource targetDatasource,
                                         String targetDatasetName,
                                         SteppedListener... listeners)
        栅格除法运算。将输入的两个栅格数据集的栅格值逐个像元地相除。

        如果输入两个像素类型(PixelFormat)均为整数类型的栅格数据集,则输出整数类型的结果数据集;否则,输出浮点型的结果数据集。如果输入的两个栅格数据集的像素类型精度不同,则运算的结果数据集的像素类型与二者中精度较高者保持一致。关于栅格除法运算的图示如下:

        参数:
        firstOperand - 指定的第一栅格数据集。
        secondOperand - 指定的第二栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        栅格除法运算结果,是一个栅格数据集。
      • execute

        @Deprecated
        public static DatasetGrid execute(String expression,
                                                       GeoRegion userRegion,
                                                       PixelFormat pixelFormat,
                                                       boolean isZip,
                                                       boolean isIgnoreNoValue,
                                                       Datasource targetDatasource,
                                                       String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.execute(String, GeoRegion, PixelFormat, boolean, boolean, Datasource, String, SteppedListener...) 替换。
        执行栅格代数运算表达式,支持自定义表达式的栅格代数计算和影像波段计算。

        通过自定义表达式可以进行算术运算、条件运算、逻辑运算、函数运算(常用函数、三角函数)以及复合运算。

        自定义运算表达式的组成需要遵循以下规则:

        1. 运算表达式应为一个形如下式的字符串:
        2. [DatasourceAlias1.Raster1] + [DatasourceAlias2.Raster2]

          如果需要指定多波段数据中的单个波段进行运算,则表达式形如下式:

          [DatasourceAlias1.Raster1.Band1] + [DatasourceAlias2.Raster2.Band2]

          使用“ [数据源别名.数据集名] ”或“ [数据源别名.数据集名.波段名] ”来指定参加运算的栅格数据集和波段;注意要使用方括号把名字括起来。

          如果使用“ [数据源别名.数据集名] ”指定多波段数据集,则取该数据的第一个波段参与运算。

        3. 栅格代数运算支持四则运算符("+" 、"-" 、"*" 、"/" )、条件运算符(">" 、">=" 、"<" 、"<=" 、"<>" 、"==" )、逻辑运算符("|" 、"&" 、"Not()" 、"^" )和一些常用数学函数("abs()" 、"acos()" 、"asin()" 、"atan()" 、"acot()" 、"cos()" 、"cosh()" 、"cot()" 、"exp()" 、"floor()" 、"mod(,)" 、"ln()" 、"log()" 、"pow(,)" 、"sin()" 、"sinh()" 、"sqrt()" 、"tan()" 、"tanh()" 、"Isnull()" 、"Con(,,)" 、"Pick(,,,..)" )。
        4. 代数运算的表达式中各个函数之间可以嵌套使用,直接用条件运算符计算的栅格结果都为二值(如大于、小于等),即满足条件的用1代替,不满足的用0代替,若想使用其他值来表示满足条件和不满足条件的取值,可以使用条件提取函数Con(,,)。例如:"Con(IsNull([SURFACE_ANALYST.Dem3] ) ,100,Con([SURFACE_ANALYST.Dem3] > 100,[SURFACE_ANALYST.Dem3] ,-9999) ) " ,该表达式的含义是:栅格数据集 Dem3 在别名为 SURFACE_ANALYST 的数据源中,将其中无值栅格变为 100,剩余栅格中,大于100 的,值保持不变,小于等于 100 的,值改成 -9999。
        5. 如果栅格计算中有小于零的负值,注意要加小括号,如:[DatasourceAlias1.Raster1] - ([DatasourceAlias2.Raster2])。
        6. 表达式中,运算符连接的操作数可以是一个栅格数据集或波段,也可以是数字或者数学函数。
        7. 数学函数的自变量可以为一个数值,也可以为某个数据集或某个波段,或者也可以是嵌套的另外一个运算表达式。
        8. 表达式必须是没有回车的单行表达式。
        9. 表达式中必须至少含有一个输入栅格数据集。
        参数:
        expression - 自定义的栅格运算表达式。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        pixelFormat - 指定的结果数据集的像素格式。注意,如果指定的像素类型的精度低于参与运算的栅格数据集像素类型的精度,运算结果可能不正确。
        isZip - 是否对结果数据集进行压缩处理。true 表示压缩。压缩编码方式由被压缩的数据集的像素格式决定,二者对应关系可参考 EncodeType 类。
        isIgnoreNoValue - 是否忽略无值栅格数据。true 表示忽略无值数据,即无值栅格不参与运算。IsNull函数例外,该参数不影响IsNull的判定结果。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        执行运算表达式的运算结果,是一个栅格数据集。
      • execute

        public static DatasetGrid execute(String expression,
                                          GeoRegion userRegion,
                                          PixelFormat pixelFormat,
                                          boolean isZip,
                                          boolean isIgnoreNoValue,
                                          Datasource targetDatasource,
                                          String targetDatasetName,
                                          SteppedListener... listeners)
        执行栅格代数运算表达式,支持自定义表达式的栅格代数计算和影像波段计算。

        通过自定义表达式可以进行算术运算、条件运算、逻辑运算、函数运算(常用函数、三角函数)以及复合运算。

        自定义运算表达式的组成需要遵循以下规则:

        1. 运算表达式应为一个形如下式的字符串:
        2. [DatasourceAlias1.Raster1] + [DatasourceAlias2.Raster2]

          如果需要指定多波段数据中的单个波段进行运算,则表达式形如下式:

          [DatasourceAlias1.Raster1.Band1] + [DatasourceAlias2.Raster2.Band2]

          使用“ [数据源别名.数据集名] ”或“ [数据源别名.数据集名.波段名] ”来指定参加运算的栅格数据集和波段;注意要使用方括号把名字括起来。

          如果使用“ [数据源别名.数据集名] ”指定多波段数据集,则取该数据的第一个波段参与运算。

        3. 栅格代数运算支持四则运算符("+" 、"-" 、"*" 、"/" )、条件运算符(">" 、">=" 、"<" 、"<=" 、"<>" 、"==" )、逻辑运算符("|" 、"&" 、"Not()" 、"^" )和一些常用数学函数("abs()" 、"acos()" 、"asin()" 、"atan()" 、"acot()" 、"cos()" 、"cosh()" 、"cot()" 、"exp()" 、"floor()" 、"mod(,)" 、"ln()" 、"log()" 、"pow(,)" 、"sin()" 、"sinh()" 、"sqrt()" 、"tan()" 、"tanh()" 、"Isnull()" 、"Con(,,)" 、"Pick(,,,..)" )。
        4. 代数运算的表达式中各个函数之间可以嵌套使用,直接用条件运算符计算的栅格结果都为二值(如大于、小于等),即满足条件的用1代替,不满足的用0代替,若想使用其他值来表示满足条件和不满足条件的取值,可以使用条件提取函数Con(,,)。例如:"Con(IsNull([SURFACE_ANALYST.Dem3] ) ,100,Con([SURFACE_ANALYST.Dem3] > 100,[SURFACE_ANALYST.Dem3] ,-9999) ) " ,该表达式的含义是:栅格数据集 Dem3 在别名为 SURFACE_ANALYST 的数据源中,将其中无值栅格变为 100,剩余栅格中,大于100 的,值保持不变,小于等于 100 的,值改成 -9999。
        5. 如果栅格计算中有小于零的负值,注意要加小括号,如:[DatasourceAlias1.Raster1] - ([DatasourceAlias2.Raster2])。
        6. 表达式中,运算符连接的操作数可以是一个栅格数据集或波段,也可以是数字或者数学函数。
        7. 数学函数的自变量可以为一个数值,也可以为某个数据集或某个波段,或者也可以是嵌套的另外一个运算表达式。
        8. 表达式必须是没有回车的单行表达式。
        9. 表达式中必须至少含有一个输入栅格数据集。
        参数:
        expression - 自定义的栅格运算表达式。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        pixelFormat - 指定的结果数据集的像素格式。注意,如果指定的像素类型的精度低于参与运算的栅格数据集像素类型的精度,运算结果可能不正确。
        isZip - 是否对结果数据集进行压缩处理。true 表示压缩。压缩编码方式由被压缩的数据集的像素格式决定,二者对应关系可参考 EncodeType 类。
        isIgnoreNoValue - 是否忽略无值栅格数据。true 表示忽略无值数据,即无值栅格不参与运算。IsNull函数例外,该参数不影响IsNull的判定结果。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        执行运算表达式的运算结果,是一个栅格数据集。
      • execute

        @Deprecated
        public static DatasetGrid execute(String expression,
                                                       GeoRegion userRegion,
                                                       PixelFormat pixelFormat,
                                                       boolean isZip,
                                                       boolean isIgnoreNoValue,
                                                       Datasource[] sourceDatasources,
                                                       Datasource targetDatasource,
                                                       String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.execute(String, GeoRegion, PixelFormat, boolean, boolean, Datasource[], Datasource, String, SteppedListener...) 替换。
        执行栅格代数运算表达式。

        有关栅格代数运算表达式应遵循的规则,请参见 execute 方法的介绍。

        参数:
        expression - 自定义的栅格运算表达式。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        pixelFormat - 指定的结果数据集的像素格式。注意,如果指定的像素类型的精度低于参与运算的栅格数据集像素类型的精度,运算结果可能不正确。
        isZip - 是否对结果数据集进行压缩处理。true 表示压缩。压缩编码方式由被压缩的数据集的像素格式决定,二者对应关系可参考 EncodeType 类。
        isIgnoreNoValue - 是否忽略无值栅格数据。true 表示忽略无值数据,即无值栅格不参与运算。
        sourceDatasources - 需要进行栅格代数运算的数据源集合。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        执行运算表达式的运算结果,是一个栅格数据集。
      • execute

        public static DatasetGrid execute(String expression,
                                          GeoRegion userRegion,
                                          PixelFormat pixelFormat,
                                          boolean isZip,
                                          boolean isIgnoreNoValue,
                                          Datasource[] sourceDatasources,
                                          Datasource targetDatasource,
                                          String targetDatasetName,
                                          SteppedListener... listeners)
        执行栅格代数运算表达式。

        有关栅格代数运算表达式应遵循的规则,请参见 execute 方法的介绍。

        参数:
        expression - 自定义的栅格运算表达式。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        pixelFormat - 指定的结果数据集的像素格式。注意,如果指定的像素类型的精度低于参与运算的栅格数据集像素类型的精度,运算结果可能不正确。
        isZip - 是否对结果数据集进行压缩处理。true 表示压缩。压缩编码方式由被压缩的数据集的像素格式决定,二者对应关系可参考 EncodeType 类。
        isIgnoreNoValue - 是否忽略无值栅格数据。true 表示忽略无值数据,即无值栅格不参与运算。
        sourceDatasources - 需要进行栅格代数运算的数据源集合。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        执行运算表达式的运算结果,是一个栅格数据集。
      • toInt

        @Deprecated
        public static DatasetGrid toInt(DatasetGrid sourceDataset,
                                                     GeoRegion userRegion,
                                                     Datasource targetDatasource,
                                                     String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.toInt(DatasetGrid, GeoRegion, Datasource, String, SteppedListener...) 替换。
        栅格取整运算。提供对输入的栅格数据集的栅格值进行取整运算。

        取整运算的结果是去除栅格值的小数部分,只保留栅格值的整数。如果输入栅格值为整数类型,进行取整运算后的结果与输入栅格值相同。关于栅格取整运算的图示如下:

        参数:
        sourceDataset - 指定的要取整的栅格数据集。
        userRegion - 用户指定的有效的计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        栅格取整运算结果,是一个栅格数据集。
      • toInt

        public static DatasetGrid toInt(DatasetGrid sourceDataset,
                                        GeoRegion userRegion,
                                        Datasource targetDatasource,
                                        String targetDatasetName,
                                        SteppedListener... listeners)
        栅格取整运算。提供对输入的栅格数据集的栅格值进行取整运算。

        取整运算的结果是去除栅格值的小数部分,只保留栅格值的整数。如果输入栅格值为整数类型,进行取整运算后的结果与输入栅格值相同。关于栅格取整运算的图示如下:

        参数:
        sourceDataset - 指定的要取整的栅格数据集。
        userRegion - 用户指定的有效的计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        栅格取整运算结果,是一个栅格数据集。
      • toFloat

        @Deprecated
        public static DatasetGrid toFloat(DatasetGrid sourceDataset,
                                                       GeoRegion userRegion,
                                                       Datasource targetDatasource,
                                                       String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.toFloat(DatasetGrid, GeoRegion, Datasource, String, SteppedListener...) 替换。
        栅格浮点运算。将输入的栅格数据集的栅格值转换成浮点型。

        如果输入的栅格值为双精度浮点型,进行浮点运算后的结果栅格值也转换为单精度浮点型。关于栅格浮点运算的图示如下:

        参数:
        sourceDataset - 指定的要转换为浮点型的栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        栅格浮点运算结果,是一个栅格数据集。
      • toFloat

        public static DatasetGrid toFloat(DatasetGrid sourceDataset,
                                          GeoRegion userRegion,
                                          Datasource targetDatasource,
                                          String targetDatasetName,
                                          SteppedListener... listeners)
        栅格浮点运算。将输入的栅格数据集的栅格值转换成浮点型。

        如果输入的栅格值为双精度浮点型,进行浮点运算后的结果栅格值也转换为单精度浮点型。关于栅格浮点运算的图示如下:

        参数:
        sourceDataset - 指定的要转换为浮点型的栅格数据集。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        栅格浮点运算结果,是一个栅格数据集。
      • executeFromXML

        @Deprecated
        public static DatasetGrid executeFromXML(String xmlFileName,
                                                              Datasource targetDatasource,
                                                              String targetDatasetName)
        已过时。 此方法已废弃,请使用支持进度监听的新方法 MathAnalyst.executeFromXML(String, Datasource, String, SteppedListener...) 替换。
        从 XML 文件中读取栅格运算表达式及相关参数并运算。

        该 XML 文件可以手动编辑获得,也可通过 toXMLFile 方法生成。关于 XML 文件的格式要求和标签含义请参见 toXMLFile 方法。

        参数:
        xmlFileName - 存储了栅格运算表达式及相关参数的 XML 文件。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        返回:
        执行运算表达式的运算结果,是一个栅格数据集。
      • executeFromXML

        public static DatasetGrid executeFromXML(String xmlFileName,
                                                 Datasource targetDatasource,
                                                 String targetDatasetName,
                                                 SteppedListener... listeners)
        从 XML 文件中读取栅格运算表达式及相关参数并运算。

        该 XML 文件可以手动编辑获得,也可通过 toXMLFile 方法生成。关于 XML 文件的格式要求和标签含义请参见 toXMLFile 方法。

        参数:
        xmlFileName - 存储了栅格运算表达式及相关参数的 XML 文件。
        targetDatasource - 指定的存储结果数据集的数据源。若设置为 null,则如果在栅格分析环境(GridAnalystSetting)中设置了输出数据源,分析结果将存储到该数据源中,否则存储到与输入数据源中。
        targetDatasetName - 指定的结果数据集。
        listeners - 用于接收进度条事件的监听器。
        返回:
        执行运算表达式的运算结果,是一个栅格数据集。
      • toXMLFile

        public static boolean toXMLFile(String xmlFileName,
                                        String expression,
                                        GeoRegion userRegion,
                                        PixelFormat pixelFormat,
                                        boolean isZip,
                                        boolean isIgnoreNoValue)
        将自定义栅格运算表达式及相关参数存储为 XML 文件。

        将自定义的栅格运算表达式及相关参数存储到 XML 文件中,以后需要再次运算时可以通过 executeFromXML 方法直接从该 XML 文件中读取表达式并完成运算,而不必重新编写表达式和设置参数。当然,也可以用来对需要进行相同运算的数据集进行批量处理,但需要注意,表达式中明确指定了参与运算的数据源和数据集的名称,使用时可以根据实际情况修改。

        下图为通过该方法生成的存储了运算表达式及参数的 XML 文件,图中标示了每个标签的含义:

        • 如果不指定有效计算区域(userRegion 参数),XML 文件中将不包含<SmXml:SingleSubRegionPoints></SmXml:SingleSubRegionPoints>标签。
        • 如果指定的 XML 文件已经存在,将会直接覆盖原来的内容。为避免丢失数据,可在调用该方法前可先判断是否已存在该文件。
        参数:
        xmlFileName - 指定的用于存储栅格运算表达式及相关参数的 XML 文件。
        expression - 自定义的栅格运算表达式。
        userRegion - 用户指定的有效计算区域。如果为 null,则表示计算全部区域,如果参与运算的数据集范围不一致,将使用所有数据集的范围的交集作为计算区域。
        pixelFormat - 指定的结果数据集的像素格式。注意,如果指定的像素类型的精度低于参与运算的栅格数据集像素类型的精度,运算结果可能不正确。
        isZip - 是否对结果数据集进行压缩处理。true 表示压缩。压缩编码方式由被压缩的数据集的像素格式决定,二者对应关系可参考 EncodeType 类。
        isIgnoreNoValue - 是否忽略无值栅格数据。true 表示忽略无值数据,即无值栅格不参与运算。
        返回:
        一个布尔值,表示读取是否成功,如果读取成功,返回 true,否则返回 false。
      • addSteppedListener

        public static void addSteppedListener(SteppedListener l)
        添加一个进度条事件(SteppedEvent)的监听器。
        参数:
        l - 一个用于接收进度条事件的监听器。
      • removeSteppedListener

        public static void removeSteppedListener(SteppedListener l)
        移除一个进度条事件(SteppedEvent)的监听器。
        参数:
        l - 一个用于接收进度条事件的监听器。

Copyright © 2021–2024 SuperMap. All rights reserved.