PERSIANN 降雨数据使用教程

2023-05-16

一、前言

PERSIANN,“使用人工神经网络从遥感信息中估算降水”,是一种基于卫星的降水检索算法,可提供近乎实时的降雨信息。

该算法使用来自全球地球同步卫星的红外 (IR) 卫星数据作为降水信息的主要来源。 红外图像的降水基于云顶温度和降水率之间的统计关系。 然后使用低地球轨道卫星(例如,热带降雨测量任务微波成像仪、特殊传感器微波成像仪、高级微波扫描辐射计-地球观测系统)提供的卫星微波数据校准基于红外线的降水估计。 校准技术依赖于一种自适应训练算法,该算法在微波观测可用时(大约每隔 3 小时)更新检索参数。

PERSIANN 数据可以二进制格式获取。 这种格式不同于我们之前看到的geotif、netCDF和HDF。 因此,需要一种不同的方法来提取数据

二、数据下载

转到 ftp 站点并下载 2000 年 3 月的数据。

ftp://persiann.eng.uci.edu/pub/PERSIANN/tar_6hr/

提取并解压文件夹 d:/persiann/ 中的文件.

当使用 tar 提取然后解压缩时,6 小时文件将具有以下名称:raw6hrYYDOYHS.bin

YY : 2 位数年份,从 00 开始表示 2000

DOY:一年中的某一天

HS:6小时累计周期的起始时间,(0,6,12,18)

例如,文件 raw6hr0512518.bin 表示 2005 年 5 月 5 日 18 到 24 之间累积的降水量

数据以 C 样式以行为中心的格式存储。 第一个值以 49.875、0.125 为中心,第二个值以 49.875、0.375 为中心,最后两个值以:-49.875、359.625 和 -49.875、359.875 为中心

数据采用来自 SUN 系统(大端)的 4 字节二进制浮点数。从二进制文件中提取二进制数据需要执行以下步骤。 它基本上逐行扫描数据并将数据放入矩阵中。

三、数据处理

(1)在 d:\training1\scripts\ 中创建脚本 script5a.py 并运行下面的代码。

# import libraries
import matplotlib.pyplot as plt
import numpy as np
from struct import unpack
from osgeo import gdal
 
# inputfile
BinaryFile = "/path/to/raw6hr0006100.bin" # '3B42_daily.2009.05.31.7.bin'. Make sure you adjust the location.
 
# open binary file
f = open(BinaryFile, "rb")
 
# set file dimensions
xs = 1440
ys = 400
 
# set number of bytes in file
NumbytesFile = xs * ys
 
# number of columns in row
NumElementxRecord = -xs
 
# create empty array to put data in
myarr = []
 
# loop trough the binary file row by row
for PositionByte in range(NumbytesFile,0, NumElementxRecord):
 
        Record = ''
 
        # the dataset starts at 0 degrees, use 720 to convert to -180 degrees
        for c in range (PositionByte-720, PositionByte, 1):
                f.seek(c * 4)
                DataElement = unpack('>f', f.read(4))
                Record = Record  + str("%.2f" % DataElement + ' ')
 
        # 0 - 180 degrees
        for c in range (PositionByte-1440 , PositionByte-720, 1):
                f.seek(c * 4)
                DataElement = unpack('>f', f.read(4))
                Record = Record  + str("%.2f" % DataElement + ' ')
 
        # add data to array
        myarr.append(Record[:-1].split(" "))
 
# close binary file
f.close()
 
# Array to numpy float
myarr = np.array(myarr).astype('float')
 
# mirror array
myarr = myarr[::-1]
 
# show data
plt.imshow(myarr)
plt.clim(0,10)
plt.show()

如果出现带有降雨的图像,则您已成功将二进制数据导入到 numpy 数组中。

(2)在 d:\training1\scripts\ 中创建脚本 script5b.py 并运行下面的代码。 确保更正输入和输出路径。

# import libraries
import matplotlib.pyplot as plt
import numpy as np
from struct import unpack
from osgeo import gdal
from osgeo import osr
 
# inputfile
BinaryFile = "/path/to/raw6hr0006100.bin" # '3B42_daily.2009.05.31.7.bin'
 
# open binary file
f = open(BinaryFile, "rb")
 
# set file dimensions
xs = 1440
ys = 400
 
# set number of bytes in file
NumbytesFile = xs * ys
 
