??本文介紹基于Python語言arcpy模塊,實作柵格影像圖層建立與多幅遙感影像資料批量拼接(Mosaic)的操作,
??首先,相關操作所需具體代碼如下:
import os
import arcpy
file_path="G:/Postgraduate/LAI_Glass_RTlab/A2018161_Dif/DRT/"
out_file_path="G:/Postgraduate/LAI_Glass_RTlab/A2018161_Dif/DRT/"
out_file_name="Global.tif"
file_name_list=os.listdir(file_path)
tif_file_path=file_path+file_name_list[0]
cell_size_x=arcpy.GetRasterProperties_management(tif_file_path,"CELLSIZEX")
cell_size=cell_size_x.getOutput(0)
value_type=arcpy.GetRasterProperties_management(tif_file_path,"VALUETYPE")
describe=arcpy.Describe(tif_file_path)
spatial_reference=describe.spatialReference
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 file in file_name_list:
file_path_name=file_path+file
print(file_path_name)
arcpy.Mosaic_management([file_path_name],out_file)
??其中,file_path為存放有多景初始遙感影像的路徑格式為.tif柵格檔案(如果不是.tif格式,例如是.hdf等檔案,需首先進行檔案格式的轉換);out_file_path為拼接后所得結果柵格圖層的存放路徑;out_file_name為拼接后所得結果柵格圖層的檔案名稱,其可選格式有很多,如下圖所示,

??在這里,我們默認所得拼接結果圖層為一個(也就是file_path檔案夾中全部的待處理遙感影像最終全拼接在一起);如果大家需要使得拼接結果圖層是多幅(也就是file_path檔案夾中待處理遙感影像依據區域、時間等分為很多不同的部分,每一部分拼接在一起),可以參考Python GDAL讀取柵格資料并基于質量評估波段QA對指定資料加以篩選掩膜,利用其中的回圈方式實作需求,
??隨后,通過os.listdir()函式獲取file_path路徑下的柵格檔案,并存盤于file_name_list串列中,
??接下來需要創建一個新的柵格圖層,之所以要進行這一步驟,是因為本文后期選擇用arcpy.Mosaic_management()函式進行柵格的批量拼接,因此需要首先創建一個新的、空的柵格圖層作為拼接的基準,如果大家的需求不是批量拼接柵格資料,而是單純想利用arcpy進行新柵格的創建,那就只看這一部分的代碼即可,
??在這里,我們選擇用file_path路徑下的第一個柵格資料(下稱“第一柵格”)作為新柵格圖層中各項屬性(例如像素邊長、像素資料格式等)的依據,首先,arcpy.GetRasterProperties_management()函式獲取第一柵格的像素x邊邊長;因為一般柵格資料中像素都是正方形,因此我們就通過cell_size=cell_size_x.getOutput(0)將第一柵格的像素x邊邊長作為新柵格圖層像素x邊與y邊二者的邊長,再利用arcpy.GetRasterProperties_management()函式獲取第一柵格的資料格式;最后利用中間變數describe獲取第一柵格的空間參考資訊,
??完成以上步驟后,將已獲取的第一柵格的各類資訊通過函式arcpy.CreateRasterDataset_management()帶入新柵格中,在這里需要注意:盡可能在將要拼接時選擇新柵格為"16_BIT_SIGNED"及以下的資料格式(具體資料格式類別如下圖),且將file_path路徑下待拼接的柵格資料的資料格式也全部修改為這一格式;否則可能會由于資料量大而導致拼接程序極慢,我之前就是由于選用了32 bit float格式的柵格資料進行拼接,導致全球范圍的MODIS一個植被產品資料拼接花了將近一天的時間,如果大家的柵格像素資料包含小數,可以通過乘上一個縮放系數的方式進行資料整數化,

??代碼最后的一個for回圈,就是遍歷file_name_list中的各個柵格資料,并通過arcpy.Mosaic_management()函式加以拼接即可,
??以上,便完成了本次批量拼接的操作,這里還有一點需要注意:由于arcpy模塊的限制,如果大家的Python版本是3.0及以上,往往不能直接運行上述代碼,最好是在ArcMap的Python運行框或其對應IDLE(如下圖所示)中運行,

??至此,大功告成,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/544926.html
標籤:Python
上一篇:玫瑰花變蚊子血,自動化無痕瀏覽器對比測驗,新貴PlayWright Vs 老牌Selenium,基于Python3.10
下一篇:Python中出現IndentationError:unindent does not match any outer indentation level錯誤的解決方法
