读书人

施用GDAL对HDF数据进行geoloc校正

发布时间: 2013-03-04 17:22:12 作者: rapoo

使用GDAL对HDF数据进行geoloc校正

在上一篇博客中,大概说了下怎么使用gdal提供的gdalwarp工具来进行校正处理。其实质与envi的glt校正应该是一样的。我把gdalwarp的代码封装了一下,写了一个类来进行geoloc处理。希望对大家有用。

先是头文件,函数的注释很详细,就不多说了。后面的源文件就是从gdalwarp.cpp中摘录出来的,有兴趣的可以看gdalwarp.cpp ,下面的代码只是把这个文件中没有用到的代码删除了,同时有些参数直接写死了。不太清楚的可以直接看原来的代码。

#include <stdio.h>#include <stdlib.h>#include <boost/progress.hpp>//boost计时函数int main(){int iRev = RE_SUCCESS;CConsoleProcess *pPro = new CConsoleProcess();progress_timer *pTime = new progress_timer();  // 开始计时// 对HDF数据中的一个字数据进行处理,下面分别是子数据集的路径和输出文件路径const char* pszSrc = "HDF4_SDS:UNKNOWN:\"D:\\Data\\hdf\\H1BCLR101106020418636.L2C.HDF\":12";const char* pszDst = "D:\\Data\\hdf\\H1BCLR101106020418636_12.tif";CImageGeoLocWarp warp(pszSrc, pszDst, "HFA", pPro);iRev = warp.DoGeoLocWarp(0.0, 0.0, RM_NearestNeighbour);if(iRev == RE_SUCCESS)printf("success!\n");elseprintf("failed!\n");delete pPro;delete pTime;::system("pause");return 0;}
最后再说一下,代码中的返回值,RE_开头的去我之前的博客中去找,就是一些常量,用于标记返回的信息。还有那个进度条的类,也在我之前的博客都有说明的。上面的代码中用到的第三方库就是BOOST和GDAL,算法中只有GDAL一个,BOOST库只在main函数中用来计时用的。其他的在我之前的博客都有说明的。

不要指望把我的代码拿过去直接编译就能过去,那样的话,我觉得对你也没有啥进步。如果一个人看懂我的代码的话,那些不认识的函数也就大概能猜出是个啥意思了,自己写一个也很简单的。学习别人的代码,不要指望直接就能用,关键是还要看别人的思路,然后结合自己的项目(工程)来进行改造来达到自己的目的,这才是一种对自己有利的学习方式。废话有点多,觉得说的没道理的后面这些话就当没有吧。

读书人网 >编程

热点推荐