/** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into * radians. * * @param distance double representing a distance value assuming the distance units is in * kilometers * @return converted distance to radians value * @since 1.2.0 */ public static double lengthToRadians(double distance) { return lengthToRadians(distance, TurfConstants.UNIT_DEFAULT); }
/** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, * feet. * * @param distance in real units * @param units can be degrees, radians, miles, or kilometers inches, yards, metres, meters, * kilometres, kilometers. * @return a double value representing the distance in degrees * @since 3.0.0 */ public static double lengthToDegrees(double distance, @TurfUnitCriteria String units) { return radiansToDegrees(lengthToRadians(distance, 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); } }
/** * Takes a Point and calculates the location of a destination point given a distance in * degrees, radians, miles, or kilometers; and bearing in degrees. This uses the Haversine * formula to account for global curvature. * * @param point starting point used for calculating the destination * @param distance distance from the starting point * @param bearing ranging from -180 to 180 in decimal degrees * @param units one of the units found inside {@link TurfConstants.TurfUnitCriteria} * @return destination {@link Point} result where you specified * @see <a href="http://turfjs.org/docs/#destination">Turf Destination documetation</a> * @since 1.2.0 */ @NonNull public static Point destination(@NonNull Point point, @FloatRange(from = 0) double distance, @FloatRange(from = -180, to = 180) double bearing, @NonNull @TurfConstants.TurfUnitCriteria String units) { double longitude1 = degreesToRadians(point.longitude()); double latitude1 = degreesToRadians(point.latitude()); double bearingRad = degreesToRadians(bearing); double radians = TurfConversion.lengthToRadians(distance, units); double latitude2 = Math.asin(Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)); double longitude2 = longitude1 + Math.atan2(Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1), Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)); return Point.fromLngLat( radiansToDegrees(longitude2), radiansToDegrees(latitude2)); }
@Test public void distanceToRadians() throws Exception { assertEquals( 1, TurfConversion.lengthToRadians(1, TurfConstants.UNIT_RADIANS), DELTA); assertEquals( 1, TurfConversion.lengthToRadians(6373, TurfConstants.UNIT_KILOMETERS), DELTA); assertEquals( 1, TurfConversion.lengthToRadians(3960, TurfConstants.UNIT_MILES), DELTA); }