首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GRIB2Tools访问GRIB数据会导致IndexOutOfBoundException

使用GRIB2Tools访问GRIB数据会导致IndexOutOfBoundException
EN

Stack Overflow用户
提问于 2021-10-13 13:17:49
回答 1查看 64关注 0票数 0

我正在操作GRIB2预测文件,并且在使用GRIB2Tools库时遇到了问题。

我有一个表示GRIB2数据集内容的Array[Byte]。因为我希望能够在特定位置获得值,所以我将此变量的内容写入一个文件,然后将其作为InputStream加载,以便在getValueAtLocation(id, lat, long)和/或interpolateValueAtLocation(id, lat, long)中使用它。我可以很好地读取文件的元数据,但是只要我调用前面两个方法中的一个,我就会得到一个IndexOutOfBoundException。

下面是我用来在文件上编写GRIB2字节数组(变量bytes),然后将其作为InputStream加载的Scala代码:

代码语言:javascript
复制
val file: File = new File("my-data.grib")
val temp = FileUtils.writeByteArrayToFile(file, bytes)
val input = new FileInputStream("my-data.grib")
val grib: RandomAccessGribFile = new RandomAccessGribFile("my-grib", "my-data.grib")      
grib.importFromStream(input, 0)

根据README.md的说法,我做得很对,不是吗?

然后,我可以轻松地从GRIB2获取这些元数据(使用GRIB2FileTest.java的一些代码):

代码语言:javascript
复制
Body format : GRIB2
Date: 12.10.2021
Time: 9:0.0
Generating centre: 85
Forecast time: 5
Parameter category: 0
Parameter number: 0
Covered area:
   from (latitude, longitude): 51.47, 348.0
   to: (latitude, longitude): 37.5, 16.0

当使用id = 0lat = 48long = 2调用getValueAtLocation(id, lat, long)interpolateValueAtLocation(id, lat, long)时(在读取元数据时似乎还可以),我得到了这样的结果:

代码语言:javascript
复制
java.lang.IndexOutOfBoundsException
    at java.nio.Buffer.checkIndex(Buffer.java:551)
    at java.nio.HeapByteBuffer.getShort(HeapByteBuffer.java:327)
    at com.ph.grib2tools.grib2file.RandomAccessGribFile.interpolateValueAt(RandomAccessGribFile.java:196)
    at com.ph.grib2tools.grib2file.RandomAccessGribFile.interpolateValueAtLocation(RandomAccessGribFile.java:133)

错误行似乎是这个文件RandomAccessGribFile.java:196中的这一行:

代码语言:javascript
复制
float val11 = sec5.calcValue(ByteBuffer.wrap(data).getShort((jidx1*gridDefinition.numberPointsLon+iidx1)*bytesperval));

是我做错了什么,还是库源代码或我的GRIB文件有问题?该文件来自一家国家预报机构,应该没问题。我在附加的截图中给出了GRIB2文件的结构(来自Panoply软件)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 07:21:08

在对Grib2Tools库的开发人员进行了一些研究之后,发现问题来自于我的GRIB文件。我的国家的国家预测组织,法国气象局,在数据上添加了一个位图,以表明在给定的坐标下是否有可用的值。Grib2Tools不支持此功能,这会导致数据误解和执行错误。多亏了dev,这个位图特性很快就会得到支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69556298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档