Задача: перевести данные из бинарного формата в netCDF Инструменты: PyNIO
В я рассказывал почему бинарники это далеко не всегда хорошо и зачем нам бывает нужно перевести их в формат netCDF. Там я приводил пример того как можно это сделать при помощи NCL. Здесь я рассмотрю способ который возможно подойдёт большему количеству народа, поскольку не предусматривает установку NCL, а даёт возможность воспользоваться уже установленным в составе PyNGL модулем PyNIO. Этот модуль предназначен в частности для открытия и создания netCDF файлов, и по моим впечатлениям делает это гораздо более простым способом чем NCL (хоть PyNGL и производная NCL :)).
Задача: взять данные, которые распространяются в виде жуткой кучи бинарников и сделать из неё один красивый, легко обрабатываемый файл netCDF Инструмент: NCL
В незапамятные времена, когда интернет у всех был медленным и дисковое пространство было на вес золота, королём форматов для распространения данных был, так называемый, бинарный формат. Это обычная последовательность нулей и единиц, которая не содержит в себе никакой информации о данных находящихся внутри. Чтобы "расшифровать" его вам нужно добыть информацию о структуре файла, о порядке байтов (endianness), о типе данных (float, integer), о том не умножены ли данные на какое-нибудь значение, что за единицы измерения используются, что за координаты, за какую дату и время эти данные и так далее и тому подобное. Геморрой. Единственное достоинство бинарного формата это размер получающихся файлов, он сравнительно мал.
Прогресс не стоял на месте и были изобретены, так называемые, self-describing форматы, одним из которых является netCDF. Преимущество этих форматов в том, что вам не надо пытать создателей файлов для того, чтобы получить информацию о его содержании, в идеале вся необходимая информация должна уже содержаться в самом файле. Это позволяет создавать приложения однообразно работающие с различными данными представленными в self-describing форматах, а не заново изобретать велосипед для каждого нового бинарника.
Размер файлов netCDF больше чем бинарных, но если это было очень важным в 90е, то в 2000х большинству нет разницы качать один или два мегабайта, телефонные модемы постепенно вымирают и слава богу. Тем не менее, некоторые несознательные граждане продолжают предоставлять данные в бинарном формате, то-ли по привычке, то-ли ленясь изменять схемы обработки, работающие с 90х (работает, не трогай). Ещё одной причиной может быть то, что создание правильного netCDF файла это не самая простая задача (в отличии от его чтения).
Далее я приведу код для довольно простого создания netCDF файла из бинарных при помощи языка программирования для наук о Земле NCL .
В наличии - матрица с данными и две матрицы такого же размера что и матрица с данными, в одной находятся широты в другой долготы.
Инструменты - Matlab и GoogleEarth
Чтобы не отрываться от реальности, скажу что данные - это концентрация льда по SSM/I , NASA Team алгоритм. Решение грязное, медленное и нудное, правильного и красивого мне найти пока не удалось )