Чтение файлов Grib2 для длинных / длинных данных - PullRequest
1 голос
/ 10 сентября 2011

Кто-нибудь здесь занимается метеорологией или науками о Земле? Я пытаюсь работать с файлами данных формата GRIB2. Доступны библиотеки, в частности Unidata GRIB Java Decoder. И я точно вижу, как извлечь данные в большом линейном массиве, но я хочу получить доступ к значениям по широте / долготе. Не могу найти простой пример того, как это сделать. Предложения?

ТИА!

Ответы [ 5 ]

1 голос
/ 14 мая 2014

Использование python с модулем pygrib обычно работает как шарм. Вы можете извлечь латы / данные и данные с помощью следующего кода.

import pygrib

gr=pygrib.open(file)
data=values.(gr[key]) #use the key to the variable of interest to extract its data
lats,lons=(gr.readline()).latlons() #extract coordinates

Теперь можно легко визуализировать данные с помощью набора базовых карт или экспортировать их в подходящий файл:)

1 голос
/ 25 сентября 2011

Вы можете использовать инструмент DEGRIB для проверки данных на заданном широте / долготе. См. Здесь http://www.weather.gov/mdl/degrib/txtview.php?file=degrib.txt&dir=base Примером окна будет «degrib.exe myfile.grib -P -pnt 40.0, -10.0 -Interp 2». Если вам нужен DEGRIB.EXE, вы можете найти его в каталоге установки программы с именем VRTOOL http://www.tecepe.com.br/nav/vrtool/

1 голос
/ 30 января 2013

Программа wgrib2 позволяет извлекать временные ряды в выбранном местоположении широты / долготы с помощью параметра -lon, например:

wgrib2.exe input_file.grb2 -lon 360 90> output_file.txt

1 голос
/ 10 сентября 2011

Вам потребуется получить тип проекции вместе с параметрами, а затем использовать его для отображения координат от широты / долготы до сетки х / у (см. Класс CoordinateReferenceSystem на веб-сайте geotools ).,

0 голосов
/ 09 октября 2017

Вы можете использовать GRIB2Tools, см. https://github.com/philippphb/GRIB2Tools. После чтения в файле GRIB2 из InputStream, например

RandomAccessGribFile gribFile = new RandomAccessGribFile("", "");
gribFile.importFromStream(inputstream, 0);

, вы можете получить доступ к данным файла GRIB на основе широты / долготы:

double longitude = ...   // in degrees
double latitude = ...    // in degrees
float val = gribFile.getValueAt(0, GribFile.degToUnits(latitude), GribFile.degToUnits(longiude));

Вы также можете получить интерполированные данные для положений широты / долготы, которые не находятся точно в сетке:

double longitude = ...   // in degrees
double latitude = ...    // in degrees
float val = gribFile.interpolateValueAt(0, GribFile.degToUnits(latitude), GribFile.degToUnits(longiude));
...