我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python常用遥感模块Rasterio与Rioxarray的安装与使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python常用遥感模块Rasterio与Rioxarray的安装与使用

1. Rasterio与Rioxarray安装

Rasterio 是一个很多模块是基于 GDAL 的 Python 包,可用于处理地理空间栅格数据,例如 GeoTIFF 文件。为此,可以使用许多模块和函数,例如,处理来自卫星的原始数据、读取栅格数据、检索地理元数据、转换坐标、裁剪图像、合并多个图像以及以其他格式保存数据。大量的功能和易于实施使 Rasterio 成为卫星数据分析的标准工具。

首先安装 Rasterio 模块,(本人使用 conda 安装时遇到过报错 ImportError: cannot import name 'CRS' from 'pyproj' (unknown location),是由于 pyproj 模块安装不全,因此建议采用后面的离线安装方式或者之后遇到问题时删除 pyproj 模块后再离线安装该模块):

conda install gdalconda install rasterio

如果安装失败可以采用离线安装的方式,Rasterio 依赖很多第三方库,所以比较麻烦,按下面的顺序依次安装即可,可以尝试使用 pip 安装或者下载 .whl 文件离线安装(注意对上 Python 版本):

pyprojShapelyGDALFionarasterio

在这里插入图片描述

在这里插入图片描述

各个模块的链接:PyprojShapelyGDALFionaRasterio

离线安装指令:

pip install E:\GDAL-1.2.10-cp310-cp310-win_amd64.whl

在 Python 中使用 Anaconda 安装 rioxarray 包时,首先需要安装 GDALrasterio,然后再安装 rioxarray

pip install rioxarray

2. 使用教程

(1)使用 Rioxarray 读取并展示图像:

import rasterioimport rioxarrayimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseimg_path = '../images/tiff_img.tif'img = rioxarray.open_rasterio(img_path)print(img.shape)  # (22, 488, 480),第一维为通道数print(type(img))  # print(type(img.values))  # fig, axes = plt.subplots(1, 2, figsize=(10, 6))for ax in axes.flat:    ax_img = ax.imshow(img[0], cmap='viridis')for ax, title in zip(axes.flat, ['img1', 'img2']):    ax.set_title(title)fig.colorbar(mappable=ax_img, label='FSC', orientation='horizontal', ax=axes, fraction=0.04)  # 图例,fraction可调整大小plt.show()

在这里插入图片描述

也可以用另一种形式展示(注意如果使用 Rasterio 读取图像则无法使用该方式展示图像):

plt.figure(dpi=300, figsize=(15, 5))plt.subplots_adjust(hspace=0.2, wspace=0.5)plt.subplot(1, 2, 1)img[0].plot(cmap='terrain')  # getting the first bandplt.subplot(1, 2, 2)img[1].plot(cmap='terrain')# plt.savefig('1.png', dpi=300, bbox_inches='tight', pad_inches=0)plt.show()

在这里插入图片描述

(2)使用 Rasterio 读取图像:

img = rasterio.open(img_path).read()print(img.shape)  # (22, 488, 480)print(type(img))  # 

(3)转换为 Tensor 类型:

import torchimport numpy as npimg_torch = torch.tensor(np.array(img.values), dtype=torch.float32)  # Rioxarray转Tensorprint(img_torch.shape)  # torch.Size([22, 488, 480])img_torch = torch.tensor(img, dtype=torch.float32)  # Rasterio转Tensorprint(img_torch.shape)  # torch.Size([22, 488, 480])

(4)将 TIFF 图像逐像素提取出数据构建 CSV 文件:

