赞
踩
任务描述:已有流域边界的面文件,从长时间序列的全球尺度栅格图像裁减出流域的部分
效果如下:
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 = shp
print mask #用于检查是否读对掩膜文件
npos=mask.index('_')
# print npos
catchment_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!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。