GeoPy
  • 前言
  • Python基础
    • Python环境搭建及基本数据类型
    • 运算符及字符串
    • 序列与字典
    • 流程控制语句
    • 函数
    • 面向对象编程初识
    • 面向对象编程高级
    • Python科学计算
    • 空间数据处理环境搭建
  • 空间数据基础
    • 空间参考系统
    • 地图投影
    • 空间数据
  • GDAL空间数据处理
    • GDAL简介
    • GDAL数据基本操作
      • 打开栅格数据的正确方式
      • 栅格数据格式转换
      • 栅格数据创建与保存
      • 读取HDF或者NetCDF格式的栅格数据
      • 栅格数据投影转换
      • 栅格数据裁剪
      • 打开Shapefile文件的正确方式
      • 创建Shapefile文件并写入数据
      • 矢量数据投影转换
    • Fiona矢量数据处理
      • Fiona简介及Shapefile数据读取
      • 使用Fiona创建Shapefile矢量数据
    • Rasterio栅格数据处理
      • 使用Rasterio读取栅格数据
      • 使用Rasterio创建栅格数据
      • 使用Rasterio做投影变换
Powered by GitBook
On this page
  • 方法描述
  • 代码示例
  1. GDAL空间数据处理
  2. Rasterio栅格数据处理

使用Rasterio创建栅格数据

Previous使用Rasterio读取栅格数据Next使用Rasterio做投影变换

Last updated 6 years ago

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

博客:

修改时间: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)
https://blog.csdn.net/theonegis/article/details/80089375