![73489146db53fa08fa25c12079d8ae86.png](https://i-blog.csdnimg.cn/blog_migrate/82eb7db7b27078b56d222b8df24965f3.jpeg)
最近师兄让我用python让我写一个遥感图像的像素坐标与地理坐标进行转换的小程序,虽然比较简单,但是还要记录一下。
不同坐标系的转换,涉及到仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。
本文利用GDAL读取仿射矩阵,GDAL利用pip install gdal即可,如果失败,下载whl文件,然后pip install **.whl即可,下载地址为
https://www.lfd.uci.edu/~gohlke/pythonlibs/#GDALwww.lfd.uci.edu首先读取数据集:
#读取tif数据集
def readTif(fileName):
dataset = gdal.Open(fileName)
if dataset == None:
print(fileName+"文件无法打开")
return dataset
之后利用GetGeoTransform()函数读取仿射矩阵信息:
#获取仿射矩阵信息
def Getgeotrans(fileName):
dataset = readTif(fileName)
return dataset.GetGeoTransform()
仿射矩阵信息有六个参数,描述的是栅格行列号和地理坐标之间的关系:
'''
0:图像左上角的X坐标;
1:图像东西方向分辨率;
2:旋转角度,如果图像北方朝上,该值为0;
3:图像左上角的Y坐标;
4:旋转角度,如果图像北方朝上,该值为0;
5:图像南北方向分辨率;
'''
得到这六个参数之后就可以进行图像像素坐标(即行列号)和地理坐标之间的变换:
#像素坐标和地理坐标仿射变换
def CoordTransf(Xpixel,Ypixel,GeoTransform):
XGeo = GeoTransform[0]+GeoTransform[1]*Xpixel+Ypixel*GeoTransform[2];
YGeo = GeoTransform[3]+GeoTransform[4]*Xpixel+Ypixel*GeoTransform[5];
return XGeo,YGeo
搞定!