public Double calculateAngle(NavigationPosition other) { if (hasCoordinates() && other.hasCoordinates()) { Bearing bearing = calculateBearing( getLongitude(), getLatitude(), other.getLongitude(), other.getLatitude()); return bearing.getAngle(); } return null; }
public Double calculateOrthogonalDistance(NavigationPosition pointA, NavigationPosition pointB) { if (hasCoordinates() && pointA.hasCoordinates() && pointB.hasCoordinates()) { Bearing bearingAD = calculateBearing( pointA.getLongitude(), pointA.getLatitude(), getLongitude(), getLatitude()); Double distanceAtoD = bearingAD.getDistance(); if (distanceAtoD != null) { double courseAtoD = toRadians(bearingAD.getAngle()); double courseAtoB = toRadians(pointA.calculateAngle(pointB)); return asin(sin(distanceAtoD / EARTH_RADIUS) * sin(courseAtoD - courseAtoB)) * EARTH_RADIUS; } } return null; }