• 技术文章 >后端开发 >Python教程

    Python ArcPy如何实现批量拼接长时间序列栅格图像

    PHPzPHPz2023-04-28 20:16:05转载63

    首先,我们来明确一下本文的具体需求。现有一个存储有大量.tif格式遥感影像的文件夹,其中每一个遥感影像的文件名中都包含有该图像的成像时间,如下图所示。

    Python ArcPy如何实现批量拼接长时间序列栅格图像

    我们希望,对于同一天成像的遥感影像进行拼接——例如,上图中具有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如何实现批量拼接长时间序列栅格图像

    以上就是Python ArcPy如何实现批量拼接长时间序列栅格图像的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:亿速云,如有侵犯,请联系admin@php.cn删除
    专题推荐:Python arcpy
    上一篇:怎么用两行Python代码实现pdf转word功能 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • vscode如何远程调试python代码• python如何删除文件夹中具有相同后缀类型文件• python在linux哪个文件夹中• 怎么用Python编写个有趣的记仇本• 一位国外老程序员的反思:C、Python、Java 不可兼得,专心学好一门编程语言就行!
    1/1

    PHP中文网