Мой сайт
Меню сайта
Мини-чат
Наш опрос
Оцените мой сайт
Всего ответов: 1
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2013 » Август » 5 » Океанология. Океанография
14:16
 

Океанология. Океанография

Большую часть времени у океанолога занимает общение с различными программами и написание небольших программ для обработки и визуализации данных. Обсуждению этого безобразия и посвящён данный раздел.

Доброго времени суток. Недавно возникла необходимость представить визуализацию данных, полученных пакетом IAPP (International ATOVS Processing Package). После недолгих поисков, понял, что пакет GMT может сделать как раз то, что мне нужно. Однако теперь встала такая проблема. Если я правильно понимаю, представление данных в формате netCDF возможно двумя путями: gridded и pixel. В моем случае это пиксельное представление, т.е. данные и информация о них (например широта и долгота) представлены так:
Код: Выделить всё
netcdf uwretrievals {
dimensions:
Num_of_FOVs = 9 ;
Pres_Levels = 42 ;
Across_Track = 18 ;
Hirs_Chans = 19 ;
AmsuA_Chans = 15 ;
AmsuB_Chans = 5 ;
Along_Track = UNLIMITED ; // (36 currently)
variables:
...
float Latitude(Along_Track, Across_Track) ;
Latitude:long_name = "Geodetic Latitude" ;
Latitude:units = "degrees_north" ;
Latitude:scale_factor = 1. ;
Latitude:add_offset = 0. ;
Latitude:Parameter_Type = "IAPP Output" ;
Latitude:valid_range = -90.f, 90.f ;
Latitude:_FillValue = -999.f ;
float Longitude(Along_Track, Across_Track) ;
Longitude:long_name = "Geodetic Longitude" ;
Longitude:units = "degrees_east" ;
Longitude:scale_factor = 1. ;
Longitude:add_offset = 0. ;
Longitude:Parameter_Type = "IAPP Output" ;
Longitude:valid_range = -180.f, 180.f ;
Longitude:_FillValue = -999.f ;
...

// global attributes:
:Start_Scan_Line_Year = 1998 ;
:Start_Scan_Line_DOY = 203 ;
:Start_Scan_Line_Time = 327700 ;
:End_Scan_Line_Year = 1998 ;
:End_Scan_Line_DOY = 203 ;
:End_Scan_Line_Time = 340500 ;
:IAPP_Version_Number = 2.1f ;
:Satellite_Number = 15 ;
data:

Latitude =
71.7692, 73.4554, 74.7485, 75.8005, 76.6941, 77.4788, 78.1874, 78.8428,
79.4621, 80.0588, 80.644, 81.2272, _, 82.4196, 83.0378, 83.6642, 84.264,
84.725,
71.4339, 73.0846, 74.3451, 75.3665, 76.2303, 76.9854, _, 78.2886, 78.8754,
79.4372, 79.9844, 80.5253, 81.067, 81.614, _, 82.7171, 83.2318, 83.6184,
71.037, 72.6477, 73.8723, 74.8601, 75.6917, 76.4154, 77.0626, 77.6552,
78.209, 78.7361, 79.2461, 79.7466, 80.2436, 80.7406, 81.2373, 81.7247,
82.1738, 82.5067,
...
Longitude =
-171.4094, -173.1518, -174.7718, -176.3309, -177.8719, -179.4305, 178.9591,
177.2603, 175.4299, 173.4132, 171.1368, 168.497, _, 161.4273, 156.3695,
149.5041, 139.6771, 125.0148,
-174.8827, -176.9291, -178.8138, 179.3892, 177.6297, 175.8669, _, 172.1805,
170.1741, 167.9906, 165.56, 162.7863, 159.5327, 155.5945, _, 144.1975,
135.3896, 122.9257,
...

Понял это только когда пытался уже сделать представление следующим способом:
Код: Выделить всё
#!/bin/sh
makecpt -Cno_green -T200/300/1 > otemp.cpt
gmtset BASEMAP_TYPE FANCY PLOT_DEGREE_FORMAT ddd:mm:ssF GRID_CROSS_SIZE_PRIMARY 0.05i
pscoast -R100/160/50/70 -JM1/1/40 -K -B10g5 -Dl -N1/Thick -N2/Thinnest -A500 -Glightgray Wthinnest > otemp.ps
grdimage -R1/80/10/50 -O -JM1/1/40 "uwretrievals.nc?Temperature_Retrieval[0,0]" -Cotemp.cpt -Bg30 >> otemp.ps

Если я правильно все понял, то т.к. данные записаны в пиксельном представлении, то соотв-но команда grdimage выводит их не привязанными к широте и долготе. А сами широты и долготы хоть и являются переменными, но их нет в качестве размерностей в явном виде. Есть только Along_Track и Across_Track.
Теперь собственно вопрос: Можете ли Вы помочь мне привести эти данные к такому виду, чтобы их можно было легко визуализировать и наложить на карту местности (учитывая что все пиксели привязаны к опр. географической точке)? Заранее спасибо за помощь.
Артем
Новичок
Сообщения: 40
Зарегистрирован: Вт июн 03, 2008 7:13 am
Ок. здесь всё очень просто (как оказалось ;).

Для начала вот вся программа для визуализации полей температуры и удельной влажности на основных изобарических поверхностях:
http://pastebin.com/f6dce5867

Код "немного" неуклюжий, но для своих первых работ вполне подошёл.
Сразу замечу, следите в начале за переменными путями (импорт-экспорт, и т.д.).

Использование такое:
Код: Выделить всё
./vismaps.py iappfile.nc


Я много информации записывал прямо в имя файла. Информацию брал из имён, сформированных AAPP.

Все массивы данных преобразовывал в ряды, при этом выкидывал значения "-999.0".

С PyNGL делал всё, что в ссылке постом выше было. Суть лежит в использовании функции SfXArray, SfYArray для использования псевдо-регулярной сетки.

В самом конце отрисовка шла в таком порядке - карта, искомый параметр, под конец - маркеры в точках сканирования.

Это в кратце. Код наверное запутанный, всё таки на нём учился на питоне писать. Если есть вопросы ещё спрашивай, можно вместе довести до ума скрипт.

PS. А что с AAPP не так?
Процесс обработки такой - сначала конвертировал файлы, полученные через сканексовскую станция "Алиса" их же конвертером. Потом скачивал tbus файл, для декоммутации. AAPP отрабатывает нормально. Но иногда без очевидных причин NOAA 17 не проходит декоммутацию, ещё буду в МетОффис писать по этому поводу. Результаты обработки AAPP подсовывал IAPP, вместе с модельным данными, от Хала Вульфа, на страничке IAPP есть прямая ссылка на них.
В конце - PyNGL. Вроде всё.

PPS. Поделись, для чего IAPP используешь?
itmi
Не новичок
Сообщения: 81
Зарегистрирован: Вт окт 23, 2007 3:08 pm
Откуда: Гамбург/Санкт-Петербург
Просмотров: 168 | Добавил: sfyinet | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск
Календарь
«  Август 2013  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Сделать бесплатный сайт с uCoz