用Python对ASCII文件进行批量掩模裁剪


首先声明,这篇文章是关于网上诸多方法的测试和修正,所以是基于大佬的文章之上的,参考文章的链接如下:

  1. 在裁剪时我们要用到Toolbox中的工具Extract By Mask,而这个工具在python的程序语言中体现出来就是
    out_extract = arcpy.sa.ExtractByMask(ras, mask) #执行按掩模提取操作
    下边给出了一个链接,是官方对于ExtractByMask工具 语句的定义和描述
    http://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/spatial-analyst-toolbox/extract-by-mask.htm
    如果认真阅读就会明白,对于ExtractByMask工具,要求输入的被裁减的文件和掩膜文件都得是raster格式

  2. 那么,需要做的第一步就是讲asc文件转化为raster格式的文件,下边是修改过的程序和它最初的来源链接:

# 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")
 

链接是:https://blog.csdn.net/mygisforum/article/details/8262450?utm_source=blogxgwz9   :ArcGIS 10 影像、栅格数据格式批量转换

上边说了我们要将asc文件换成raster文件,但在这篇文章中:https://pro.arcgis.com/zh-cn/pro-app/arcpy/functions/listrasters.htm (官方对于ListRasters的定义和描述) 中说明了 有效的栅格类型包含TIF ——栅格数据集的标记图像文件
所以只对上边程序进行修改,将asc文件批量转为Tif文件(之所以转为Tif是后边的程序都是将Tif图像文件进行掩模裁剪)

3.接下来就是裁减了,目前我亲测成功是最开始给出的三个链接中的第三种,现在将修改后的代码附上:

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")

需要注意的是:
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
把边界和待裁剪的栅格数据放到一个文件下!
http://bbs.06climate.com/forum.php?mod=viewthread&tid=29483
另外还需注意的是自己的边界是个线还是面,如果只是一条线,得到的就是下图中的那条彩色栅格环,但如果想要裁下来一个面的话就要将线用Arcgis中 Feature To Polygon 工具将之转换为面的shp文件~在这里插入图片描述

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

最后得到的结果图:
在这里插入图片描述

Over

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

转载自:https://blog.csdn.net/qq_38882446/article/details/88541512

You may also like...