首先,我們來先明確一下本文的具體需求。現有一個儲存有大量.tif
格式遙感影像的資料夾,其中每個遙感影像的檔案名稱中都包含有該影像的成像時間,如下圖所示。
我們希望,對於同一天成像的遙感影像進行拼接——例如,上圖中具有2001
年第185
天成像的遙感影像10
幅,每一幅都是這一天在不同空間位置的成像;同時有2001
年第193
天成像的遙感影像10
振幅。我們希望先將第185
天成像的10
幅遙感影像加以拼接,接著對第193
天成像的10
##。遙感影像加以拼接,以此類推。在遙感影像整體數量較少時,我們或許還可以逐一手動拼接;而當影像數量很多時,就需要藉助程式碼來實現了。
明確了需求後,我們就可以開始具體的操作。首先,本文所需用到的程式碼如下。 #### -*- coding: utf-8 -*- """ Created on Fri Apr 15 13:21:55 2022 @author: fkxxgis """ import os import arcpy tif_file_path="E:/LST/Data/NDVI/02_TIFF/" out_file_path="E:/LST/Data/NDVI/03_Mosaic/" arcpy.env.workspace=tif_file_path tif_file_name=arcpy.ListRasters("*","tif") tif_file_date=tif_file_name[0][1:8] one_day_tif_list=[] tif_file_example_path=tif_file_path+tif_file_name[0] cell_size_x=arcpy.GetRasterProperties_management(tif_file_example_path,"CELLSIZEX") cell_size=cell_size_x.getOutput(0) value_type=arcpy.GetRasterProperties_management(tif_file_example_path,"VALUETYPE") describe=arcpy.Describe(tif_file_example_path) spatial_reference=describe.spatialReference for tif_file in tif_file_name: if tif_file[1:8]==tif_file_date: one_day_tif_list.append(tif_file) tif_file_temp=tif_file if tif_file==tif_file_name[len(tif_file_name)-1]: out_file_name=tif_file[1:8]+".tif" arcpy.CreateRasterDataset_management(out_file_path,out_file_name, cell_size,"16_BIT_SIGNED",spatial_reference,"1") out_file=out_file_path+out_file_name for tif_file_new in one_day_tif_list: arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file) else: out_file_name=tif_file_temp[1:8]+".tif" arcpy.CreateRasterDataset_management(out_file_path,out_file_name, cell_size,"16_BIT_SIGNED",spatial_reference,"1") out_file=out_file_path+out_file_name for tif_file_new in one_day_tif_list: arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file) one_day_tif_list=[] one_day_tif_list.append(tif_file) tif_file_date=tif_file[1:8]###其中,###tif_file_path###是原有拼接前遙感影像的儲存路徑,###out_file_path###是我們新產生的拼接後遙感影像的儲存路徑。 ######在這裡,我們需要先在資源管理器中,將###tif_file_path###路徑下的各個檔案以「###名稱###」排序的方式進行排序;隨後,利用###arcpy.ListRasters()###函數,取得路徑下原有的全部###.tif###格式的影像文件,並截取第一個文件的部分檔名,從而取得其成像時間;接下來,做好創建一個新的柵格檔案的準備,這一部分程式碼的含義在本文開頭提及的那一篇文章Python arcpy創建柵格、批量拼接柵格中已有提及,這裡就不再贅述。 ######接下來,遍歷###tif_file_path###路徑下全部###.tif###格式映像檔。其中,我們透過一個簡單的判斷語句,來確定某一成像時間的遙感影像是否已經讀取完畢——如果已經讀取完畢,例如假如第###185###天成像的10幅遙感影像都已經遍歷過了,那麼就對這十景遙感影像加以拼接;如果還沒讀取完畢,例如假如第###185###天成像的10幅遙感影像目前僅遍歷到了第8幅,那就不拼接,繼續往下遍歷。 ######這裡相信大家也看到了為什麼我們要在前期先將資料夾中的檔案按照「###名稱###」排序——是為了保證###同一成像時間的所有遙感影像都排列在一起###,遍歷時只要遇到一個###新的成像時間###,程式就知道###上一個成像時間###的所有影像都已經遍歷完畢了,就可以將###上一個成像時間###的所有柵格影像加以拼接。 ######最後,透過###tif_file==tif_file_name[len(tif_file_name)-1]###這個判斷,來確認是否目前已經遍歷到資料夾中的###最後一個###圖片文件。如果是的話,就需要將###目前成像時間###的所有影像進行拼接,並完成程式碼的運行。 ######在 ###IDLE (Python GUI)### 中執行程式碼。程式碼運行完畢後,我們開看一下結果資料夾。可以看到,其中的影像已經是按照成像時間,分別完成拼接後的結果了。 ############
以上是Python ArcPy如何實現批次拼接長時間序列柵格影像的詳細內容。更多資訊請關注PHP中文網其他相關文章!