在C中重新投影GDAL GDALAutoCreateWarpedVRT

时间:2013-10-06 12:35:35

标签: c gdal reprojection-error

我想将UTM(WGS84)中的HDF重新投影到正弦曲线(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)。这太奇怪了。

1 个答案:

答案 0 :(得分:1)

根据the API docs for GDALAutoCreateWarpedVRT

  

GDALSuggestedWarpOutput()函数用于确定输出虚拟文件的边界和分辨率,该文件应足够大以包含所有输入图像

还有一个GDALSuggestedWarpOutput2() function可以帮助建议类似要求的输出文件大小。