博主作为一个GIS开发者,开发过程中不免遇到一些处理tif的问题和心得,所以在这里向大家分享一下有关tif文件的经纬度坐标读取
TIFF(Tag Image File Format)图像文件是图形图像处理中常用的格式之一,其图像格式很复杂,但由于它对图像信息的存放灵活多变,可以支持很多色彩系统,而且独立于操作系统,因此得到了广泛应用。在各种地理信息系统、摄影测量与遥感等应用中,要求图像具有地理编码信息,例如图像所在的坐标系、比例尺、图像上点的坐标、经纬度、长度单位及角度单位等等,这些都是tif的应用范围。简单说,tif是一张具有地理编码信息的图像。
GDAL是一个用于栅格和矢量地理空间数据格式的转换程序库,在X/MIT风格的开放源代码下发布许可 ,首先我们安装gdal
pip install gdal
代码如下:
from osgeo import gdal
filePath = '1.tif' # tif文件路径
dataset = gdal.Open(filePath) # 打开tif
adfGeoTransform = dataset.GetGeoTransform() # 读取地理信息
# 左上角地理坐标
print(adfGeoTransform[0])
print(adfGeoTransform[3])
nXSize = dataset.RasterXSize # 列数
nYSize = dataset.RasterYSize # 行数
print(nXSize, nYSize)
arrSlope = [] # 用于存储每个像素的(X,Y)坐标
for i in range(nYSize):
row = []
for j in range(nXSize):
px = adfGeoTransform[0] + i * adfGeoTransform[1] + j * adfGeoTransform[2]
py = adfGeoTransform[3] + i * adfGeoTransform[4] + j * adfGeoTransform[5]
col = [px, py] # 每个像素的经纬度
row.append(col)
print(col)
arrSlope.append(row)
上面的代码其实已经实现获取tif中经纬度,如果大家仔细研究一下会发现,其实我们使用的就是gdal里面的GetGeoTransform方法读取坐标,简单介绍一下该方法,该方法会返回以下六个参数
GT(0) 左上像素左上角的x坐标。
GT(1) w-e像素分辨率/像素宽度。
GT(2) 行旋转(通常为零)。
GT(3) 左上像素左上角的y坐标。
GT(4) 列旋转(通常为零)。
GT(5) n-s像素分辨率/像素高度(北上图像为负值)
如果上述内容存在问题,欢迎大家批评指正