如何使用NASA的EGM96.java获得平均海平面以上的准确高度?

如何使用NASA的EGM96.java获得平均海平面以上的准确高度?,java,geolocation,altitude,Java,Geolocation,Altitude,当我试图运行EGM96.java时,它总是抛出IO异常 public static void main(String[] args) { // TODO Auto-generated method stub EGM96 egm = new EGM96("config/EGM96.dat"); LatLon latlon = LatLon.fromDegrees(1.4, 103.9); double offset = egm.getOffset(latlon.ge

当我试图运行EGM96.java时,它总是抛出IO异常

public static void main(String[] args) {
    // TODO Auto-generated method stub
    EGM96 egm = new EGM96("config/EGM96.dat");
    LatLon latlon = LatLon.fromDegrees(1.4, 103.9);
    double offset = egm.getOffset(latlon.getLatitude(),latlon.getLatitude());
}
这将导致IO异常

但是,IO异常在以下情况下消失:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    EGM96 egm = new EGM96("config/EGM96.dat");
    LatLon latlon = LatLon.fromDegrees(1.4, 103.9);
    double offset = egm.getOffset(latlon.getLatitude(),latlon.getLatitude());
    double offset = egm.getOffset(latlon.getLatitude(),latlon.getLatitude());
}
但是我不能有两个同名的变量。如果我试图更改其中一个变量,IO异常将返回


EGM96.java在

上提供,如果您遇到编译器错误,这意味着EGM代码可能会在运行时引发异常,您应该对此进行处理。这通常是通过try-catch块完成的,在该块中,您可以捕获异常并打印错误消息或执行其他一些自定义处理。请查看整个工作原理的详细信息。

您是否将EMG96.dat文件放在config目录中?是的,我放了。config/EGM96.dat@guidow当您说“这将导致IO异常”时,您的意思是在代码运行时获得异常堆栈跟踪吗?同样,您说过,当您声明偏移量两次时,异常将消失。这段代码——修复IO ex的代码——甚至无法编译。您确定在运行代码时引发了异常而不是编译器错误吗?@prabug它是编译器error@guido对于这种大地水准面高度代码还有其他建议吗?EGM构造函数:public EGM96String offsetsFilePath抛出IOException。看起来它是故意扔的?所以。。。处理这件事有什么问题吗?您是否可以尝试捕获它或重新抛出并至少运行一次应用程序,以查看它对您的效果如何?与处理编译器错误相比,我们可以更好地使用错误堆栈跟踪方法。