/** * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly * unit. The units used here equals the default. * * @param radians a double using unit radian * @return converted radian to distance value * @since 1.2.0 */ public static double radiansToLength(double radians) { return radiansToLength(radians, TurfConstants.UNIT_DEFAULT); }
/** * Calculates the distance between two points in degress, radians, miles, or kilometers. This * uses the Haversine formula to account for global curvature. * * @param point1 first point used for calculating the bearing * @param point2 second point used for calculating the bearing * @param units one of the units found inside {@link TurfConstants.TurfUnitCriteria} * @return distance between the two points in kilometers * @see <a href="http://turfjs.org/docs/#distance">Turf distance documentation</a> * @since 1.2.0 */ public static double distance(@NonNull Point point1, @NonNull Point point2, @NonNull @TurfConstants.TurfUnitCriteria String units) { double difLat = degreesToRadians((point2.latitude() - point1.latitude())); double difLon = degreesToRadians((point2.longitude() - point1.longitude())); double lat1 = degreesToRadians(point1.latitude()); double lat2 = degreesToRadians(point2.latitude()); double value = Math.pow(Math.sin(difLat / 2), 2) + Math.pow(Math.sin(difLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2); return TurfConversion.radiansToLength( 2 * Math.atan2(Math.sqrt(value), Math.sqrt(1 - value)), units); }
/** * Converts a distance to a different unit specified. * * @param distance the distance to be converted * @param originalUnit of the distance, must be one of the units defined in * {@link TurfUnitCriteria} * @param finalUnit returned unit, {@link TurfConstants#UNIT_DEFAULT} if not specified * @return the converted distance * @since 2.2.0 */ public static double convertLength(@FloatRange(from = 0) double distance, @NonNull @TurfUnitCriteria String originalUnit, @Nullable @TurfUnitCriteria String finalUnit) { if (finalUnit == null) { finalUnit = TurfConstants.UNIT_DEFAULT; } return radiansToLength(lengthToRadians(distance, originalUnit), finalUnit); } }
@Test public void radiansToDistance() throws Exception { assertEquals( 1, TurfConversion.radiansToLength(1, TurfConstants.UNIT_RADIANS), DELTA); assertEquals( 6373, TurfConversion.radiansToLength(1, TurfConstants.UNIT_KILOMETERS), DELTA); assertEquals( 3960, TurfConversion.radiansToLength(1, TurfConstants.UNIT_MILES), DELTA); }