GDAL进度信息编写

GDAL库中的算法以及读写数据的时候一般都会提供两个与进度信息相关的参数,下面分别进行描述:

  • GDALProgressFunc pfnProgress
  • void * pProgressArg

GDALProgressFunc pfnProgress

GDALProgressFunc pfnProgress这个是一个回调函数,GDALProgressFunc的定义如下所示:

typedef int (CPL_STDCALL *GDALProgressFunc)(double dfComplete, const char *pszMessage, void *pProgressArg);

该回调函数接口中共声明了三个参数,分别是:
- dfComplete 处理进度信息,0~1之间的数字
- pszMessage 处理进度消息,用于显示在进度控件上
- pProgressArg 回调函数参数

void * pProgressArg

pProgressArg直接会作为回调函数的第三个参数,传入回调函数中。关于这个函数参数的使用请参考我之前的相关博客


一个简单的进度示例

/**
* @brief 示例函数
* @param pszSrcFile         输入数据
* @param pszDstFie          输出数据
* @param pfnProgress        进度信息回调函数
* @param pProgressArg       进度信息回调函数参数
* @return                   返回值,处理成功返回CE_None
*/
CPLErr TestFunction(const char* pszSrcFile,const char* pszDstFile,GDALProgressFunc pfnProgress = NULL,void *  pProgressArg = NULL)
{// 如果没有指定进度条回调函数,使用GDAL库中的默认回调函数if(pfnProgress == NULL)pfnProgress = GDALDummyProgress;// 设置进度信息以及初值为0,可同时设置处理信息if(!pfnProgress(0.0, "Start ....", pProgressArg)){CPLError(CE_Failure, CPLE_UserInterrupt, "User terminated");return CE_Failure;}// 一个示例的循环,里面描述了更新进度信息for (int i=0; i<100; i++){//do somethingif(!pfnProgress((i+1.0)/100, "Processing ....", pProgressArg)){CPLError(CE_Failure, CPLE_UserInterrupt, "User terminated");return CE_Failure;}}// 处理完成,将进度信息更新为1,可同时设置处理信息if(!pfnProgress(1.0, "End ....", pProgressArg)){CPLError(CE_Failure, CPLErnterrupt, "User terminated");retun CE_Failure;}return CE_None;
}

在调用时与调用GDAL其他的进度信息一致,下面是一个简单的调用示例:

void main()
{//进度条回调函数,这里使用GDAL自带的一个控制台进度函数GDALProgressFunc pfnProgress = GDALTermProgress;//进度条回调函数参数,该参数需与回调函数配合使用void *  pProgressArg = NULL;    const char *pszSrcFile = "input.tif";const char *pszDstFile = "Output.tif";CPLErr Err = TestFunction(pszSrcFile, pszDstFile, pfnProgress, pProgressArg);return;
}

GDAL库进度信息编写示例相关推荐

  1. C#调用GDAL算法进度信息传递

    GDAL库中提供了很多的算法,同时也提供了进度条的参数.对于C++调用来说,应该没什么问题,但是对C#调用来说,在进度条这块需要写一个代理来进行传递.首先写一个简单的测试代码. 首先定义一个委托函数原 ...

  2. GDAL算法进度条使用说明

    在调用GDAL算法的时候,希望能够显示其处理进度信息,其实在GDAL的算法API中,一般最后两个参数就是进度信息的指针.下面分别实现两种进度条信息,一种是在控制台中的进度条,一种是基于QT界面的进度条 ...

  3. GDAL库中WFS服务中含有中文不能获取数据的问题

    GDAL库中目前提供了对WFS服务发布的数据进行获取,目前发现对于中文的服务名称或者图层名为中文,GDAL不能正确识别.通过调试发现,其原因有下面两点: 1.输入的URL路径没有使用UTF8编码而从网 ...

  4. GDAL库扩展Landsat系列MTL文件格式支持

    Landsat系列卫星提供的数据,一般都是每个波段一个tif文件,然后外加一个MTL.txt的元数据文件,使用gdal可以直接打开每个波段的tif文件,但是有时候想在打开tif数据的同时能够自动读取M ...

  5. GDAL库简介以及在Windows下编译过程

    GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...

  6. python turtle画彩虹-Python利用turtle库绘制彩虹代码示例_天津SEO

    天津SEO RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例: #-*- coding:utf-8 –*- f ...

  7. 基于GDAL库,读取海洋风场数据(.nc格式)c++版

    经过这一段时间的对海洋数据的处理,接触了大量的与海洋相关的数据,例如海洋地形.海洋表面温度.盐度.湿度.云场.风场等数据,除了地形数据是grd格式外,其他的都是nc格式的数据.本文将以海洋风场数据为例 ...

  8. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  9. 『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法

    『飞秋』在.NET 4中调用GDAL库时遇到的问题及解决方法 最近需要在.NET 4的环境中调用GDAL库.GDAL本身是一套非托管类库,不过还好提供了用SWIG做的托管的Wrapper. 可以在FW ...

最新文章

  1. SAP Netweaver 7.4 SR2 Application Java Installation
  2. 普元王葱权:数字化时代需要新一代的大数据应用平台架构
  3. 求求你,别在 MySQL 中使用 UTF-8了!
  4. mysql数据库优化课程---6、mysql结构化查询语言有哪些
  5. [SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据
  6. Delphi捕捉DLL执行所抛出的异常。
  7. 生信宝典被分享最多的15篇文章
  8. 小学奥数 7647 余数相同问题 python
  9. 力扣637. 二叉树的层平均值(JavaScript)
  10. 在DataWorks中实现指定UDF只能被指定账户访问
  11. 第一部分 第五章 数组 1102-1149
  12. httphandler java_java – 使用HTTPHandler上传文件
  13. linux双机热备软件Rose,Linux Rose HA 双机热备软件原理
  14. 固态硬盘安装系统时显示,windows无法完成格式化解决办法。
  15. android studio 扣费白屏,详解一次Vue低版本安卓白屏问题的解决过程
  16. 详解win10系统还原点怎么设置
  17. 决定RDD分区数因素、关联
  18. other 猿 多年收藏
  19. c++求范围内既是素数又是回文数的数的个数
  20. VmFusion 无法访问外网的原因以及解决方案

热门文章

  1. Sublime 输入中文显示方框问号乱码
  2. 阿里OSS对象存储,实现图片上传代码;
  3. java manualbuffer_FlatBuffer Java Bean自由转换
  4. c++new时赋初值_C++ Lesson 7:new,delete amp; 类的重用
  5. 京东智联云张晓东cdn_京东智联云:数智力量驱动实体经济复苏
  6. 洛谷——P2393 yyy loves Maths II
  7. 计算年龄案例(JS)
  8. 案例-图片缩放(CSS3)
  9. 清除浮动-双伪元素清除浮动(HTML、CSS)
  10. 拳魂觉醒服务器维护怎么办,拳魂觉醒 哪些不为人知的的小秘密