#更新#2019年6月12日之后,gfs预报场存放的目录变了,需要修改。get_gfs.pl第51行改为

$URL='https://nomads.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.$YYYY$MM$DD/$HH/gfs.t${HH}z.pgrb2.1p00.f${FHR3}';

快速下载GRIB文件,http传输部分

译自https://www.cpc.ncep.noaa.gov/products/wesley/fast_downloading_grib.html

Introduction

新闻:1/2019 nomoads.ncep.noaa.gov正在将其网址从http:更改为https:。快速下载技术适用于http和https类型的URL。更改通常很简单,将脚本从http更改为https。只要将URL从http:修改为https:,使用grib_filter的脚本也可以正常工作。如果您使用的是旧版本,则可能需要新的cURL。顺便说一句,我已经及时修改了网页上的文档,但是变化非常微妙,我决定写下这个红色文本。

NOMADS, NOAA Operational Model Archive and Distribution System, NOAA业务模式储存和分发系统

如果你很幸运,那很简单

一些数据集有可以通过写好的脚本下载。详见第2部分。

细节

http协议允许“随机访问”读取;然而,这意味着我们需要一个索引文件和一个http程序支持随机访问。对于索引文件,我们可以修改wgrib清单。对于随机访问的http程序,我们可以使用cURL。它们都是自由获取的,广泛使用的,在很多平台下面被使用,并且可以轻松地被脚本化/自动化/加入 到一个cronjob任务中。

快速下载的基本格式是,

get_inv.pl INV_URL | grep (options) FIELDS | get_grib.pl GRIB_URL OUTPUT

INV_URL是wgrib清单的URL。
   如 https://nomad3.ncep.noaa.gov/pub/gfs/rotating/gblav.t00z.pgrbf12.inv

grep (options) FIELDS  选取要获取的场(与wgrib兼容)
   如 grep -F ":HGT:500 mb:" selects ":HGT:500 mb"
   如 grep -E ":(HGT|TMP):500 mb:" selects ":HGT:500 mb:" and ":TMP:500 mb:"

GRIB_URL是grib file的URL
   如 https://nomad3.ncep.noaa.gov/pub/gfs/rotating/gblav.t00z.pgrbf12

OUTPUT是为下载的grib file起的名字

“get_inv.pl INV_URL”从网上下载wgrib清单并添加一个范围变量场。

“grep FIELDS”使用grep命令从清单中选择所需的变量场。使用“grep FIELDS”类似于使用wgrib提取变量场的过程。

“get_grib.pl GRIB_URL OUTPUT”使用筛选的清单从GRIB_URL中选择要下载的变量场。选定的变量场保存在OUTPUT中。

例子

get_inv.pl https://nomad3.ncep.noaa.gov/pub/gfs/rotating/gblav.t00z.pgrbf12.inv | \
grep ":HGT:500 mb:" | \
get_grib.pl https://nomad3.ncep.noaa.gov/pub/gfs/rotating/gblav.t00z.pgrbf12 out.grb

上面的例子可以在没有反斜杠的情况下写在一行上。(反斜杠是unix约定,表示该行在下一行继续。)该示例从NCEP NOMAD2服务器的00Z(t00z)GFS fcst下载12小时(f12)的500 mb高度场。

get_inv.pl https://nomad2.ncep.noaa.gov/pub/gfs/rotating/gblav.t00z.pgrbf12.inv | \
egrep "(:HGT:500 mb:|:TMP:1000 mb:)" | \
get_grib.pl https://nomad2.ncep.noaa.gov/pub/gfs/rotating/gblav.t00z.pgrbf12 out.grb

上面的示例与前面的示例类似,只是它下载500 mb高度和1000 mb温度。

警告:元字符

在开始时,您可以使用类似字符串过滤库存

  egrep ":(UGRD|VGRD|TMP|HGT):(1000|500|200) mb:"
egrep "(:UGRD:200 mb:|:TMP:2 m above ground:)"

第一个egrep被弃用,并被“grep -E”取代。没什么大不了。然后有人决定将egrep通配符放入官方级别的信息中。想象一下尝试做

