std::string strSourceRaster = CT2A(strSrcRaster);
std::string strDestRaster = CT2A(strDesRaster);
OGRSpatialReferenceH destSR = OSRNewSpatialReference(NULL);
CString strEPSG2 = strEPSG;
strEPSG2.MakeLower();
strEPSG2.Replace(L"epsg:", L"");
int nEPSG = _tstoi(strEPSG2);
OSRImportFromEPSG(destSR, nEPSG);
char *szWkt = NULL;
OSRExportToWkt(destSR, &szWkt);
GDALDatasetH oldSrc = GDALOpen(strSourceRaster.c_str(), GA_ReadOnly);
if (nullptr == oldSrc)
{
strErr = L"tif文件转换失败,请确认asc文件的正确性!";
OSRDestroySpatialReference(destSR);
return strDesRaster;
}
GDALDataset* oldSrcSet = (GDALDataset*)oldSrc;
const char* pSrcWkt = oldSrcSet->GetProjectionRef();
GDALDatasetH vrt = GDALAutoCreateWarpedVRT(oldSrc, pSrcWkt, szWkt, GRA_NearestNeighbour, 0.0, NULL);
GDALDriverH drive = GDALGetDriverByName("gtiff");
GDALDatasetH destDataset = GDALCreateCopy(drive, strDestRaster.c_str(), vrt, TRUE, NULL, NULL, NULL);
if (nullptr == destDataset)
{
strErr = L"tif文件转换失败,请确认tif文件的正确性!";
GDALClose(destDataset);
GDALClose(oldSrc);
GDALClose(vrt);
OSRDestroySpatialReference(destSR);
return strDesRaster;
}
const char* pNewWkt = GDALGetProjectionRef(destDataset);
GDALDataset* pDstGdal = (GDALDataset*)destDataset;
double adfDstGeoTransform1[6];
pDstGdal->GetGeoTransform(adfDstGeoTransform1);
GDALDataset* pVrt = (GDALDataset*)vrt;
double adfDstGeoTransform2[6];
pVrt->GetGeoTransform(adfDstGeoTransform2);
GDALClose(destDataset);
GDALClose(oldSrc);
GDALClose(vrt);
OSRDestroySpatialReference(destSR);