【PythonRS】Rasterio库安装+基础函数使用教程

news2025/1/15 3:20:09

        Rasterio是一个Python库,专门用于栅格数据的读写操作。它支持多种栅格数据格式,如GeoTIFF、ENVI和HDF5,为处理和分析栅格数据提供了强大的工具。RasterIO适用于各种栅格数据应用,如卫星遥感、地图制作等。通过RasterIO,用户可以方便地读取、写入和操作栅格数据,提高数据处理效率。此外,RasterIO还支持自定义栅格数据类型和变换操作,具有很高的灵活性和可扩展性。总的来说,RasterIO是一个功能强大、易用的栅格数据处理库,对于遥感、地理信息系统等领域的数据处理和分析具有重要意义。

1 Rasterio库安装

        Rasterio依赖于pyproj、Shapely、GDAL、Fiona、geopandas、rasterio等库,如果你之前安装过GDAL就大可不必担心,因为GDAL的使用包揽了这些库。如果没有我建议直接安装rasterio库,然后报错什么库就安装什么库。注意自己的Python版本号!!!下载地址:Rasterio库

2 导入常用函数

        这些都是我后面代码需要使用到的函数,注意要导入,别到时候报错。

import os
import rasterio
from rasterio.plot import show
from rasterio.windows import Window

3 基础操作代码展示

3.1 获取影像基本信息

def Get_data(filepath):
    ds = rasterio.open(filepath)  # 打开文件
    ds_bands = ds.count  # 波段数
    ds_width = ds.width  # 宽度
    ds_height = ds.height  # 高度
    ds_bounds = ds.bounds  # 四至范围
    ds_geo = ds.transform  # 仿射地理变换参数
    ds_prj = ds.crs  # 投影坐标系
    # print(ds.crs.wkt)
    # ds.nodatavals  # 缺失值
    # ds.dirver  # 数据格式
    print("影像的宽度为:" + str(ds_width))
    print("影像的高度为:" + str(ds_height))
    print("仿射地理变换参数为:" + str(ds_geo))
    print("投影坐标系为:" + str(ds_prj))

3.2 读写数据

        这里的读写其实都和GDAL库差不多。读取的话都是读成数组,然后可以选择波段和读取范围;保存时都是选择波段数、仿射地理变换参数和投影信息。

def Read_Write_data(filepath):
    ds = rasterio.open(filepath)
    bands = ds.read()  # 以数组的形式读取所有波段
    band1 = ds.read(1, window=Window(0, 0, 512, 256))  # 以数组的形式打开波段1读取512*256
    new_dataset = rasterio.open(
        '/tmp/new.tif',
        'w',
        driver='GTiff',
        height=band1.shape[0],
        width=band1.shape[1],
        count=1,
        dtype=band1.dtype,
        crs='+proj=latlong',  # ds.crs
        transform=ds.transform,
    )
    new_dataset.write(band1, 1)  # 将band1的值写入new_dataset的第一个波段

3.3 可视化影像

        这里是Rasterio自己集成了一个显示函数,不用我们自己再去使用matplotlib库绘制影像了。我这里就展示了一种用法,官方给了好几个demo,大家有兴趣可以自己去看。

def Show_data(filepath):
    ds = rasterio.open(filepath)
    show(ds, transform=ds.transform)

3.4 计算NDVI

        这里给大家介绍一个经典案例,就是NDVI的计算。通过这个应该很容易就能理解Rasterio库的数据结构了。

def Get_NDVI(filepath):
    ds = rasterio.open(filepath)
    red = ds.read(4).astype('float64')
    nir_red = ds.read(5).astype('float64')
    ndvi = (nir_red - red) / (nir_red + red)
    new_dataset = rasterio.open('ndvi.tif',
                                'w',
                                driver='GTiff',
                                height=ds.height,
                                width=ds.width,
                                count=1,
                                dtype='float64',
                                crs=ds.crs,
                                transform=ds.transform)
    new_dataset.write(ndvi, 1)
    new_dataset.close()

4 完整代码

# -*- coding: utf-8 -*-
"""
@Time : 2023/10/19 11:20
@Auth : RS迷途小书童
@File :Rasterio Functions.py
@IDE :PyCharm
@Purpose:rasterio库常用操作
"""
import os
import rasterio
from rasterio.plot import show
from rasterio.windows import Window


