Java 如何将NetCDF转换为.grd?

Java 如何将NetCDF转换为.grd?,java,netcdf,netcdf-java,Java,Netcdf,Netcdf Java,我有两个NetCDF文件,我想通过编程将其转换为Surfer 6的“.grd”格式 NetCDF只能转换为NetCDF,我似乎也无法与Cydwin一起正常运行 如何在java中转换这些文件(但使用Windows,不使用Cydwin…)我还没有找到一个java库来直接使用这些文件,但有一种方法可以(间接地)在java中进行转换: 可以通过Windows中的命令行来转换所述文件 安装很简单:从下载他们的exe,然后运行它。这将安装所需的一切,并设置必要的环境变量(必须在安装过程中勾选) 之后,可以通

我有两个NetCDF文件,我想通过编程将其转换为Surfer 6的“.grd”格式

NetCDF只能转换为NetCDF,我似乎也无法与Cydwin一起正常运行


如何在java中转换这些文件(但使用Windows,不使用Cydwin…)

我还没有找到一个java库来直接使用这些文件,但有一种方法可以(间接地)在java中进行转换:

可以通过Windows中的命令行来转换所述文件

安装很简单:从下载他们的exe,然后运行它。这将安装所需的一切,并设置必要的环境变量(必须在安装过程中勾选)

之后,可以通过短命令在
cmd
中运行转换,例如:

gmt grdconvert in.nc out.grd=sf -V
自动检测输入格式(在我的例子中是NetCDF)
sf
(“Golden Software Surfer format 6”)说明了所需的输出格式。可以找到所有支持的输入/输出格式的概述。我还使用
sd
(“Golden Software Surfer format 7”)对其进行了测试,但它确实是只读的(如链接中所述)

上面的命令要求您首先将
cd
复制到输入文件,然后在同一文件夹中创建输出文件。相反,您也可以跳过
cd
,直接为其提供路径:

gmt grdconvert C:\myfolderpath1\in.nc C:\myfolderpath2\out.grd=sf -V
可以在Java中使用
cmd
,如图所示。我的例子如下所示:

Process p = null;
try {
    //final String command = "gmt grdconvert "+in+" "+out+"=sf -V"; //Version 1: cd to folder first, input folder == output folder
    final String command = "gmt grdconvert "+inpath+" "+outpath+"=sf -V"; //Version 2: No cd, different folders possible

    ProcessBuilder builder = new ProcessBuilder(
        //"cmd.exe", "/c", "cd \""+path+"\" && "+command); // Version 1
        "cmd.exe", "/c", command); //Version 2
    builder.redirectErrorStream(true);
    p = builder.start();
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;

    while (true) {
        line = br.readLine();
        if (line == null) { break; }
        System.out.println(line);
    }
        
    br.close();
} catch(IOException e) {
    e.printStackTrace();
} finally {
    if(p!=null) { p.destroy(); }
}
这还会将由于
-V
而输出的所有内容打印到控制台