GDAL中影像geotransform参数的含义

GDAL中影像geotransform参数的含义

获取tif影像中的geotransform

获取、设置geotransform可分别调用GetGeoTransformSetGeoTransform函数。

参数含义

geotransform是包含6个元素的数组,则各个元素的含义如下:

  • geotransform[0] : 影像左上角像素左上角位置的x坐标,单位通常为米或°(经纬度)
  • geotransform[1] : 一个像素的宽度,单位通常为米或°(经纬度)
  • geotransform[2] : 旋转系数,一般为0
  • geotransform[3] : 影像左上角像素左上角位置的y坐标,单位通常为米或°(经纬度)
  • geotransform[4] : 旋转系数,一般为0
  • geotransform[5] : 一个像素的高度(一般为负值),单位通常为米或°(经纬度)

由像方坐标(P,L)计算物方坐标(Xp,Yp),有:

Xp = geotransform[0] + P*geotransform[1] + L*geotransform[2];
Yp = geotransform[3] + P*geotransform[4] + L*geotransform[5];

而要根据geotransform数组计算.tfw文件中的六个参数,值分别为:

  • geotransform[1] : 一个像素的宽度
  • geotransform[4] : 旋转系数,一般为0
  • geotransform[2] : 旋转系数,一般为0
  • geotransform[5] : 一个像素的高度(一般为负值)
  • geotransform[0] + 0.5 * geotransform[1] + 0.5 * geotransform[2] : 影像左上角像素中心x坐标
  • geotransform[3] + 0.5 * geotransform[4] + 0.5 * geotransform[5] : 影像左上角像素中心y坐标

.tfw文件,可调用GDALWriteWorldFile函数。传入geotransform数组,得到tfw结果。

从tfw六参数到geotransform六参数的转换公式

GDAL提供了GDALLoadWorldFile函数直接读取tfw生成geotransform数组的功能。该函数的定义如下:

int GDALLoadWorldFile(const char*, double*)
参数
pszFilename – tfw文件路径
padfGeoTransform --六参数数组(double类型)首指针。
返回值:成功返回TRUE,失败返回FALSE

然而某些情况下,用户不愿意调用GDAL的函数,想自己由读取的tfw信息计算geotranform数组。这一节介绍双向转换公式,以供这类读者参考。

首先,我们依然假设任意的tfw文件内容如下:

行号参数含义:
1geotransform[1] : 一个像素的宽度
2geotransform[4] : 旋转系数,一般为0
3geotransform[2] : 旋转系数,一般为0
4geotransform[5] : 一个像素的高度(一般为负值)
5geotransform[0] + 0.5 * geotransform[1] + 0.5 * geotransform[2] : 影像左上角像素中心x坐标
6geotransform[3] + 0.5 * geotransform[4] + 0.5 * geotransform[5] : 影像左上角像素中心y坐标

在这里插入图片描述

我们将tfw的这六个参数依次记作tfw[0]、tfw[1]、tfw[2]、tfw[3]、tfw[4]、tfw[5];
则有:

{ tfw [ 0 ] = geotransform [ 1 ] tfw [ 1 ] = geotransform [ 4 ] tfw [ 2 ] = geotransform [ 2 ] tfw [ 3 ] = geotransform [ 5 ] tfw [ 4 ] = geotransform [ 0 ] + 0.5 ∗ geotransform [ 1 ] + 0.5 ∗ geotransform [ 2 ] tfw [ 5 ] = geotransform [ 3 ] + 0.5 ∗ geotransform [ 4 ] + 0.5 ∗ geotransform [ 5 ] { geotransform [ 0 ] = tfw [ 4 ] − 0.5 ∗ tfw [ 0 ] − 0.5 ∗ tfw [ 2 ] geotransform [ 1 ] = tfw [ 0 ] geotransform [ 2 ] = tfw [ 2 ] geotransform [ 3 ] = tfw [ 5 ] − 0.5 ∗ tfw [ 1 ] − 0.5 ∗ tfw [ 3 ] geotransform [ 4 ] = tfw [ 1 ] geotransform [ 5 ] = tfw [ 3 ] \begin{aligned} &\begin{cases} \text{tfw}[0]= \text{geotransform}[1] \\ \text{tfw}[1]= \text{geotransform}[4] \\ \text{tfw}[2]= \text{geotransform}[2] \\ \text{tfw}[3]= \text{geotransform}[5] \\ \text{tfw}[4]= \text{geotransform}[0] + 0.5 * \text{geotransform}[1] + 0.5 * \text{geotransform}[2] \\ \text{tfw}[5]= \text{geotransform}[3] + 0.5 * \text{geotransform}[4] + 0.5 * \text{geotransform}[5]\\ \end{cases} \\ &\begin{cases} \text{geotransform}[0] = \text{tfw}[4]-0.5*\text{tfw}[0]-0.5*\text{tfw}[2]\\ \text{geotransform}[1] = \text{tfw}[0]\\ \text{geotransform}[2] = \text{tfw}[2]\\ \text{geotransform}[3] = \text{tfw}[5]-0.5*\text{tfw}[1]-0.5*\text{tfw}[3]\\ \text{geotransform}[4] = \text{tfw}[1]\\ \text{geotransform}[5] = \text{tfw}[3]\\ \end{cases} \end{aligned} tfw[0]=geotransform[1]tfw[1]=geotransform[4]tfw[2]=geotransform[2]tfw[3]=geotransform[5]tfw[4]=geotransform[0]+0.5geotransform[1]+0.5geotransform[2]tfw[5]=geotransform[3]+0.5geotransform[4]+0.5geotransform[5] geotransform[0]=tfw[4]0.5tfw[0]0.5tfw[2]geotransform[1]=tfw[0]geotransform[2]=tfw[2]geotransform[3]=tfw[5]0.5tfw[1]0.5tfw[3]geotransform[4]=tfw[1]geotransform[5]=tfw[3]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值