Python利用arcpy模塊實現(xiàn)柵格的創(chuàng)建與拼接
本文介紹基于Python語言arcpy模塊,實現(xiàn)柵格影像圖層建立與多幅遙感影像數(shù)據(jù)批量拼接(Mosaic)的操作。
首先,相關(guān)操作所需具體代碼如下:
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等文件,需首先進行文件格式的轉(zhuǎn)換);out_file_path為拼接后所得結(jié)果柵格圖層的存放路徑;out_file_name為拼接后所得結(jié)果柵格圖層的文件名稱,其可選格式有很多,如下圖所示。

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

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

至此,大功告成。
到此這篇關(guān)于Python利用arcpy模塊實現(xiàn)柵格的創(chuàng)建與拼接的文章就介紹到這了,更多相關(guān)Python arcpy柵格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python并發(fā)請求下限制QPS(每秒查詢率)的實現(xiàn)代碼
這篇文章主要介紹了Python并發(fā)請求下限制QPS(每秒查詢率)實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Python基礎(chǔ)教程之Pandas數(shù)據(jù)分析庫詳解
Pandas是一個基于 NumPy 的非常強大的開源數(shù)據(jù)處理庫,它提供了高效、靈活和豐富的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,本文中,我們將學(xué)習(xí)如何使用Pandas來處理和分析數(shù)據(jù),感興趣的小伙伴跟著小編一起來看看吧2023-07-07
Python異步編程之新舊協(xié)程的實現(xiàn)對比
Python中新舊協(xié)程的實現(xiàn)方式在協(xié)程發(fā)展史上有一段交集,并且舊協(xié)程基于生成器的協(xié)程語法讓生成器和協(xié)程兩個概念混淆,所以對學(xué)習(xí)者會造成一定的困擾,本文主要說明兩種協(xié)程的實現(xiàn)方式的差異,需要的可以了解下2024-01-01
徹底解決No?module?named?‘torch_geometric‘報錯的辦法
這篇文章主要給大家介紹了關(guān)于如何徹底解決No?module?named?‘torch_geometric‘報錯的辦法,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-03-03
Python實現(xiàn)從文件中加載數(shù)據(jù)的方法詳解
日常工作中有許多類型的文件,以及許多方法,用它們從文件中提取數(shù)據(jù)來圖形化。本文將利用Python實現(xiàn)從文件中加載數(shù)據(jù),感興趣的可以了解一下2022-04-04
Python字符串通過''+''和join函數(shù)拼接新字符串的性能測試比較
今天小編就為大家分享一篇關(guān)于Python字符串通過'+'和join函數(shù)拼接新字符串的性能測試比較,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03