grep -E "(:UGRD:200 mb:|:HGT:PV=2e-06 (Km^2/kg/s) surface:)"

你看到了问题。HGT级别字段包含"(" 和 ")"。为了摆脱"(" 和 ")"的特殊含义,它们应该用 \( 和 \)引用。插入符号"^"也具有特殊含义,也应引用。修改后的命令行
  grep -E "(:UGRD:200 mb:|:HGT:PV=2e-06 \(Km\^2/kg/s\) surface:)"
您应该将所有正则表达式元字符用反斜杠引用,包括
\,^,$,.,|,?,*,+,(,),[,],{,}

示例脚本

以下是下载一年R2数据的示例。
#!/bin/sh
# simple script to download 4x daily V winds at 10mb
# from the R2 archive set -x
date=197901
enddate=197912
while [ $date -le $enddate ]
do
url="https://nomad3.ncep.noaa.gov/pub/reanalysis-2/6hr/pgb/pgb.$date"
get_inv.pl "${url}.inv" | grep ":VGRD:" | grep ":10 mb" | \
get_grib.pl "${url}" pgb.$date
date=$(($date + 1))
if [ $(($date % 100)) -eq 13 ] ; then
date=$(($date - 12 + 100));
fi
done

依赖

  1. perl
  2. grep
  3. cURL
  4. grib files and their wgrib inventory on an http server
  5. get_inv.pl
  6. get_grib.pl

配置(UNIX/LINUX)

需要修改get_inv.pl和get_grib.pl的前两行。第一行应该指向你的perl解释器。第二行需要指向curl的位置,如果它不在你的路径上。

HTTPS servers

要访问https服务器,您需要将get_inv.pl和get_grib.pl更新为当前版本(4/2017)。某些站点具有self-signed/invalid/dodgy 的证书,除非您进入不安全模式,否则curl将不会从这些站点下载。(肯定有一些政府政策问题,因为许多NOAA网站都有证书问题。)如果您愿意承担从这些网站下载的风险,您可以在不安全模式下运行curl。

在get_inv.pl
将这一行: open (In, "$curl -f -s $file |");
改为: open (In, "$curl -k -f -s $file |"); 在get_grib.pl
将这一行: $err=system("$curl -f -v -s -r \"$range\" $url -o $file.tmp");
改为: $err=system("$curl -k -f -v -s -r \"$range\" $url -o $file.tmp");

Usage: Windows
有一些报告称perl脚本在Windows机器上不起作用。Alexander Ryan解决了这个问题。

Hi Wesley,

thought this might be of some use to your win32 users.

I had the following problem when running the get_grib.pl file as per your instructions.

