基于GDAL库读取GRD数据文件的C++代码

4 篇文章 2 订阅

 项目需要解析etop数据,都是grd格式文件,可以用surfer软件打开,但是并不适合开发,以及对数据的解析

这里基于gdal库提供的接口对grd文件进行读取和解析,代码如下

#include <iostream>
#include <gdal_priv.h>
#include <string>

using namespace std;


void fileRead(const char* pszFile);


int main(int argc, char *argv[])
{
	fileRead("/home/leo/example.grd");
	return 0;
}


void fileRead(const char* pszFile)
{
	GDALAllRegister();
	GDALDataset *poDataset;
	//使用只读方式打开图像
	poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);
	if (poDataset == NULL) {
		printf("File: %s不能打开!\n", pszFile);
		return;
	}

	printf("Driver:%s/%s\n",
		poDataset->GetDriver()->GetDescription(),
		poDataset->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME));

	//输出图像的大小和波段个数
	printf("Size is %d x %d x %d\n",
		poDataset->GetRasterXSize(), 
		poDataset->GetRasterYSize(),
		poDataset->GetRasterCount());


	//输出图像的投影信息
	if (poDataset->GetProjectionRef() != NULL)
		printf("Projection is %s\n", poDataset->GetProjectionRef());

	//输出图像的坐标和分辨率信息
	double adfGeoTransform[6];
	if (poDataset->GetGeoTransform(adfGeoTransform) == CE_None) {
		printf("Origin =(%.6f,%.6f)\n", adfGeoTransform[0], adfGeoTransform[3]);
		printf("PixelSize = (%.6f,%.6f)\n", adfGeoTransform[1], adfGeoTransform[5]);
	}

	//读取第一个波段
	GDALRasterBand *poBand = poDataset->GetRasterBand(1);

	//获取该波段的最大值最小值,如果获取失败,则进行统计
	int            bGotMin, bGotMax;
	double         adfMinMax[2];
	adfMinMax[0] = poBand->GetMinimum(&bGotMin);
	adfMinMax[1] = poBand->GetMaximum(&bGotMax);

	if (!(bGotMin&& bGotMax))
		GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);

	printf("Min=%.3fd,Max=%.3f\n", adfMinMax[0], adfMinMax[1]);

	int nXSize = poBand->GetXSize();
	int nYSize = poBand->GetYSize();
	float *pafScanline = new float[nXSize];

	//读取图像数据
	for (int i = 0; i < 10/*nYSize*/; i++) {
		poBand->RasterIO(GF_Read, 0, i, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0);
		//poBand->RasterIO(GF_Read, 0, i, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0);
		string LineDataInfo = "";
		for (int j = 0; j < 10/*nXSize*/; j++) {
			if (j == 0) {
				LineDataInfo = to_string(pafScanline[j]);
			}
			else {
				LineDataInfo = LineDataInfo + ",  " + to_string(pafScanline[j]);
			}
		}
		cout << LineDataInfo << endl;
	}

	delete[]pafScanline;

	//关闭文件
	GDALClose((GDALDatasetH)poDataset);
}

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于 GDAL 的图像显示系统是一种用于读取、处理和显示地理空间数据的软件系统。GDAL(Geospatial Data Abstraction Library)是一个开源的地理空间数据抽象,可以支持多种格式的地理空间数据,如栅格图像、矢量数据和地理数据。 通过 GDAL ,可以实现对各种格式的栅格图像数据的读取和显示。系统可以读取并解析栅格图像文件,提取其中的地理空间信息,然后将图像数据以图像形式显示出来。同时,系统还可以进行一些图像处理操作,如图像的裁剪、缩放、旋转等。 在基于 GDAL 的图像显示系统中,用户可以通过简单的操作界面进行地理空间数据的导入和操作。用户可以直接选择要显示的图像文件,系统会自动识别图像格式并读取图像数据。用户还可以选择要显示的地理范围,系统会根据用户选择进行图像的裁剪和放大缩小。 基于 GDAL 的图像显示系统还具备与其他地理信息系统(GIS)软件的互操作能力。通过 GDAL 提供的接口,可以方便地将图像数据与其他 GIS 数据进行集成和分析。系统还支持地理坐标系的转换和投影,使用户可以在不同的地理坐标系之间进行数据的转换和比较分析。 综上所述,基于 GDAL 的图像显示系统是一种功能强大、易于使用的地理空间数据处理和显示工具。它可以读取、处理和显示各种格式的栅格图像数据,并支持与其他 GIS 软件的互操作。这种系统在地理信息领域的应用广泛,可以满足用户对地理空间数据的需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值