『Arcpy』 像元统计SpatialAnalyst

根据多个栅格数据计算每个像元的统计数据。

可用的统计数据有:众数、最大值、均值、中位数、最小值、少数、范围、标准差、总和及变异度。

插图

GUID-D8BD897C-B7A2-46A5-93DC-121409FF4C0D-web

OutRas = CellStatistics([InRas1, InRas2, InRas3], “SUM”, “NODATA”, “SINGLE_BAND”)

使用方法

  • 使用此工具时输入栅格的顺序不重要。

  • 对于最大值、最小值、均值、中位数、众数、少数及总和统计数据类型,如果将单个栅格数据用作输入,则输出像元值将与输入像元值相同。对于范围和标准偏差,输出像元值将全部为 0。对于 Variety,它将是 1。

  • 如果未选中以多波段方式处理参数(在 Python 中,process_as_multiband 设置为 SINGLE_BAND),则来自多波段栅格输入的每个波段都将分别作为单波段栅格进行处理,且输出将是单波段栅格。

    GUID-65E29EE7-3679-4CE0-833A-E3F29F1EB319-web

    当作为 SINGLE_BAND 进行处理时,像元统计工具将创建单波段输出。

  • 如果选中以多波段方式处理参数(在 Python 中,process_as_multiband 设定为 MULTI_BAND),每个多波段栅格输入都将被作为多波段栅格进行处理,而输出将是多波段栅格。如果输入是多波段栅格和常量的组合,则输出栅格也将是多波段。每个多波段输入中的波段数必须相同。

    该工具将使用另一个输入的相应波段对一个输入的每个波段执行操作。如果输入之一是多波段栅格,而另一个输入是常量,则该工具将使用多波段输入中每个波段的常量值执行操作。

    GUID-E2051A7D-8304-4CC0-B57F-EF9F68690906-web

    当作为 MULTI_BAND 进行处理时,像元统计工具将创建多波段输出。

语法

CellStatistics(in_rasters_or_constants, {statistics_type}, {ignore_nodata}, {process_as_multiband})

参数

参数 说明 数据类型
in_rasters_or_constants
[in_raster_or_constant,…]
输入栅格列表,将为其中的输入栅格计算“分析”窗口中各个像元的统计数据。可使用一个数字作为输入;但是,像元大小和范围必须先在环境中进行设置。如果将 processing_as_multiband 参数设置为 MULTI_BAND,则所有多波段输入应具有相等数量的波段。 Raster Layer; Constant
statistics_type(可选) 指定要计算的统计数据类型。MEAN —将计算输入的平均值。MAJORITY —将计算输入的众数(出现次数最多的值)。MAXIMUM —将计算输入的最大值。MEDIAN —将计算输入的中值。MINIMUM —将计算输入的最小值。MINORITY —将计算输入的少数(出现次数最少的值)。RANGE —将计算输入的范围(最大值和最小值之差)。STD —将计算输入的标准偏差。SUM —将计算输入的总和(所有值的总和)。VARIETY —将计算输入的变异度(唯一值的数量)。默认统计类型为平均值。 String
ignore_nodata(可选) 指定在进行统计计算时是否将忽略 NoData 值。DATA —在处理像元位置处,如果任意输入栅格具有 NoData,将忽略该 NoData 值。仅考虑具有有效数据的像元来计算统计数据。这是默认设置。NODATA —如果任意输入栅格的处理像元位置为 NoData,该像元的输出将为 NoData。 Boolean
process_as_multiband(可选) 指定如何处理输入多波段栅格波段。SINGLE_BAND —来自多波段栅格输入的每个波段将被单独处理为单波段栅格。这是默认设置。MULTI_BAND —每个多波段栅格输入都将作为多波段栅格进行处理。将使用其他输入的相应波段数对一个输入的每个波段执行操作。 Boolean

返回值

名称 说明 数据类型
out_raster 输出栅格。对于各个像元,可通过将指定统计数据类型应用到该位置处的输入栅格来确定该值。 Raster

代码示例

CellStatistics 示例 1(Python 窗口)

在本示例中,将针对多个输入 Grid 栅格中的每个像元计算标准差,并将结果输出为 IMG 栅格。

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outCellStats = CellStatistics(["degs", "negs", "cost"], "STD", "DATA")
outCellStats.save("C:/sapyexamples/output/outcellstats.img")

在自己使用的过程中发现需要将计算的影像放到同一个文件夹下,才能正确的运行程序,

# -*- coding: utf-8 -*-


import arcpy
from arcpy import env
from arcpy.sa import *
import os
import shutil


arcpy.CheckOutExtension("ImageAnalyst")  # 检查许可
arcpy.CheckOutExtension("spatial")  # 检查许可


def mean_tif(t, o_tif):
    arcpy.env.workspace = t
    Rasters = arcpy.ListRasters("*", 'tif')
    outCellStatistics = CellStatistics(Rasters, "MEAN")
    outCellStatistics.save(o_tif)


def del_file(path):
    paths = [os.path.join(path, file) for file in os.listdir(path)]
    for file in paths:
        os.remove(file)


def parse_tif(day, night, temporary_file, out):
    if not os.path.exists(temporary_file):
        os.makedirs(te)
    if not os.path.exists(out):
        os.makedirs(out)

    days = [os.path.join(day, name) for name in os.listdir(day)]
    nights = [os.path.join(night, name) for name in os.listdir(night)]
    outs = [os.path.join(out, name.replace('LST_Day_1km', 'mean')) for name in os.listdir(day)]

    for d_tif, n_tif, o_tif in zip(days, nights, outs):
        shutil.copy(d_tif, temporary_file)
        shutil.copy(n_tif, temporary_file)
        mean_tif(temporary_file, o_tif)
        print d_tif, n_tif
        del_file(temporary_file)

    shutil.rmtree(temporary_file)


if __name__ == "__main__":
    day = r'F:\CodeFile\d'
    night = r'F:\CodeFile\n'
    # 临时文件夹,如何不存在,会自动建立,程序运行完会自动删除
    te = r'F:\CodeFile\means'
    # 文件输出,如何不存在,会自动建立
    out_file = r'F:\CodeFile\mean'

    parse_tif(day, night, te, out_file)

参考

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2021 HG | 访问人数: | 浏览次数:

请我喝瓶农夫三拳吧~

支付宝
微信