Python读取多个栅格文件并提取像元的各波段时间序列数据与变化值

简介: Python读取多个栅格文件并提取像元的各波段时间序列数据与变化值

  本文介绍基于Python语言,读取文件夹下大量栅格遥感影像文件,并基于给定的一个像元,提取该像元对应的全部遥感影像文件中,指定多个波段的数值;修改其中不在给定范围内的异常值,并计算像元数值在每一景遥感影像中变化的差值;最终将这些数据保存为一个新的Excel表格文件的方法。

  首先,我们来看一下本文需要具体实现的需求。现在有一个文件夹,如下图所示;其中,存放了大量的遥感影像文件,且每一景遥感影像都是同一个空间位置、不同成像时间对应的遥感影像,因此其空间参考信息、栅格的行数与列数等都是一致的。此外,每一景遥感影像都具有5个不同的波段。

  我们现在希望,给定一个像元(也就是给定了这个像元在遥感影像中的行号与列号),提取出在指定的波段中(我们这里就提取全部的5个波段),该像元对应的每一景遥感影像的数值(也就是提取了该像元在每一景遥感影像、每一个波段的数值);随后,将提取到的大于1的数值修改为1,并计算像素值在每一景遥感影像中数值的差值;最后,将提取到的数据保存为一个Excel表格文件。

  明确了需求,我们就可以撰写代码;具体如下。

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 27 11:25:55 2023
@author: fkxxgis
"""
import os
import pandas as pd
from osgeo import gdal
def extract_pixel_time_series(input_folder, output_csv):
    tif_files = [file for file in os.listdir(input_folder) if file.endswith('.tif')]
    target_row = 495
    target_col = 60
    time_series_df = pd.DataFrame()
    for tif_file in tif_files:
        file_path = os.path.join(input_folder, tif_file)
        dataset = gdal.Open(file_path)
        for band in range(dataset.RasterCount):
            band_data = dataset.GetRasterBand(band + 1).ReadAsArray()
            pixel_value = band_data[target_row, target_col]
            date = tif_file[10: 24]
            time_series_df.at[date, f'Band_{band + 1}'] = pixel_value
        dataset = None
    for index in range(len(time_series_df.columns)):
        time_series_df = time_series_df.apply(lambda x: x.clip(upper = 1))
        new_col_name = time_series_df.columns[index] + "_diff"
        time_series_df[new_col_name] = time_series_df.iloc[:, index].diff()
    time_series_df.to_csv(output_csv)
# 示例用法
input_folder = r"E:\01_Reflectivity\FiveBands"
output_csv = r"E:\01_Reflectivity\Data.csv"
extract_pixel_time_series(input_folder, output_csv)

  首先,我们需要导入必要的模块和库。其中os用于操作文件和文件夹,pandas用于处理数据和创建DataFrame格式数据,而gdal则用于读取栅格数据;关于gdal库的配置方法,大家可以参考文章Anaconda环境GDAL库基于whl文件的配置方法https://blog.csdn.net/zhebushibiaoshifu/article/details/128320388)。

  随后,我们对extract_pixel_time_series这个函数加以定义。这个函数接收两个参数input_folderoutput_csv,分别表示存储栅格数据的文件夹路径和输出的Excel文件的路径。随后,列出input_folder文件夹下所有以.tif结尾的文件,并存储在列表中。其次,循环遍历每个栅格文件,构建完整的文件路径,用于后面的数据读取,并使用gdal.Open()打开栅格文件,获取数据集对象。

  接下来,通过循环遍历每个波段。读取当前波段的数据,并存储在band_data变量中。随后基于我们给定的像元位置,提取目标像元的数值(位置就是这个[target_row, target_col])。此外,为了使得我们保存结果时可以记录每一个数值对应的成像日期,因此需要从文件名中提取日期,并存储在date变量中。

  接下来,通过time_series_df.at[date, f'Band_{band + 1}'],将像元值存储在DataFrame中,行索引为日期,列名为Band_1Band_2等;随后,将数据集对象dataset设为None,释放内存资源。

  接下来,我们将大于1的数值加以处理,并计算每个波段随时间变化的数值之差。遍历time_series_df的每一列,并对于每一列使用clip(upper=1)将超过1的值截断为1;随后,为每一列创建新列,列名为原列名加上_diff,存储该列差值。

  最后,我们将处理后的时间序列数据保存为Excel表格文件即可。

  运行上述代码,我们即可获得多个遥感影像文件中,给定像元位置处,像元数值的时间变化序列,并可以获得其变化值。

  至此,大功告成。

欢迎关注:疯狂学习GIS

相关文章
|
29天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
14天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
24 1
|
15天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
15天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
16天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
17 2
|
27天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
54 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
14天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
24 0
|
2天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
8天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
8天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
下一篇
无影云桌面