C++版本
VS2010,gdal1.9
1、建立工程
2、在工程的属性对话框中,配置属性——C/C++——常规,在“附加包含目录中将GDAL中的include文件夹路径填写入输入框
3、配置属性——链接器——常规,在附加库目录中将GDAL的lib文件夹路径填写完整
4、配置属性——链接器——输入,在附加依赖项填入gdal_i.lib
配置完毕。
填写代码,编译。将gadl1.9.dll文件复制到编译出来的exe所在目录。
示例代码:(摘抄自李民录的GDAL代码详解)
#include "stdafx.h"
#include "gdal_priv.h"
#include "cpl_conv.h" // for CPLMalloc()
int main()
{ //注册文件格式
GDALAllRegister();
//解决中文路径问题
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");
const char* pszFile = "D:\\test.tiff“”
GDALDataset *poDataset; //使用只读方式打开图像
poDataset = (GDALDataset *) GDALOpen( pszFile, GA_ReadOnly );
if( poDataset == NULL )
{
printf( "File: %s 不能打开!\n", pszFile);
return 0;
}
//输出图像的格式信息
printf( "Driver: %s/%s\n", poDataset->GetDriver()->GetDescription(), poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME ) );
//输出图像的大小和波段个数
printf( "Size is %dx%dx%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( "Pixel Size = (%.6f,%.6f)\n", adfGeoTransform[1], adfGeoTransform[5] );
}
GDALRasterBand *poBand; int nBlockXSize, nBlockYSize; int bGotMin, bGotMax; double adfMinMax[2];
//读取第一个波段
poBand = poDataset->GetRasterBand( 1 );
//获取图像的块大小并输出
poBand->GetBlockSize( &nBlockXSize, &nBlockYSize ); printf( "Block=%dx%d Type=%s, ColorInterp=%s\n", nBlockXSize, nBlockYSize, GDALGetDataTypeName(poBand->GetRasterDataType()), GDALGetColorInterpretationName( poBand->GetColorInterpretation()) );
//获取该波段的最大值最小值,如果获取失败,则进行统计
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] );
//输出图像的金字塔信息
if( poBand->GetOverviewCount() > 0 ) printf( "Band has %d overviews.\n", poBand->GetOverviewCount() );
//输出图像的颜色表信息
if( poBand->GetColorTable() != NULL ) printf( "Band has a color table with %d entries.\n", poBand->GetColorTable()->GetColorEntryCount() );
float *pafScanline; int nXSize = poBand->GetXSize(); //读取图像的第一行数据
pafScanline = (float *) CPLMalloc(sizeof(float)*nXSize); poBand->RasterIO( GF_Read, 0, 0, nXSize, 1, pafScanline, nXSize, 1, GDT_Float32, 0, 0 );
CPLFree(pafScanline);
//关闭文件
GDALClose((GDALDatasetH )poDataset);
char c;
c=getchar();//
}
C#版本
1.建立工程,将以_xsharp。dll结尾的dll添加到引用中,添加代码,编译,然后将gdall19.dll复制到exe所在目录
代码如下:(摘抄自李民录的GDAL代码详解,有部分改动)
Console.WriteLine("");
//注册文件格式
Gdal.AllRegister();
//解决中文路径乱码的问题
//Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
string strFile = "D:\\.test。tiff“”
//使用只读方式打开图像
Dataset ds = Gdal.Open(strFile,Access.GA_ReadOnly);
Driver drv = ds.GetDriver();
//输出图像的格式信息
Console.WriteLine("Dirver:"+drv.GetDescription());
Console.WriteLine("Dirver:"+drv.LongName);
//输出图像的大小和波段个数
Console.WriteLine("RasterCount:"+ds.RasterCount);
Console.WriteLine("RasterSize(" + ds.RasterXSize+","+ds.RasterYSize+")");
//输出图像的投影信息
Console.WriteLine("Projection:"+ds.GetDescription());
//输出图像的坐标和分辨率信息
double[] adfGeoTransform=new double[6];
ds.GetGeoTransform(adfGeoTransform);
Console.WriteLine("origin=("+adfGeoTransform[0]+","+adfGeoTransform[3]+")");
Console.WriteLine("PixelSize=(" + adfGeoTransform[1] + "," + adfGeoTransform[5] + ")");
Console.WriteLine("");
//读取第一个波段
Band band = ds.GetRasterBand(1);
double val;
int hasval;
band.GetMinimum(out val ,out hasval);
if (hasval != 0)
Console.WriteLine("mininum:"+val.ToString());
band.GetMaximum(out val, out hasval);
if (hasval != 0)
Console.WriteLine("maxinum:" + val.ToString());
int nXSice = ds.RasterXSize;
float[] pafScanLine;
pafScanLine=new float[nXSice];
band.ReadRaster(0,0,nXSice,1,pafScanLine,nXSice,1,0,0);
Console.ReadLine();