run this
grep ":UGRD:" < my_inv | get_grib.pl $URL ugrd.grb
and I would get the error No download! No matching grib fields. on further 
investigation I found that it was just skipping the while STDIN part of the 
code. a few google searches later and I found that for some strange reason in 
the pipe I needed to specify the path or command for perl even though the file 
associations for .pl are set up. (don't fiqure)

this works for me

grep ":UGRD:" < my_inv | PERL get_grib.pl $URL ugrd.grb

Regards and thanks for the fine service
Alexander Ryan


Alexander的另一封邮件

Hi Wesley,
Further to my last email here are some details regarding the enviorment I run this all on for your referance. 

My computer is P4 1.7GHz with 1Gb Ram running Windows 2000 service pack 4
Perl version :V5.6.1 provided by https://www.activestate.com
cUrl Version: 7.15.4 from https://curl.haxx.se/
grep & egrep: win32 versions of grep and egrep, I found both athttps://unxutils.sourceforge.net who provide some useful ports of common GNU utilities to native Win32. (no cygwin required) 

so far this is working fine

Regards Alexander

显然,
    get_inv.pl INV_URL | grep FIELDS | perl get_grib.pl URL OUTPUT
 
应该管用。Linux用户可能会倾向于使用cygwin系统,因为它包括bash,X服务器,编译器和通常的unix工具。

Tips

如果要下载多个场,例如降水量和2米温度,可以输入,
URL="https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.2006070312/gfs.t12z.pgrb2f00"
get_inv.pl $URL.idx | egrep ':(PRATE|TMP:2 m above gnd):' | get_grib.pl $URL out

上面的代码将析出和2米的温度放在文件中。当然,egrep理解正则表达式,这是一个非常强大的功能。

如果从同一文件进行多次下载,则可以通过保留库存的本地副本来节省时间。例如,

URL="https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.2006070312/gfs.t12z.pgrb2f00"
get_inv.pl $URL.idx > my_inv
grep ":UGRD:" < my_inv | get_grib.pl $URL ugrd.grb
grep ":VGRD:" < my_inv | get_grib.pl $URL vgrd.grb
grep ":TMP:" < my_inv | get_grib.pl $URL tmp.grb

上面的代码可以节省两次额外的库存下载。

数据提供者注意事项

grib数据需要在http服务器上访问。这通常是httpd配置中的一个小改动。

用户需要wgrib清单(grib-1)或wgrib2清单(grib-2)。如果清单与数据文件位于同一目录中并使用'.inv'后缀约定,则很方便。可以创建清单,通过,

GRIB-1:wgrib -s grib_file> grib_file.inv

GRIB-2:wgrib2 -s grib_file> grib_file.inv

GRIB-2

自2006年夏天以来,Grib-2一直得到支持。

注意

从理论上讲,curl允许随机访问FTP服务器,但实际上我们发现这很慢(每次随机访问都是自己的FTP会话)。由于我们希望数据提供者使用更快的http协议,因此支持FTP访问。

区域截取

随着网格变得越来越精细,对区域截取的需求也在增长。使用grib2,可以在客户端进行区域子集化,但如果可能的话,这将是一些棘手的编码。现在,我很高兴在nomads服务器上运行的g2subset软件。即使在jpeg2000解压缩的开销下,该服务器软件也比grib1软件(ftp2u / ftp4u)更快。

创建时间:1/21/2005
最后修改日期:6/2017
评论:Wesley.Ebisuzaki@noaa.gov

快速下载Grib,第2部分

译自https://www.cpc.ncep.noaa.gov/products/wesley/get_gfs.html

新闻

2019年1月2日:nomads.ncep.noaa.gov正在将URL从http://更改为https://。2014年12月31日发布了带有新网址的get_gfs.pl版本。如果您遇到问题,可能需要获得更新版本的cURL。

Wrappers @ NCDC

虽然第1部分详述的程序是直截了当的,但它可能更容易。我不喜欢寻找和输入网址。写循环也需要时间。经验不足的人更喜欢它。Dan Swank为北美区域再分析(NARR)下载了一个很好的接口。他编写了get-httpsubset.pl,它工作得很好。2006年5月,95%的NCDC-NOMADS下载都是使用cURL完成的。

Wrappers @ NCEP (NOMADS): get_gfs.pl

在NCEP,我们希望人们(1)使用partial-http而不是ftp2u传输来获得预报场,以及(2)将nomads服务器移至更可靠的NCO服务器。所以get_gfs.pl诞生了。希望脚本易于使用,易于重新配置,更易于安装和在Windows下使用。

Requirements

  1. get_gfs.pl.

  2. perl

  3. cURL

配置

  1. 需要下载cURL可执行文件并将其放在$ PATH的目录中。
  2. get_gfs.pl的第一行应该指向本地perl解释器的位置。
  3. 非Windows用户可以在get_gfs.pl中将$windows flag设置为”thankfully no“,以提高效率。

简单用法:

get_gfs.pl data DATE HR0 HR1 DHR VARS LEVS DIRECTORY

注意:某些Windows设置需要输入:
      perl get_gfs.pl data DATE HR0 HR1 DHR DIRECTORY

DATE = 预报YYYYMMDDHH的开始时间。注意:HH应为00 06 12或18

HR0 = 想要的第一个预测的小时数

HR1 = 想要的最后预测的小时数

DHR = 预测小时增量(每3,6,12或24小时预测)

VARS = 变量列表或"all"
    例如 HGT:TMP:OZONE
    例如 all

LEVS = 层次列表,空格替换为下划线,或"all"
    例如 500_mb:200_mb:surface
    例如 all

DIRECTORY = 放置输出的目录

example: perl get_gfs.pl data 2006101800 0 12 6 UGRD:VGRD 200_mb .

example: perl get_gfs.pl data 2006101800 0 12 6 UGRD:VGRD 200_mb:500_mb:1000_mb .

example: perl get_gfs.pl data 2006101800 0 12 12 all surface .

正则元字符: ( ) . ^ * [ ] $ +

get_gfs.pl脚本使用perl正则表达式(regex)作为字符串匹配。因此,应该引用正则表达式元字符它们是搜索字符串的一部分。例如,试图找到以下层

"entire atmosphere (considered as a single_layer)"

"entire_atmosphere_(considered_as_a_single_layer)"

因为括号是元字符,所以不起作用。下列技术会起作用。

引用 "(”和 ")"字符

 get_gfs.pl data 2012053000 0 6 3 TCDC "entire atmosphere \(considered as a single layer\)" .
