ToB企服应用市场:ToB评测及商务社交产业平台
标题:
C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组
[打印本页]
作者:
怀念夏天
时间:
2024-4-22 16:38
标题:
C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组
本文介绍基于
C++
语言GDAL库,
批量读取
大量栅格遥感影像文件,并生成
各像元数值的时间序列
数组的方法。
首先,我们来明确一下本文所需实现的需求。现在有一个文件夹,其中包含了很多不同格式的文件,如下图所示。
其中,我们首先需要遍历这一文件夹,遴选出其中所有类型为.bmp格式的栅格遥感影像文件(一共有6个),并分别读取文件(已知这些遥感影像的行数、列数都是一致的);随后,将
不同遥感影像
的
同一个位置的像素
的数值进行分别读取,并存储在一个数组中。例如,最终我们生成的第一个数组,其中共有6个元素,分别就是上图所示文件夹中6景遥感影像各自(0,0)位置的像元数值;生成的第二个数组,其中也是6个元素,分别就是6景遥感影像各自(1,0)位置的像元数值,以此类推。其中,显然我们得到的
数组个数
,就是遥感影像
像元的个数
。此外,这里6景遥感影像的
排序
,是按照
文件名称的升序
来进行的。
明确了具体需求,接下来就可以开始代码的实践。其中,本文分为两部分,第一部分为代码的分段讲解,第二部分为完整代码。
此外,本文是基于GDAL库来实现栅格数据读取的;具体GDAL库的配置方法大家可以参考文章
在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)
。
1 代码分段介绍
1.1 代码准备
这一部分主要是代码的
头文件
、
命名空间
与我们自行撰写的
自定义函数
get_need_file()的声明;具体代码如下所示。
#include <iostream>
#include <vector>
#include <io.h>
#include "gdal_priv.h"
using namespace std;
void get_need_file(string path, vector<string>& file, string ext);
复制代码
其中,由于我们在接下来的代码中需要用到容器vector这一数据类型,因此首先需要添加#include ;同时,我们在接下来的代码中需要用到头文件io.h中的部分函数(主要都是一些与计算机系统、文件管理相关的函数),因此需要添加#include ;此外,我们是基于GDAL库来实现栅格数据读取的,因此需要添加#include "gdal_priv.h"。
接下来,这里声明了一个自定义函数get_need_file(),具体我们在本文
1.2
部分介绍。
1.2 栅格文件筛选
由于我这里几乎将全部的代码都放在了主函数中,因此这一部分就先介绍代码main()函数的第一部分,亦即栅格文件的遴选部分;具体代码如下所示。
[code]int main() { string file_path = R"(E:\02_Project\02_ChlorophyllProduce\01_Data\00_Test)"; vector my_file; string need_extension = ".bmp"; get_need_file(file_path, my_file, need_extension); int file_size = my_file.size(); if (file_size == 0) { cout
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4