使用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实现对excel文件列表值进行统计的方法
Jul 25 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
Python Flask框架扩展操作示例
May 03 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
python实现的汉诺塔算法示例
Oct 23 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
python math模块的基本使用教程
Jan 16 Python
python使用pygame创建精灵Sprite
Apr 06 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 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
example1.php
2006/10/09 PHP
php桌面中心(一) 创建数据库
2007/03/11 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
党日活动总结
2014/05/07 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
战友聚会致辞
2015/07/28 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python