def Get_data(filepath):
    ds = rasterio.open(filepath)  # 打开文件
    ds_bands = ds.count  # 波段数
    ds_width = ds.width  # 宽度
    ds_height = ds.height  # 高度
    ds_bounds = ds.bounds  # 四至范围
    ds_geo = ds.transform  # 仿射地理变换参数
    ds_prj = ds.crs  # 投影坐标系
    # print(ds.crs.wkt)
    # ds.nodatavals  # 缺失值
    # ds.dirver  # 数据格式
    print("影像的宽度为:" + str(ds_width))
    print("影像的高度为:" + str(ds_height))
    print("仿射地理变换参数为:" + str(ds_geo))
    print("投影坐标系为:" + str(ds_prj))


def Read_Write_data(filepath):
    ds = rasterio.open(filepath)
    bands = ds.read()  # 以数组的形式读取所有波段
    band1 = ds.read(1, window=Window(0, 0, 512, 256))  # 以数组的形式打开波段1读取512*256
    new_dataset = rasterio.open(
        '/tmp/new.tif',
        'w',
        driver='GTiff',
        height=band1.shape[0],
        width=band1.shape[1],
        count=1,
        dtype=band1.dtype,
        crs='+proj=latlong',  # ds.crs
        transform=ds.transform,
    )
    new_dataset.write(band1, 1)  # 将band1的值写入new_dataset的第一个波段


def Show_data(filepath):
    ds = rasterio.open(filepath)
    show(ds, transform=ds.transform)


def Get_NDVI(filepath):
    ds = rasterio.open(filepath)
    red = ds.read(4).astype('float64')
    nir_red = ds.read(5).astype('float64')
    ndvi = (nir_red - red) / (nir_red + red)
    new_dataset = rasterio.open('ndvi.tif',
                                'w',
                                driver='GTiff',
                                height=ds.height,
                                width=ds.width,
                                count=1,
                                dtype='float64',
                                crs=ds.crs,
                                transform=ds.transform)
    new_dataset.write(ndvi, 1)
    new_dataset.close()


if __name__ == "__main__":
    filepath1 = r'B:\Personal\Rasterio_try/46_22.tif'

        总结来说,Rasterio库是一个很好的二次封装的库,可以更方便快捷地处理遥感栅格数据。但我个人使用GDAL习惯了,所以不怎么用Rasterio库,如果大家刚开始学习使用Python去处理地理空间数据,那么Rasterio库是一个很好的推荐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1127496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题 1155. 掷骰子等于目标和的方法数(中等,动态规划,前缀和)

