算法中需要处理TIFF格式的图像数据, 为此不得不了解一些GIS的基础知识

python工具-GDAL

安装

sudo apt-get install -y gdal-bin libgdal-dev
poetry add gdal==3.8.4 # 注: 版本号需要与上面的`libgdal-dev`对应.

TIFF格式文件

不同于常见的图片格式文件, tiff还可以包含更多信息, 如:

  • metadata:
    元数据以标签-值(Tag-Value)对的形式存储,每个标签描述了一个特定的属性。
    每个标签都有一个唯一的标签号(Tag Number),例如图像的宽度、高度、颜色空间等。
    因此再GIS领域, 文件头常被用来存储地理坐标信息.

  • 栅格数据/图像数据:
    图像数据存储在文件头之后,由一系列像素组成。
    单通道: 对于灰度图像,每个像素通常占据8位。
    多通道: 对于彩色图像,每个像素可能占据24位(RGB)或32位(RGB + Alpha)。TIFF 文件还支持其他深度和通道的图像。

gdal读取tiff

  • 读取数据集: dataset= gdal.Open('/path/to/test.tif')
  • 获取空间参考信息: geotransform = dataset.GetGeoTransform()
    geotransform是一个包含6个数字的元组,这6个数字定义了栅格数据集的空间参考信息。它们的含义如下:
    (643728.5967185837, 0.009000000000002697, 0.0, 2428229.087279147, 0.0, -0.009000000000007464)
    [0]: 左上角的x坐标(投影坐标系统)
    [1]: 东西方向像素分辨率(像素宽度. 单位:米/像素)
    [2]: 行旋转(通常为0)
    [3]: 左上角的y坐标(投影坐标系统)
    [4]: 列旋转(通常为0)
    [5]: 南北方向像素分辨率(像素高度,通常为负值. 单位:米/像素1)
  • 地方

获取投影信息

prj = gdal.Open('/path/to/test.tif').GetProjection()
# prj字符串的WKT格式如下:
COMPD_CS["WGS 84 / UTM zone 49N + Yellow Sea 1985 height", # 这是一个[复合坐标系统], 它= 投影坐标系统 + 垂直坐标系统
PROJCS["WGS 84 / UTM zone 49N", # [投影坐标系统] 是基于 WGS 84 椭球体的 UTM 投影,位于 49N 区域。
GEOGCS["WGS 84", # [地理坐标系统] 是基于 WGS 84的。
DATUM["WGS_1984", # [基准面] 是 WGS 84
SPHEROID["WGS 84",6378137,298.257223563, # WGS 84 的椭球体的参数: 半径, 扁率
AUTHORITY["EPSG","7030"]], # 椭球体的 EPSG 代码。
AUTHORITY["EPSG","6326"]], # 代码6326👉WGS84
PRIMEM["Greenwich",0, # [本初子午线] 在格林威治的经度。
AUTHORITY["EPSG","8901"]], # 代码8901👉WGS84的一个更新版本
UNIT["degree",0.0174532925199433, # [角度单位] 是度。弧度值.
AUTHORITY["EPSG","9122"]], # 代码9122👉度(角度)的标准代码
AUTHORITY["EPSG","4326"]], # [地理坐标系统] 的 EPSG 代码👉WGS84
PROJECTION["Transverse_Mercator"], # [投影方法] 是横轴墨卡托。
PARAMETER["latitude_of_origin",0], # 投影的原点纬度。
PARAMETER["central_meridian",111], # 投影的中央经线。
PARAMETER["scale_factor",0.9996], # 投影的比例因子。
PARAMETER["false_easting",500000], # 东偏移量
PARAMETER["false_northing",0], # 北偏移量
UNIT["metre",1, # 线性单位是米。
AUTHORITY["EPSG","9001"]],
AXIS["Easting",EAST], # 指定了东向坐标轴。
AXIS["Northing",NORTH], # 指定了北向坐标轴。
AUTHORITY["EPSG","32649"]], # [投影坐标系统] 的 EPSG 代码👉49区(108°E~114°E)
VERT_CS["Yellow Sea 1985 height", # [垂直坐标系统] 是 Yellow Sea 1985 的高程系统。
VERT_DATUM["Yellow Sea 1985",2005,
AUTHORITY["EPSG","5137"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AXIS["Gravity-related height",UP], # 垂直坐标轴是与重力相关的高度。
AUTHORITY["EPSG","5737"]]] # [垂直坐标系统]的 EPSG 代码。

Static Badge Static Badge Static Badge Static Badge
Copyright © 2023-2024 Raymond H., All Rights Reserved.