作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在使用 GeoTools 工具包对海洋船只数据进行计算,例如计算两个经/纬度点之间的大圆距离。我还有两个需要满足的其他要求,但我不确定在 GeoTools 中的什么地方可以找到执行此类计算的类。
要求 #1:计算一个Dead Reckoning移动船只的位置。
输入值:
预期输出:
要求 #2:计算从位置“A”到位置“B”的过程。
输入值:
预期输出:
问题
任何人都可以指导我使用 GeoTools 中能够执行这些计算的类吗? GeoTools 中的类数量之多让我不知所措,我似乎无法找到我需要做的事情。
最佳答案
如何计算从“A”位置到“B”位置的类(class)
GeodeticCalculator
类的实例setStartingGeographicPoint()
setDestinationGeographicPoint()
getAzimuth()
如何从位置“A”开始计算航位推算位置“X”
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/
我是一名优秀的程序员,十分优秀!