3

私は現在、GeoTools ツールキットを使用して、2 つの経度/緯度ポイント間の大圏距離の計算など、船舶データの計算を行っています。他に 2 つの要件を満たす必要がありますが、GeoTools のどこを調べて、この種の計算を行うクラスを見つければよいかわかりません。

要件 #1:移動中の船舶の推測航法位置を 計算します。

入力値:

  • 現在の経度
  • 現在の緯度
  • 現在の速度 (時間「T」が与えられると、距離に簡単に変換できます)
  • 現在のコース

期待される成果:

  • 時間「T」が経過した後の経度/緯度の推定位置

要件 #2: 位置「A」から位置「B」までのコースを計算します。

入力値:

  • 経度「A」
  • 緯度「A」
  • 経度「B」
  • 緯度「B」

期待される成果:

  • 「A」から「B」を直接指すコース

質問

これらの計算を実行できる GeoTools のクラスを教えてもらえますか? GeoTools の膨大な数のクラスに圧倒され、これを行うために必要なものが見つからないようです。

4

1 に答える 1

6

位置「A」から位置「B」までのコースを計算する方法

  • 位置「A」と「B」の緯度/経度が必要です
  • GeodeticCalculatorクラスのインスタンスを取得する
  • 電話setStartingGeographicPoint()
  • 電話setDestinationGeographicPoint()
  • 電話getAzimuth()
  • 方位角から 10 進数への変換

位置「A」から始まる推測航法位置「X」の計算方法

  • 位置「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;
}
于 2010-10-14T12:59:32.530 に答える