首页 > 代码库 > 使用Python脚本批量裁切栅格

使用Python脚本批量裁切栅格

????对栅格的裁切,我们通常使用裁切(数据管理-栅格-栅格处理)或按掩膜提取(空间分析-提取分析)来裁切,裁切的矢量要素通常是一个要素图层或Shape文件。如果要进行批量处理,可以使用ToolBox中的批量处理工具。但是,有时我们选择的裁切矢量要素不是一个要素图层,而是要素图层中的一个要素,如按标准图幅裁切栅格影像,以前的做法是将要素一个一个的导出来,再进行批量处理。快速导出方法:ArcGIS按字段属性分割文件。

????现在,可以使用Python脚本来批量裁切,在网上找了位大神的原始代码学习一下:

  1. #-*- encoding:UTF-8 -*-
  2. ?
  3. # Tool Name: 遍历要素裁剪栅格
  4. # Source Name: extractByMask.py
  5. # Version: ArcGIS 10.1
  6. # Author: GIScloud
  7. # Created: 2012/11/1
  8. ?
  9. import arcpy
  10. import string
  11. from arcpy.sa import *
  12. ?
  13. try:
  14. ????raster = arcpy.GetParameterAsText(0) #要裁剪的栅格
  15. ????clip_feat = arcpy.GetParameterAsText(1) #裁剪要素类
  16. ????field = arcpy.GetParameterAsText(2) #命名字段
  17. ????outworkspace = arcpy.GetParameterAsText(3) #命名字段裁剪后输出目录
  18. ?
  19. ????for row in arcpy.SearchCursor(clip_feat):
  20. ????????mask=row.getValue("Shape")
  21. ????????outPath=outworkspace+"\\"+str(row.getValue(field))
  22. ????????outExtractByMask = ExtractByMask(raster,mask)
  23. ????????outExtractByMask.save(outPath)
  24. ?
  25. except arcpy.ExecuteError:
  26. ????print arcpy.GetMessages()

????将脚本导出ToolBox中,执行报错:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 32-34: ordinal not in range(128)问题,使用的是ulipad编译器。

技术分享

????看样子是编码的问题,查了一下解决方案:在开头加上代码设置默认编辑

  1. import sys
  2. reload(sys)
  3. sys.setdefaultencoding( "utf-8" )

    能够实现部分裁切了,但最后一个出了问题,看消息输出的文件名中怎么多了一个句号?

技术分享

????查看属性表,没有问题。将输出字段"北川羌族自治县"改为"北川羌族自治"能够正确输出,如果改成"北川羌族自治北川羌族自治",又报相同的错误。说明应该就是输出名称长度的问题。

技术分享

技术分享

还有一个问题,输出的不同栅格边界接连有点小问题,如果避免这种情况,只能更改系统变量,输出更小的单元格大小。

技术分享

参考:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=121642

????http://blog.sina.com.cn/s/blog_64a3795a01018vyp.html

?

使用Python脚本批量裁切栅格