使用Rasterio读取栅格数据的实例讲解


Posted in Python onNovember 26, 2019

Rasterio简介

有没有觉得用GDAL的Python绑定书写的代码很不Pythonic,强迫症的你可能有些忍受不了。不过,没关系,MapBox旗下的开源库Rasterio帮我们解决了这个痛点。

Rasterio是基于GDAL库二次封装的更加符合Python风格的主要用于空间栅格数据处理的Python库。

Rasterio中栅格数据模型基本和GDAL类似,需要注意的是:

在Rasterio 1.0以后,对于GeoTransform的表示弃用了GDAL风格的放射变换,而使用了Python放射变换的第三方库affine库的风格。

对于放射变换

affine.Affine(a, b, c,
    d, e, f)

GDAL中对应的参数顺序是:(c, a, b, f, d, e)

采用新的放射变换模型的好处是,如果你需要计算某个行列号的地理坐标,直接使用行列号跟给放射变换对象相乘即可,完全符合数学上矩阵乘法的操作,更加直观和方便。

栅格数据读取代码示例

下面的示例程序中演示了如何读取一个GeoTIFF文件并获取相关信息,需要注意的是:

1、rasterio使用rasterio.open()函数打开一个栅格文件

2、rasterio使用read()函数可以将数据集转为numpy.ndarray,该函数如果不带参数,将把数据的所有波段做转换(第一维是波段数),如果指定波段,则只取得指定波段对应的数据(波段索引从1开始)

3、数据的很多元信息都是以数据集的属性进行表示的

import rasterio

with rasterio.open('example.tif') as ds:
 print('该栅格数据的基本数据集信息(这些信息都是以数据集属性的形式表示的):')
 print(f'数据格式:{ds.driver}')
 print(f'波段数目:{ds.count}')
 print(f'影像宽度:{ds.width}')
 print(f'影像高度:{ds.height}')
 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})')

输出如下:

该栅格数据的基本数据集信息(这些信息都是以数据集属性的形式表示的):
数据格式:GTiff
波段数目:3
影像宽度:4800
影像高度:4800
地理范围:BoundingBox(left=725385.0, bottom=2648415.0, right=869385.0, top=2792415.0)
反射变换参数(六参数模型):
 | 30.00, 0.00, 725385.00|
| 0.00,-30.00, 2792415.00|
| 0.00, 0.00, 1.00|
投影定义:CRS({'init': 'epsg:32649'})
第一波段的最大值:5459
第一波段的最小值:-313
第一波段的平均值:489.80300625
(投影坐标725685.0, 2792115.0)对应的行列号是(10, 10)
行列号(10, 10)对应的中心投影坐标是(725700.0, 2792100.0)
行列号(10, 10)对应的左上角投影坐标是(725685.0, 2792115.0)

以上这篇使用Rasterio读取栅格数据的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入浅析python中的多进程、多线程、协程
Jun 22 Python
python 平衡二叉树实现代码示例
Jul 07 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
AUC计算方法与Python实现代码
Feb 28 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
Python小程序之在图片上加入数字的代码
Nov 26 #Python
基于Python获取城市近7天天气预报
Nov 26 #Python
NumPy中的维度Axis详解
Nov 26 #Python
python列表推导式操作解析
Nov 26 #Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 #Python
简单了解python数组的基本操作
Nov 26 #Python
python实现图片插入文字
Nov 26 #Python
You might like
PHP文本操作类
2006/11/25 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
PHP邮箱验证示例教程
2016/06/01 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
python的Tqdm模块的使用
2018/01/10 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python微信操控itchat的方法
2019/05/31 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
python实现银行实战系统
2020/02/26 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