下载GDAL编译好的库,选择对应编辑器版本,地址如下:下载GDAL

要使用 GDAL 读取 NC 文件中的第一个数据块,您需要执行以下步骤:

首先,您需要在工程中包含 GDAL 头文件:

#include <gdal_priv.h>

然后,您需要调用 GDALOpen() 函数打开 NC 文件:

GDALDataset *dataset = (GDALDataset*) GDALOpen(nc_file, GA_ReadOnly);

接下来,您可以使用 GDALDataset::GetRasterBand() 函数获取 NC 文件中的第一个数据块:

GDALRasterBand *band = dataset->GetRasterBand(1);

最后,您可以使用 GDALRasterBand 类的成员函数来读取数据。例如,您可以使用 GDALRasterBand::RasterIO() 函数读取数据:

// 获取数据块的行数和列数
int nRows = band->GetYSize();
int nCols = band->GetXSize();

// 创建缓冲区,用于存储数据
float *buffer = new float[nRows * nCols];

// 读取数据
band->RasterIO(GF_Read, 0, 0, nCols, nRows, buffer, nCols, nRows, GDT_Float32, 0, 0);

// 处理数据
// ...

// 释放缓冲区
delete[] buffer;

注意:在使用 GDAL 读取 NC 文件时,需要注意内存管理,在使用完数据后记得释放缓冲区。

遇到的问题
读取文件返回空
1.缺少GDAL注册组件,读取不了nc数据
下载的GDAL库中,包含有注册组件,需要放到可执行文件目录下
将/bin/gadl/plugins整个文件夹放到可执行文件夹下,修改文件夹名字为gdalplugins,详细说明在下载的GDAL库中有。
在这里插入图片描述在这里插入图片描述

2.注册所有组件

//GDAL使用需要先注册,否则使用GDALOpen时结果为空
GDALAllRegister();

数据波段获取有问题
返回值是0的数据文件读取不了

//获取数据块总数
int Band_count = dataset->GetRasterCount();

代码

#include <gdal_priv.h>
void NcFileRead(const char * NcFileName)
{
	GDALAllRegister();
	GDALDataset *dataset = (GDALDataset*) GDALOpen(NcFileName, GA_ReadOnly);
	if(dataset == NULL)
	{
		return ;
	}
	//获取数据块总数
	int Band_count = dataset->GetRasterCount();
	if(Band_count <1)
	{
		return ;
	}
	GDALRasterBand *band = dataset->GetRasterBand(1);
	if(band == NULL)
	{
		return ;
	}
	// 获取数据块的行数和列数
	int nRows = band->GetYSize();
	int nCols = band->GetXSize();
	
	// 创建缓冲区,用于存储数据
	float *buffer = new float[nRows * nCols];
	
	// 读取数据
	band->RasterIO(GF_Read, 0, 0, nCols, nRows, buffer, nCols, nRows, GDT_Float32, 0, 0);
	
	// 处理数据
	// ...
	
	// 释放缓冲区
	delete[] buffer;
}
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