Astronomia (2)

Przykład wykorzystania oprogramowania IDL, do stworzenia animacji cienia rzucanego przez księżyc, podczas tegorocznego całkowitego zaćmienia słońca w USA. Autorem animacji jest Zachary Norman, który do jej opracowania wykorzystał kilka różnych technologii umożliwiających dostęp, pobieranie i wizualizację danych.

Przed przystąpieniem do szczegółów, prezentujemy pojedynczą klatkę wygenerowanej animacji - obraz został przetworzony przy użyciu funkcji programu IDL: hist_equal() zawierającą tabelę kolorów stosowaną do podkreślenia cienia rzucanego przez księżyc.


Autor miał zastrzeżenia dotyczące jakości danych GOES dostępnych w AWS. Na stronie internetowej, o której wspomnimy poniżej, stwierdził: „Dane GOES-16 ABI L1b i CMI zostały wstępnie zatwierdzone, ale należy pamiętać, że ponieważ satelita GOES-16 nie został uznany za operacyjnego, jego dane są nadal uznane jako wstępne i cały czas weryfikowane. Na szczęście dla celów tego przykładu, chodziło o znalezienie ładnego obrazu zaćmienia.”

Aby to zrobić, procedura przygotowania danych wyglądała następująco:
  1. Potwierdzenie, że dane GOES (Geostationary Operational Environmental Satellite) są dostępne na platformie Earth on AWS
  2. Użycie węzła node.js, w celu utworzenia skryptu, wykorzystującego moduły open-source JavaScript z NPM do kwerendy i pobrania danych na zasoby lokalne
  3. Utworzenie za pomocą IDL skryptu wyodrębniającego dane i prawidłowego ich wyświetlania na mapie
  4. Rozbudowa skryptu w celu przetworzenia szeregu obrazów i wygenerowania animacji wideo
Pierwszy punkt tworzenia animacji dotyczy portalu Earth on AWS, który pozwala na bezpłatną wymianę danych udostępnianych przez Amazon. Oprócz danych GOES można tam także znaleźć Landsat, MODIS, Sentinel 2 i inne. Taki łatwy dostęp do danych stanowi świetny sposób na rozwijanie interesujących aplikacji, bez kłopotów związanych z koniecznością ich zakupu. Najważniejsza część opracowania dowolnej aplikacji, w tym także tego przykładu, to wykonanie badania i zrozumienie, jak wyekstraktować dane z AWS i użyć je w aplikacji.

Aby uzyskać dostęp do danych znajdujących się w Amazon S3, wykorzystany został bezpłatny JavaScript z pakietu AWS SDK (pomaga on pozbyć się skomplikowanego kodowania, udostępniając obiekty JavaScript dla usług AWS, w tym Amazon S3, Amazon EC2, DynamoDB i Amazon SWF). Pakiet został użyty do wyszukiwania i identyfikowania plików, których pobranie było wymagane na podstawie różnych parametrów wejściowych. W celu ograniczenia wyszukiwania, użyto produktu ABI-L1b-RadF, o którym można dowiedzieć się więcej na stronie:
http://www.goes-r.gov/

W projekcie wykorzystano dane pochodzące z Kolorado, zarejestrowane pomiędzy godziną 10:00 a 14:00 dnia 21 sierpnia 2017 roku.

Dało to wynik 60 różnych scen (mniej więcej jedna co 5 minut dla używanych zbiorów danych). Warto wspomnieć, że aby zbierać i przeszukiwać dane za pomocą pakietu AWS S3 SDK, trzeba posiadać konto i powiązany z nim klucz. Poniżej przekazujemy link do dokumentacji Amazon, w której znajdą Państwo informacje nt. wymagań dot. rejestracji:
https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/

Następnie pobrane zostały dane ze wspomnianego okresu, które łącznie zajmowały 900 MB. W kolejnym kroku został napisany kod IDL, który wyszukiwał pliki, wyodrębniał wartości promieniowania i umieszczał poprawne dane na wykresie. Chris Torrence, długoletni programista IDL, dodał wsparcie dla odwzorowania kartograficznego GOES w IDL, a odwzorowanie to jest częścią najnowszej wersji IDL 8.6.1. Aby go użyć, można wystarczy określić rzut mapy "GOES-R" podczas tworzenia obrazu lub odwzorowania. Poniżej znajduje się przykład IDL, pokazujący, jak zapisać takieg odwzorowanie do pliku 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)

Z tego miejsca kod został właśnie zamknięty w pętli, aby możliwe było wygenerowanie mapy dla każdego pliku, uchwycenie wyglądu mapy, a następnie dodanie każdej klatki animacji do pliku MP4 za pomocą pakietu IDL. Oto link do wygenerowanej animacji, pokazującej, jak cień księżyca przechodzi przez terytorium USA:
https://www.facebook.com/HarrisGeospatialSolutions/videos/10155456330801006/

Wszystkie potrzebne do wykonania animacji pliki znaleźć można na stronie:
https://github.com/znorman17/goes-tools


Script logo