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读取栅格数据的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2019-11-25

java 解析栅格数据_使用Rasterio读取栅格数据的实例讲解相关推荐

  1. java解析字符串_用Java解析字符串有哪些不同的方法?

    用Java解析字符串有哪些不同的方法? 对于解析播放器命令,我最常使用split方法通过定界符对字符串进行分割,然后再通过一系列ifs或switches找出其余部分. Java中解析字符串的几种不同方 ...

  2. java 解析器_高性能Java解析器实现过程详解

    如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...

  3. java .class 实例对象_通过Class类获取对象(实例讲解)

    通过Class对象获取对象的方式是通过class.newInstance()方式获取,通过调用默认构造参数实例化一个对象. /** * Created by hunt on 2017/6/27. * ...

  4. httpclient 调取接口_使用HttpClient调用接口的实例讲解

    一,编写返回对象 public class HttpResult { // 响应的状态码 private int code; // 响应的响应体 private String body; get/se ...

  5. java异常 子类_Java异常 Exception类及其子类(实例讲解)

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...

  6. java exception子类_Java异常 Exception类及其子类(实例讲解)

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...

  7. java解析xml生成表格_JAVA读取XML文件并解析 以及 JAVA生成文本文件输出

    废话不多说,直接上代码及说明吧! package Dao; import java.io.File; import java.util.ArrayList; import java.util.List ...

  8. java 解析xml 对象_Java反射——读取XML文件,创建对象

    读取XML文件,创建对象 config.xml import java.io.*; import java.lang.reflect.Constructor; import javax.xml.par ...

  9. java解析csv文件写入mysql_java读取cvs文件并导入数据库

    本文实例为大家分享了java读取cvs文件并导入数据库的具体代码,供大家参考,具体内容如下 首先获取文件夹下面的所有类型相同的excel,可以用模糊匹配contains("匹配字段" ...

  10. java解析pdf 图片文字_Java 读取PDF中的文本和图片

    本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取. 使用工具:Free Spire.PDF for Java ...

最新文章

  1. 计算机网络原理超详解说
  2. log4j写入mysql数据库_log4j日志写入数据库
  3. 软件测试工程师面试问题
  4. java数组 相同颜色距离最远的_java-数组列表并找到具有相同编号的最长子...
  5. 常用模块(数据序列化 json、pickle、shelve)
  6. 首个视觉-语言预训练综述来了!
  7. 【四】Java流程控制
  8. python程序源码百行_百行python代码,轻松完成贪吃蛇小游戏
  9. tasklist 结束进程_Windows: windows下的终止进程的命令(tasklist/tskill)
  10. OFD版式Java开发组件——cnofd
  11. 接口文档与接口文档管理工具
  12. php获取微信授权,微信开发之网页授权获取用户信息(二)
  13. Longhorn,企业级云原生容器分布式存储 - 备份与恢复
  14. 来TDengine 开发者大会,探索数据架构的迭代升级
  15. 关于bitcoin core钱包api
  16. sklearn中的数据集2 (Covertype 一个关于植被的数据集)
  17. 软考下午常见问题——个人笔记
  18. WPF 第三方控件主题库
  19. stc8a--mpu6050---dmp--x角度,y角度。z旋转角度不准确,缺少前面矫准环节程序。。
  20. HTC Desire S刷kernel 2.3.5+sense3.0版的RUU后解锁和root

热门文章

  1. C# DataTable 按数字排序问题
  2. archLinux 安装拼音输入法
  3. 使用ExMerge工具管理Exchange用户邮箱。
  4. 烂漫的青春后期 35岁前必须做好十件事情[转载]
  5. 为什么修改配置文件要重启server
  6. 7.大数据架构详解:从数据获取到深度学习 --- 批处理技术
  7. 8.企业安全建设入门(基于开源软件打造企业网络安全) --- 态势感知系统建设
  8. 12.深入分布式缓存:从原理到实践 --- 社交场景架构进化:从数据库到缓存
  9. 53. PHP 伪静态(2)
  10. BZOJ2563: 阿狸和桃子的游戏 贪心