前言:在“NASADEM-中國”文件夾中有很多子文件夾:
而在這些子文件夾中又有很多zip壓縮文件:
現在先想要把這些壓縮文件解壓到一個文件夾“ALL”中:
import os import shutil import zipfile parent_path=r'G:\DEM\NASADEM-中國' #父文件夾路徑 directory_to_extract_to=r"G:\DEM\ALL" #解壓目標文件夾路徑 for root, dirs, files in os.walk(parent_path): # 讀取文件名 for name in files: print(name) path_to_zip_file=root+'\\'+name print(path_to_zip_file) with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref: zip_ref.extractall(directory_to_extract_to)
等待其運行完。
接下來可以再ArcGIS中進行DEM的拼接操作:
參考:https://blog.csdn.net/gisboygogogo/article/details/75195760
###批量拼接tiff的DEM ------------------------------ import arcpy from arcpy import env from arcpy.sa import * import sys reload(sys) # reload 才能調用 setdefaultencoding 方法 sys.setdefaultencoding('utf-8') # 設置 'utf-8' arcpy.CheckOutExtension('Spatial') arcpy.env.workspace = "G:/DEM/NASADEM-中國/ALL" #提取待拼接影像的文件名,且中間以;隔開,例如:a.tif;b.tif;c.tif rasters = [] for ras in arcpy.ListRasters("*.hgt"): print(ras) rasters.append(ras) ras_list = ";".join(rasters) print(ras_list) base = "n18e108.hgt" #以下一段代碼是為執行拼接做參數准備 out_coor_system = arcpy.Describe(base).spatialReference #獲取坐標系統 dataType = arcpy.Describe(base).DataType piexl_type = arcpy.Describe(base).pixelType cellwidth = arcpy.Describe(base).meanCellWidth #獲取柵格單元的的寬度 bandcount = arcpy.Describe(base).bandCount #獲取bandCount #輸出與拼接 outFolder = r"G:\DEM\NASADEM-中國" arcpy.MosaicToNewRaster_management(ras_list,outFolder,"China__dem_data.tif", out_coor_system, "16_BIT_SIGNED", cellwidth, bandcount, "LAST", "FIRST")
對應的ArcGIS中使用工具為:
可惜由於數據量實在過大,最后拼接出來的一張影像可能有十幾個G大小,在ArcGIS中也不怎么打得開,綜合考慮到處理大數據量的時候也是分塊處理,因此針對所要研究的對象進行分開式處理,進行掩膜提取之類
例如,先拼接N38-N58的數據,再進行掩膜提取