首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GeoTools -如何使用GeoTools类进行死亡计算和课程计算

GeoTools -如何使用GeoTools类进行死亡计算和课程计算
EN

Stack Overflow用户
提问于 2010-10-12 17:21:24
回答 1查看 3.5K关注 0票数 3

目前,我正在使用GeoTools工具包对船舶数据进行计算,例如计算两个lon/lat点之间的大圆圈距离。我还有另外两个需要满足的要求,但我不知道在GeoTools中查找类来完成此类计算的位置。

要求1:计算移动船只的死亡推算位置。

输入值:

  • 当前经度
  • 当前纬度
  • 当前速度(在给定时间‘T’的情况下,可以很容易地转换为距离)
  • 当前航向

预期产出:

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

要求2:计算从位置'A‘到'B’的过程。

输入值:

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

预期产出:

  • 直接从“A”指向“B”的课程

问题

,有人能告诉我GeoTools中能够执行这些计算的类吗?GeoTools中的类数量之多让我不知所措,我似乎无法找到我需要做的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-14 12:59:32

如何计算从位置'A‘到位置'B'的过程

  • 需要有'A‘和'B’职位的lat/lon
  • 获取GeodeticCalculator类的实例
  • 调用setStartingGeographicPoint()
  • 调用setDestinationGeographicPoint()
  • 调用getAzimuth()
  • 从方位角转换到十进制

如何从位置'A'开始计算推算位置'X‘

  • 需要拥有'A‘这一职位
  • 需要有船的当前航向方位。
  • 需要有以米为单位的旅行距离(或将其计算为速度*时间)
  • 获取GeodeticCalculator类的实例
  • 调用setStartingGeographicPoint()
  • 调用setDirection()
  • 调用getDestinationGeographicPoint()

下面是我自己实现所需的一些简单的单元转换方法。方位有点混乱。方位角范围为-180 ~ +180,其值随“角”沿顺时针方向的增大而增大。所以-180是南的,-90是西的,0是真北的,+90是东的,+180也是南的。

代码语言:javascript
运行
复制
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;
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3917340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档