使用Rasterio读取栅格数据

作者:阿振 邮箱:tanzhenyugis@163.com

博客:https://blog.csdn.net/theonegis/article/details/80089375

修改时间:2018-06-06

声明:本文为博主原创文章,转载请注明原文出处


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 rasteriowith 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.transformprint(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读取栅格数据相关推荐

  1. 【GDAL学习】用GDAL读取栅格数据

    1.根据坐标读取遥感影像的单个像素值 # week 4: get pixel values at a set of coordinates by reading in one pixel at a t ...

  2. R语言入门——读取栅格数据参数解读

    读取栅格数据 引言 1.数据读入 2.参数解读 2.1 class (类) 2.2 dimensions(维度) 2.3 resolution (像素) 2.4 extent(范围) 2.5 name ...

  3. Windows 使用 rasterio 读取 tif 图像

    Windows 使用 rasterio 读取 tif 图像 一 .rasterio安装 1.在虚拟环境中输入如下命令: conda install gdal rasterio 安装完毕后,直接 imp ...

  4. 利用python读取栅格数据

    代码具有详细说明注释 所需库 #gdalconst中的常量都加了前缀,力图与其他的module冲突最小 from osgeo import gdal,gdalconst from osgeo impo ...

  5. GDAL / OGR 学习手册 [02] :栅格数据读取

    目录 一.栅格数据驱动 二.gdal.Open 三.gdal.Dataset 四.获取影像的基本信息 1. 获取影像元数据 2. 获取影像基本信息 一.栅格数据驱动 GDAL 通过数据驱动来识别各种类 ...

  6. rasterio包的安装与读取tiff的方式

    本文主要参考: python rasterio库安装具体流程 - 知乎 rasterio的安装和使用_罗罗攀的博客-CSDN博客 一.rasterio的安装 rasterio有很多依赖的其他包,所以 ...

  7. OpenCV使用GDAL读取地理空间栅格文件

    OpenCV使用GDAL读取地理空间栅格文件 使用GDAL读取地理空间栅格文件 目标 代码 如何使用GDAL读取栅格数据 笔记 通常应避免纬度/经度(地理)坐标 寻找角坐标 结果 使用GDAL读取地理 ...

  8. 利用python读取点矢量对应栅格值

    每行代码都有详细注解 所需库 # GDAL是栅格和矢量地理空间数据格式的转换器库 # 旧版本加载库的方法 #import gdal,gdalconst # from 语句让你从模块中导入一个指定的部分 ...

  9. World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景(转)...

    http://blog.csdn.net/giser_whu/article/details/41679515 首先,看下本篇博客要达到的效果图: 下面逐步分析如何加载影像及高程文件. 1.World ...

  10. GDAL\OGR读取数据示例 C#版本

    首先创建一个Windows窗体应用程序,然后拖几个按钮和文本框,如下图所示.第一行用来显示栅格数据的路径,点击浏览找到一个栅格文件,将路径显示在文本框中,然后点击读取,将图像的基本信息显示在最下方的富 ...

最新文章

  1. windows的阻塞和非阻塞Socket编程
  2. oracle时间戳-日期转换
  3. MFC:多窗口函数、变量调用
  4. java 配置hdfs集群_Hadoop集群搭建-04安装配置HDFS
  5. MySQL 限制查询结果的记录数
  6. java string jdk_Java.lang.String中JDK API 1.6.0摘要。
  7. 在Linux系统下更改或更新SSH密钥密码的方法
  8. Centos 启用网卡出现 no link present. Check cable
  9. 第一篇博客:WPF中 ScrollViewer控件的ScrollIntoView方法
  10. 九度oj 题目1325:Battle Over Cities
  11. Linux笔记(十二) Linux集群搭建(附带视频详解)
  12. Windows桌面文件夹删除被提示“找不到该项目”——顽固目录、文件的删除
  13. Unity打开外部文件夹并选择文件
  14. cubieboard2 android,在cubieboard2双卡版上从零构建Android4.2.2系统
  15. 冶金、水泥、化工行业自动化通信产品介绍
  16. excel表格锁定怎么解锁_让用户锁定或解锁Excel工作簿
  17. 如何在Ubuntu上安装并使用Docker
  18. 一学就会的无代码RPA,让“高效”成为你的竞争优势
  19. Rails的静态资源管理(三)—— 开发环境的Asset Pipelin
  20. 农民工工地受伤是否就可以申请工伤?

热门文章

  1. matlab 花体字母,小论文格式模板.doc
  2. 使用Google镜像构建工具Jib报错:No plugin found for prefix 'jib' ...
  3. 天津大学仁爱学院计算机科学与技术学费,天津大学仁爱学院计算机科学与技术专业2016年在天津理科高考录取最低分数线...
  4. 兴业银行java面试_【面经】兴业银行信息技术岗面试
  5. 硬件视角看段页式存储
  6. 什么平板电脑能够用来编程
  7. 2353563-50-3,Thalidomide-O-PEG4-Acid一种鱼精蛋白连接物,在活化剂EDC或HATU存在下可与含胺部分反应
  8. Zabbix系列:proxy存储数据表proxy_history
  9. 【那些年,我们一起追的女孩】第十一章
  10. [GAMIT/GLOBK学习笔记]globk_comb.cmd/glorg_comb.cmd文件详解