Python批量解壓zip文件並利用arcpy進行柵格批量拼接操作


前言:在“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的數據,再進行掩膜提取

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM