Rasterio:rasterio.open函数参数和用法解析(以GPM Imerg Early nc转tif为例)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Rasterio:rasterio.open函数参数和用法解析(以GPM Imerg Early nc转tif为例)

01 前言

最近用ENVI IDL,觉得身心俱疲,一方面是学的不深,另一方面是关于IDL的资料太少了,基本上仅有少量的陈年博客(虽然写的不错),其余基本上来源于官方文档.所以还是做好两手准备,python处理遥感影像也要抓起来,毕竟python对于人工智能的专长之于遥感影像的冲击也比较大,现在漂亮国要是再不发几颗卫星国内遥感我们这批专业生就活不下去了,论文个个都在卷计算机算法人工智能,神卷。


废话不多说,我将以先讲述其参数,至于用法我打算以GPM Imerg early数据集为例将nc文件转为tif文件来说明rasterio的用法。


(至于为什么使用rasterio而不是gdal,有一定的考虑,我认为rasterio的语法更符合python的理念,而gdal的语法等等更偏向于C语言之类的)


02 参数说明

基本形式:


rasterio.open(fp, mode='r', driver=None, width=None, height=None, count=None, crs=None, transform=None, dtype=None, nodata=None, sharing=False, **kwargs)


rasterio.open函数用于创建一个DatasetReader或DatasetWriter对象,这两个对象分别用于读取和写入栅格数据。


fp: 需要打开的文件的路径(字符串);


mode: 字符串(可选参数,默认是r,只读模式), 打开文件的模式,包括四种,分别是'r', 'w', 'r+', 'w+',分别表示只读模式, 只写, 可读可写,可读可写模式。对于后面r+和w+,区别在于如果文件路径不存在,那么w+会新建一个,而r+则会报错,共同部分即可读又可写,但是需要注意的是如果文件路径存在即文件存在那么w+会将其中内容全部清空而r+会在其后内容继续追加内容。w和w+的区别就是w只可以写入不可以读,而w+既可以读也可以写入;


driver:文件的格式,一般在r和r+模式会省略,因为函数会自动获取其文件后缀判别。若是创建文件则需要指定该参数。若是创建GeoTIFF文件,则需要指定driver=GTiff。此处的driver与gdal类似,可以参照:Raster drivers — GDAL documentation获取不同文件格式的driver参数;


width:图像的宽度,也即图像栅格矩阵的列数;


height:图像的高度,也即图像栅格矩阵的行数;


count:图像的波段数;


crs:可以是字符串/字典/crs对象。


transform: 文件的仿射变换,可以是一个Affine对象或一个包含6个元素的列表或元组。这6个元素表示(x_size, skew_y, x_upper_left, skew_x, -y_size, y_upper_left), x为lon,y为lat.


你可以自行计算出来,对于旋转系数skew_x和skew_x填写0.0即可,一般你不会使用到它的。(我后面是通过其他函数计算因为我比较懒)


由于在我们遥感影像上,坐标系的原点在左上角点,所以输入的角点信息也在左上角的经纬度坐标,由于是左上角点所以它计算是从左往右,从上往下,因此x上的分辨率正常,但是y上的分辨率需要添上负号因为从上往下纬度在减小。


dtype:文件的数据类型,字符串或者np type都是可行的。


nodata:在矩阵中无效值的像素值,可以传入int,float,nan。


sharing:bool型。是否共享句柄,多线程应当避免。当处理大量数据时,操作系统可能会耗尽可用的文件描述符,这可能导致程序崩溃或无法打开更多文件。为了避免这个问题,Rasterio维护了一个共享句柄池,可以在多个地方重用这些句柄,从而减少了打开新文件的开销。


03 用法

好了基本上说清楚了 ,至于用法我就不详细赘述,时间有限,大家自行查看即可。

以下是关于如何处理将GPM Imerg Early的NC4文件处理为GeoTIFF文件。

