下一篇:GDAL入门篇——GDAL源码文件结构简单介绍(二)
目录
一.GDAL介绍
1.1简介
1.2 GDAL的下载与安装
二.GDAL环境配置
2.1环境配置
2.2 环境测试
GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。因此GDAL可以提供对栅格和矢量数据的转换。
GDAL下载网址:GDAL下载 网址:http://download.osgeo.org/gdal
选择自己所要使用的版本进行下载,下载后进行编译,编译方法可以参考我的另外一篇博文:Cmake在Windows下的使用(附图文)
根据自己的环境和需要的版本尽心编译完成会生成我们所需要的GDAL库,如图所示:
这是我编译生成的windows下64库,大家可自行下载进行学习:GDAL204 x64库
首先我们检查我们生成的库文件对不对,如图所示我们需要编译生成的头文件Include,静态库lib,动态链接库dll和其他一些依赖的三方库
Include:
lib:
dll:
然后在我们的编译器中进行环境配置,我所使用的是VS2015,首先新建一个工程文件,工程右键属性分别对头文件,库路径,依赖的库进行环境配置,配置好之后我们进行简单的测试。
我们通过读取写入tiff数据进行简单测试
例子代码如下:
//注册
GDALAllRegister();
//以防中文名不能正常读取
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
//tif文件读取
std::string name = "global.tif";
const char *charName = name.c_str();
GDALDataset *m_pDataset = (GDALDataset*)GDALOpen(charName, GA_ReadOnly);
if (m_pDataset == NULL)
{
return;
}
int Width = m_pDataset->GetRasterXSize(); //获取图像宽
int Height = m_pDataset->GetRasterYSize(); //获取图像高
int Count = m_pDataset->GetRasterCount(); //波段数
GDALRasterBand *pInRasterBand1 = m_pDataset->GetRasterBand(1);
GDALRasterBand *pInRasterBand2 = m_pDataset->GetRasterBand(2);
GDALRasterBand *pInRasterBand3 = m_pDataset->GetRasterBand(3);
float *inBuf1;
inBuf1 = new float[Width*Height];
CPLErr err;
float *inBuf2;
inBuf2 = new float[Width*Height];
float *inBuf3;
inBuf3 = new float[Width*Height];
//获取三个波段值
err = pInRasterBand1->RasterIO(GF_Read, 0, 0, Width, Height, inBuf1, Width, Height, GDT_Float32, 0, 0);
err = pInRasterBand1->RasterIO(GF_Read, 0, 0, Width, Height, inBuf2, Width, Height, GDT_Float32, 0, 0);
err = pInRasterBand1->RasterIO(GF_Read, 0, 0, Width, Height, inBuf3, Width, Height, GDT_Float32, 0, 0);
//创建输出图像、写图像
char* outPath("E:/globa2.tif");
GDALDriver *poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
char* OutFilename = outPath;
//创建三波段tiff
GDALDataset* pOutDataset = poDriver->Create(OutFilename, Width, Height, 3, GDT_Float32, NULL);
GDALRasterBand* pOutRasterBand1 = pOutDataset->GetRasterBand(1);
GDALRasterBand* pOutRasterBand2 = pOutDataset->GetRasterBand(2);
GDALRasterBand* pOutRasterBand3 = pOutDataset->GetRasterBand(3);
//写入数据
err = pOutRasterBand1->RasterIO(GF_Write, 0, 0, Width, Height, inBuf1, Width, Height, GDT_Float32, 0, 0);
err = pOutRasterBand2->RasterIO(GF_Write, 0, 0, Width, Height, inBuf2, Width, Height, GDT_Float32, 0, 0);
err = pOutRasterBand3->RasterIO(GF_Write, 0, 0, Width, Height, inBuf3, Width, Height, GDT_Float32, 0, 0);
//关闭波段和驱动
GDALClose(m_pDataset);
GDALClose(pOutDataset);
GetGDALDriverManager()->DeregisterDriver(poDriver);
GDALDestroyDriverManager();
生成的数据显示如下:
至此,我们的GDAL环境搭建完成,其他版本环境配置与此类似。