第六节GDAL的使用与图片的显示

上传人:re****.1 文档编号:479810759 上传时间:2023-09-03 格式:DOC 页数:11 大小:211.50KB
返回 下载 相关 举报
第六节GDAL的使用与图片的显示_第1页
第1页 / 共11页
第六节GDAL的使用与图片的显示_第2页
第2页 / 共11页
第六节GDAL的使用与图片的显示_第3页
第3页 / 共11页
第六节GDAL的使用与图片的显示_第4页
第4页 / 共11页
第六节GDAL的使用与图片的显示_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《第六节GDAL的使用与图片的显示》由会员分享,可在线阅读,更多相关《第六节GDAL的使用与图片的显示(11页珍藏版)》请在金锄头文库上搜索。

1、第六节GDAL的使用一. 什么是GDALGDAL(Geospatial Data Abstraction Library)是一个在 X/MIT 许可 协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支 持的各种文件格式。它还有一系列命令行工具来进行数据转换和处 理。GDAL提供对多种栅格数据的支持,包括Arc/lnfo ASCII Grid(asc), GeoTiff (tiff) , Erdas Imagine Images(img), ASCII DEM(dem) 等格式。GDAL使用抽象数据模型(abstract datamodel)来解析它所支持的数据格式,抽象数据模型包括数

2、据集(dataset,坐标系统,仿射地理坐标转换(Affine GeoTransform), 大地控制点(GCPs), 元数据 (Metadata),栅格波段(Raster Ba nd),颜色表(ColorTable),子数据集域 (Subdatasets Domain),图像结构域(Image_StructureDomain), XML 域 (XML:Domains)。GDALMajorObject 类:带有元数据的对象。GDALDdataset类:通常是从一个栅格文件中提取的相关联的栅格波段集合和这些波 段的元数据;GDALDdataset也负责所有栅格波段的地理坐标转换 (georefe

3、rencing transform)和坐标系定义。GDALDriver 类:文件格式驱动类,GDAL会为每一个所支持的文件格式创建一个该类的实 体,来管理该文件格式。GDALDriverManager类:文件格式驱动管理类,用来管理GDALDriver类。二. GDAL的安装GDAL编译详细过程:1) 网上http:/trac.osgeo.org/proj下载最新版本的proj开源投影库,解压至y下然后使用VS的命令行工具进入到该目录,执行nmake makefile.vc2) 网上http:/trac.osgeo.org/geos下载最新版本的geos几何库,解压到 下,双击目录下的 aut

4、oge n.bat执行后然后使用VS的命令行工具进入到该目录,执行nmakemakefile.vc3) 拷贝 hdf 禾口 HDF5、HDF5SZLIB 至U C:4) 打开gdal主目录下的nmake.opt修改:# Un comme nt for GEOS supportGEOS_DIR二C:geos-3.0.4GEOS_CFLAGS = -l$(GEOS_DIR)/capi -l$(GEOS_DIR)/source/headers -DHAVE_GEOSGEOS_LIB = $(GEOS_DIR)/source/geos_c_i.lib# Uncomment the following

5、and update to enable NCSA HDF Release 4 support.HDF4_DIR = C:HDFHDF4_LIB=$(HDF4_DIR)dllhd424m.lib$(HDF4_DIR)dllhm424m.lib $(HDF4_DIR)libhd424.lib $(HDF4_DIR)libhm424.lib Ws2_32.lib# Uncomment the following and update to enable NCSA HDF Release 5 support.HDF5_DIR = C:HDF5SZIP_DIR = C:HDF5SZLIBHDF5_LI

6、B = $(HDF5_DIR)dllhdf5dll.lib $(HDF5_DIR)dllhdf5_hldll.lib$(SZIP_DIR)dllszlibdll.lib5) 静态链接proj4编译GDAL时,你可以按需要添加其它支持,如 ProJ, GeoTiff等等, 添加方法只要在 nmake.opt找到相关配置节,把前面的“ #”去掉,即 取消注释,然后修改相关的路径即可。如:nmake.opt中的 PROJ.4 stuff节# PROJ.4 stuff# Uncomment the following lines to link PROJ.4 library statically. O

7、therwise# it will be lin ked dyn amically duri ng run time.# PROJ_FLAGS = -DPROJ_STATIC# PROJ_INCLUDE = -ID:GDALproj-4.5.0src# PROJ_LIBRAR Y 二 D:GDALproj-450srcproj.lib本节的作用是控制链接方式,默认是注释的,即采用动态链接方式。只需拷贝proj的动态库。若要采用静态链接方式,通过取消gdal的该节注释,并设置proj源码的对应路径即可。静态链接的好处是,加载 之初就会判断库的依赖关系,这可以避免采用动态链接库而又缺少依 赖库而出

