使用场景介绍
最近在做蒸散发,下载了REA的蒸散发日尺度数据,之前做月尺度的时候,按照教程手动操作,但是日尺度的数据一年就有365天,手动操作了一天觉得太累了,开始寻找解放双手的批量处理方法。本来是打算用anaconda做,但我太菜了,于是转去尝试ArcPy。
数据源:链接https://pan.baidu.com/s/1P68qdS9Z_whrw1GKL_Mrng?pwd=1111
提取码:1111
–来自百度网盘超级会员V1的分享
软件:ArcGIS10.6(ArcGIS版本不影响的)
1. 创建netcdf图层
(1)【工具箱】-【多维工具】-【创建NetCDF栅格图层】
(2)输入要转换的nc文件,并选择波段
(3)点击【OK】等待运行,出来就是这样的
2. 创建模型
我们的主要是在模型构建器的基础上去进行修改实现批量操作,因此模型要先构建好,思路是先创建栅格图层,再复制栅格。
(1)点击【模型】,再在工具箱中找到【数据管理工具】-【图层和表视图】-【创建栅格图层】,和【数据管理工具】-【栅格】-【栅格数据集】-【复制栅格】,将它们拖到模型构建器里面
最后,模型构建器就是这样子的
3. 导出模型
点击【模型】-【导出】-【导出至python】
这样咱们就有了一个python代码
在这里插入代码片
# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# sinple.py
# Created on: 2022-08-10 15:33:10.00000
# (generated by ArcGIS/ModelBuilder)
# Description:
# ---------------------------------------------------------------------------
# Import arcpy module
import arcpy
# Local variables:
E_Layer = "E_Layer"
E_Layer2005 = "E_Layer2005"
v2005_10_tif = "D:\\DATA\\nc\\REA\\2005\\2005-10.tif"
# Process: Make Raster Layer
arcpy.MakeRasterLayer_management(E_Layer, E_Layer2005, "", "-180 -60 180 90", "1")
# Process: Copy Raster
arcpy.CopyRaster_management(E_Layer2005, v2005_10_tif, "", "", "-nan(ind)", "NONE", "NONE", "", "NONE", "NONE", "TIFF", "NONE")
4. 修改代码
批处理的核心是循环,日尺度的nc文件有365个波段,咱们的目的是提取单波段,所以可以用到for循环。
import arcpy
for i in range(1,366): #取前不取后
E_Layer = "E_Layer" #保持原状
E_Layer2005 = "E_Layer2005"+str(i) #修改名称,方便记录波段
v2005_10_tif = "D:\\DATA\\nc\\REA\\2005\\2005-"+str(i)+".tif" #依然是修改名称
arcpy.MakeRasterLayer_management(E_Layer, E_Layer2005, "", "-180 -60 180 90", "1") #创建栅格图层操作
arcpy.CopyRaster_management(E_Layer2005, v2005_10_tif, "", "", "-nan(ind)", "NONE", "NONE", "", "NONE", "NONE", "TIFF", "NONE") #复制栅格操作
注意,在创建栅格图层和复制栅格这两个操作的参数意义可以在帮助中找到
下面还有代码示例
5. 运行
修改完成之后就可以运行啦
回到ArcGIS,点击arcpy
点击右键,找到【加载(load)】,把我们的代码加载进去
按下回车,就可以开始运行啦
但是365个波段可能太多了,我每次是拿出30个波段来分,速度的话大概是1分钟3个波段
6. 思考`
划重点:批处理的核心是循环,重复一样的操作,只是参数会有所变化
缺点:只能先打开ArcGIS创建完netcdf图层后才能进行arcpy的操作,会有一点小麻烦,处理时间上也不如纯代码快,但是本菜鸟只能先做到这样
展望:还是要继续学习纯代码鸭
7. 参考文献
[1] nc格式处理:https://www.bilibili.com/video/BV1cS4y1376X?spm_id_from=333.337.search-card.all.click&vd_source=72adb3930d697c546ff4072986680016
[2] 循环操作:https://www.runoob.com/python3/python3-loop.html
[3] 其他类似处理操作文章:https://blog.csdn.net/weixin_43416590/article/details/124770536
https://blog.csdn.net/xiaoxie_qingfa/article/details/114099471?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-114099471-blog-124770536.pc_relevant_multi_platform_featuressortv2dupreplace&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-114099471-blog-124770536.pc_relevant_multi_platform_featuressortv2dupreplace&utm_relevant_index=6