Heim  >  Artikel  >  Backend-Entwicklung  >  Wie Python ArcPy das Batch-Spleißen von Langzeitserien-Rasterbildern implementiert

Wie Python ArcPy das Batch-Spleißen von Langzeitserien-Rasterbildern implementiert

PHPz
PHPznach vorne
2023-04-28 20:16:051330Durchsuche

Lassen Sie uns zunächst die spezifischen Anforderungen dieses Artikels klären. Es gibt einen Ordner, der eine große Anzahl von Fernerkundungsbildern im Format .tif speichert. Der Dateiname jedes Fernerkundungsbildes enthält die Aufnahmezeit des Bildes, wie in der folgenden Abbildung dargestellt. .tif格式遥感影像的文件夹,其中每一个遥感影像的文件名中都包含有该图像的成像时间,如下图所示。

Wie Python ArcPy das Batch-Spleißen von Langzeitserien-Rasterbildern implementiert

我们希望,对于同一天成像的遥感影像进行拼接——例如,上图中具有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]Wie Python ArcPy das Stapelspleißen von Langzeitserien-Rasterbildern implementiert Wir hoffen, die am selben Tag aufgenommenen Fernerkundungsbilder zusammenfügen zu können. Das obige Bild zeigt beispielsweise das Fernerkundungsbild 10, das am Tag <code>185 von 2001aufgenommen wurde > , jedes ist ein Bild dieses Tages an einem anderen räumlichen Ort; es gibt auch Fernerkundungsbilder von 10<code>193 des Jahres 2001 /code>frame. Wir hoffen, zunächst die 10 Fernerkundungsbilder, die am 185-Tag aufgenommen wurden, zusammenzufügen und dann die 1010 Bilder, die am <code> aufgenommen wurden, zusammenzufügen 193 Tag. /code> Fernerkundungsbilder werden zusammengefügt und so weiter. Wenn die Gesamtzahl der Fernerkundungsbilder gering ist, können wir sie möglicherweise einzeln manuell zusammenfügen. Wenn die Anzahl der Bilder jedoch groß ist, müssen wir dies mithilfe von Code erreichen.

Nach Klärung des Bedarfs können wir mit konkreten Maßnahmen beginnen. Der für diesen Artikel erforderliche Code lautet zunächst wie folgt.

rrreee Unter diesen ist tif_file_path der Speicherpfad des ursprünglichen Fernerkundungsbildes vor dem Spleißen und out_file_path der Speicherpfad unseres neu generierten Fernerkundungsbildes nach dem Spleißen.

Hier müssen wir zuerst die Dateien unter dem Pfad tif_file_path im Ressourcenmanager nach „

NameWie Python ArcPy das Batch-Spleißen von Langzeitserien-Rasterbildern implementiert“ sortieren; dann verwenden wir dazu die Funktion arcpy.ListRasters( ) Rufen Sie alle Originalbilddateien im .tif-Format unter dem Pfad ab und fangen Sie einen Teil des Dateinamens der ersten Datei ab, um deren Bildzeit zu ermitteln. Führen Sie anschließend die Vorbereitung zum Erstellen einer neuen Rasterdatei durch Die Bedeutung dieses Teils des Codes wurde im Artikel „Python arcpy zum Erstellen von Rastern und Batch-Splice-Rastern“ am Anfang dieses Artikels erwähnt, daher werde ich hier nicht näher darauf eingehen.

🎜Als nächstes durchsuchen Sie alle Bilddateien im .tif-Format unter dem Pfad tif_file_path. Unter anderem verwenden wir eine einfache Beurteilungsaussage, um zu bestimmen, ob die Fernerkundungsbilder zu einem bestimmten Zeitpunkt der Bildgebung gelesen wurden – wenn sie beispielsweise gelesen wurden, wenn die 10 Bilder am Tag 185 alle aufgenommen wurden Wenn die Fernerkundungsbilder durchquert wurden, werden diese zehn Fernerkundungsbilder zusammengefügt. Wenn die Messung beispielsweise noch nicht abgeschlossen ist, wenn die zehn am Tag 185 aufgenommenen Fernerkundungsbilder derzeit durchquert werden 8. Frame, dann erfolgt kein Spleißen und die Durchquerung wird fortgesetzt. 🎜🎜Ich glaube, jeder hier hat auch gesehen, warum wir die Dateien im Ordner in der Anfangsphase nach „🎜Name🎜“ sortieren müssen – um sicherzustellen, dass 🎜alle Fernerkundungsbilder zur gleichen Aufnahmezeit zusammen angeordnet sind🎜, wann Durchlaufen Solange es auf eine 🎜neue Aufnahmezeit🎜 trifft, weiß das Programm, dass alle Bilder der 🎜vorherigen Aufnahmezeit🎜 durchlaufen wurden, und es kann alle Rasterbilder der 🎜vorherigen Aufnahmezeit🎜 zusammenfügen. 🎜🎜Verwenden Sie abschließend die Beurteilung von tif_file==tif_file_name[len(tif_file_name)-1], um zu bestätigen, ob die 🎜letzte 🎜Bilddatei im Ordner durchlaufen wurde. Wenn ja, müssen Sie alle Bilder zum aktuellen Bildzeitpunkt zusammenfügen🎜 und die Ausführung des Codes abschließen. 🎜🎜Führen Sie Code in 🎜IDLE (Python-GUI)🎜 aus. Nachdem der Code ausgeführt wurde, werfen wir einen Blick auf den Ergebnisordner. Es ist zu erkennen, dass die Bilder entsprechend der Bildaufnahmezeit bereits separat gespleißt sind. 🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonWie Python ArcPy das Batch-Spleißen von Langzeitserien-Rasterbildern implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen