建设银行论坛网站首页,网站关键词优化方案分为几个步骤,破解版 wordpress,做移门图的 网站有哪些本文介绍基于Python语言#xff0c;读取文件夹下大量栅格遥感影像文件#xff0c;并基于给定的一个像元#xff0c;提取该像元对应的全部遥感影像文件中#xff0c;指定多个波段的数值#xff1b;修改其中不在给定范围内的异常值#xff0c;并计算像元数值在每一景遥感影… 本文介绍基于Python语言读取文件夹下大量栅格遥感影像文件并基于给定的一个像元提取该像元对应的全部遥感影像文件中指定多个波段的数值修改其中不在给定范围内的异常值并计算像元数值在每一景遥感影像中变化的差值最终将这些数据保存为一个新的Excel表格文件的方法。 首先我们来看一下本文需要具体实现的需求。现在有一个文件夹如下图所示其中存放了大量的遥感影像文件且每一景遥感影像都是同一个空间位置、不同成像时间对应的遥感影像因此其空间参考信息、栅格的行数与列数等都是一致的。此外每一景遥感影像都具有5个不同的波段。 我们现在希望给定一个像元也就是给定了这个像元在遥感影像中的行号与列号提取出在指定的波段中我们这里就提取全部的5个波段该像元对应的每一景遥感影像的数值也就是提取了该像元在每一景遥感影像、每一个波段的数值随后将提取到的大于1的数值修改为1并计算像素值在每一景遥感影像中数值的差值最后将提取到的数据保存为一个Excel表格文件。 明确了需求我们就可以撰写代码具体如下。
# -*- coding: utf-8 -*-Created on Thu Jul 27 11:25:55 2023author: fkxxgis
import os
import pandas as pd
from osgeo import gdaldef extract_pixel_time_series(input_folder, output_csv):tif_files [file for file in os.listdir(input_folder) if file.endswith(.tif)]target_row 495target_col 60time_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, fBand_{band 1}] pixel_valuedataset Nonefor 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] _difftime_series_df[new_col_name] time_series_df.iloc[:, index].diff()time_series_df.to_csv(output_csv)# 示例用法
input_folder rE:\01_Reflectivity\FiveBands
output_csv rE:\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_folder和output_csv分别表示存储栅格数据的文件夹路径和输出的Excel文件的路径。随后列出input_folder文件夹下所有以.tif结尾的文件并存储在列表中。其次循环遍历每个栅格文件构建完整的文件路径用于后面的数据读取并使用gdal.Open()打开栅格文件获取数据集对象。 接下来通过循环遍历每个波段。读取当前波段的数据并存储在band_data变量中。随后基于我们给定的像元位置提取目标像元的数值位置就是这个[target_row, target_col]。此外为了使得我们保存结果时可以记录每一个数值对应的成像日期因此需要从文件名中提取日期并存储在date变量中。 接下来通过time_series_df.at[date, fBand_{band 1}]将像元值存储在DataFrame中行索引为日期列名为Band_1、Band_2等随后将数据集对象dataset设为None释放内存资源。 接下来我们将大于1的数值加以处理并计算每个波段随时间变化的数值之差。遍历time_series_df的每一列并对于每一列使用clip(upper1)将超过1的值截断为1随后为每一列创建新列列名为原列名加上_diff存储该列差值。 最后我们将处理后的时间序列数据保存为Excel表格文件即可。 运行上述代码我们即可获得多个遥感影像文件中给定像元位置处像元数值的时间变化序列并可以获得其变化值。 至此大功告成。
欢迎关注疯狂学习GIS