GRIB 文件到 Java 中的文本
GRIB file to text in Java
我正在尝试创建一个小型库,以使用 Java 从飞行模拟器读取 grib 数据。
创建了读取二进制文件并将其转换为字符串的代码。
public class MainClass
{
final static String FILE_NAME = "PATH\global_winds.grib";
public static void main(String... aArgs) throws IOException
{
MainClass binary = new MainClass();
byte[] bytes = binary.readFile(FILE_NAME);
String myString = asciiBytesToString(bytes);
System.out.println(myString);
}
byte[] readFile(String aFileName) throws IOException
{
Path path = Paths.get(aFileName);
return Files.readAllBytes(path);
}
public static String asciiBytesToString( byte[] bytes )
{
if ( (bytes == null) || (bytes.length == 0 ) )
{
return "";
}
char[] result = new char[bytes.length];
for ( int i = 0; i < bytes.length; i++ )
{
result[i] = (char)bytes[i];
}
return new String( result );
}
}
文件已读取,returns 乱码。有人熟悉 grib 格式吗?我还以为是用ASCII...
我知道像 NetCDF 这样的第三方库。我正在尝试处理的 grib 文件包含有限的数据,我真的很想制作一个小的 API 来读取这个文件。
谢谢!
GRIB 文件是二进制文件,不是 ASCII 格式。此外,数据是打包的,您需要做一些数学运算才能获得原始值。
为了回答您的问题,GRIB2 使用
- a 参考值 R(IEEE 32 位浮点格式)
- 一个二进制比例因子 E(有符号整数,见下面的评论)
- 一个十进制比例因子 D(有符号整数,见下面的评论)
打包原始数据。参考值 R 用于消除负数,比例因子用于达到所需的精度。根据规范,使用公式
从打包值 p
中恢复原始值 v
v = R + p * 2^E / 10^D
请注意,GRIB2 对有符号整数使用特殊表示法,这与二进制补码不兼容。相反,GRIB2 使用最高有效位表示符号,其余位表示带符号整数的大小。如果设置了最高有效位,则数字为负数。
如果您想了解更多细节,可以在 http://www.theweatherserver.com/#grib2 找到相关文献和规范的列表。
如果您不想查看详细信息,可以使用 https://github.com/philippphb/GRIB2Tools 中的 GRIB2Tools Java 库,它会执行所有数学运算并允许使用经度和纬度访问数据。
我正在尝试创建一个小型库,以使用 Java 从飞行模拟器读取 grib 数据。
创建了读取二进制文件并将其转换为字符串的代码。
public class MainClass
{
final static String FILE_NAME = "PATH\global_winds.grib";
public static void main(String... aArgs) throws IOException
{
MainClass binary = new MainClass();
byte[] bytes = binary.readFile(FILE_NAME);
String myString = asciiBytesToString(bytes);
System.out.println(myString);
}
byte[] readFile(String aFileName) throws IOException
{
Path path = Paths.get(aFileName);
return Files.readAllBytes(path);
}
public static String asciiBytesToString( byte[] bytes )
{
if ( (bytes == null) || (bytes.length == 0 ) )
{
return "";
}
char[] result = new char[bytes.length];
for ( int i = 0; i < bytes.length; i++ )
{
result[i] = (char)bytes[i];
}
return new String( result );
}
}
文件已读取,returns 乱码。有人熟悉 grib 格式吗?我还以为是用ASCII...
我知道像 NetCDF 这样的第三方库。我正在尝试处理的 grib 文件包含有限的数据,我真的很想制作一个小的 API 来读取这个文件。
谢谢!
GRIB 文件是二进制文件,不是 ASCII 格式。此外,数据是打包的,您需要做一些数学运算才能获得原始值。
为了回答您的问题,GRIB2 使用
- a 参考值 R(IEEE 32 位浮点格式)
- 一个二进制比例因子 E(有符号整数,见下面的评论)
- 一个十进制比例因子 D(有符号整数,见下面的评论)
打包原始数据。参考值 R 用于消除负数,比例因子用于达到所需的精度。根据规范,使用公式
从打包值p
中恢复原始值 v
v = R + p * 2^E / 10^D
请注意,GRIB2 对有符号整数使用特殊表示法,这与二进制补码不兼容。相反,GRIB2 使用最高有效位表示符号,其余位表示带符号整数的大小。如果设置了最高有效位,则数字为负数。
如果您想了解更多细节,可以在 http://www.theweatherserver.com/#grib2 找到相关文献和规范的列表。
如果您不想查看详细信息,可以使用 https://github.com/philippphb/GRIB2Tools 中的 GRIB2Tools Java 库,它会执行所有数学运算并允许使用经度和纬度访问数据。