使用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跳出循环语句continue与break的区别
Aug 25 Python
python中遍历文件的3个方法
Sep 02 Python
如何利用Fabric自动化你的任务
Oct 20 Python
Python变量和数据类型详解
Feb 15 Python
详谈python read readline readlines的区别
Sep 22 Python
python assert的用处示例详解
Apr 01 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
python反爬虫方法的优缺点分析
Nov 25 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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中Snoopy类用法实例
2015/06/19 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
PHP微商城开源代码实例
2019/03/27 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
Js四则运算函数代码
2012/07/21 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
2016/06/24 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
vue-router单页面路由
2017/06/17 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
python脚本后台执行方式
2019/12/21 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
Python自动创建Excel并获取内容
2020/09/16 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
团日活动策划书
2014/02/01 职场文书
公司管理建议书范文
2014/03/12 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书