#更新#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. Oracle中的sql脚本语言中的循环语句介绍

    --sql脚本语言的循环介绍:--1.goto循环点.declare  x number;begin  x:=0;--变量初始化:  <<repeat_loop>>--设置循环 ...

  2. PACS系统各个功能介绍--九五小庞

    PACS系统是HIS系统的重要组成部分,医生可在电脑上查看患者的医学影像报告. ■ 支持心电DICOM,心电图浏览和处理(显示格式.纸速.增益.滤波.测量等). ■ 支持MPR.CPR.MIP.SSD ...

  3. vue2+ts 设计一个扑克牌比大小的游戏

    首先  

  4. ISE_14.7_Windows10安装

    直接下载安装会报如下错误: There was an unexpected error executing Import ISE Virtual Appliance 解决方案 1.阅读xilinx手册 ...

  5. 项目day1 -- vscode远程连接云服务器

    刚学完go的语法,本来想着找个小项目试试手,发现大佬们都是vscode ssh到云服务器上做开发的.正好看到阿里云的学生认证后可以白嫖,就先嫖了个试试手 跟着各大教程简单配置了一下阿里云,安装vsco ...

  6. QtQuick与Qml介绍

    文章纲要: 1.QtQuick是什么 2.qml与QtQuick关系 一.QtQuick是什么 "quick--快速创建应用程序" "quick--Qt User Int ...

  7. css 网页置灰

    body *{ -webkit-filter: grayscale(100%); /* webkit */ -moz-filter: grayscale(100%); /*firefox*/ -ms- ...

  8. Centos.JAVA 环境安装

    JAVA 环境安装 0x00.环境准备 OS CentOS JDK1.8 安装包 jdk-8u131-linux-x64.tar.gz 0x01.卸载自带的open jdk 执行rpm -qa | g ...

  9. storcli64简述

    一.查询raid卡.raid组.物理硬盘信息 Controller_id:硬盘所在的raid卡的id,可以将该参数设置为all,表示查询该工具可管理的所有控制器的id Enclosure_id:硬盘所 ...

  10. 初识swoole

    环境: 腾讯云服务器  centos7 在安装完swoole服务之后 使用 php -m  查看是否有该组件 确认存在后 在根目录下 创建一个文件夹 当做专门测试swoole使用 如 8 在该文件夹下 ...