From effd7f431a78cc9c4dd3e5c73f562c6e878da24f Mon Sep 17 00:00:00 2001 From: Cameron Mace Date: Tue, 13 Jun 2017 09:42:41 -0700 Subject: [PATCH 1/3] added convertdistance method --- .../api/utils/turf/TurfConstants.java | 1 + .../services/api/utils/turf/TurfHelpers.java | 39 +++++++++++++++++++ .../services/api/turf/TurfHelpersTest.java | 39 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java diff --git a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java index f1581953c..9dba37a88 100644 --- a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java +++ b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java @@ -16,6 +16,7 @@ public class TurfConstants { public static final String UNIT_INCHES = "inches"; public static final String UNIT_YARDS = "yards"; public static final String UNIT_METERS = "meters"; + public static final String UNIT_CENTIMETERS = "centimeters"; public static final String UNIT_DEFAULT = UNIT_KILOMETERS; diff --git a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java index d08c9d807..3306c621e 100644 --- a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java +++ b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java @@ -23,9 +23,11 @@ public class TurfHelpers { factors.put(TurfConstants.UNIT_INCHES, 250905600d); factors.put(TurfConstants.UNIT_YARDS, 6969600d); factors.put(TurfConstants.UNIT_METERS, 6373000d); + factors.put(TurfConstants.UNIT_CENTIMETERS, 6.373e+8d); factors.put(TurfConstants.UNIT_KILOMETERS, 6373d); // Also supported + factors.put("centimetres", 6.373e+8d); factors.put("metres", 6373000d); factors.put("kilometres", 6373d); } @@ -88,4 +90,41 @@ public static double distanceToRadians(double distance, String units) throws Tur } return distance / factor; } + + /** + * Converts a distance to the requested unit. + * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet + * + * @param distance the distance to be converted + * @param originalUnit of the distance + * @return the converted distance + * @since 2.2.0 + */ + public static double convertDistance(double distance, String originalUnit) { + return convertDistance(distance, originalUnit, TurfConstants.UNIT_DEFAULT); + } + + /** + * Converts a distance to the requested unit. + * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet + * + * @param distance the distance to be converted + * @param originalUnit of the distance + * @param finalUnit returned unit, {@link TurfConstants#UNIT_DEFAULT} if not specified. + * @return the converted distance + * @since 2.2.0 + */ + public static double convertDistance(double distance, String originalUnit, String finalUnit) { + Double factor = factors.get(originalUnit); + if (factor == null) { + throw new TurfException("Invalid unit."); + } else if (!(distance >= 0)) { + throw new TurfException("distance must be a positive number"); + } + if (finalUnit == null) { + finalUnit = TurfConstants.UNIT_DEFAULT; + } + + return radiansToDistance(distanceToRadians(distance, originalUnit), finalUnit); + } } diff --git a/mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java b/mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java new file mode 100644 index 000000000..999259ee3 --- /dev/null +++ b/mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java @@ -0,0 +1,39 @@ +package com.mapbox.services.api.turf; + +import com.mapbox.services.api.BaseTest; +import com.mapbox.services.api.utils.turf.TurfConstants; +import com.mapbox.services.api.utils.turf.TurfException; +import com.mapbox.services.api.utils.turf.TurfHelpers; + +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import static org.hamcrest.Matchers.startsWith; + +public class TurfHelpersTest extends BaseTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void convertDistance() throws TurfException { + Assert.assertEquals(1, + TurfHelpers.convertDistance(1000, TurfConstants.UNIT_METERS), DELTA); + Assert.assertEquals(0.6213714106386318, + TurfHelpers.convertDistance(1, TurfConstants.UNIT_KILOMETERS, TurfConstants.UNIT_MILES), DELTA); + Assert.assertEquals(1.6093434343434343, + TurfHelpers.convertDistance(1, TurfConstants.UNIT_MILES, TurfConstants.UNIT_KILOMETERS), DELTA); + Assert.assertEquals(1.851999843075488, + TurfHelpers.convertDistance(1, TurfConstants.UNIT_NAUTICAL_MILES), DELTA); + Assert.assertEquals(100, + TurfHelpers.convertDistance(1, TurfConstants.UNIT_METERS, TurfConstants.UNIT_CENTIMETERS), DELTA); + + thrown.expect(TurfException.class); + thrown.expectMessage(startsWith("Invalid unit.")); + TurfHelpers.convertDistance(1, "foo"); + } + + +} From fc97b687805796bd78d1fd254abd22ad843fe9fd Mon Sep 17 00:00:00 2001 From: Cameron Mace Date: Tue, 13 Jun 2017 09:47:52 -0700 Subject: [PATCH 2/3] adds feet unit --- .../java/com/mapbox/services/api/utils/turf/TurfConstants.java | 1 + .../java/com/mapbox/services/api/utils/turf/TurfHelpers.java | 1 + 2 files changed, 2 insertions(+) diff --git a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java index 9dba37a88..07a00c488 100644 --- a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java +++ b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfConstants.java @@ -17,6 +17,7 @@ public class TurfConstants { public static final String UNIT_YARDS = "yards"; public static final String UNIT_METERS = "meters"; public static final String UNIT_CENTIMETERS = "centimeters"; + public static final String UNIT_FEET = "feet"; public static final String UNIT_DEFAULT = UNIT_KILOMETERS; diff --git a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java index 3306c621e..936b8e27b 100644 --- a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java +++ b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java @@ -25,6 +25,7 @@ public class TurfHelpers { factors.put(TurfConstants.UNIT_METERS, 6373000d); factors.put(TurfConstants.UNIT_CENTIMETERS, 6.373e+8d); factors.put(TurfConstants.UNIT_KILOMETERS, 6373d); + factors.put(TurfConstants.UNIT_FEET, 20908792.65d); // Also supported factors.put("centimetres", 6.373e+8d); From 8bd1c87af3a422f12d6c0cbac9f5d94c74569250 Mon Sep 17 00:00:00 2001 From: Cameron Mace Date: Tue, 13 Jun 2017 13:38:33 -0700 Subject: [PATCH 3/3] made fixes --- .../services/api/utils/turf/TurfHelpers.java | 2 +- .../services/api/turf/TurfHelpersTest.java | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java index 936b8e27b..607b64f40 100644 --- a/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java +++ b/mapbox/libjava-services/src/main/java/com/mapbox/services/api/utils/turf/TurfHelpers.java @@ -120,7 +120,7 @@ public static double convertDistance(double distance, String originalUnit, Strin if (factor == null) { throw new TurfException("Invalid unit."); } else if (!(distance >= 0)) { - throw new TurfException("distance must be a positive number"); + throw new TurfException("Distance must be a positive number."); } if (finalUnit == null) { finalUnit = TurfConstants.UNIT_DEFAULT; diff --git a/mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java b/mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java index 999259ee3..291b9d9e0 100644 --- a/mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java +++ b/mapbox/libjava-services/src/test/java/com/mapbox/services/api/turf/TurfHelpersTest.java @@ -17,6 +17,20 @@ public class TurfHelpersTest extends BaseTest { @Rule public ExpectedException thrown = ExpectedException.none(); + @Test + public void convertDistance_throwNegativeDistanceException() throws TurfException { + thrown.expect(TurfException.class); + thrown.expectMessage(startsWith("Distance must be a")); + TurfHelpers.convertDistance(-1, TurfConstants.UNIT_MILES); + } + + @Test + public void convertDistance_throwInvalidUnitException() throws TurfException { + thrown.expect(TurfException.class); + thrown.expectMessage(startsWith("Invalid unit.")); + TurfHelpers.convertDistance(1, "foo"); + } + @Test public void convertDistance() throws TurfException { Assert.assertEquals(1, @@ -29,11 +43,5 @@ public void convertDistance() throws TurfException { TurfHelpers.convertDistance(1, TurfConstants.UNIT_NAUTICAL_MILES), DELTA); Assert.assertEquals(100, TurfHelpers.convertDistance(1, TurfConstants.UNIT_METERS, TurfConstants.UNIT_CENTIMETERS), DELTA); - - thrown.expect(TurfException.class); - thrown.expectMessage(startsWith("Invalid unit.")); - TurfHelpers.convertDistance(1, "foo"); } - - }