首先可以参照以下两处资料:
http://wenku.baidu.com/view/508a46f0f90f76c661371a66
http://www.cnblogs.com/flyingfish/archive/2007/09/12/890442.html
不过我按照上述资料并没有成功,第一个资料中给出了可运行的源码,但是实际结果并没有做重采样,好像只是把原始数据copy了一份,仅对拷贝做了
投影设置和仿射变换设置,真实数据没有重采样。
第二个资料中博主给出的源码在我这里不能运行,每次均是运行到ChunkAndWarpImage/Multi函数处即出错。
将第一个资料中的GenImgProjTransform/er替换为GCPTransform/er,可以对无坐标参考系统的裸数据进行校正,但是得不到正确的结果,可以看到结果被重采样了,
空间坐标范围也正确,但是原始图像被缩小并集中到结果图像的左上角,目前我也不清楚是什么错误导致了这样的结果。
我的解决办法是,由于GDAL支持2种类型的坐标系统,一种是仿射信息描述的,一种是GCP点描述的。给出GCP点之后,按照下面步骤操作:
(1)将原始图像转换为GDAL可编辑更新的格式,以UPDATE方式打开;
(2)将GCP点设置给原始图像,并将目标坐标系统WKT数据设置给原始图像,GDALFlushCache更新数据;
(3)对原始数据做重投影变换,用到的变换类为:GDALCreateGenImgProjTransformer2/GDALGenImgProjTransform
这样得到的结果不仅空间范围正确,并且也进行了重采样。
其他一些细节:
(1)如果将一幅1024*768的图像纠正到以下空间范围去:
40N
100E 120E
20N
arcgis中GCP点的规则为:
左上角:0,0->100E,40N
左下角:0,-768->100E,20N
右下角:1024,-768->120E,20N
右上角:1024,0->120E,40N
但是在GDAL中,GCP点的规则为:
左上角:0,0->100E,40N
左下角:0,768->100E,20N
右下角:1024,768->120E,20N
右上角:1024,0->120E,40N
(2)GDAL仅支持1-3次多项式的GCP校正,多项式次数T与GCP点数量N的关系为(在使用GDALGCPTranform变换时需要指定):
N=(T+1)*(T+2)/2