跳转至

日食:追踪月球阴影的GOES卫星数据之旅

原文链接:https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/the-eclipse-tracking-where-the-moons-shadow-goes

13786 文章评分:

4.8

日食:追踪月球阴影的GOES卫星数据之旅

扎卡里·诺曼 2017年9月11日,星期一

这是我近期使用IDL创造的最酷的例子之一。在这篇博客中,我将详细介绍如何利用多种技术访问、下载和可视化数据,从而创建了美国大日全食期间月球阴影的动画。在深入细节之前,这里先提供一个视觉亮点,展示了生成动画的单个帧。请注意,此图像是使用IDL的hist_equal()函数处理的,并且应用了颜色表以突出月球的阴影。

现在进入细节!首先,我想就AWS(亚马逊云服务)上可用的GOES数据状态添加一个小声明。在下面提到的网页上,有如下说明:虽然GOES-16 ABI L1b和CMI数据已达到临时验证阶段,但请注意,由于GOES-16卫星尚未宣布投入业务运行,其数据仍被认为是初步的并处于测试阶段。幸运的是,对于本例的目的而言,我们只是想获得日食的漂亮图像。为此,工作流程包括:

  1. 发现GOES数据可在AWS的"Earth on AWS"上获取。
  2. 使用node.js创建一个脚本,利用NPM的开源JavaScript模块来查询并在本地下载数据。
  3. 使用IDL编写脚本以提取数据,并在地图上正确显示数据。
  4. 扩展脚本以处理一系列图像并生成数据的视频动画。

现在详细说明我如何完成每一步。对于第一步(或许不算是真正的一步),我认为谈谈AWS上的地球数据会很有帮助。如果你还没看过,你应该去看看亚马逊的这个优秀页面,它列出了亚马逊提供的所有免费数据。除了GOES数据,你还可以找到Landsat、MODIS、Sentinel 2等数据。如此便捷的数据访问方式,是开发有趣应用程序的好方法,无需为想要使用的数据购买而烦恼。开发任何应用程序(包括本例)最重要的部分,是做足功课并理解如何从AWS拉取数据并在应用程序中使用。

为了访问存储在亚马逊S3存储中的数据,我使用了JavaScript,以利用免费的AWS SDK,该SDK包含易于使用的工具来查询S3"存储桶"的内容。我用它来根据不同的输入参数搜索和识别需要下载的文件。为了缩小搜索范围,我坚持使用ABI-L1b-RadF产品,你可以在https://www.goes-r.gov/了解更多信息。

针对美国本土大陆的L1b辐射率产品,我搜索数据的具体时间是8月21日科罗拉多时间上午10点到下午2点。这得到了60个不同场景的结果(大约每5分钟一个场景,针对我使用的数据集)。值得一提的是,为了使用AWS S3 SDK下载和搜索数据,你确实需要一个账户以及关联的访问密钥和秘密密钥。如果你没有AWS的访问密钥,这里是亚马逊文档的链接,应该能提供你获取或注册所需的信息:

https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/

获得密钥后,我就能够下载所需时间的数据,总共约900 MB。有了数据之后,我需要编写一些IDL代码来搜索文件、提取辐射率值,并在地图上正确放置数据。IDL的长期开发者克里斯·托伦斯,在IDL中添加了对GOES地图投影的支持,该投影是最近版本(IDL 8.6.1)的一部分。为了使用它,你可以在创建图像或投影时简单地指定'GOES-R'地图投影。为了演示这一点,这里有一个IDL示例,展示了如何针对一个CONUS GOES文件实现这一点:

**data = NCDF_Parse(file, /READ_DATA)

center_lon = data['geospatial_lat_lon_extent', $
  'geospatial_lon_nadir', '_DATA']
radiance = data['Rad','_DATA']

xscale = data['x', 'scale_factor', '_DATA']
xoffset = data['x', 'add_offset', '_DATA']
x_radians = data['x', '_DATA']*double(xscale) + xoffset

yscale = data['y', 'scale_factor', '_DATA']
yoffset = data['y', 'add_offset', '_DATA']
y_radians = data['y', '_DATA']*double(yscale) + yoffset

i = image(hist_equal(radiance), x_radians, y_radians, $
  RGB_TABLE=15, $
  LIMIT=[15,-120, 50, -60], MARGIN=[0.1,0.02,0.08,0.02], $
  MAP_PROJECTION='GOES-R', GRID_UNITS='meters', $
  CENTER_LONGITUDE=center_lon, $
  DIMENSIONS=[1000,600], $
  TITLE='GOES-16 Level 1b Radiance CONUS')
mc = mapContinents(/COUNTRIES)
mc = mapContinents(/US)**

接下来,只需将代码包装在一个循环中,为每个文件生成地图,捕获地图的外观,然后使用IDL将每一帧添加到MP4文件中。这里是生成的官方动画链接,你可以看到月球的阴影如何"GOES"(一语双关)穿越美国:

https://www.facebook.com/NV5GeospatialSoftware/videos/10155456330801006/

如果你想自己尝试一下,你可以在GitHub上找到所有必要的文件(包括一个可以下载并在本地查看的MP4文件):

https://github.com/znorman17/goes-tools

只需知道,用于下载数据的JavaScript代码没有太多的错误捕获功能,因此如果你在代码中犯错,它不会很宽容。请注意,虽然GOES数据集的每个波段可能很小(CONUS影像的波段范围从3 MB到15 MB不等,有一个大约80 MB),但在较长的搜索周期内下载许多文件,如果你的网络连接速度不快,将需要一些时间。

祝你愉快!

EAS 2017:释放遥感数据的价值 UAV toolkit 2.1