8、现莫名其妙的现象。如:# PR0J.4 stuff# Uncomment the following lines to link PROJ.4 library statically.Otherwise# it will be lin ked dyn amically duri ng run time.PROJ_FLAGS = -DPROJ_STATICPROJ_INCLUDE = -IC:proj-4.7.0srcPROJ_LIBRAR Y 二 C:proj-470srcproj.lib6)去http:/www.gdal.org/dl/下一个版本,解压到 ,修改frmts下 leverers的

9、CPP文件的?号。当然,如果没问题就不用修改7)打开 gdal 文件夹下 的 nmake.opt 修改 GDAL_HOME二C:warmerdabld把路径改到需要把gdal安装的地方。不改也可以。如果需要 python支持(我的主要目的,没有 python活不 下去)修改 PY_INST_DIR = $(GDAL_HOME)pymod 把路径改成 pyth on下 的 Libsite-packages 文 件 夹 下。PYDIR二C:SoftwarePython24改成 python 的安装路径。下面的参数爱改什么就把前面的#删除(要看您有没有那些库的源码),注意一下路径就可以了。后面就依次

10、运行nm ake /f makefile.vcnm ake /f makefile.vc in stallnm ake /f makefile.vc devi nstall 三.GDAL的使用首先创建工程,选择单文档,工程名为six,基类选择 CView ,创建完成后在项目一six属性一配置属性一常规一字符集 选择使用多字节字符集。然后将GDAL相关的dll和proj等资料拷贝到工程的文件夹下。在 sixview.h中需要添加引用的头文件 gdal_priv.h和 ogrsf_frmts.h。(1)调色板位图的显示如果我们需要显示图像,我们需要添加上节我们所使用的BitmapPainter类,

11、并在sixview.h中引用该类 的头文 件“ #include includeBitmapPainter.h”。同时声明变量:protected:CPalBitmapPa in ter image;int nWidth;int nH eight;在sixview.cpp的构造函数中为 nWidth和nHeight赋值: Csixview:Csixview()/ TODO:在此处添加构造代码n Width=0;nH eight=0;添加OnCreat消息,生成的OnCreat函数中添加代码,用以读取图 像信息,并将信息传给image,代码如下:int CTestGdalView:O nCrea

12、te(_PCREATESTRUCT IpCreateStruct) char szFilter = GeoTiff (*tif)|*tif|bmp(*bmp)|*bmp|AII Files (*)|*|;设置打开文件类型CStri ng filePath();CFileDialogfileOpenDlg(TRUE, tif ,NULL,OFN_HIDEREADONLY,szFilter);打开浏览文件夹对话框if (fileOpe nDlg.DoModal() = IDOK)VERIF Y(filePath = fileOpe nDlg.GetPathName();elsereturn;CSt

13、ri ng strFilePath(filePath);下面利用GDAL读取图像GDALDataset *poDataset;GDALAllRegister();poDataset = (GDALDataset *) GDALOpe n( strFilePath,GA_Read Only );用GDALOpen()函数来打开一个数据集 datasetdouble adfGeoTra nsform6;int Cols=poDataset-GetRasterXSize()/ 图像的宽度int Rows二poDataset-GetRasterYSize( 图像的高度/DOUBLE Left,Top,

14、Right,Bottom;/DOUBLE XCellSize, YCellSize;/CStri ng sp;if( poDataset-GetGeoTra nsform( adfGeoTra nsform )=CE_No ne )获取仿射影像/Left二adfGeoTra nsform0;/Top二adfGeoTra nsform3;/XCellSize二adfGeoTra nsform1;/Y CellSize=fabs(adfGeoTransform5);/Right二adfGeoTra nsform0+Cols*XCellSize;/Bottom二adfGeoTra nsform3-R

15、ows* YCellSize;/if( poDataset-GetProjectio nRef() != NULL )/sp=poDataset-GetProjecti on Ref();/GDALRasterBa nd *poBa nd;int Ban dCou nt二poDataset-GetRasterCou nt()/ 获得图像的波段数poBa nd二poDataset-GetRasterBa nd(1);BYTE *pafSca nli ne;pafScanline = new BYTECols; 每行所需的 byte数n Width二Cols;/ On Draw的时候需要用来调整设备区域和客户区域 nH eight=Rows;image.Initiallmage(Rows,Cols);利用 BitmapPainte类中的方法初始 化图像

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号