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

2024-01-27 21:44

本文主要是介绍【PythonRS】Rasterio库安装+基础函数使用教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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*256new_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.crstransform=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 Windowdef 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*256new_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.crstransform=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库是一个很好的推荐。

######学习资源推荐

零基础Python学习资源介绍

👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(学习教程文末领取哈)
在这里插入图片描述

👉Python必备开发工具👈
在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉100道Python练习题👈
检查学习结果。
在这里插入图片描述
👉面试刷题👈
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

资料领取

上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码输入“领取资料” 即可领取。

这篇关于【PythonRS】Rasterio库安装+基础函数使用教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651567

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

mac安装redis全过程

《mac安装redis全过程》文章内容主要介绍了如何从官网下载指定版本的Redis,以及如何在自定义目录下安装和启动Redis,还提到了如何修改Redis的密码和配置文件,以及使用RedisInsig... 目录MAC安装Redis安装启动redis 配置redis 常用命令总结mac安装redis官网下

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —