GeoTools - 如何使用GeoTools类进行航位推算和课程计算

Jim*_*ugh 3 java geospatial dead-reckoning latitude-longitude geotools

我目前正在使用GeoTools工具包对海洋船只数据进行计算,例如计算两个lon/lat点之间的Great Circle距离.我还有两个需要满足的要求,但我不确定在GeoTools中查找类来进行这些计算.

要求#1: 计算移动船舶的航位推算位置.

输入值:

  • 目前的经度
  • 目前的纬度
  • 当前速度(可以很容易地转换为距离,给定时间'T')
  • 当前课程

预期产量:

  • 在经过时间'T'之后估计经度/纬度位置

要求#2: 计算从位置'A'到位置'B'的路线.

输入值:

  • 经度'A'
  • 纬度'A'
  • 经度'B'
  • 纬度'B'

预期产量:

  • 当然直接从'A'指向'B'

任何人都可以指导我进入能够执行这些计算的GeoTools课程吗?我被GeoTools中的大量课程所震撼,我似乎无法找到我需要做的事情.

Jim*_*ugh 6

如何从位置'A'到位置'B'计算课程

  • 需要持有'A'和'B'位置的纬度/经度
  • 获取GeodeticCalculator该类的实例
  • 呼叫 setStartingGeographicPoint()
  • 呼叫 setDestinationGeographicPoint()
  • 呼叫 getAzimuth()
  • 从方位角转换为十进制度

如何计算死亡记录位置'X'从位置'A'开始

  • 需要有位置'A'的纬度/经度
  • 需要在方位角上获得船舶的当前航向
  • 需要以米为单位的距离(或计算速度*时间)
  • 获取GeodeticCalculator该类的实例
  • 呼叫 setStartingGeographicPoint()
  • 呼叫 setDirection()
  • 呼叫 getDestinationGeographicPoint()

以下是我需要实现的一些简单的单位转换方法.方位角有点令人困惑.方位角范围从-180到+180,随着方向"角度"沿顺时针方向增加,值增加.所以-180是南,-90是西,0是真北,+ 90是东,+ 180也是南.

public static final double KNOTS_PER_MPS = 1.9438444924406;
public static final double MPS_PER_KNOT = 0.514444444444444;


public static double metersPerSecondToKnots(double speedInMetersPerSecond) {
    return speedInMetersPerSecond * KNOTS_PER_MPS;
}

public static double knotsToMetersPerSecond(double speedInKnots) {
    return speedInKnots * MPS_PER_KNOT;
}

public static double courseInDegreesToAzimuth(double courseInDegrees) {
    Validate.isTrue(courseInDegrees >= 0.0 && courseInDegrees <= 360.0);
    double azimuth;
    if (courseInDegrees > 180.0) {
        azimuth = -180.0 + (courseInDegrees - 180.0);
    } else {
        azimuth = courseInDegrees;
    }
    return azimuth;
}

public static double azimuthToCourseInDegrees(double azimuth) {
    Validate.isTrue(azimuth >= -180.0 && azimuth <= 180.0);
    double courseInDegrees;
    if (azimuth < 0.0) {
        courseInDegrees = 360.0 + azimuth;
    } else {
        courseInDegrees = azimuth;
    }
    return courseInDegrees;
}
Run Code Online (Sandbox Code Playgroud)