赞
踩
在裁剪时我们要用到Toolbox中的工具Extract By Mask,而这个工具在python的程序语言中体现出来就是
out_extract = arcpy.sa.ExtractByMask(ras, mask) #执行按掩模提取操作
官方对于 ExtractByMask工具 的描述请看 按掩膜提取
对于ExtractByMask工具,要求输入的被裁减的文件和掩膜文件都是raster格式
需要做的第一步就是将asc文件转化为raster格式的文件,下边是经本人修改调试过的程序,一并附上最初参考的链接: ArcGIS 10 影像、栅格数据格式批量转换
# Import system modules
import sys, string, os #加载工具包
dir = 'C:/Users/DELL/Documents/ArcGIS/Budyko_ds/MODIS_asc' #工作环境
# Import arcpy module
import arcpy
files = os.listdir(dir)
for f in files: #遍历文件
if os.path.splitext(f)[1] == '.asc':
# Script arguments...
Input_raster_file = dir + os.sep + f
# Local variables...
Output_data_type = "DOUBLE"
Raster_Format = "TIFF"
Output_Workspace = "C:/Users/DELL/Documents/ArcGIS/Budyko_ds/Conversion"
# =============== file name process ======================
basename = os.path.splitext(f)[0];
Output_raster = Output_Workspace + os.sep + basename + ".tif";
if os.path.exists(Output_raster) == False:
print Input_raster_file
# Process: Raster To Other Format (multiple)...
arcpy.RasterToOtherFormat_conversion(Input_raster_file,
Output_Workspace, Raster_Format)
print Output_raster
print("ALL DONE")
所以只需要对上边程序进行修改,就将asc文件批量转为Tif文件(转为Tif是方便进行掩模裁剪, 有效的栅格类型包含TIF ——栅格数据集的标记图像文件,但不非得转成TIF,其他栅格文件也行官方对于ListRasters的定义和描述)
接下来就是裁减了,目前我亲测成功是以下三个链接中的第三个,现将修改后的代码附上:
import arcpy
arcpy.CheckOutExtension("spatial") #检查有没有授权ArcGIS Spatial Analyst 扩展模块,没有则授权
arcpy.gp.overwriteOutput=1
arcpy.env.workspace = "C:/Users/DELL/Documents/ArcGIS/Budyko_ds/Conversion"
rasters = arcpy.ListRasters("*", "tif")
mask= "C:/Users/DELL/Documents/ArcGIS/Budyko_ds/Conversion/c630_Australia_614006_Bounda5.shp"
for raster in rasters:
print(raster)
out= "C:/Users/DELL\Documents/ArcGIS/Budyko_ds/Extraction/"+"clip_"+raster
arcpy.gp.ExtractByMask_sa(raster, mask, out)
print("clip_"+raster+" has done")
print("All done")
需要注意的是:
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
[经验总结] 栅格数据批量裁剪–Python脚本
原因是:如果在不同文件夹,就得切换程序的工作环境,很麻烦
另外还需注意的是自己的边界文件(掩膜文件)是个线文件还是面文件,如果只是一条线,得到的就是下图中的那条彩色栅格环,但如果想要裁下来一个面的话就要将线用Arcgis中 Feature To Polygon 工具将之转换为面的shp文件~,可以参考
Python 批量将线元素转化为面元素
4.这样我们就完成了对于上百个asc文件的掩膜裁减任务:
最后得到的结果图(只展示一个流域):
Over
这是一篇关于python和Arcgis的很基础的操作指引文章,我希望对像我这样的初学者有所裨益,毕竟我也受惠于CSDN中大佬们的诸多指导,所以想把这点小心得写下来,大佬请忽略~~ 在操作过程中肯定会有形形色色的问题存在,所以耐心百度吧,百度的过程就是成长进步的过程,科研木有捷径走啊
如果大家发现有什么问题或者可以改进的地方尽可以留言指出~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。