[GDAL]1.GDAL1.8.1编译与第一个程序

  刚上研一那会就听师兄说起GDAL,由于当时刚开始用C#开发,所以看着他们编译了一下GDAL1.5的代码,试图用的C#图像处理的开发中,感觉好繁琐啊!所以虽然一直有心学习一下,但只是粗略的接触了一些。知道Google earth、ArcGIS都在用。最近再一次学习C++,觉得有必要从新接触GDAL。查阅了一些资料,发现1.7以后的版本编译起来并不是那么困难!尤其是应用到C++中的开发中。所以先编译了一个简单的应用到学习中。

一、环境准备:

1.VC++2010

2.gdal181源码

  首先使用VisualStudio2010 IDE编译,但是在C:\warmerda\bld盘只安装了bin、data、html三个文件夹,所以在测试开发的时候找不到include和lib文件夹。

  决定使用cmd命令行编译,首先在“开始菜单\所有程序\Microsoft Visual Studio 2010\Visual Studio Tools\ Visual Studio 2010命令提示”

  使用cd命令,切换到GDAL的源代码目录,依次敲入下面的命令行后回车,等待编译结束即可。

nmake -f makefile.vc

nmake -f makefile.vc install

nmake -f makefile.vc devinstall

  同时还有其他的命令,如:

nmake -f makefile.vc clean nmake -f makefile.vc MSVC_VER=1600clean nmake -f makefile.vc MSVC_VER=1600DEBUG=1

  上面六行的命令含义依次是:

1 编译GDAL库 2 编译GDAL库,并安装(这里安装的意思就是将生成的dll,exe等文件拷贝到C:\warmerda\bld目录), 3 编译GDAL库,并安装开发者模式(安装的意思同上,开发者模式意思是将开发用的include文件夹中的头文件和lib文件一同拷贝到
C:
\warmerda\bld目录,此时会在C:\warmerda\bld目录中多出来两个文件夹,分别是include和lib,分别存放的是GDAL的头文件和lib文件,用于调用GDAL库使用)。 4 清理GDAL库,同时会删除编译GDAL库所生成的临时文件,作用相当于在VS环境中的清理命令。 5 作用同上,但是添加了一个MSVC_VER=1600,表示使用VS2010编译。 6 编译GDAL库的debug模式,可以用来调试GDAL源码。

这样再C:\warmerda\bld盘只安装了bin、data、html、include、lib共5个文件夹。这样简单的开发用到的项目基本全了。

参考:http://www.cnblogs.com/bigbigtree/archive/2011/11/20/2256434.html 该文章写的很好,特别推荐,只是配图没有了!)

二、测试开发

1.新建一个win32项目命名为readimg

2.配置项目【属性】

【C/C++】-【常规】,右侧的【附加包含目录】中,选择GDAL的include文件夹路径

【链接器】-【常规】,右侧的【附加库目录】中,选择GDAL的lib文件夹路径

【链接器】-【输入】,右侧的【附加依赖项】中,填写gdal_i.lib

3.添加头文件

1 #include "cpl_conv.h"

2 #include "gdal_priv.h"

4.在main中键入如下代码

 1 //注册文件格式 

 2  GDALAllRegister();  3 

 4     const char* pszFile = "D:\\hsy.img";  5     GDALDataset* poDataset;  6     //使用只读方式打开图像 

 7     poDataset = (GDALDataset*)GDALOpen(pszFile,GA_ReadOnly);  8     if( poDataset == NULL )  9  { 10         printf( "File: %s不能打开!\n",pszFile); 11         return 0; 12  } 13 

14     //输出图像的格式信息 

15     printf( "Driver:%s/%s\n", 16         poDataset->GetDriver()->GetDescription(), 17         poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME) ); 18 

19     //输出图像的大小和波段个数 

20     printf( "Size is%dx%dx%d\n", 21         poDataset->GetRasterXSize(),poDataset->GetRasterYSize(), 22         poDataset->GetRasterCount()); 23 

24     //输出图像的投影信息 

25     if( poDataset->GetProjectionRef() != NULL ) 26         printf( "Projectionis `%s'\n", poDataset->GetProjectionRef() ); 27 

28     //输出图像的坐标和分辨率信息 

29     double adfGeoTransform[6]; 30     if( poDataset->GetGeoTransform( adfGeoTransform) == CE_None ) 31  { 32         printf( "Origin =(%.6f,%.6f)\n", 33             adfGeoTransform[0], adfGeoTransform[3]); 34 

35         printf( "PixelSize = (%.6f,%.6f)\n", 36             adfGeoTransform[1], adfGeoTransform[5]); 37  } 38     char a; 39     std::cin>>a;

运行结果:

[GDAL]1.GDAL1.8.1编译与第一个程序

你可能感兴趣的:(编译)