import netCDF4 as nc
import rasterio
from rasterio.transform import from_origin
# preparation
in_path = r'F:\ExtremePrecipitation\data\GPM IMERG Early\3B-HHR-E.MS.MRG.3IMERG.20180312-S000000-E002959.0000.V06B.HDF5.SUB.nc4'
out_path = r'F:\ExtremePrecipitation\TEMP\output.tif'
# get the precip_dataset, lon_dataset, lat_dataset of the nc4 file
dataset = nc.Dataset(in_path)  # get the dataset_writer object
precipitation = dataset.variables['precipitationCal'][0, :, :]  # shape=(1, 630, 510), (channels, cols, rows))
lon = dataset.variables['lon'][:]  # shape=(630,), this means the cols == 630
lat = dataset.variables['lat'][:]  # shape=(510,), this means the rows == 510
# get the basic info of the precipitation
rows = len(lat)
cols = len(lon)
lon_upper_left = min(lon)
lat_upper_left = max(lat)
lon_res = lon[1] - lon[0]  # assume the lon and lat are equally spaced
lat_res = lat[1] - lat[0]
# write the precipitation data into a tif file
with rasterio.open(out_path, 'w', driver='GTiff',
                   height=rows, width=cols,
                   count=1, dtype=precipitation.dtype,
                   crs='+proj=latlong',
                   transform=from_origin(lon_upper_left, lat_upper_left, lon_res, lat_res)) as dst:
    dst.write(precipitation, 1)  # write the precipitation dataset into the first band of the tif file
目录
相关文章
|
1月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
10天前
|
JSON Shell Linux
dockerfile 用法全解析
Dockerfile指令简介:`FROM`基于Alpine镜像;`WORKDIR`设置工作目录;`COPY`复制文件;`ADD`支持URL;`RUN`运行命令;`CMD`容器启动时执行;`ENTRYPOINT`与`CMD`组合执行;`EXPOSE`声明端口;`VOLUME`映射文件;`ENV`设置环境变量;`ARG`构建参数;`LABEL`元数据;`ONBUILD`触发命令;`STOPSIGNAL`停止信号;`HEALTHCHECK`健康检查;`SHELL`默认Shell。Alpine仅5M,小巧高效。
40 4
dockerfile 用法全解析
|
9天前
|
JSON 自然语言处理 Java
OpenAI API深度解析:参数、Token、计费与多种调用方式
随着人工智能技术的飞速发展,OpenAI API已成为许多开发者和企业的得力助手。本文将深入探讨OpenAI API的参数、Token、计费方式,以及如何通过Rest API(以Postman为例)、Java API调用、工具调用等方式实现与OpenAI的交互,并特别关注调用具有视觉功能的GPT-4o使用本地图片的功能。此外,本文还将介绍JSON模式、可重现输出的seed机制、使用代码统计Token数量、开发控制台循环聊天,以及基于最大Token数量的消息列表限制和会话长度管理的控制台循环聊天。
76 7
|
24天前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
35 5
|
1月前
|
机器学习/深度学习 自然语言处理 语音技术
揭秘深度学习中的注意力机制:兼容性函数的深度解析
揭秘深度学习中的注意力机制:兼容性函数的深度解析
|
1月前
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType<T>()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
90 1
|
2月前
|
存储
atoi函数解析以及自定义类型经典练习题
atoi函数解析以及自定义类型经典练习题
58 0
|
2月前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
165 0
|
2月前
|
存储 缓存 并行计算
yolov5的train.py的参数信息解析
这篇文章解析了YOLOv5的`train.py`脚本中的参数信息,详细介绍了每个参数的功能和默认值,包括权重路径、模型配置、数据源、超参数、训练轮数、批量大小、图像尺寸、训练选项、设备选择、优化器设置等,以便用户可以根据需要自定义训练过程。
52 0
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
77 2

热门文章

最新文章

推荐镜像

更多