get_gfs.pl data 2012053000 0 6 3 TCDC entire_atmosphere_\\\(considered_as_a_single_layer\\\) .

使用 句点(匹配所有字符) 来匹配 "(”和 ")"字符  get_gfs.pl data 2012053000 0 6 3 TCDC "entire atmosphere .considered as a single layer." . get_gfs.pl data 2012053000 0 6 3 TCDC entire_atmosphere_.considered_as_a_single_layer. .

How get_gfs.pl works 

get_gfs.pl基于get_inv.pl和get_grib.pl脚本。get_gfs.pl的优点是URL内置预报时间循环。 

元语言  get_gfs.pl data DATE HR0 HR1 DHR VARS LEVS DIRECTORY

# convert LEVS and VARS into REGEX
if (VARS == "all") {
VARS=".";
}
else {
VARS = substitute(VARS,':','|')
VARS = substitute(VARS,'_',' ')
VARS = ":(VARS):";
} if (LEVS == "all") {
LEVS=".";
}
LEVS = substitute(LEVS,':','|')
LEVS = substitute(LEVS,'_',' ')
LEVS = ":(LEVS)";
} # loop over all forecaset hours for fhour = HR0, HR1, DHR
URL= URL_name(DATE,fhour)
URLinv= URL_name(DATE,fhour).idx inventory_array[] = get_inv(URLinv);
for i = inventory..array[0] .. inventory_array[last]
if (regex_match(LEVS,inventory_array[i]) and regex_match(VARS,inventory_array[i]) {
add_to_curl_fetch_request(invetory_array[i]);
}
}
curl_request(URL,curl_fetch_request,DIRECTORY);
endfor

Advanced Users

有一个用户询问是否可以混合变量和层次。例如,TMP @ 500 mb,HGT @(250和700 mb)。当然你可以运行两次get-gfs.pl但这样效率不高。

这是可能的,因为get-gfs.pl使用正则表达式,而正则表达式非常强大。您需要记住的是,get-gfs.pl分别将冒号和下划线转换为垂直条和空格,分别用于VAR / LEV参数。

Unix/Linux:

       get-gfs.pl data 2006111500 0 12 12 all 'TMP.500 mb|HGT.(200 mb|700 mb)'  data_dir

Windows:

       get-gfs.pl data 2006111500 0 12 12 all "TMP.500 mb|HGT.(200 mb|700 mb)"  C:\unix\

Other GRIB Data sets

get_gfs.pl的一个目的是提供一个简单的脚本,用于使用部分httpd下载协议下载grib数据。编写代码使其易于适应其他grib + inv数据集。

Wrappers @ NCEP (NCO): get_data.sh

NCO(NCEP Centeral Operations)也有一个接口get_data.sh

创建时间:10/2006,

更新日期:2012年5月

评论:Wesley.Ebisuzaki@noaa.gov

