python使用gdal读取tif经纬度

  • 前言
  • 一、tif是什么?
  • 二、使用gdal读取经纬度
  • 1.引入库
  • 2.读取坐标
  • 总结


前言

作为一个GIS开发者,开发过程中不免遇到一些处理tif的问题和心得,所以在这里向大家分享一下有关tif文件的经纬度坐标读取

一、tif是什么?

TIFF(Tag Image File Format)图像文件是图形图像处理中常用的格式之一,其图像格式很复杂,但由于它对图像信息的存放灵活多变,可以支持很多色彩系统,而且独立于操作系统,因此得到了广泛应用。在各种地理信息系统、摄影测量与遥感等应用中,要求图像具有地理编码信息,例如图像所在的坐标系、比例尺、图像上点的坐标、经纬度、长度单位及角度单位等等,这些都是tif的应用范围。简单说,tif是一张具有地理编码信息的图像。

二、使用gdal读取经纬度

1.引入库

GDAL是一个用于栅格和矢量地理空间数据格式的转换程序库,在X/MIT风格的开放源代码下发布许可 ,首先我们安装gdal

pip install gdal

2.读取坐标

代码如下:

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像素分辨率/像素高度(北上图像为负值)