使用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中xrange和range的区别
May 13 Python
python多线程用法实例详解
Jan 15 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
Python实现搜索算法的实例代码
Jan 02 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
python 爬虫如何实现百度翻译
Nov 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
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
JS中showModalDialog 的使用解析
2013/04/17 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
itchat接口使用示例
2017/10/23 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
python实现数据写入excel表格
2018/03/25 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
python实现音乐下载的统计
2018/06/20 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
详解python 内存优化
2020/08/17 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
热爱祖国演讲稿
2014/05/04 职场文书
档案信息化建设方案
2014/05/16 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
四年级语文教学反思
2016/03/03 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js