开放气象数据资料推荐

前言

本来这篇博客是打算分享一下如何使用 plotly制作交互式的气象地图的,但是为了寻找合适的数据资料,结果就逐渐跑偏了,最好觉得介绍一下数据资料的获取也是有必要的,所以就变成了现在这个样子。

哥白尼计划

机缘巧合,找到了欧洲的哥白尼计划,发现上面有好多数 😀

哥白尼计划(Copernicus Programme),又称:全球环境与安全监测计划(Global Monitoring for Environment and Security,GMES),由欧洲委员会和欧洲太空总署联合倡议,于2003年正式启动的一项重大航天发展计划,主要目标是通过对欧洲及非欧洲国家(第三方)现有和未来发射的卫星数据及现场观测数据进行协调管理和集成,实现环境与安全的实时动态监测,为决策者提供数据,以帮助他们制定环境法案,或是对诸如自然灾害和人道主义危机等紧急状况作出反应,保证欧洲的可持续发展和提升国际竞争力。

该计划由欧洲委员会协调和管理。 它是与成员国,欧洲航天局(ESA),欧洲气象卫星开发组织(EUMETSAT),欧洲中期天气预报中心(ECMWF),欧盟机构和法国海洋监测与预报中心—墨卡托海洋(Mercator Océan)共同实施的,来自卫星以及地面,空中和海上测量系统的大量全球数据正被用于提供信息,以帮助服务提供者,公共当局和其他国际组织改善人类生活。

计划所提供的信息服务可由用户自由和公开地访问!🤩

copernicus

Climate Data Store

具体而言,哥白尼计划中提供数据服务的是Climate Data Store (CDS, https://cds.climate.copernicus.eu ),需要注册以后才能够使用其中的数据。CDS提供气候数据的一站式服务:可以使用Climate Data Store Toolbox基于Python在线开发应用,也可以使用Climate Data Store API获取数据。体验了一下CDS Toolbox,感觉还是挺不错的,不过我们主要还是使用它的数据,所以回到CDS API的使用上来。

cds_toolbox

使用CDS API获取数据

使用CDS API的条件也很简单:

  1. 注册一个账号,获得UID和API Key;
  2. 安装cdsapi包(Python环境下);
  3. 将URL、UID和API Key写到本地的配置文件中。

install_cdsapi

安装好以后就可以构造api请求,在构造请求的时候,可以先在网页上选择好需要的数据类型、时间短、格式等等,系统会自动生成一个API,然后复制到Python程序中即可。

fill_form

get_request

使用OPeNDAP获取ESRL PSD数据

ESRL PSD简介

除了哥白尼计划以外,我们之前在计算厄尔尼诺指数的时候,曾经用到过另外一个——可以说更为强大的——数据库:NOAA Earth System Research Laboratory’s Physical Sciences Division,里面的数据非常丰富,例如ICOADS资料——可能是目前最完整的和最多样化的海-气综合数据集,NCEP/NCAR再分析资料等等。关于ESRL PSD前面或多或少已经介绍过了,感兴趣的可以自己去看一下:

https://psl.noaa.gov/data/

psd_opendap_server

OPeNDAP简介

可能是我之前孤陋寡闻了,也不是这方面的科班出身,刚开始接触到OPeNDAP的时候,一头雾水,这都是些什么玩意儿啊!后来好奇心作祟,才对OPeNDAP有了稍微深入的了解。

OPeNDAP的全称是’Open-source Project for a Network Data Access Protocol’,即“网络数据访问协议开源项目”,旨在通过基于Web的架构和与学科无关的数据访问协议(Data Access Protocol, DAP)来增强对远程结构化数据的检索。DAP基于HTTP协议,旨在实现远程、选择性数据检索,作为易于调用的Web服务在地球科学等领域广泛使用,其当前规范是DAP4,之前的DAP2版本也仍然被广泛使用,由非营利性OPeNDAP公司开发和推进。

因此,OPeNDAP既是非营利组织的名称,也代指OPeNDAP组织开发的协议:“OPeNDAP”代替“DAP”来表示协议。此外,还可以指代整个基于DAP的数据检索架构。得益于DAP的开放性,其他以DAP为中心的体系结构,如THREDDS、ERDDAP,NOAA GEO-IDE UAF ERDDAP等,与OPeNDAP之间有着良好的互操作性。

OPenDAP客户端

为了能够读取OpenDAP服务器上的数据,必须有相应的客户端。客户端的形态五花八门,可以是普通浏览器,甚至是Excel表格,当然最常见的还是软件或者程序包,常用的客户端包括:

  • NCL–NCAR开发的数据分析与可视化平台;
  • GrADS;
  • NCO;
  • Integrated Data Viewer (IDV) ;
  • IDL,商用分析平台;
  • 更多参见:

当然,我更感兴趣的显然是那些可以二次开发的程序包,OPeNDAP在MATLAB、R、ArcGIS、Python等环境下都有相应的程序包,其中Python环境下可以使用pydap包。相关的说明参见:

https://publicwiki.deltares.nl/display/OET/KML+overview+of+OPeNDAP+data#KMLoverviewofOPeNDAPdata-AccessingnetCDF/OPeNDAPdatawithPython

客户端通过URL引用数据集,基于DAP库向DAP服务器发出HTTP请求来请求元数据或内容。内容请求通常先于对描述结构的元数据的请求以及有关引用数据集的其他详细信息。利用该信息,客户端可以构造DAP检索表达式以从源检索特定内容(即,子集)。OPeNDAP服务器提供各种类型的响应,具体取决于客户端请求的具体形式,包括XML,JSON,HTML和ASCII。为了响应内容请求,OPeNDAP服务器可以使用包含具有NetCDF或DAP本机编码的二进制部分的多部分mime文档进行响应。 (这些二进制形式实现了大量数据的传输,如果需要,甚至可以流式传输DAP原生数据。)

总而言之,OPeNDAP通过子集化,聚合和流式传输提高了大规模数据的访问效率。

通过OPeNDAP获取数据

以ESRL PSD上面的数据为例,简要介绍一下OPeNDAP获取数据的流程,大致可分为以下几步:

  1. 通过浏览器访问PSD netCDF OPeNDAP服务器 https://www.esrl.noaa.gov/psd/thredds/catalog.html

  2. 在服务器的数据目录中查找需要的数据;

    image-20210331094204882

  3. 在Data Access Form中构造请求的URL

  4. 将构造的URL复制到DAP客户端中(或Python相应库):

    opendap_dataset_form

因此,我们也可以手动构造OPeNDAP URL,观察上面的格式我们可以发现,URL的构成包括:

  1. OPeNDAP服务器主机名;
  2. OPeNDAP服务器中缀;
  3. 数据集的路径(本例中为netCDF文件);
  4. OPeNDAP扩展名(在复制到客户端中时不包括扩展名)。

最终,构造的样例如下:

http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/ncep.reanalysis/surface/air.sig995.2019.nc

在上述请求的末尾加上’.dds’即为完整的OPeNDAP URL,可以看到请求返回内容:

opendap_response

小结

除了我们上面介绍的哥白尼计划和PSD数据以外,地理、气象领域有许多开放的数据资料,例如NOAA其他领域的资料。之所以介绍上面两种,主要是因为有两者提供了数据获取的API或者程序包。总而言之,数据就像是矿一样,找矿、挖矿都很重要。