使用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模拟登陆Tom邮箱示例分享
Jan 13 Python
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
numpy.where() 用法详解
May 27 Python
Pytorch转onnx、torchscript方式
May 25 Python
python def 定义函数,调用函数方式
Jun 02 Python
Python计算信息熵实例
Jun 18 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
Python通过Schema实现数据验证方式
Nov 12 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中长文章分页显示实现代码
2012/09/29 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
vuex 中插件的编写案例解析
2019/06/10 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python单例模式实例解析
2018/08/28 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
Julep官网:美容产品和指甲油
2017/02/25 全球购物
公务员试用期满考核材料
2014/05/22 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
顶岗实习计划书
2015/01/16 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