我目前正在使用GeoTools工具包对海洋船只数据进行计算,例如计算两个lon / lat点之间的Great Circle距离。我还有两个需要满足的要求,但我不确定在GeoTools中查找类来进行这些计算。
要求#1: 计算移动船只的Dead Reckoning位置。
输入值:
预期产出:
要求#2: 计算从位置'A'到位置'B'的路线。
输入值:
预期产出:
问题
任何人都可以指导我使用能够执行这些计算的GeoTools课程吗?我被GeoTools中的大量课程所震撼,我似乎无法找到我需要做的事情。
答案 0 :(得分:6)
如何从位置'A'到位置'B'计算课程
GeodeticCalculator
类setStartingGeographicPoint()
setDestinationGeographicPoint()
getAzimuth()
如何计算死亡记录位置'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;
}