有点坑爹的GDALComputeRasterMinMax函数

原创 2014年11月06日 18:25:26

作者:朱金灿

来源:http://blog.csdn.net/clever101

    

        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这个接口应该慎用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

GDAL ComputeRasterMinMax .aux.xml

这个函数的第一个参数bApproxOK,TRUE表示精确统计,速度慢,图像的所有像元都遍历一边,FALSE表示粗略统计,速度快,但是不一定准确。函数还有个返回值,是CPLErr类型,如果返回CE_No...

GDAL随记-GDALRasterBand中的API自学

GDAL的GDALRasterBand中GetStatics(),GetHistogram()和GetMaximum()以及GetMiniMum()方法的使用.

极值与导数

极值与导数1 求某一函数的极值,为什么让其导数函数等于零,求出的值是什么?导数的实质就是在函数图像上取一个点,然后做这个点的切线,切线的正切(tan)值,一个函数的极值一定是在拐点上(就是原本是增函数...

有点坑爹的gdal库

作者:朱金灿来源:http://blog.csdn.net/clever101          今天同事遇到了这样一个问题。他的代码如下:FILE* fpHdr = NULL; fpHdr = fo...

坑爹的stl list 的size()成员函数

刚做hihocoder #1086 Browser Caching的题,一开始的做法是stl unorderd_map+list,满心以为一次就AC,结果……TLE了。O(N)也能TLE!!(╯‵□′...

c++基础知识,有现成的函数不用,非的自己设计算法,这不是坑爹吗?

那天天气不错,小白(纯属虚构,也许是我,你猜,呵呵)兴高采烈地去xx手机游戏公司面试,带上自己的学历,简历,还有android 手机 手机除了便于联系贵公司之外,最重要的一点,手机上安装有自己制作的...

c++基础知识,有现成的函数不用,非的自己设计算法,这不是坑爹吗?

那天天气不错,小白(纯属虚构,也许是我,你猜,呵呵)兴高采烈地去xx手机游戏公司面试,带上自己的学历,简历,还有android 手机 手机除了便于联系贵公司之外,最重要的一点,手机上安装有自己制作的...

USACO Section 2.4 Overfencing - 略坑爹的输入..再一个函数递归来DFS要慎用.

题目很简单了..从每个出口做一次搜索~~边遍历边判断更新赋值...最后扫描一次全图..找到值最大了就是答案了...     这个输入阿~~会有多余的空格~~也会有本来是一行都是空的~~结果打了两个空...
  • kk303
  • kk303
  • 2011年12月01日 14:45
  • 1289

坑爹关机器

  • 2013年05月25日 23:47
  • 72KB
  • 下载

坑爹115网盘地址解析器

  • 2013年01月11日 17:01
  • 135KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:有点坑爹的GDALComputeRasterMinMax函数
举报原因:
原因补充:

(最多只允许输入30个字)