首先可以参照以下两处资料:

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

posted on 2013-03-06 19:17  yeahgis  阅读(3423)  评论(0编辑  收藏  举报