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 something if(!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. 老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例

    老李推荐: 第3章1节<MonkeyRunner源码剖析>脚本编写示例: MonkeyRunner API使用示例   MonkeyRunner这个类可以说是编写monkeyrunner脚 ...

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

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

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

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

  5. 基于GDAL库海洋表温日平均计算工具设计与实现 C++版

    技术背景 在对物理海洋数据处理过程中,表层温度是众多要素中的一种,本文书要是针对海洋表温数据批量日平均处理的一个工具设计.首先要在对当前的SST数据文件作一下简要的说明,SST全称为sea surfe ...

  6. 【原创】用JAVA实现大文件上传及显示进度信息

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...

  7. C++调用GDAL库读取并输出tif文件,并计算斑块面积输出景观指数:CSD

    部分源码选自GDAL库的官方网址:www.gdal.org,其余的代码为笔者自己编写. // readfile.cpp : 定义控制台应用程序的入口点. // /* part of the codes ...

  8. GDAL库——读取图像并提取基本信息

    GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL ...

  9. 使用VB6写一个自定义的进度信息框窗口

    一.起因说明 之前有些项目是用Access完成的,当时为了给用户显示一些进度信息,自制了一个进度信息窗体,类似下图所示: 随着项目不断变迁,需要将进度信息按阶段及子进度进行显示,并且出于代码封装的需求 ...

随机推荐

  1. 【推荐】CentOS安装gcc-4.9.4+更新环境+更新动态库

    注:以下所有操作均在CentOS 6.8 x86_64位系统下完成. CentOS上yum安装的gcc版本过低(4.4.7),在安装某些软件的时候不支持,所以这里需要对其进行升级. #gcc的安装# ...

  2. react源代码重点难点分析

    网上已经有不少react源码分析文档,但都是分析主流程和主要功能函数,没有一个是从reactDOM.render()入口开始分析源码把流程走通尤其是把复杂重要的细节环节走通直到把组件template编 ...

  3. Oracle数据库基础练习题

    --1.查询和SMITH相同部门的员工姓名和雇用日期select ename,hiredate from emp where deptno=(select deptno from emp where ...

  4. MYSQL时间盲住

    mysql注释 -- ,-- -,#,--+等 常用的判断语句: ' and if(1=0,1, sleep(10)) # " and if(1=0,1, sleep(10)) --+ ) ...

  5. MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用

    -- 1.DECLARE EXIT HANDLER FOR SQLEXCEPTION 语句后面可以跟一个 begin end的复合语句块,也可以直接跟一个简单语句例如 :DECLARE EXIT HA ...

  6. [Vijos 2024]无向图最短路径

    Description 无向图最短路径问题,是图论中最经典也是最基础的问题之一.本题我们考虑一个有 $n$ 个结点的无向图 $G$.$G$ 是简单完全图,也就是说 $G$ 中没有自环,也没有重边,但任 ...

  7. POJ1830开关问题

    这题答案就是2^自由元的数目,原因是自由元可以取1或者0,所以就是ans<<1 由于只要求自由元的数目,所以高斯消元可以直接消后面的,不做前面的了,对答案没有影响 #include< ...

  8. 51nod 1270 数组的最大代价

    1270 数组的最大代价题目来源: HackerRank基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 数组A包含N个元素A1, A2......AN.数组B包含N ...

  9. 中断下半部处理之tasklet

    1.tasklet概述 下半部和退后执行的工作,软中断的使用只在那些执行频率很高和连续性要求很高的情况下才需要.在大多数情况下,为了控制一个寻常的硬件设备,tasklet机制都是实现自己下半部的最佳选 ...

  10. bzoj 5000: OI树

    Description 几天之后小跳蚤即将结束自己在lydsy星球上的旅行.这时,lydsy人却发现他们的超空间传送装置的能量早在小跳 蚤通过石板来到lydsy星球时就已经消耗光了.这时,小跳蚤了解到 ...