# number of columns in row
NumElementxRecord = -xs
 
# create empty array to put data in
myarr = []
 
# loop trough the binary file row by row
for PositionByte in range(NumbytesFile,0, NumElementxRecord):
 
        Record = ''
 
        # the dataset starts at 0 degrees, use 720 to convert to -180 degrees
        for c in range (PositionByte-720, PositionByte, 1):
                f.seek(c * 4)
                DataElement = unpack('>f', f.read(4))
                Record = Record  + str("%.2f" % DataElement + ' ')
 
        # 0 - 180 degrees
        for c in range (PositionByte-1440 , PositionByte-720, 1):
                f.seek(c * 4)
                DataElement = unpack('>f', f.read(4))
                Record = Record  + str("%.2f" % DataElement + ' ')
 
        # add data to array
        myarr.append(Record[:-1].split(" "))
 
# close binary file
f.close()
 
# Array to numpy float
myarr = np.array(myarr).astype('float')
 
# set values < 0 to nodata
myarr[myarr < 0] = -9999
 
# mirror array
myarr = myarr[::-1]
 
# define output name
outname = "/path/to/persian.tif"
 
# set coordinates
originy = 50
originx  = -180
pixelsize = 0.25
transform= (originx, pixelsize, 0.0, originy, 0.0, -pixelsize)
driver = gdal.GetDriverByName( 'GTiff' )
 
# set projection
target = osr.SpatialReference()
target.ImportFromEPSG(4326)
 
## write dataset to disk
outputDataset = driver.Create(outname, xs,ys, 1,gdal.GDT_Float32)
outputDataset.SetGeoTransform(transform)
outputDataset.SetProjection(target.ExportToWkt())
outputDataset.GetRasterBand(1).WriteArray(myarr)
outputDataset.GetRasterBand(1).SetNoDataValue(-9999)
outputDataset = None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PERSIANN 降雨数据使用教程 的相关文章

  • CentOS 使用virsh创建虚拟机

    一 参考 xff1a 1 CentOS 7 6使用virsh创建虚拟机 2 先输入 xff1a yum search qemu kvm 查看是否有qemu kvm可以安装 接着输入 xff1a yum search libvirt 查看是否
  • linux离线搭建SVN服务器系列<二 >

    在linux离线搭建SVN服务器系列 lt 一 gt 里安装svn服务器后 xff0c 接下来就是安装svn客户端了 这里打算以windows客户端和linux为例进行说明 一 linux svn客户端 一 先安装linux svn客户端
  • NDK配置debug环境时:Error:FAILURE: Build failed with an exception

    Error FAILURE Build failed with an exception What went wrong Execution failed for task 39 app externalNativeBuildDebug 3
  • Android 集成OpenCV

    OpenCV下载 一 集成SDK 1 从官网下载最新的android sdk xff0c 这里下载的是4 5 4 2 创建Android项目 xff0c 将sdk以library方式引入项目中 sdk使用了kotlin xff0c 需要配置
  • MyEclipse 控制台等显示在底部

    虽然接触MyEclipse已经有了几年了 xff0c 但是底部的控制台 xff0c 服务 xff0c svn等等显示不清楚 今天百度了 xff0c 发现只要按 Window gt show view gt 选择你要固定在底部的选项 还真方便
  • 协方差与自相关

    协方差矩阵是一个矩阵 xff0c 其每个元素是各个向量元素之间的协方差 这是从标量随机变量 到高维度随机向量 的自然推广 假设是以个标量随机变量组成的列向量 xff0c 并且是其第i个元素的期望值 xff0c 即 协方差矩阵被定义的第i x
  • 基础解系

    基础解系首先是线性无关的 xff0c 简单的理解就是能够用它的线性组合表示出该 方程组的任意一组解 xff0c 基础解系是针对有无数多组解的方程而言 xff0c 若是齐次线性方程组则应是有效方程组的个数少于未知数的个数 xff0c 若非齐次
  • 机器学习实践指南:案例应用解析(第二版)

    试读及购买链接 机器学习实践指南2版代码及资源 原书中的360网盘链接因为360关闭网盘的原因已经失效 1 https pan baidu com s 1nw37A5N 2 http www hzbook com Books 9324 ht
  • 数学之路-python计算实战(7)-机器视觉-图像产生加性零均值高斯噪声

    图像产生加性零均值高斯噪声 xff0c 在灰度图上加上噪声 xff0c 加上噪声的方式是每个点的灰度值加上一个噪声值 xff0c 噪声值的产生方式为Box Muller算法 生成高斯噪声 在计算机模拟中 xff0c 经常需要生成正态分布的数
  • 数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域平均法滤波)

    coding utf 8 code myhaspl 64 myhaspl com 邻域平均法滤波 半径为2 import cv2 import numpy as np fn 61 34 test3 jpg 34 myimg 61 cv2 i
  • Serializable和Parcelable序列化

    前言 Android中常用的序列化方式包含有两种 xff1a Serializable和Parcelable 其中Serializable是java中通用的对象序列化方法 xff0c 在Android实际内存操作时会更加偏向于实现Parce
  • R语言与数据模型(1)-平均,方差,中位数,分位数,极差

    1 求平均数 gt x lt c 1 10 20 30 40 50 NA 60 gt xm lt mean x gt xm 1 NA na rm表示允许缺失数据NA gt xm lt mean x na rm 61 TRUE gt xm 1
  • AI理论随笔-对称矩阵、正交矩阵与特征向量,特征值(2)

    一 如果 xff1a A A T 61 E AA T 61 E A A T 61 E
  • 英文过滤停用词

    span class token triple quoted string string 34 34 34 Created on Sun Nov 13 09 14 13 2016 64 author daxiong 34 34 34 spa
  • C语言随笔-去掉仅有\n的行

    include lt stdio h gt int main int argc const char argv char str 128 char linep strcpy str 34 12 35 56 n12 33 87 n n n n
  • python3.6-深入浅出视频

    课程收益 适合人群 python小白 xff0c 大数据和机器学习编程程序员 上机实践为主线 以最快的速度上手 快速入门 xff0c 还学到了python3的核心知识 https edu csdn net course detail 989
  • 数学之路(3)-机器学习(3)-机器学习算法-神经网络[11]

    多层感知器的代码 xff0c 需要一个比较复杂的调试过程 xff0c 不过也有一些方法来加快这一速度 xff0c 其中有几个地方要注意 xff1a 1 输入层 输出层 中间层的学习率和动量参数不能一样 xff0c 2 3个层的权值策略不能一
  • 14、iOS里面的富文本

    iOS里面的富文本 1 NSAttributedString属性概览表2 属性详解及应用2 1 NSAttributedString Key font 字体大小2 2 NSAttributedString Key paragraphStyl

