- 积分
- 13667
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-9-8
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 leeol 于 2017-10-27 18:22 编辑
更新:近日我在下数据时发现EC微调了下载方法,具体可见官方网址:https://software.ecmwf.int/wiki/display/WEBAPI/Access+ECMWF+Public+Datasets
##################################################################
欧洲中期天气预报中心ECMWF,提供了多种再分析和预报资料,现在已广泛的应用于平时的气象气候研究中,但是由于其精度高,变量全,时次多的特点,在下载时候较为麻烦。
之前在本版有过关于利用网页可视化接口下载的方法(欧洲气象中心资料(ERA-interim)下载方法简介 http://bbs.06climate.com/forum.php?mod=viewthread&tid=13288&extra=page%3D2)
但是从网页上下载有一个比较大的缺点,就是fields数量有限制(最大不超过20000个),如图:
这样的话,如果要下载多年多日多时次多预报时刻多层的话,就不得不分别多次在下载网页进行手动的选择,并耐心等待数据文件的生成,才能下载。
近日,经同学推荐和帮助,学习了可以利用python脚本通过ecmwf提供的api来下载era的数据(https://software.ecmwf.int/wiki/ ... ta+servers+in+batch),这个在论坛的python板块有朋友提过,但未进行说明。在此,我来简介下。
step1: ptython的下载和安装:
在这个网页 https://www.python.org/download/ 选择对应32位还是64位的系统下载,这里建议下载Python 2.7.6,然后安装好。
step2:ptython脚本下载和调试:
(1)在前面提到的batch access网页上 https://software.ecmwf.int/wiki/display/WEBAPI/Accessing+ECMWF+data+servers+in+batch 往下拖动,会看到
下载这个ecmwf-api-client-python.tgz,并解压。解压后,对子文件夹ecmwfapi的api.py右键,选择Edit with IDLE
找到这样一行:
KEY = None
URL = None
EMAIL = None
这里需要根据我们之前注册过的利用网页下载的账号进行修改(没有账号?那就注册一个呗),key的获取地址:https://api.ecmwf.int/v1/key/),根据这个网页提供的key,e-mail,url进行修改,这里注意,URL = "https://api.ecmwf.int/v1",由于era验证的升级,这个网页上提供的http后面没有s,我们需要自己加一下,修改成如下图这样就可以啦。
(2)各个资料集下载权限的获取:
在 https://software.ecmwf.int/wiki/display/WEBAPI/Accessing+ECMWF+data+servers+in+batch 上找到下面这个:
你要下载哪个资料集,就点击哪个的general,点进去accpet它的说明就行。
(3)下载脚本的运行试验:
在刚才解压的ecmwf-api-client-python文件夹下面有一个example.py文件,同样,我们右键Edit with IDLE打开,在菜单栏选择run,点击run module运行,
运行窗口如下:
如果你按照步骤正确的来的话,就会出现上图的成功运行结果,在ecmwf-api-client-python文件夹下也会成功出现一个data.grib的数据文件。我在图上进行标注,你也可以利用所生成的数据文件的绝对地址复制到下载工具里面下载(如果你也跟我一样用的是某校校园网,下载欧洲中心速度很慢的话)
step3:修改下载脚本,下载自己需求的数据
前面的内容都属于基本准备工作,这里开始结合个人需求进行选择和下载,这里我结合一个下载Era_interim的,从1979到2013年、逐日、17层、一日四次的U风资料nc格式文件的例子来说明。
脚本内容如下(中文是说明,不是代码):
#!/usr/bin/env python
from ecmwfapi import ECMWFDataServer
server = ECMWFDataServer()
data=["1979","1980","1981","1982","1983"]
for idata in range(len(data)):这里写了一个循环,根据data里面的年份循环
server.retrieve({
'dataset' : "interim",这里是数据集名称
'step' : "0",这里是预报时长,
#'number' : "all",这是指的是集合预报,集合全部(all)
'levtype' : "pl",这里是层次类别,高空多层是pl,地面单层是sl
'date' : data[idata]+"0101"+"/to/"+data[idata]+"1231",这里是下载时间段
'time' : "00/06/12/18",这里是下载时次
#'origin' : "all",这里选择的是哪几个个预报中心
#'type' : "pf",这里选择的是集合预报(pf)还是控制预报(fc)
'param' : "u",这里是下载变量名
'levelist': "1000/925/850/700/600/500/400/300/250/200/150/100/70/50/30/20/10",这里是下载层次
'area' : "90/0/0/180",这里是下载区域范围,按照 90N -180W -90S 180E的范围填写
'grid' : "2/2",这是是格点精度
'format' :'netcdf',这里是下载格式,不写的话是下载grib文件的
'target' : "D:/era_down/u/u.day."+data[idata]+".nc"这里是下载路径和文件名,netcdf文件自然后缀名是nc
})
#自己写的脚本文件注意要放在ecmwf-api-client-python的文件夹下面。
#关于变量名,这里写的是对应下载数据文件里面的变量名,这里是tigge里面的变量名说明页 http://tigge.ecmwf.int/tigge/d/show_archive/table=parameters/ ,其他的我目前也没有找到,实在不知道就先用网页随便下载一个小一点的打开查看下,{:soso_e153:}
########################################################################################
这里,我发此帖也是想抛砖引玉,因为我对于这样利用api+脚本方式下载资料也是第一次成功尝试,在近日的下载过程中也发现了诸如脚本下载速度比网页的慢(所以利用脚本生成的绝对地址利用下载工具下),由于网络不稳定造成的脚本运行报错,不知道如何利用脚本下载逐月资料(这个好像有点鸡肋,因为逐月资料fields少,直接在网页下就好了)等问题,也希望大家能够帮我补充和解答。
下面我把教程中的一些相关文件下载放在这里:
python-2.7.6.amd64.msi
(15.9 MB, 下载次数: 824)
|
评分
-
查看全部评分
|