当前位置:   article > 正文

Python 对ASCII文件(及TIF文件)进行批量掩模裁剪_对tif数据进行裁剪

对tif数据进行裁剪

第一步:ASCII转TIF文件

在裁剪时我们要用到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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

所以只需要对上边程序进行修改,就将asc文件批量转为Tif文件(转为Tif是方便进行掩模裁剪, 有效的栅格类型包含TIF ——栅格数据集的标记图像文件,但不非得转成TIF,其他栅格文件也行官方对于ListRasters的定义和描述

第二步:TIF文件的裁减

接下来就是裁减了,目前我亲测成功是以下三个链接中的第三个,现将修改后的代码附上:

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

需要注意的是:
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
[经验总结] 栅格数据批量裁剪–Python脚本
原因是:如果在不同文件夹,就得切换程序的工作环境,很麻烦

另外还需注意的是自己的边界文件(掩膜文件)是个线文件还是面文件,如果只是一条线,得到的就是下图中的那条彩色栅格环,但如果想要裁下来一个面的话就要将线用Arcgis中 Feature To Polygon 工具将之转换为面的shp文件~,可以参考
Python 批量将线元素转化为面元素
在这里插入图片描述

4.这样我们就完成了对于上百个asc文件的掩膜裁减任务:
在这里插入图片描述

最后得到的结果图(只展示一个流域):
在这里插入图片描述

Over

这是一篇关于python和Arcgis的很基础的操作指引文章,我希望对像我这样的初学者有所裨益,毕竟我也受惠于CSDN中大佬们的诸多指导,所以想把这点小心得写下来,大佬请忽略~~ 在操作过程中肯定会有形形色色的问题存在,所以耐心百度吧,百度的过程就是成长进步的过程,科研木有捷径走啊
如果大家发现有什么问题或者可以改进的地方尽可以留言指出~~

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/81123
推荐阅读
相关标签
  

闽ICP备14008679号