溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python?ArcPy如何實現(xiàn)批量拼接長時間序列柵格圖像

發(fā)布時間:2023-03-16 11:09:47 來源:億速云 閱讀:80 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Python ArcPy如何實現(xiàn)批量拼接長時間序列柵格圖像”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

首先,我們來明確一下本文的具體需求。現(xiàn)有一個存儲有大量.tif格式遙感影像的文件夾,其中每一個遙感影像的文件名中都包含有該圖像的成像時間,如下圖所示。

Python?ArcPy如何實現(xiàn)批量拼接長時間序列柵格圖像

我們希望,對于同一天成像的遙感影像進行拼接——例如,上圖中具有2001年第185天成像的遙感影像10幅,每一幅都是這一天在不同空間位置的成像;同時有2001年第193天成像的遙感影像10幅。我們希望首先將第185天成像的10幅遙感影像加以拼接,隨后再對第193天成像的10幅遙感影像加以拼接,以此類推。在遙感影像整體數(shù)量較少時,我們或許還可以逐一手動拼接;而當圖像數(shù)量很多時,就需要借助代碼來實現(xiàn)了。

明確了需求后,我們就可以開始具體的操作。首先,本文所需用到的代碼如下。

# -*- 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()函數(shù),獲取路徑下原有的全部.tif格式的圖像文件,并截取第一個文件的部分文件名,從而獲取其成像時間;接下來,做好創(chuàng)建一個新的柵格文件的準備,這一部分代碼的含義在本文開頭提及的那一篇文章Python arcpy創(chuàng)建柵格、批量拼接?xùn)鸥裰幸延刑峒?,這里就不再贅述。

接下來,遍歷tif_file_path路徑下全部.tif格式圖像文件。其中,我們通過一個簡單的判斷語句,來確定某一成像時間的遙感影像是否已經(jīng)讀取完畢——如果已經(jīng)讀取完畢,例如假如第185天成像的10幅遙感影像都已經(jīng)遍歷過了,那么就對這十景遙感影像加以拼接;如果還沒有讀取完畢,例如假如第185天成像的10幅遙感影像目前僅遍歷到了第8幅,那么就不拼接,繼續(xù)往下遍歷。

這里相信大家也看到了為什么我們要在前期先將文件夾中的文件按照“名稱”排序——是為了保證同一成像時間的所有遙感影像都排列在一起,遍歷時只要遇到一個新的成像時間,程序就知道上一個成像時間的所有圖像都已經(jīng)遍歷完畢了,就可以將上一個成像時間的所有柵格圖像加以拼接。

最后,通過tif_file==tif_file_name[len(tif_file_name)-1]這個判斷,來確認是否目前已經(jīng)遍歷到文件夾中的最后一個圖像文件。如果是的話,就需要將當前成像時間的所有圖像進行拼接,并完成代碼的運行。

在 IDLE (Python GUI) 中運行代碼。代碼運行完畢后,我們開看一下結(jié)果文件夾??梢钥吹?,其中的圖像已經(jīng)是按照成像時間,分別完成拼接后的結(jié)果了。

Python?ArcPy如何實現(xiàn)批量拼接長時間序列柵格圖像

“Python ArcPy如何實現(xiàn)批量拼接長時間序列柵格圖像”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI