任务描述:已有流域边界的面文件,从长时间序列的全球尺度栅格图像裁减出流域的部分
效果如下:
import arcpy
import os#检查Arcgis的权限
arcpy.CheckOutExtension("spatial")
arcpy.gp.overwriteOutput = 1##################################裁减径流图##################################读取掩膜文件(矢量面文件)
arcpy.env.workspace = "F:/Snowmelt/Boundary/"
shps = arcpy.ListFiles("*.shp")#读取要进行裁减的图像(栅格文件)
arcpy.env.workspace = "F:/TerraClimate/TIFF/q/"
rasters = arcpy.ListRasters("*", "tif")#遍历shps中的所有掩膜文件
for shp in shps:#读取流域编号mask = shpprint mask #用于检查是否读对掩膜文件npos=mask.index('_')# print nposcatchment_name = mask[int(npos)+1:int(npos)+13]# print catchment_name #用于检查是否读对流域编号for raster in rasters:#判断存储最终图像的文件夹是否存在,是则存储,否则创建并存储;注意if和else后一定要加冒号,格式要对齐if os.path.exists(r"F:/Snowmelt/"+catchment_name+"/q"):out = (r"F:/Snowmelt/"+catchment_name+"/q/"+raster)else:os.makedirs(r"F:/Snowmelt/"+catchment_name+"/q")out = "F:/Snowmelt/"+catchment_name+"/q/"+raster# 调用裁减工具arcpy.gp.ExtractByMask_sa(raster, mask, out)print("clip_"+raster+" has done")print(catchment_name+"_Q_has done")print("All done")
其中:
substr.start() for substr in re.finditer(a,b) 查找在b中a出现的位置
需要注意:
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
原因是:如果在不同文件夹,就得切换程序的工作环境,很麻烦
Finish!
后记:
写博客的初衷是分享经验,同时是算是自己对思路和代码的整理,方便日后处理数据,应该可以帮到很多人。
我已免费分享我的心得,如果看官还有其他问题的,那么:知识付费,我的时间和经验正好可以解决你的问题。
咨询问题请添加QQ:819369354
2022年4月20日