这里有人做气象或地球科学工作吗?我正在尝试使用GRIB2格式的数据文件。有可用的库,特别是Unidata GRIB Java解码器。我可以确切地看到如何在大型线性阵列中提取数据,但我想要做的是通过lat / long访问值。找不到任何关于如何做到的简单示例。建议?
TIA!
答案 0 :(得分:1)
您需要获取投影类型以及参数,然后使用它来将坐标从lat / long映射到网格x / y(参见f {。geotools website中的类CoordinateReferenceSystem
)。
答案 1 :(得分:1)
您可以使用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/
的程序的安装目录中找到它。答案 2 :(得分:1)
wgrib2程序允许您使用-lon选项在选定的纬度/经度位置提取时间序列,例如:
wgrib2.exe input_file.grb2 -lon 360 90> output_file.txt
答案 3 :(得分:1)
将python与pygrib模块一起使用通常就像魅力一样。您可以使用以下代码提取lats / lons和数据。
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
现在可以使用底图工具包轻松查看数据或将其导出到合适的文件:)
答案 4 :(得分:0)
您可以使用GRIB2Tools,请参阅https://github.com/philippphb/GRIB2Tools。从InputStream读取GRIB2文件后,如
RandomAccessGribFile gribFile = new RandomAccessGribFile("", "");
gribFile.importFromStream(inputstream, 0);
您可以根据lat / lon:
访问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));