使用Rasterio创建栅格数据

简介: 使用Rasterio创建并写入栅格数据比GDAL还简单一些,基本使用到两个函数:rasterio.open()和write()

使用Rasterio创建栅格数据

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

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

修改时间:2018-06-09

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


方法描述

使用Rasterio创建并写入栅格数据比GDAL还简单一些,基本使用到两个函数:

  • rasterio.open()
  • write()

open()函数当中,我们可以像GDAL中的Create()方法一样,设置数据类型,数据尺寸,投影定义,仿射变换参数等一系列信息

另外,Rasterio中的数据集提供了一个profile属性,通过该属性可以获取这些信息的集合,这样我们读取源数据文件的时候获得该属性,然后对源数据进行处理,再创建写入文件的时候,在open()函数中传入profile即可,这样就有点像GDAL中的CreateCopy()函数。但是Rasterio比CreateCopy()更为强大的地方是:你可以修改profile以适配你的目标文件,而CreateCopy()通过提供的原型文件进行创建,无法直接对这些元信息进行修改。

代码示例

下面的代码通过读取一个三个波段的Landsat影像,计算NDVI指数,然后创建输出并保存的例子。

注意计算NDVI的时候对于除数为0的处理。

import rasterio
import numpy as np

# 读入的数据是绿,红,近红外波段的合成数据
with rasterio.open('LC08_122043_20161207.tif') as src:
    raster = src.read()  # 读取所有波段
    # 源数据的元信息集合(使用字典结构存储了数据格式,数据类型,数据尺寸,投影定义,仿射变换参数等信息)
    profile = src.profile
    # 计算NDVI指数(对除0做特殊处理)
    with np.errstate(divide='ignore', invalid='ignore'):
        ndvi = (raster[2] - raster[1]) / (raster[2] + raster[1])
        ndvi[ndvi == np.inf] = 0
        ndvi = np.nan_to_num(ndvi)
    # 写入数据
    profile.update(
        dtype=ndvi.dtype,
        count=1
    )
    '''也可以在rasterio.open()函数中依次列出所有的参数
    with rasterio.open('NDVI.tif', mode='w', driver='GTiff',
                       width=src.width, height=src.height, count=1,
                       crs=src.crs, transform=src.transform, dtype=ndvi.dtype) as dst:
    '''
    with rasterio.open('NDVI.tif', mode='w', **profile) as dst:
        dst.write(ndvi, 1)
目录
相关文章
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
582 2
|
存储 XML 安全
Jetpack DataStore 你总要了解一下吧?
一、DataStore 介绍 DataStore 是 Android Jetpack 中的一个组件,它是一个数据存储的解决方案,跟 SharedPreferences 一样,采用key-value形式存储。 DataStore 保证原子性,一致性,隔离性,持久性。尤其是,它解决了 SharedPreferences API 的设计缺陷。 Jetpack DataStore 是经过改进的新版数据存储解决方案,旨在取代 SharedPreferences,让应用能够以异步、事务方式存储数据。
1264 0
Jetpack DataStore 你总要了解一下吧?
|
缓存 监控 JavaScript
Vue.js 框架下的性能优化策略与实践
Vue.js 框架下的性能优化策略与实践
|
安全 Java 数据安全/隐私保护
【开题报告】基于SpringBoot的高校实验室管理系统的设计与实现
【开题报告】基于SpringBoot的高校实验室管理系统的设计与实现
1141 0
|
人工智能 自然语言处理 机器人
copilot和chatGPT的区别
比较了OpenAI开发的两个工具:ChatGPT和Copilot,指出ChatGPT主要用于自然语言交互,而Copilot专注于辅助编程,同时提到了它们的训练数据、应用场景和交互方式的不同,以及Copilot的价格信息。
1711 0
copilot和chatGPT的区别
|
人工智能
|
Java Maven
maven常用仓库
maven常用仓库
427 2
|
机器学习/深度学习 算法
常用的PID有哪些?
常用的PID有哪些?
1017 1
常用的PID有哪些?
|
传感器 人工智能 语音技术
探索AI技术在智能家居中的应用
【8月更文挑战第78天】本文将探讨人工智能(AI)技术在智能家居领域的应用。我们将从AI技术的基本概念入手,介绍其在智能家居中的作用,并通过代码示例展示如何实现一个简单的智能照明系统。最后,我们将总结AI技术在智能家居领域的优势和挑战。
|
关系型数据库 MySQL 测试技术
技术分享:深入C++时间操作函数的应用与实践
技术分享:深入C++时间操作函数的应用与实践
252 1