有点坑爹的GDALComputeRasterMinMax函数
2014-11-06 18:25
585 查看
作者:朱金灿
来源:http://blog.csdn.net/clever101
GDALComputeRasterMinMax函数是gdal库为了求取指定波段的极值而提供的接口。最近看了这个接口的源码,发现这个接口有点坑爹。GDALComputeRasterMinMax实际上是调用GDALRasterBand类的virtual double GetMinimum( int *pbSuccess = NULL )和virtual double GetMaximum(int *pbSuccess = NULL );两个接口。我们看看GDALRasterBand::GetMinimum函数的实现:
这段函数的意义是什么呢?就是说首先从元数据文件(一般是xml文件)中查找是否有最小值记录,如果有就取出来返回;如果没有就把波段类型的值域的最小值返回。这样做就有点坑爹了,因为求取的极值并非来自统计图像而来,就是说除非派生自GDALRasterBand类的波段类重写了GetMinimum和GetMaximum两个接口,否则求取的极值基本上是不准确的。我查了一下,geotiff的波段类都没重写这两个接口。因此GDALComputeRasterMinMax这个接口应该慎用。
来源: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类的波段类重写了GetMinimum和GetMaximum两个接口,否则求取的极值基本上是不准确的。我查了一下,geotiff的波段类都没重写这两个接口。因此GDALComputeRasterMinMax这个接口应该慎用。
相关文章推荐
- 有点坑爹的GDALComputeRasterMinMax函数
- GDAL ComputeRasterMinMax .aux.xml
- 初次安装AS启用模拟器后,弹出Enable VT-x in your BIOS security settings(refer to document for your computer)
- android studio(AS) Duplicate files copied in APK META-INF/NOTICE.txt
- sendBroadcastAsUser——Calling a method in the system process without a qualified user 包含去电流程
- mySql主从配置出错:The server is not configured as slave; fix in config file or with CHANGE MASTER TO
- Bag-of-words model in computer vision
- computer repair services in Hangzhou
- is the Tao in the DOS for a personal computer
- 怎么解决安装SqlServer2008总是提示Restart computer as failed
- Sereja and Bottles-水题有点坑爹
- the collation conflict between "chinese_prc_ci_as" and "sql_latin1_general_cp1_ci_as" in the equal t
- Access control differentiation in trusted computer system
- A for loop javascript event dynamically binding with customized data as paramete passed in test
- Using Lists as Queues in Python----在Python中把链表当作队列使用
- .NET(C#) Internals: as a developer, .net framework in my eyes
- [读书笔记/翻译]Multiple View Geometry in Computer Vision-1.2,1.3
- Implement the Singleton In AS3
- Binding & Remote Lookup of Custom Objects in JNDI tree of JBoss AS7.1.1
- adbd cannot run as root in production builds的解决方法