前言
在需要获取某种长时间序列数据(例如:某一地区的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