我想将一个HDF从UTM(WGS84)重新投影到sinusive(WGS84),所以我尝试使用GDALAutoCreateWarpedVRT
来完成它。代码如下:
hSrcDS = (GDALDataset*)GDALOpen("HJ1ACCD1.hdf", GA_ReadOnly);
const char *pszSrcWKT = NULL;
char* pszDstWKT = NULL;
//pszSrcWKT = ProjectionStr;
pszSrcWKT=GDALGetProjectionRef(hSrcDS);
CPLAssert( pszSrcWKT != NULL &&strlen(pszSrcWKT) > 0 );
OGRSpatialReference oSRS;
oSRS.SetSinusoidal(0,0,0);
oSRS.SetWellKnownGeogCS("WGS84");
oSRS.exportToWkt(&pszDstWKT );
GDALWarpOptions*psWarpOptions = GDALCreateWarpOptions();
psWarpOptions->dfWarpMemoryLimit=500*1024*1024;
hDstDS=(GDALDataset*)(GDALDataset*)GDALAutoCreateWarpedVRT(hSrcDS,pszSrcWKT,pszDstWKT,GRA_Bilinear ,20,psWarpOptions);
GDALDriver *poDriverTiff;
poDriverTiff=GetGDALDriverManager()->GetDriverByName("GTIFF");
poDriverTiff->CreateCopy("d:\\toto.tif",(GDALDataset*)hDstDS,false,NULL,NULL,NULL);
当我设置
oSRS.SetSinusoidal(0,0,0)
时,结果看起来不错,但分辨率是原来的两倍(从30到60)。太奇怪了。 最佳答案
根据the API docs for GDALAutoCreateWarpedVRT
:
GDALSuggestedWarpOutput()函数用于确定输出虚拟文件的边界和分辨率,该文件应足够大,以包含所有输入图像
还有一个GDALSuggestedWarpOutput2() function可以帮助为类似的需求集建议输出文件大小。
关于c - 由GDAL重新投影GDALAutoCreateWarpedVRT在C中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19208919/