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. Web SCADA 电力接线图工控组态编辑器

    前言 SVG并非仅仅是一种图像格式, 由于它是一种基于XML的语言,也就意味着它继承了XML的跨平台性和可扩展性,从而在图形可重用性上迈出了一大步.如SVG可以内嵌于其他的XML文档中,而SVG文档中 ...

  2. [LeetCode] Accounts Merge 账户合并

    Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...

  3. html checkbox样式美化

    思路:使用label结合checkbox,背景图片进行美化. 原理: 1. for 属性规定 label 与哪个表单元素绑定,显式绑定和隐式绑定,均可实现checkbox的选用与取消效果,具体见:&l ...

  4. [SCOI 2009]windy数

    Description 题库链接 找出在 \([A,B]\) 间满足相邻位差值至少为 \(2\) 的正整数个数. \(1\leq A,B\leq 2\cdot 10^9\) Solution 数位 \ ...

  5. [SDOI 2017]数字表格

    Description 题库链接 记 \(f_i\) 为 \(fibonacci\) 数列的第 \(i\) 项. 求 \[\prod_{i=1}^n\prod_{j=1}^mf_{gcd(i,j)}\ ...

  6. [COGS 1799][国家集训队2012]tree(伍一鸣)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...

  7. [NOIp 2013]货车运输

    Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重 ...

  8. NOIP 2015运输计划

    题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...

  9. 2015 多校联赛 ——HDU5344(水)

    Problem Description MZL loves xor very much.Now he gets an array A.The length of A is n.He wants to ...

  10. bzoj 4025: 二分图

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. 解题报告: ...