地理变换参数
地理变换参数的含义如下:
- adfGeoTransform[0]:左上角的 X 坐标,即图像左上角像素的地理坐标的 X 坐标值。
- adfGeoTransform[1]:图像的水平分辨率,即每个像素在 X 方向上的实际宽度。
- adfGeoTransform[2]:X 方向上的旋转角度,通常为 0,即图像平行于 X 轴。
- adfGeoTransform[3]:左上角的 Y 坐标,即图像左上角像素的地理坐标的 Y 坐标值。
- adfGeoTransform[4]:Y 方向上的旋转角度,通常为 0,即图像平行于 Y 轴。
- adfGeoTransform[5]:图像的垂直分辨率,即每个像素在 Y 方向上的实际高度,通常为负数,表示 Y 轴坐标值的减小方向是从上到下。
其中,前两个参数(左上角的 X 坐标和图像的水平分辨率)用于计算像素的地理坐标的 X 坐标值,后两个参数(左上角的 Y 坐标和图像的垂直分辨率)用于计算像素的地理坐标的 Y 坐标值,中间两个参数(X 方向上的旋转角度和 Y 方向上的旋转角度)通常为 0,表示图像没有旋转
公式
像素/线 (X,Y) 栅格空间和投影坐标 (Xp,Yp) Xp = padfTransform[0] + X*padfTransform[1] + Y*padfTransform[2]; Yp = padfTransform[3] + X*padfTransform[4] + Y*padfTransform[5];
举例
假设我们有一个大小为 512x512 像素的遥感图像,它的左上角像素的地理坐标为 (100, 50),每个像素在水平方向和垂直方向上的实际宽度和高度分别为 30 米和 -30 米。那么,根据上述的地理变换参数的定义,我们可以将这些参数存储到一个大小为 6 的数组 adfGeoTransform 中,代码如下:
double adfGeoTransform[6];
adfGeoTransform[0] = 100.0; // 左上角的 X 坐标
adfGeoTransform[1] = 30.0; // 图像的水平分辨率
adfGeoTransform[2] = 0.0; // X 方向上的旋转角度
adfGeoTransform[3] = 50.0; // 左上角的 Y 坐标
adfGeoTransform[4] = 0.0; // Y 方向上的旋转角度
adfGeoTransform[5] = -30.0; // 图像的垂直分辨率
现在,假设我们想要计算像素坐标为 (256, 256) 的像素的地理坐标,可以按照以下步骤进行计算:
-
计算像素的地理坐标的 X 坐标值:
Xgeo = adfGeoTransform[0] + 256 * adfGeoTransform[1] + 256 * adfGeoTransform[2]
= 100.0 + 256 * 30.0 + 256 * 0。
= 7840。
-
计算像素的地理坐标的 Y 坐标值:
Ygeo = adfGeoTransform[3] + 256 * adfGeoTransform[4] + 256 * adfGeoTransform
= 50.0 + 256 * 0.0 + 256 * (-30.0)
= -7670。
因此,像素坐标为 (256, 256) 的像素的地理坐标为 (7840.0, -7670.0)
结论
通过 GetGeoTransform 函数返回的六个参数可以确定像素坐标系和地理坐标系之间的转换关系,从而可以将像素坐标系中的任意一个像素位置转换为地理坐标系中的对应位置。在这个过程中,左上角的真实地理坐标起到了基础性的作用,因为它确定了像素坐标系和地理坐标系的起始位置。