import osimport tqdmimport pandas as pdfrom sklearn.model_selection import train_test_splitdef read_image(img_path):    img = rasterio.open(img_path).read()    band, height, width = np.shape(img)    img_data_list = []    for x in tqdm.trange(height):        for y in range(width):            temp = img[::, x, y]            if np.array(np.isnan(temp), dtype=np.int8).sum() > 0:  # 过滤nan值                continue            else:                img_data_list.append(temp.tolist())    img_arr = np.array(img_data_list)    img_arr = np.around(img_arr, 6)  # 将数据四舍五入保留6位小数    labels = img_arr[:, 0]  # 第一个特征为标签    dataset = img_arr[:, 1:]  # 之后的特征为训练数据    print(os.path.basename(img_path), '读取成功!')    # return dataset, labels    return img_arrtotal_dataset = np.zeros((1, 22), dtype=np.float32)img_data = read_image(img_path)total_dataset = np.append(total_dataset, img_data, axis=0)total_dataset = np.delete(total_dataset, obj=0, axis=0)  # 按行(axis=0)删除第一行(obj=0)元素print(total_dataset, '\n', np.shape(total_dataset))# [[0.570768 0.14354  0.159068 ... 0.458602 1.       0.4     ]#  [0.307365 0.14354  0.159068 ... 0.458602 1.       0.4     ]#  [0.005285 0.14354  0.159068 ... 0.428406 1.       0.4     ]#  ...#  [0.993229 0.393478 0.370807 ... 0.243081 1.       0.8     ]#  [0.967867 0.370807 0.356894 ... 0.243081 1.       0.8     ]#  [0.945627 0.321429 0.305714 ... 0.243081 1.       0.8     ]]#  (116082, 22)# 一张影像22个波段,每一波段为一种特征,特征名如下,其中FSC既是模型训练时的标签数据也是模型输出数据feature_name = ['FSC', 'SR1', 'SR2', 'SR3', 'SR4', 'SR5', 'SR6', 'SR7', 'NDVI', 'NDSI',                'NDFSI', 'SensorZenith', 'SensorAzimuth', 'SolarZenith', 'SolarAzimuth',                'Dem', 'Slope', 'Aspect', 'LST', 'A2T', 'SC', 'LCT']df = pd.DataFrame(total_dataset, columns=feature_name)df.to_csv('../data/MODIS_total_data.csv', index=False)print(df)#              FSC       SR1       SR2       SR3  ...       LST       A2T   SC  LCT# 0       0.570768  0.143540  0.159068  0.165776  ...  0.447205  0.458602  1.0  0.4# 1       0.307365  0.143540  0.159068  0.165776  ...  0.447205  0.458602  1.0  0.4# ...          ...       ...       ...       ...  ...       ...       ...  ...  ...# 116080  0.967867  0.370807  0.356894  0.384162  ...  0.252946  0.243081  1.0  0.8# 116081  0.945627  0.321429  0.305714  0.327329  ...  0.252946  0.243081  1.0  0.8# [116082 rows x 22 columns]train_data, valid_data = train_test_split(df, test_size=0.3, random_state=1)  # 按7:3的比例划分train_data与valid_datatrain_data.to_csv('../data/MODIS_train_data.csv', index=False)valid_data.to_csv('../data/MODIS_valid_data.csv', index=False)print(train_data)print(valid_data)#             FSC       SR1       SR2  ...       A2T        SC  LCT# 65463  1.000000  0.868261  0.860124  ...  0.306415  0.954102  0.4# 71636  0.000000  0.074969  0.090683  ...  0.492837  0.021780  0.4# ...         ...       ...       ...  ...       ...       ...  ...# 77708  0.836359  0.252298  0.268199  ...  0.400243  1.000000  0.4# 98539  0.004958  0.048758  0.073168  ...  0.547051  0.000000  0.4# [81257 rows x 22 columns]#              FSC       SR1       SR2  ...       A2T        SC  LCT# 24035   0.907556  0.579814  0.588075  ...  0.332088  1.000000  0.8# 26625   0.988592  0.708696  0.702981  ...  0.334435  0.999297  0.4# ...          ...       ...       ...  ...       ...       ...  ...# 22745   0.000000  0.054348  0.127143  ...  0.494257  0.532436  0.4# 31068   0.994422  0.562795  0.532174  ...  0.384267  1.000000  0.4# [34825 rows x 22 columns]

来源地址:https://blog.csdn.net/m0_51755720/article/details/130923419

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python常用遥感模块Rasterio与Rioxarray的安装与使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python Paramiko模块的安装与使用详解

一、前言 常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。而使用paramiko可以很好的解决以上问题,比起前面的方法,它
2022-06-04

Python常用标准库之os模块与shutil模块怎么使用

本文小编为大家详细介绍“Python常用标准库之os模块与shutil模块怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python常用标准库之os模块与shutil模块怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
2023-06-30

常用的python模块及安装方法

adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctypes:用来调用动态链接库DBUtils:数
2023-01-31

python的tkinter模块怎么安装和使用

在安装Python时,Tkinter模块已经包含在标准库中,因此无需额外安装。要使用Tkinter模块,需要在Python脚本中导入它。以下是一个简单的示例:```pythonfrom tkinter import *# 创建一个窗口win
2023-09-09

Python 使用 pip 安装 matplotlib 模块的方法

matplotlib是python中强大的画图模块,这篇文章主要介绍了Python 使用 pip 安装 matplotlib 模块(秒解版),本文给大家介绍的非常详细,需要的朋友可以参考下
2023-02-21

Python中time模块与datetime模块在使用中的不同之处

Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。今天稍微梳理一下这两个模块在使用上的一些区别和联系。 time 在 Python 文档里,time是归类在Generic Oper
2022-06-04

Python的加密模块hashlib与base64怎么使用

这篇文章主要介绍了Python的加密模块hashlib与base64怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python的加密模块hashlib与base64怎么使用文章都会有所收获,下面我们一起
2023-07-05

Python的pip如何安装与使用

今天小编给大家分享一下Python的pip如何安装与使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、简单介绍pip 是
2023-07-02

python安装与使用redis的方法

本文实例讲述了python安装与使用redis的方法。分享给大家供大家参考,具体如下: 1、安装 好吧,我承认我只会最简单的安装:sudo apt-get install redis-serverpython 支持包: (其实就一个文件,搞
2022-06-04

关于Python中模块的简介、定义与使用

这篇文章主要介绍了关于Python中模块的简介、定义与使用,模块是Python的重要组成部分,需要的朋友可以参考下
2023-05-16

python cx_Oracle模块的安装和使用详细介绍

python cx_Oracle模块的安装 最近需要写一个数据迁移脚本,将单一Oracle中的数据迁移到MySQL Sharding集群,在linux下安装cx_Oracle感觉还是有一点麻烦的,整理一下,做个总结。 对于Oracle客户端
2022-06-04

编程语言Python的安装与使用

我发现学习IT到一定程度避免不了要和编程语言打交道,大学时学习C语言因为老师能力有限,讲得我对此兴趣全无,得过且过的混了过去。不过现在真的感觉有点后悔。只是后悔也没任何用处。那还是学习吧。最近看了许多有关编程语言入门的资料,感觉Python
2023-01-31

python中os和sys模块的区别与常用方法总结

前言 本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 官方解释:os: This module provides a portable way of
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录