【发布时间】:2011-11-14 02:55:11
【问题描述】:
这里有从事气象或地球科学工作的人吗?我正在尝试使用 GRIB2 格式的数据文件。有可用的库,特别是 Unidata GRIB Java 解码器。我可以确切地看到如何在一个大的线性数组中提取数据,但我想做的是按纬度/经度访问值。找不到任何简单的例子来说明如何做到这一点。有什么建议吗?
TIA!
【问题讨论】:
这里有从事气象或地球科学工作的人吗?我正在尝试使用 GRIB2 格式的数据文件。有可用的库,特别是 Unidata GRIB Java 解码器。我可以确切地看到如何在一个大的线性数组中提取数据,但我想做的是按纬度/经度访问值。找不到任何简单的例子来说明如何做到这一点。有什么建议吗?
TIA!
【问题讨论】:
您将需要获取投影类型和参数,然后使用它将坐标从纬度/经度映射到网格 x/y(参见 geotools website 中的 CoordinateReferenceSystem 类)。
【讨论】:
您可以使用 DEGRIB 工具探测指定纬度/经度的数据。请参阅此处http://www.weather.gov/mdl/degrib/txtview.php?file=degrib.txt&dir=base Windows 示例将是“degrib.exe myfile.grib -P -pnt 40.0,-10.0 -Interp 2”。如果您需要DEGRIB.EXE,您可以在名为VRTOOL http://www.tecepe.com.br/nav/vrtool/的程序的安装目录中找到它
【讨论】:
wgrib2 程序允许您使用 -lon 选项在选定的纬度/经度位置提取时间序列,例如:
wgrib2.exe input_file.grb2 -lon 360 90 > output_file.txt
【讨论】:
将 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
现在可以使用底图工具包轻松可视化数据或将其导出到合适的文件:)
【讨论】:
您可以使用 GRIB2Tools,请参阅 https://github.com/philippphb/GRIB2Tools。从 InputStream 中读取 GRIB2 文件后,如
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));
【讨论】: