【基于Python的Arcgis脚本工具】批量获取栅格数据最大值、最小值、平均值等,并写入csv

发布于:2023-01-28 ⋅ 阅读:(703) ⋅ 点赞:(0)

前言

在需要获取某种长时间序列数据(例如:某一地区的1990-2022年ndvi数据)的总体特征数据时,在gis中传统的操作是:添加数据->图层属性->源->查看相应特征值->复制粘贴入excel。面对大量数据这一传统人工操作不仅费时费力,而且容易出错。现免费分享一个基于Arcpy的自定义脚本工具,安装进gis后只需输入4个参数,便可自动化获取总体特征数据并写入excel可读取的csv文件,这将极大简易以上需求的流程,提高处理数据的速率,提升数据处理精度。


一、工具介绍

批量获取多个栅格数据总体特征数据(如,平均值、最大值、最小值、标准差等)并写入excel可读取的csv文件。

二、脚本代码

代码如下:

import arcpy

arcpy.CheckOutExtension("spatial")

input_rasters = arcpy.GetParameterAsText(0)
sta_type = arcpy.GetParameterAsText(1)
band_index = arcpy.GetParameterAsText(2)
output_csv = arcpy.GetParameterAsText(3)


input_rasters_list = input_rasters.split(';')
def GetMultiVa():
    value_list = []
    rastername_list=[]
    for tif in input_rasters_list:
        meanvalueinfo = arcpy.GetRasterProperties_management(tif,sta_type,band_index)
        value = float(meanvalueinfo.getOutput(0))
        arcpy.AddMessage('{} read completed'.format(tif))
        value_list.append(value)
        rastername = tif.split('\\')
        rasternameend = rastername[-1]
        if rasternameend.endswith(".tif"):
            rastername_list.append(rasternameend[:-4])
        else:
            rastername_list.append(rasternameend)
    value_dict = dict(zip(rastername_list,value_list))
    return value_dict

def writetocsv():
    f = open(output_csv, 'a')
    header = 'RasterName' + ',' + sta_type + '\n'
    f.write(header)
    for key,val in GetMultiVa().items():
        f.write(str(key) + ',' + str(val) + '\n')
        arcpy.AddMessage('The {} has been written'.format(key))
    f.close()


GetMultiVa()
writetocsv()

三、工具操作

如何添加外部工具箱进入gis中,请参考Salierib博主的这篇文章:添加工具箱

按帮助描述操作即可

四、使用示例

总结

使用注意事项:由于gis自带python是2版本,所以路径中不能出现中文,不然就会报错。

工具免费分享,网盘自提:

链接:https://pan.baidu.com/s/1y9M0AqGers-XicmiGLTkUg?pwd=bjfu 
提取码:bjfu

欢迎交流,上传报错。

感谢Sarlierb博主的大力支持。

使用过程中有任何问题,发邮件至邮箱:83827730@qq.com

作者:Focusify


网站公告

今日签到

点亮在社区的每一天
去签到