java - GeoTools - 如何使用 GeoTools 类进行航位推算和类(class)计算

标签 java geospatial latitude-longitude geotools dead-reckoning

我目前正在使用 GeoTools 工具包对海洋船只数据进行计算,例如计算两个经/纬度点之间的大圆距离。我还有两个需要满足的其他要求,但我不确定在 GeoTools 中的什么地方可以找到执行此类计算的类。

要求 #1: 计算一个Dead Reckoning移动船只的位置。

输入值:

  • 当前经度
  • 当前纬度
  • 当前速度(可以很容易地转换为距离,给定时间“T”)
  • 当前类(class)

预期输出:

  • 耗时“T”后估计的经/纬度位置

要求 #2: 计算从位置“A”到位置“B”的过程。

输入值:

  • 经度'A'
  • 纬度“A”
  • 经度'B'
  • 纬度'B'

预期输出:

  • 直接从“A”指向“B”的类(class)

问题

任何人都可以指导我使用 GeoTools 中能够执行这些计算的类吗? GeoTools 中的类数量之多让我不知所措,我似乎无法找到我需要做的事情。

最佳答案

如何计算从“A”位置到“B”位置的类(class)

  • 需要位置“A”和“B”的纬度/经度
  • 获取 GeodeticCalculator 类的实例
  • 调用setStartingGeographicPoint()
  • 调用setDestinationGeographicPoint()
  • 调用getAzimuth()
  • 将方位角转换为十进制度数

如何从位置“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;
}

关于java - GeoTools - 如何使用 GeoTools 类进行航位推算和类(class)计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917340/

相关文章:

ST_Distance_Spheroid 的 MySQL GeoSpatial 函数?返回 GLength 类型时使用的指标?

java - Vertx运行任务100次并分析结果

java - 无法连接到 MySQL 并在 Play Framework 2.4 中执行操作

java - 在泛型类中实现泛型接口(interface)

mongodb - $maxDistance 在 MongoDB 中是如何测量的?

r - 一组经度/纬度点之间的最大距离

java - 发生了什么样的异常?

SQL 选择边界框内的纬度和经度点

gis - 有没有办法将 map 划分为方形网格并从那里检索纬度/经度信息?

sql - NoSQL 中的地理查询