使用GDAL读取SRTM格式高程数据

头文件:

//#include "include/gdal.h"  
#include <gdal_priv.h>

#include <math.h>


#ifdef _DEBUG
#define new DEBUG_NEW
#pragma comment(lib, "gdal_i_d.lib")
#else
#pragma comment(lib, "gdal_i.lib")
#endif

函数部分:

static double Mercator2Lon(double lon)//墨卡托转WGS84:经度
{
	return lon / 20037508.34 * 180.0;
}

static double Mercator2Lat(double lat)//墨卡托转WGS84:纬度
{
	double result = 0;
	double mid = lat / 20037508.34 * 180.0;
	result = 180.0 / M_PI * (2.0 * atan(exp(mid * M_PI / 180.0)) - M_PI / 2.0);
	return result;
}

// 开始计算
void CreadSRTMDlg::OnCompute()
{
	// TODO: Add your command handler code here
	CString filename;
	filename = "srtm_66_21.tif";

	GDALAllRegister();
	GDALDataset *poDataSet;
	GDALRasterBand *pBand;
	int nWidth, nHeight;
	poDataSet = (GDALDataset*)GDALOpen((LPCTSTR)filename, GA_ReadOnly);

	nWidth = poDataSet->GetRasterXSize();//获取图像宽度
	nHeight = poDataSet->GetRasterYSize();//获取图像高度

	// 存储边界信息
	double adfGeoTransform[6];
	double value[6];
	if (poDataSet->GetGeoTransform(adfGeoTransform) == CE_None)
	{
		value[0] = adfGeoTransform[0];   // 起点,左上经度
		value[1] = adfGeoTransform[3];   // 起点,左上维度
		value[2] = adfGeoTransform[1] * (double)nWidth  + adfGeoTransform[0];  // 右侧经度
		value[3] = adfGeoTransform[5] * (double)nHeight + adfGeoTransform[3];  // 右下

		if (value[0] > 180 || value[0] < -180)//墨卡托转WGS84
		{
			value[0] = Mercator2Lon(value[0]);    
			value[1] = Mercator2Lat(value[1]);
			value[2] = Mercator2Lon(value[2]);
			value[3] = Mercator2Lat(value[3]);
		}
	}

	
	short int *pData = new short int[nWidth*nHeight];
	pBand = poDataSet->GetRasterBand(1);
	pBand->RasterIO(GF_Read, 0, 0, nWidth, nHeight, pData, nWidth, nHeight,
		pBand->GetRasterDataType(), 0, 0);

	int i = pData[1000 * nWidth + 1];
	CPLFree(pData);//释放内存
	GDALClose(poDataSet);//关闭数据集
}

我的版本是3.1.3,涉及的库比较多,我使用vcpkg管理,已经导出并放到资源里。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
语言的好处及其适用范围 C语言是一种非常流行的编程语言,同时又是一种非常灵活和高效的语言,其应用范围广泛。下面我们就一起来看看使用C语言的好处及其适用范围。 C语言的好处: 1.高效性:C语言是一种非常高效的编程语言,其执行速度比大多数其他编程语言快很多,因此对于需要进行处理大量数据和进行复杂计算的场景非常适合。 2.灵活性:C语言提供了非常多的工具和函数,同时又支持用户自定义函数和数据类型,因此可以让程序员根据自己的需要编写出非常灵活的程序。 3.可移植性:C语言可以在不同的操作系统和硬件平台上运行,因此可以让程序更加通用和适用于不同的计算环境。 4.易于学习:C语言的语法相对简单,模块化和结构化编程风格易于理解,因此入门门槛较低,易于学习。 C语言的适用范围: 1.系统软件开发:C语言由于其高效性和可移植性的特点,其广泛用于系统软件开发中,如操作系统、编译器等。 2.嵌入式系统开发:C语言在嵌入式系统开发中也非常流行,其可以用于编写驱动程序、操作系统、网络协议栈等等。 3.科学计算:C语言的执行速度非常快,其广泛用于科学计算领域,如数值分析、机器学习等等。 4.游戏开发:C语言由于其高效性,非常适合用于游戏开发中,其可以用于编写游戏引擎、游戏物理引擎等。 总之,使用C语言可以带来高效、灵活、可移植等多种好处,其可以应用于不同领域的开发工作中。当然,C语言也有其缺点,如容易出错、内存管理较为复杂等,因此使用C语言的开发人员需要具备一定的编程和操作系统相关知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值