GFS预报数据下载的更多相关文章

  1. NCEP CFSR数据下载

    一.简介 CFSR(Climate Forecast SystemReanalysis)再分析资料使用了 GEOS-5(Goddard EarthObserving System)大气模式与资料同化系 ...

  2. tensorflow学习笔记三:实例数据下载与读取

    一.mnist数据 深度学习的入门实例,一般就是mnist手写数字分类识别,因此我们应该先下载这个数据集. tensorflow提供一个input_data.py文件,专门用于下载mnist数据,我们 ...

  3. ios的网络数据下载和json解析

    ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知 ...

  4. 腾讯QQ群数据下载方法(7000万个qq群资料全泄漏)

    仔细读完一定能找到自己需要的东西 据新华网报道,国内知名安全漏洞监测平台乌云20日公布报告称,腾讯QQ群关系数据被泄露,网上可以轻易就能找到数据下载链接,根据这些数据,通过QQ号可以查询到备注姓名.年 ...

  5. ios 网络数据下载和JSON解析

    ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载 ...

  6. iOS之网络数据下载和JSON解析

    iOS之网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍IOS中如何利用NSURLconnection从网络上下载数据以及如何解析下载下来的JSON数据格式,以及如何显示数据和托图片的异步 ...

  7. Asp.Net MVC 实现将Easy-UI展示数据下载为Excel 文件

    在一个项目中,需要做一个将Easy-UI界面展示数据下载为Excel文件的功能,经过一段时间努力,完成了一个小Demo.界面如下: 但按下导出Excel后,Excel文件将会下载到本地,在office ...

  8. OSM数据下载地址

    1.OSM数据下载地址 官网下载: http://planet.openstreetmap.org/ GeoFabrik:http://www.geofabrik.de/ Metro Extracts ...

  9. 医学图像数据(三)——TCIA部分数据下载方式

    前为止,本人还没有找到不需要账号的就可以部分下载的方式,因此这里讲的是需要注册账号下载部分数据的方法. 注意:下载部分数据需要注册账号 注册账号网址:https://public.cancerimag ...

  10. DEM数据及其他数据下载

    GLCF大家都知道吧?http://glcf.umiacs.umd.edu/data/ +++++++++++++++去年12月份听遥感所一老师说TM08初将上网8万景,可是最近一直都没看到相关的网页 ...

随机推荐

  1. LeetCode-398 随机数索引

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/random-pick-index 题目描述 给定一个可能含有重复元素的整数数组,要求随机输出给定 ...

  2. EMQ X 系统调优和性能压测

    前言 如果使用 EMQ 来承载百万级别的用户连接可以吗?毕竟在 MQTT 官方介绍上说 EMQ X 可以处理千万并发客户端,而 EMQ X 自己官方称 4.x 版本 MQTT 连接压力测试一台 8 核 ...

  3. mysql数据库查看版本号

    1.在命令行登录mysql,即可看到mysql的版本号 [root@mysql02 bin]# ./mysql -uroot -pEnter password: Welcome to the MySQ ...

  4. consul剔除某个服务

    curl --request PUT  http://ip:端口/v1/agent/service/deregister/服务对应的id地址

  5. JDK卸载与JDK12 安装

    JDK卸载与JDK12 安装 一.JDK卸载 控制面板>程序和功能>jdk程序(java 8 update 391:java SE Development Kit8 update 391) ...

  6. 题解[CF575E]Spectator_Riots

    题意 一个球场,可以看作 \(10^5\times10^5\) 的矩形,每个位置都是一个整点.一个位置 \((x,y)\) 位于球场内当且仅当 \(x\in[0,10^5]\and y\in[0,10 ...

  7. leecode70. 爬楼梯

    70. 爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到 ...

  8. 注意注意!!!!关于keil的问题,调试时候的bug

    1.keil变量不区分大小写: 2.KEIL调试debug时误报,未定义某变量 但是实际定义了的. 今天用keil写代码 感觉逻辑上没问题 但是始终不是那个效果 检查了半天错误问题.最后debug居然 ...

  9. 实验一 密码引擎-2-OpenEuler-OpenSSL测试

    任务详情 在Ubuntu编写代码测试OpenSSL功能,包含Base64,SM2,SM3,SM4算法的调用,然后在OpenEuler中重现 提交代码链接和运行结果截图 加分项:在Windows中重现 ...

  10. react fiber 的运行机制

    前言 1. 不同的元素类型决定不同的任务类型 2. react 的元素类型有 class component , function component ,Dom nodes, portal等等 要理解 ...