使用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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python实现控制台输入密码的方法
May 29 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
获取python的list中含有重复值的index方法
Jun 27 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
Python I/O与进程的详细讲解
Mar 08 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
Python paramiko使用方法代码汇总
Nov 20 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 Python
Elasticsearch 数据类型及管理
Apr 19 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
深入了解php4(2)--重访过去
2006/10/09 PHP
php中大括号作用介绍
2012/03/22 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
JS实现多选框的操作
2020/06/24 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Python中文编码那些事
2014/06/25 Python
python版本的读写锁操作方法
2016/04/25 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
Python 通配符删除文件的实例
2018/04/24 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
Python实现粒子群算法的示例
2021/02/14 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
公司JAVA开发面试题
2015/04/02 面试题
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
数学系毕业生的自我评价
2014/01/10 职场文书
党员实事承诺书
2014/03/26 职场文书
新品发布会主持词
2014/04/02 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
初中政治教学反思
2016/02/23 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers
Hive HQL支持2种查询语句风格
2022/06/25 数据库