使用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实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
对Python函数设计规范详解
Jul 19 Python
Python多线程通信queue队列用法实例分析
Mar 24 Python
python 连续不等式语法糖实例
Apr 15 Python
python3实现简单飞机大战
Nov 29 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
从零开始搭建一个react项目开发
2018/02/09 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
python实现爬虫下载漫画示例
2014/02/16 Python
python实现从字典中删除元素的方法
2015/05/04 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Sublime开发python程序的示例代码
2018/01/24 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
正风肃纪剖析材料
2014/02/18 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
导游词之吉林吉塔
2019/11/11 职场文书