public Double calculateDistance(double longitude, double latitude) { if (hasCoordinates()) { Bearing bearing = calculateBearing(getLongitude(), getLatitude(), longitude, latitude); double distance = bearing.getDistance(); if (!isNaN(distance)) return distance; } return null; }
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; }