• [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;

    运行结果:

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    vscode debugger 调试服务
    巴克斯诺尔范式 && 乔姆斯基谱系,词法 && 语法
    推荐好用的建站系统以及各网站系统优缺点介绍
    解决emlog默认导航不能修改的问题以及修改后台登录地址的方法
    易企CMS主要模板文件介绍
    易企CMS模板调用标签列表
    易企CMS仿站标签说明
    使用Custom scrollbar(彩色滚动条)插件实现WordPress滚动条变色的方法
    2018给网页滚动条变色的新方法
    javascript实现双击网页自动滚动,单击滚动停止
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2814653.html
Copyright © 2020-2023  润新知