Gdal库的简单使用及注意事项(C++版本和C#版本)
来源:互联网 发布:陈国良院士 知乎 编辑:程序博客网 时间:2024/06/05 16:48
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();
- Gdal库的简单使用及注意事项(C++版本和C#版本)
- 使用C#版本的gdal库打开hdf文件
- 使用C#版本GDAL读取复数图像
- GDAL的python版本安装使用
- GDAL入门-使用GDAL进行遥感影像NDVI的计算(C++版本)
- redis java和c#两个版本的简单使用
- 浅析GDAL库C#版本支持中文路径问题
- 2:(C#下使用GDAL库)注册及环境参数
- Selenium和Firefox对应版本及注意事项
- Selenium和Firefox对应版本及注意事项
- 浅析GDAL库C#版本支持中文路径问题(续)
- GDAL\OGR读取数据示例 C#版本
- GDAL\OGR读取数据示例 C#版本
- 调用C#版gdal库的一个注意事项
- c转成dsp版本的 注意事项
- 编译GDAL的多个版本开发者库
- 5.ButterKnife8.0版本(含)以后的使用注意事项
- 使用版本控制的注意事项(Git、SVN等)
- 设计模式学习(C++实现)3——单例模式
- springMVC 中接收前端传递的对象、数组等数据的方式详解
- 透明控件点击事件穿透的解决办法
- git的commit/push/add
- 【数学建模】CUMCM-2016A 系泊系统的设计 解题思路整理
- Gdal库的简单使用及注意事项(C++版本和C#版本)
- hibernate个人总结2
- java开发_""和null的区别
- 九分靠谱的加载反馈框架LoadSir
- 【踩坑日记】git stash误删恢复
- 第3周项目4 顺序表应用
- 执行同步数据库命令 su -s /bin/sh -c "keystone-manage db-sync" keystone 失败
- node.js非安装配置
- 扩展python