使用rasterio读取含高程的tif文件及其与gdal的异同

之前,在读取含有高程信息的TIF文件时,
使用的是gdal (Geospatial Data Abstraction Library),
不过,GDAL的安装即使在linux下也不够友好,目前只能使用python3.6版本
同时,如果想要在window下的环境中使用gdal难度就更大一些

还好,有了另外一个更python的Rasterio,
简单、易用、清晰

接下来我们首先对比一下gdal和rasterio读取tif文件的区别
然后详细看一下rasterio的使用

1.gdal读取tif文件

from osgeo import gdal
# 读取tif文件
ds = gdal.Open(tif_file_path)
band = ds.GetRasterBand(1) # 获取第一个波段
elevation = band.ReadAsArray()  # 高程信息
nrows_tif, ncols_tif = elevation.shape  # [rows, columns]

2. rasterio读取tif文件

import rasterio
# 读取tif文件
tmpds = rasterio.open(tif_file_path)
tmpband = tmpds.count  # 获取波段数
elevation = tmpds.read(tmpband)  # 读取指定波段的高程信息
tmp_height = tmpds.height  # 数据高度
tmp_width = tmpds.width  # 数据宽度

以上是gdal和rasterio的在读取高程信息时的简单对比
除了以上属性外,rasterio还有以下属性

with rasterio.open(tif_file_path) as ds:
	print('该栅格数据的基本数据集信息(这些信息都是以数据集属性的形式表示的):')
	print(f'数据格式:{
      
      ds.driver}')
	print(f'波段数目:{
      
      ds.count}')
	print(f'地理范围:{
      
      ds.bounds}')
	print(f'反射变换参数(六参数模型):\n {
      
      ds.transform}')
	print(f'投影定义:{
      
      ds.crs}')
	# 获取第一个波段数据,跟GDAL一样索引从1开始
	# 直接获得numpy.ndarray类型的二维数组表示,
	# 如果read()函数中不传入参数,则得到所有波段(第一个维度是波段)
	band1 = ds.read(1)
	print(f'第一波段的最大值:{
      
      band1.max()}')
	print(f'第一波段的最小值:{
      
      band1.min()}')
	print(f'第一波段的平均值:{
      
      band1.mean()}')
	# 根据地理坐标得到行列号
	x, y = (ds.bounds.left + 300, ds.bounds.top - 300)  # 距离左上角东300米,南300米的投影坐标
	row, col = ds.index(x, y)  # 对应的行列号
	print(f'(投影坐标{
      
      x}, {
      
      y})对应的行列号是({
      
      row}, {
      
      col})')
	# 根据行列号得到地理坐标
	x, y = ds.xy(row, col)  # 中心点的坐标
	print(f'行列号({
      
      row}, {
      
      col})对应的中心投影坐标是({
      
      x}, {
      
      y})')
	# 得到对应点左上角的信息
	x, y = (row, col) * ds.transform
	print(f'行列号({
      
      row}, {
      
      col})对应的左上角投影坐标是({
      
      x}, {
      
      y})')

建议舍弃GDAL,直接使用rasterio

参考:
https://theonegis.github.io/geos/%E4%BD%BF%E7%94%A8Rasterio%E8%AF%BB%E5%8F%96%E6%A0%85%E6%A0%BC%E6%95%B0%E6%8D%AE/index.html

猜你喜欢

转载自blog.csdn.net/JingpengSun/article/details/130412955
今日推荐