博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有点坑爹的GDALComputeRasterMinMax函数
阅读量:6262 次
发布时间:2019-06-22

本文共 1561 字,大约阅读时间需要 5 分钟。

作者:朱金灿

来源:

    

        GDALComputeRasterMinMax函数是gdal库为了求取指定波段的极值而提供的接口。最近看了这个接口的源码,发现这个接口有点坑爹。GDALComputeRasterMinMax实际上是调用GDALRasterBand类的virtual double GetMinimum( int *pbSuccess = NULL )virtual double GetMaximum(int *pbSuccess = NULL );两个接口。我们看看GDALRasterBand::GetMinimum函数的实现:

double GDALRasterBand::GetMinimum( int *pbSuccess ){    const char *pszValue = NULL;        if( (pszValue = GetMetadataItem("STATISTICS_MINIMUM")) != NULL )    {        if( pbSuccess != NULL )            *pbSuccess = TRUE;                return CPLAtofM(pszValue);    }    if( pbSuccess != NULL )        *pbSuccess = FALSE;    switch( eDataType )    {      case GDT_Byte:      {        const char* pszPixelType = GetMetadataItem("PIXELTYPE", "IMAGE_STRUCTURE");        if (pszPixelType != NULL && EQUAL(pszPixelType, "SIGNEDBYTE"))            return -128;        else            return 0;      }      case GDT_UInt16:        return 0;      case GDT_Int16:        return -32768;      case GDT_Int32:        return -2147483648.0;      case GDT_UInt32:        return 0;      case GDT_Float32:        return -4294967295.0; /* not actually accurate */      case GDT_Float64:        return -4294967295.0; /* not actually accurate */      default:        return -4294967295.0; /* not actually accurate */    }}

    这段函数的意义是什么呢?就是说首先从元数据文件(一般是xml文件)中查找是否有最小值记录,如果有就取出来返回;如果没有就把波段类型的值域的最小值返回。这样做就有点坑爹了,因为求取的极值并非来自统计图像而来,就是说除非派生自GDALRasterBand类的波段类重写了GetMinimumGetMaximum两个接口,否则求取的极值基本上是不准确的。我查了一下,geotiff的波段类都没重写这两个接口。因此GDALComputeRasterMinMax这个接口应该慎用。

转载于:https://www.cnblogs.com/lanzhi/p/6470215.html

你可能感兴趣的文章
screenX/Y,clientX/Y,offsetX/Y和pageX/Y之间有什么区别?
查看>>
webpack4.0优化那些事儿
查看>>
数据结构与算法(位运算) --javascript语言描述
查看>>
数据结构与算法(回溯法) --javascript语言描述
查看>>
百度地图开发实例番外篇--实用方法(持续更新)
查看>>
“大数据应用场景”之隔壁老王(连载一)
查看>>
k均值聚类算法(k-means)
查看>>
修改springboot的端口来启动项目
查看>>
MaxCompute SQL原理解析及性能调优
查看>>
vue中慎用style的scoped属性
查看>>
深度学习在股票市场的应用
查看>>
redis源码分析之事务Transaction(下)
查看>>
【273天】我爱刷题系列(32)
查看>>
Hystrix基础入门和特性讲解
查看>>
webpack-dev-server模块
查看>>
解决brew默认安装iamgemagick7导致wand库运行错误问题
查看>>
进入页面跳转到指定锚点
查看>>
如何根据protobuf来Mock后台返回的数据
查看>>
JavaScript 运算符规则与隐式类型转换详解
查看>>
网站攻击中的csrf和xss
查看>>