用代码说明一切!!!
static int CreateGCPsList( const char * pszGCPsFilename,
GDAL_GCP *pasGCPs );
static void DestoryGCPs( int nGCPCount, GDAL_GCP *pasGCPs );
static int GCPTransformToGeoTransform( int nGCPCount,
GDAL_GCP *pasGCPs,
double *padfGeoTransform );
static int ApplyGeoTransformOnOtherTransform(
double *padfSrcGeoTransform,
double *padfInputGeoTransform );
static GDALDataset *CreateOutputDataset( GDALDataset *pSrcDataset,
const char *pszDstFileFormat,
const char *pszDstFilename );
static int WarpImage( GDALDataset *pSrcDataset,
GDALDataset *pDstDataset );
int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
static const int MAX_GCP = 6;
int bRet = EXIT_FAILURE;
const char *pszSrcFilename = "../data/in.tif";
const char *pszGCPsFilename = "../data/gcps.txt";
const char *pszDstFilename = "../data/out.tif";
/* ----------------------------------------------------------------- */
/* -----------------------从输入文件读取控制点---------------------- */
/* ----------------------------------------------------------------- */
GDAL_GCP aGCPsList[MAX_GCP];
int nGCPsCount = 0;
nGCPsCount = CreateGCPsList( pszGCPsFilename, aGCPsList );
if ( nGCPsCount < 3 )
{
std::cerr << "CreateGCPsList failed!"
<< std::endl;
goto Main_clean;
}
GDALAllRegister();
/* ----------------------------------------------------------------- */
/* -----------------------从输入数据文件创建数据集------------------ */
/* ----------------------------------------------------------------- */
GDALDataset *pSrcDataset = (GDALDataset *)GDALOpen(
pszSrcFilename,
GA_Update );
if ( pSrcDataset == NULL )
{
std::cerr << "GDALOpen Source file failed!"
<< std::endl;
goto Main_clean;
}
/* ----------------------------------------------------------------- */
/* -----------------------将控制点变换转化为地理仿射变换------------ */
/* ----------------------------------------------------------------- */
double adfSrcGeoTransform[6];
pSrcDataset->GetGeoTransform( adfSrcGeoTransform );
double adfGCPGeoTransform[6];
if ( !GCPTransformToGeoTransform( nGCPsCount, aGCPsList,
adfGCPGeoTransform) )
{
std::cerr << "GCPTransformToGeoTransform failed!"