写在开头:最近工作太忙,没时间更新,今天抽空更新一篇,上篇博客是四,这篇是六,中间还有一篇第五篇,主要将GDAL中的Python工具集,尽快给大家更新。

一、简单的调用

关于GDAL的使用,网上的资料都很多,主要还是要熟悉GDAL的组织结构,类以及类的函数等,熟悉了,使用GDAL就不在话下了。最常用的就是动态库的GDAL,当然你也可以使用静态库,这里只是简单的介绍使用动态GDAL库来做开发。

首先打开VS,新建一个工程,控制台的就成。然后在工程的属性对话框中,找到【配置属性】-【C/C++】-【常规】,右侧的【附加包含目录】中,将GDAL的include文件夹路径填写到这里,如下图:

第二、继续在属性对话框中,找到【配置属性】-【链接器】-【常规】,右侧的【附加库目录】中,将GDAL的lib文件夹路径填写到这里,如下图:

第三、在【配置属性】-【链接器】-【输入】,右侧的【附加依赖项】中,将gdal_i.lib填写到此处。然后点击确定即可。至此,使用GDAL的环境全部搭建完成,剩下的就是在您的代码中使用GDAL了。

将下面的代码(代码摘自GDAL官方指南:http://gdal.org/gdal_tutorial.html)贴到刚才新建的工程中的cpp文件中,保存后编译,正常情况下会提示生成成功,然后运行,会在控制台上将图像的信息输出。

#include "gdal_priv.h"
#include "cpl_conv.h" //for CPLMalloc()int main()
{//注册文件格式GDALAllRegister();const char* pszFile = "C:\\Test.img";GDALDataset *poDataset;//使用只读方式打开图像poDataset = (GDALDataset*) GDALOpen( pszFile,GA_ReadOnly );if( poDataset == NULL ){printf( "File: %s不能打开!\n",pszFile);return 0;}//输出图像的格式信息printf( "Driver:%s/%s\n",poDataset->GetDriver()->GetDescription(),poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME) );//输出图像的大小和波段个数printf( "Size is%dx%dx%d\n",poDataset->GetRasterXSize(),poDataset->GetRasterYSize(),poDataset->GetRasterCount());//输出图像的投影信息if( poDataset->GetProjectionRef() != NULL )printf( "Projectionis `%s'\n", poDataset->GetProjectionRef() );//输出图像的坐标和分辨率信息double adfGeoTransform[6];if( poDataset->GetGeoTransform( adfGeoTransform) == CE_None ){printf( "Origin =(%.6f,%.6f)\n",adfGeoTransform[0], adfGeoTransform[3]);printf( "PixelSize = (%.6f,%.6f)\n",adfGeoTransform[1], adfGeoTransform[5]);}GDALRasterBand *poBand;int            nBlockXSize, nBlockYSize;int            bGotMin, bGotMax;double         adfMinMax[2];//读取第一个波段poBand = poDataset->GetRasterBand( 1 );//获取图像的块大小并输出poBand->GetBlockSize(&nBlockXSize, &nBlockYSize );printf( "Block=%dx%dType=%s, ColorInterp=%s\n",nBlockXSize, nBlockYSize,GDALGetDataTypeName(poBand->GetRasterDataType()),GDALGetColorInterpretationName(poBand->GetColorInterpretation()));//获取该波段的最大值最小值,如果获取失败,则进行统计adfMinMax[0] = poBand->GetMinimum( &bGotMin);adfMinMax[1] = poBand->GetMaximum( &bGotMax);if( ! (bGotMin&& bGotMax) )GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);printf( "Min=%.3fd,Max=%.3f\n", adfMinMax[0], adfMinMax[1] );//输出图像的金字塔信息if( poBand->GetOverviewCount() > 0 )printf( "Band has%d overviews.\n", poBand->GetOverviewCount() );//输出图像的颜色表信息if( poBand->GetColorTable() != NULL)printf( "Band hasa color table with %d entries.\n",poBand->GetColorTable()->GetColorEntryCount() );float *pafScanline;int   nXSize = poBand->GetXSize();//读取图像的第一行数据pafScanline = (float*) CPLMalloc(sizeof(float)*nXSize);poBand->RasterIO(GF_Read, 0, 0, nXSize,1, pafScanline, nXSize,1, GDT_Float32, 0, 0 );CPLFree(pafScanline);//关闭文件GDALClose((GDALDatasetH)poDataset);
}

二、GDAL源代码调试

在很多时候我们需要看看GDAL的内部实现,当然可以直接查看GDAL的源代码,但是直接看源代码,不能很好的理解,这时候就需要调试查看源代码中变量的内容。调试GDAL的源代码,需要GDAL的debug版本,以及编译GDAL的时候的pdb等调试文件。当然也可以把GDAL的源代码加入到你的工程中,但是这样太费时费力。

下面就有一个很简单的方法,可以直接调试进GDAL的源代码中,首先编译一下GDAL的debug版本,将编译生成的文件,主要有gdal18.dll,gdal_i.exp,gdal_i.lib,gdal.lib,gdal18.pdb,gdal18.ilk,gdal18.exp等文件,将gdal18开头的文件拷贝到自己工程的生成目录中,然后调试自己的程序,在执行到GDALOpen函数(或者其他GDAL的函数)时按F11键,就会进入到GDAL的源代码中进行调试GDAL代码。

三、GDAL使用示例

1、使用GDAL进行图像裁切,参考http://blog.csdn.net/liminlu0314/article/details/6136512

2、使用GDAL进行图像重采样,参考http://blog.csdn.net/liminlu0314/article/details/6130064

3、使用GDAL创建金字塔,参考http://blog.csdn.net/liminlu0314/article/details/6127755

GDAL源码剖析(六)之GDAL开发及其调试相关推荐

  1. 《GDAL源码剖析与开发指南》一一1.9 简单的调用

    本节书摘来自异步社区出版社<GDAL源码剖析与开发指南>一书中的第1章,第1.9节,作者:李民录 更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.9 简单的调 ...

  2. java实现gdal栅格矢量化,《GDAL源码剖析与开发指南》一一1.5 GDAL源码目录

    本节书摘来自异步社区出版社<GDAL源码剖析与开发指南>一书中的第1章,第1.5节,作者:李民录 更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.5 GDAL ...

  3. 《GDAL源码剖析与开发指南》导读

    前言 GDAL源码剖析与开发指南 GDAL全称是Geospatial Data Abstraction Library(地理空间数据抽象库),是一个在X/MIT许可协议下读写空间数据(包括栅格数据和矢 ...

  4. GDAL源码剖析(一)

    前言:一直在使用和研究GDAL的相关东西,发现网上对GDAL的内容倒是不少,但是很少有系统的介绍说明,以及内部的一些结构说明,基于这些原因,将本人的一些粗浅的理解放在此处,形成一个系列,暂时名为< ...

  5. GDAL源码剖析(四)之命令行程序说明二

    接博客GDAL源码剖析(四)之命令行程序说明一http://blog.csdn.net/liminlu0314/article/details/6978589 其中有个nearblack,gdalbu ...

  6. GDAL源码剖析(二)之编译说明

    一.简单的编译 1.使用VisualStudio IDE编译 首先进入GDAL的源代码目录,可以看到有几个sln为后缀的文件名,比如makegdal10.sln,makegdal80.sln,make ...

  7. 阿里中间件seata源码剖析六:TCC模式中2阶段提交实现

    目录 TM通知TC事务状态 TC通知RM分支事务提交 RM处理TC提交事务请求 总结 上篇文章中,我们以TCC模式的demo为例,讲解了seata中全局事务的开启.在这个demo中,TM作为一个全局事 ...

  8. GDAL源码剖析(十二)之GDAL Warp API使用说明

    一.简介 本文原文地址:http://www.gdal.org/warptut.html GDAL Warp API(在文件gdalwarper.h中定义)是一个高效的进行图像变换的接口.主要由几何变 ...

  9. GDAL源码剖析(三)之Swig编译和帮助文档生成

    一.Swig编译 1.Swig介绍 SWIG全称是Simplified Wrapper and Interface Generator,官方网站:http://www.swig.org/.SWIG是个 ...

最新文章

  1. Revit二次开发之“PromptForFamilyInstancePlacement()函数动态拖动/鼠标跟随”效果
  2. Python自动化开发 - RESTful API
  3. OpenGL OBJ模型加载.
  4. 【NLP】Kaggle从零到实践:Bert中文文本分类
  5. 如何通俗理解beta分布?
  6. 元素随着滚动条滚动而滚动,但是到浏览器窗口顶部的距离是固定的功能代码...
  7. python 艺术照片滤镜_使用Python创建自己的Instagram滤镜|视觉实战
  8. python文件操作的方法_python文件操作的方法介绍
  9. SpringActionscript3 片断
  10. 广西谋建面向东盟金融开放门户
  11. Ubuntu安装摄像头软件GTK_UVC_Viewer
  12. easyui下拉选项多怎么解决_作物根部病害多原因在哪?解决病害生根措施怎么做?...
  13. jQuery keyup事件
  14. 盛夏七月,欢迎来京城看“火烧云”
  15. 【读书笔记】--少有人走的路①:心智成熟的旅程
  16. Glide遇到重定向url产生的bug分析以及解决
  17. 基于VUE使用Hbuilder工具开发的思维导图工具
  18. Python基础知识-pycharm版 第3节
  19. 第八章 linux系统引导过程及引导修复
  20. 【Java】生产者消费者模型

热门文章

  1. docker always_docker一键安装wordpress,真一键!
  2. python使用ddt_使用DDT数据驱动测试框架Python
  3. MySQL二十四:索引
  4. 03 聚类算法 - K-means聚类
  5. 【笔记】jquery判断两个日期之间相差多少天
  6. OSChina 初十二乱弹 ——网站都挂了,巴叔被安排出去度假
  7. 复杂高端木马USB窃贼出现
  8. java时间转化类,一小时前,刚刚一个月前
  9. docker本地构建kerberos单机环境
  10. 【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)