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

系统 1568 0

  刚上研一那会就听师兄说起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编译与第一个程序

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论