系列文章目录: ArcGIS自定义脚本编程


一、功能描述

读取栅格文件,批量统计栅格的文件名、计数、最小值、最大值、总和、平均值、中位数、标准差。并将统计结果保存为表格(.csv)文件。表格文件样式如下:
在这里插入图片描述


二、代码

def gdal_analysis(in_path,out_csv):
    """
    读取栅格文件,批量统计栅格的文件名、计数、最小值、最大值、总和、平均值、中位数、标准差。并将统计结果保存为表格(.csv)文件。
    in_path:待统计的栅格所在的文件夹
    out_csv:生成的表格.csv文件所存放的位置
    """
    from osgeo import gdal
    import pandas as pd
    import numpy as np
    import os
    tifs = [os.path.join(in_path,i) for i in os.listdir(in_path) if i.endswith(".tif")]
    res = []
    for in_tif in tifs:
        bname = os.path.basename(in_tif)
        fname = os.path.splitext(bname)[0]
        rds = gdal.Open(in_tif)  # type:gdal.Dataset
        if rds.RasterCount != 1:
            print("Warning, RasterCount > 1")
        band = rds.GetRasterBand(1)  # type:gdal.Band
        ndv = band.GetNoDataValue() # nodata value

        # 读取栅格至大小为n*1的数组中
        values = np.array(band.ReadAsArray()).ravel() 
        # 排除空值区
        values = values[values != ndv]
        temp = [fname,values.size,np.min(values),np.max(values),np.sum(values),np.mean(values),np.median(values),np.std(values)]
        res.append(temp)
    res = pd.DataFrame(res)
    res.columns = ["fileName","count","min","max","sum","mean","median","std"]
    res.to_csv(out_csv)

三、使用例

3.1、问题描述

将由MOD13数据集经过预处理得到的NDVI栅格进行批量统计分析,其中NDVI栅格并未乘以缩放因子。以黄土高原的2001全年16day的NDVI栅格为例。
在这里插入图片描述

3.2、代码示例

path1 = r"H:\scriptTest\input" # 输入:待统计栅格所在的文件夹
csv1 = r"H:\scriptTest\input\result.csv" # 输出:包含统计结果的表格文件
gdal_analysis(path1,csv1)

3.3、运行结果

在这里插入图片描述
在这里插入图片描述


Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