使用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数据类型学习笔记
Jan 13 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
python自动截取需要区域,进行图像识别的方法
May 17 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
python 实现倒排索引的方法
Dec 25 Python
python微信撤回监测代码
Apr 29 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
在Python中通过threshold创建mask方式
Feb 19 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
小结Python的反射机制
Sep 28 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连接MySQL代码的参数说明
2008/06/07 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
php解决安全问题的方法实例
2019/09/19 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
javascript 随机展示头像实现代码
2011/12/06 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
Vue+Django项目部署详解
2019/05/30 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
tensorflow训练中出现nan问题的解决
2018/02/10 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
Python更换pip源方法过程解析
2020/05/19 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
2013年军训通讯稿
2014/02/05 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
专题组织生活会方案
2014/06/15 职场文书
大学迎新标语
2014/06/26 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
社保转移委托书范本
2014/10/08 职场文书
大学生读书笔记范文
2015/07/01 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
MySQL自定义函数及触发器
2022/08/05 MySQL