涉及到从 n-1 个骰子到 n 个骰子的状态转移,显然用动态规划做对于一共 i 个骰子所能投出来的数字之和为 t 的情况,我们用 dp[i][t] 表示,显然 dp[i][t] Σdp[i - 1][t - j],其中 j 从 1 到 k。所以对于每一个骰子我们需要 O(targ…

【C++心愿便利店】No.10---C++之模板

文章目录 前言一、泛型编程二、函数模板三、类模板 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C 心愿便利店 🔑本章内容:函数模板、类模…

Delete `␍`eslintprettier/prettier

将CRLF改为LF 然后就消失了 除此之外,也可以修改git全局配置 git config --global core.autocrlf false

ChatGPT 入门指南:与 AI 进行愉快互动的秘诀大揭秘!

ChatGPT 入门指南:与 AI 进行愉快互动的秘诀大揭秘! 嗨!大家好,我是你们的互联网好友,今天我要给大家带来一份特别的礼物——《ChatGPT 入门指南》!是不是很期待呢?那就跟我一起来揭开与人工智能…

海外跨境商城电商源码-进出口电商平台网站-多语言多商户多货币平台

一、海外跨境商城电商源码简介 海外跨境电商已成为全球经济发展的重要推动力。而海外跨境商城电商源码则是实现全球化电商的关键工具。本文将详细介绍海外跨境商城电商源码及其相关内容。 二、如何理解海外跨境商城电商源码 海外跨境商城电商源码是指一套已经开发好并可直接应用…

windows10下pytorch环境部署留念

pytorch环境部署留念 第一步:下载安装anaconda 官网地址 (也可以到清华大学开源软件镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/) 我安装的是下面这个,一通下一步就完事儿。 第二步&#x…

【T3】畅捷通T3采购入库单单据预览,提示不能打开数据表。

【问题描述】 畅捷通T3点击采购入库单预览的时候, 提示ufdtprn窗口,不能打开数据库表SD-20230629HHTI_PurRKD。 【解决方法】 经查看提示的数据表为当前计算机名称, 删除计算机名称中横杠后,重启电脑正常。

PC连wifi,网线连接旭日X3派以共享网络

PC电脑连好wifi,找到【控制面板->网络和Internet->网络和共享中心->查看网络状态和任务->更改适配器设置】 找到WLAN,右键【属性->共享】勾上允许,然后【确定】。 现在去与PC通过网线连接好的X3派上配置: 参考&a…

MySQL MVCC机制探秘:数据一致性与并发处理的完美结合,助你成为数据库高手

一、前言 在分析 MVCC 的原理之前,我们先回顾一下 MySQL 的一些内容以及关于 MVCC 的一些简单介绍。(注:下面没有特别说明默认 MySQL 的引擎为 InnoDB ) 1.1 数据库的并发场景 数据库并发场景有三种,分别是: 读-读…

深入了解JVM调优:解锁Java应用程序性能的秘诀

文章目录 &#x1f34a; JVM调优&#x1f389; 增大Eden 空间大小&#x1f389; 如果MinorGC 频繁&#xff0c;且容易引发 Full GC&#x1f4dd; S1 区大小 < MGC 存活的对象大小&#xff0c;对象的年龄才1岁&#x1f4dd; 相同年龄的对象所占总空间大小>s1区空间大小的一…

ChatGPT和Copilot协助Vue火速搭建博客网站

AI 对于开发人员的核心价值 网上会看到很多 AI 的应用介绍或者教程 使用 AI 聊天&#xff0c;咨询问题 —— 代替搜索引擎使用 AI 写各种的电商文案&#xff08;淘宝、小红书&#xff09;使用 AI 做一个聊天机器人 —— 这最多算猎奇、业余爱好、或者搞个套壳产品来收费 以上…

2023年中国调速器产量、销量及市场规模分析[图]

调速器行业是指生产、销售和维修各种调速器设备的行业。调速器是一种能够改变机械传动系统输出转速的装置&#xff0c;通过调整输入和输出的转速比来实现转速调节的功能。 调速器行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 随着工业自动化程度…

2023/10/23 mysql学习

数据库修改 show databases; 展示所有数据库 create database 数据库名; 创建数据库 create database if not exists 数据库名; 如果未创建过当前数据库名则创建 drop database 数据库名; drop database if exists 数据库名;用法和创建类似 删除数据库 use 数据库名; 跳…

C++数据结构X篇_20_选择排序(不稳定的排序)

「 选择排序 」虽然在实际应用中没有「 插入排序 」广泛&#xff0c;但它也是我们学习排序算法中必不可少的一种。「 冒泡排序 」和「 插入排序 」都是在两层嵌套循环中慢慢比较元素&#xff0c;不停的调整元素的位置。而「 选择排序 」就比较直接了&#xff0c;属于不出手则已…

C# ref用法,实现引用传递(地址传递)

前言&#xff1a; 今天这篇文章我们简单学习一下C# ref的用法&#xff0c;在看别人的代码不至于看不懂逻辑&#xff0c;虽然这是一个比较简单的知识点&#xff0c;但是还是值得我们去学习一下关于这个知识点一些概念&#xff0c;我们知道在C# 中我们的函数参数&#xff0c;一般…

韦东山FreeRTOS(1)ARM架构简明教程

ARM架构简明教程 1. ARM架构 1.1 RISC ARM芯片属于精简指令集计算机(RISC&#xff1a;Reduced Instruction Set Computing)&#xff0c;它所用的指令比较简单&#xff0c;有如下特点&#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 ③ 使用RISC指…

spy最新安装教程!!青龙+spy,东东豆豆多)

spy最新安装教程&#xff01;&#xff01;青龙spy&#xff0c;东东豆豆多 spy最新安装教程&#xff01;&#xff01;服务器推荐&#xff01;第一步 docker安装下载安装Spy&#xff08;以下教程源自Faker的教程&#xff09;获取Spy授权获取T\*e\*l\*e\*gram API以及参数修改配置…

简单了解一下:NodeJS的WebSocket网络编程

NodeJS的webSocket网络编程。 那什么是WebSocket呢&#xff1f;WebSocket是HTML5提供的一种浏览器和服务器进行通信的网络技术。两者之间&#xff0c;只需要做一个握手动作&#xff0c;就可以在浏览器和服务器之间开启一条通道&#xff0c;就可以进行数据相互传输。 实现WebS…

Linux 进程切换与命令行参数

假设进程1现在要切走了&#xff0c;切入进程2.那进程1就要先保存数据&#xff0c;方便以后恢复&#xff0c; 然后进程2再切走&#xff0c;进程1再把数据还原&#xff1a; 操作系统又分为实时操作系统和分时操作系统。 实时操作系统是是给操作系统一个进程&#xff0c;操作系统…

网络安全https

http是明文的&#xff0c;相当于在网上裸奔&#xff0c;引出了https&#xff0c;大多数网站都转为了https&#xff0c;连非法的赌博网站有的都是https的。 1.https的网站是不是必须让用户装数字证书&#xff1f; 答&#xff1a;分两种&#xff0c;一种是单向认证&#xff0c;像…