随机推荐

  • 马化腾五兄弟:难得的创业团队

    http www donews com people 201105 455471 shtm 腾讯的马化腾创业5兄弟 xff0c 堪称难得 xff0c 其理性堪称标本 12年前的那个秋天 xff0c 马化腾与他的同学张志东 合资 注册了深圳腾
  • 选择创业团队的类型

    从不同的角度 层次和结构 xff0c 可以划分为不同类型的创业团队 xff0c 而依据创业团队的组成者来划分 xff0c 创业团队有星状创业团队 xff08 Star Team xff09 网状创业团队 xff08 Net Team xff
  • MQTT3.1与UDP时效性分析

    前言 MQTT 3 1协议在弱网络环境下 xff08 比如2G 3G等 xff09 表现不够好 xff0c 因此才有了反思 弱网环境下表现 手机等终端在弱网络环境下丢包情况会非常明显 xff0c 连接MQTT Server成功率很低 相比单
  • Android APP开机自启动基本方法

    前言 应用自启动主要是通过接收系统广播BOOT COMPLETED来实现的 xff0c 在receiver中执行APP启动的方法 实现 主要分为两个部分 xff1a AndroidManifest xml配置 xff0c 包括权限配置和广播
  • gitlab markdown 支持TOC解决办法

    问题分析 1 标题的锚点会被替换 中文替换为 39 39 空格等非正常字符替换为 39 39 这给自己手动写toc也带来了麻烦 不能直接复制标题作为链接 2 不能自动生成TOC 目前gitlab不支持TOC功能 解决方法 1 解决中文问题
  • 数据科学家能力发展路线图

  • 每秒处理10万订单乐视集团支付架构

    随着乐视硬件抢购的不断升级 xff0c 乐视集团支付面临的请求压力百倍乃至千倍的暴增 作为商品购买的最后一环 xff0c 保证用户快速稳定的完成支付尤为重要 所以在15年11月 xff0c 我们对整个支付系统进行了全面的架构升级 xff0c
  • 一次心惊肉跳的服务器误删文件的恢复过程

    经历了两天不懈努力 xff0c 终于恢复了一次误操作删除的生产服务器数据 对本次事故过程和解决办法记录在此 xff0c 警醒自己 xff0c 也提示别人莫犯此错 也希望遇到问题的朋友能找到一丝灵感解决问题 事故背景 安排一个妹子在一台生产服
  • WIFI模块的各种配网方式之比较(串口AT、SmartConfig、微信Airkiss、WEB网页配网....)

    WIFI模块的各种配网方式之比较 如何对WIFI模块进行配网 xff1f 串口AT xff1f 微信Airkiss xff1f SmartConfig xff1f No xff01 WEB网页配网最简单 最方便 所受限制也最少 xff01
  • Android studio2.3.2 配置kotlin、Anko

    祝 xff1a 本文配置基于Android studio 2 3 2 xff0c gradle3 3 jdk1 8 1 下载kotlin插件 打开Settings面板 xff0c 找到Plugins选项 xff0c 点击Browse rep
  • TCP/UDP的套接字Socket通信工作流程

    一 面向连接的套接字Socket通信工作流程 为了实现服务器与客户机的通信 服务器和客户机都必须建立套接字 服务器与客户机的工作原理可以用下面的过程来描述 1 服务器先用 socket 函数来建立一个套接字 用这个套接字完成通信的监听 2
  • VirtualBox 如何能捕获/释放鼠标

    xff11 xff0e 热键的选项 xff1a 鼠标集成不选择 xff12 xff0e 当你点击虚拟机的时候会出现下图 xff0c 选择捕获就可以了 xff13 xff0e 但你无法移出到外面主机的时候 xff0c 按住键盘右侧的Ctrl移
  • onNewIntent触发的时机

    前提 ActivityA已经启动过 处于当前应用的Activity堆栈中 当ActivityA的LaunchMode为SingleTop时 xff0c 如果ActivityA在栈顶 且现在要再启动ActivityA xff0c 这时会调用o
  • tomcat各版本下载地址

    https archive apache org dist tomcat
  • Android屏幕尺寸适配常见方案smallestWidth

    前言 介于目前的Android设备存在有不同的屏幕尺寸 xff0c 屏幕分辨率 xff0c 像素密度 xff0c Android应用在开发的过程必须要考虑到屏幕尺寸适配的问题 xff0c 以保证在不同尺寸的Android设备上都能够正常运行
  • 奇数阶魔方阵!

    import java util Scanner public class Test5 打印 魔方阵 所谓的魔方阵是指这样的方阵 xff0c 它的行 列 对角线元素之和均相等 以下是奇数阶魔方阵 xff01 xff01 xff01 xff0
  • 基于Python高光谱遥感影像处理实例

    前言 在写波段配准相关代码时经常需要用到tif影像的波段合成和分解 xff0c 虽然可以用ENVI才处理 xff0c 但是每次都要打开再设置一些参数有些麻烦 xff0c 所以本着 独立自主 自力更生 的原则就写了些脚本来处理这个需求 又写了
  • 基于SIFT的图像Matlab拼接教程

    前言 图像拼接技术 xff0c 将普通图像或视频图像进行无缝拼接 xff0c 得到超宽视角甚至360度的全景图 xff0c 这样就可以用普通数码相机实现场面宏大的景物拍摄 利用计算机进行匹配 xff0c 将多幅具有重叠关系的图像拼合成为一幅
  • PyTorch 进行多步时间序列预测详细教程

    一 前言 Encoder decoder 模型提供了最先进的结果 xff0c 可以对语言翻译等 NLP 任务进行排序 多步时间序列预测也可以视为 seq2seq 任务 xff0c 可以使用编码器 解码器模型 本文提供了一个Encoder d
  • PERSIANN 降雨数据使用教程

    一 前言 PERSIANN xff0c 使用人工神经网络从遥感信息中估算降水 xff0c 是一种基于卫星的降水检索算法 xff0c 可提供近乎实时的降雨信息 该算法使用来自全球地球同步卫星的红外 IR 卫星数据作为降水信息的主要来源 红外图