GDAL使用方法VC+C#.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GDAL使用方法VCC#

GDAL栅格图像操作 ? GDAL是一个操作各种栅格和矢量(由ogr这个库实现)地理数据格式的开源库。包括读取、写入、转换、处理各种栅格和矢量数据格式(有些特定的格式对一些操作如写入等不支持)。 即使不是进行地理遥感方面的应用研究,GDAL也是一个非常有用的库,因为它可以支持大量我们常见的图像数据,比如jpg,gif之类的。完整的格式清单可以到此链接查看/formats_list.html。而且已经有包括GoogleEarth在内的很多软件都是在使用GDAL作为后台库。 本文就以VC为开发平台介绍GDAL对栅格数据的操作方法。?????? Include目录是开发中需要的头文件,lib中是所需要的lib文件,在VC8中应当将其存放目录添加到目录列表中,选择菜单的“工具-选项-项目和解决方案-VC++目录”,分别在“包含文件”和“库文件”中将此两个目录添加进去。 在项目的属性页中,选择“配置属性-链接器-输入”,在“附加依赖项”中添加gdal_i-vc8.lib和gdal_id-vc8.lib两个使用GDAL中需要的静态库文件,或者在程序中添加以下两行代码也可以。 #pragma comment(lib, gdal_i-vc8.lib) #pragma comment(lib, gdal_id-vc8.lib) ?????? Bin目录下的动态链接库文件应当放置于程序能够访问的位置,比如windows\system32中。 ?????? 此外,在程序中需要引入的头文件是gdal_priv.h。 ? 现在开始用C++来对图像文件进行操作。 在打开文件之前需要首先注册所需要的驱动程序,一般来说我们可以默认注册所有支持的格式驱动,所使用的函数是GDALAllRegister()。然后就是打开文件操作。 ?????? 这里要说一个数据集的概念,也就是所谓的Dataset。在GDAL中可以说数据的核心就是Dataset,简单来说可以将Dataset就理解为图像文件,比如说一个jpeg格式的文件就是一个数据集,当然其他一些文件格式可能在一个数据集中包含多于一个文件,比如可能除了图像数据文件外还可能会有一些附加信息文件等。 在数据集下最重要组成部分就是所谓的波段band,波段可多可少,比如一个RGB真彩色的图像就有3个波段,分别代表红色绿色和蓝色波段,如果是灰度图,那可能就只有一个波段,而很多遥感图像可能就会多于3个波段。 除了波段外,数据集中还含有图像相关的坐标系投影信息,元数据信息等数据。 文件的打开使用的是GDALOpen ( const char *? pszFilename, GDALAccess? eAccess? ),pszFilename是文件路径,eAccess?是访问权限,可以是GA_ReadOnly只读,也可以是GA_Update来对文件进行修改。比如我们以只读模式打开一个tif文件: GDALDataset?*poDataset; //数据集对象指针 GDALAllRegister();//注册驱动 ???? poDataset = (GDALDataset *) GDALOpen( c:\\terra335h_EV_250_Aggr500_RefSB_b0.tif, GA_ReadOnly ); ???? if( poDataset != NULL /*检查是否正常打开文件*/) ???? { ???????? //do something } ?????? delete poDataset; //释放资源 ? 在确认poDataset不是NULL的情况下就可以对图像数据集进行操作了。 ?????? 首先来看一下有关这个图像的基本信息,比如长宽和波段数。 ?????? coutRasterXSize:poDataset-GetRasterXSize()endl;//x方向长度 ???? coutRasterYSize:poDataset-GetRasterYSize()endl;//y方向长度 ???? coutRasterCount:poDataset-GetRasterCount()endl;//波段数量 ?????? 我的这个文件输出结果如下: RasterXSize:5684 RasterYSize:3655 RasterCount:1 ?????? 这是个5684×3655的灰度图。 ?????? 有关的投影信息可以由GetProjectionRef函数获得。 coutpoDataset-GetProjectionRef()endl; ?????? 输出一个字符串,是WKT格式的坐标投影信息,形如: GEOGCS[WGS 84,DATUM[WGS_1984,SPHEROID[WGS 84,63781

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档