使用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 相关文章推荐
400多行Python代码实现了一个FTP服务器
May 10 Python
python求pi的方法
Oct 08 Python
python中字典(Dictionary)用法实例详解
May 30 Python
Python数据类型详解(二)列表
May 08 Python
Python Json序列化与反序列化的示例
Jan 31 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
python调用API接口实现登陆短信验证
May 10 Python
详解python如何引用包package
Jun 07 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
jQuery使用技巧简单汇总
2013/04/18 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
javascript常用函数(1)
2015/11/04 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
Django 静态文件配置过程详解
2019/07/23 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
夜大毕业生自我评价分享
2013/11/10 职场文书
大学生秋游活动方案
2014/02/17 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
公民授权委托书
2014/10/15 职场文书
公司股份合作协议书
2014/12/07 职场文书
邀请函范文
2015/02/02 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
学习心得体会
2019/06/20 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android