使用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 相关文章推荐
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
理解python中生成器用法
Dec 20 Python
Python基础教程之利用期物处理并发
Mar 29 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
Apr 02 Python
OpenCV图像颜色反转算法详解
May 13 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 Python
新手入门学习python Numpy基础操作
Mar 02 Python
Python如何实现FTP功能
May 28 Python
python退出循环的方法
Jun 18 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中文乱码的解决方法
2006/12/17 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
Nuxt.js实战和配置详解
2019/08/05 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python避免死锁方法实例分析
2015/06/04 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python搜索包的路径的实现方法
2019/07/19 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
大学自主招生自荐信
2013/12/16 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
租房协议书范文
2014/08/20 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
教师远程培训心得体会
2016/01/09 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