From 843bd18be238206e1c8ff9e28b78194d07fc7a99 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Fri, 28 Nov 2014 10:49:38 +0100 Subject: [PATCH] add great circle costs --- .../util/GreatCircleDistanceCalculator.java | 4 ++-- .../GreatCircleDistanceCalculatorTest.java | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/util/GreatCircleDistanceCalculator.java b/jsprit-core/src/main/java/jsprit/core/util/GreatCircleDistanceCalculator.java index 578f6fce..50b71c84 100644 --- a/jsprit-core/src/main/java/jsprit/core/util/GreatCircleDistanceCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/util/GreatCircleDistanceCalculator.java @@ -42,7 +42,7 @@ public class GreatCircleDistanceCalculator { * @param coord2 - to coord * @return great circle distance */ - public static double calculateDistance(Coordinate coord1, Coordinate coord2, DistanceUnit unit){ + public static double calculateDistance(Coordinate coord1, Coordinate coord2, DistanceUnit distanceUnit){ double lon1 = coord1.getX(); double lon2 = coord2.getX(); double lat1 = coord1.getY(); @@ -56,7 +56,7 @@ public class GreatCircleDistanceCalculator { double a = Math.sin(delta_Lat / 2) * Math.sin(delta_Lat / 2) + Math.sin(delta_Lon / 2) * Math.sin(delta_Lon / 2) * Math.cos(lat1) * Math.cos(lat2); double c = 2 * Math.asin(Math.sqrt(a)); double distance = R * c; - if(unit.equals(DistanceUnit.Meter)){ + if(distanceUnit.equals(DistanceUnit.Meter)){ distance = distance * 1000.; } return distance; diff --git a/jsprit-core/src/test/java/jsprit/core/util/GreatCircleDistanceCalculatorTest.java b/jsprit-core/src/test/java/jsprit/core/util/GreatCircleDistanceCalculatorTest.java index 88c63278..72669430 100644 --- a/jsprit-core/src/test/java/jsprit/core/util/GreatCircleDistanceCalculatorTest.java +++ b/jsprit-core/src/test/java/jsprit/core/util/GreatCircleDistanceCalculatorTest.java @@ -35,10 +35,26 @@ public class GreatCircleDistanceCalculatorTest { double greatCircle = GreatCircleDistanceCalculator.calculateDistance( Coordinate.newInstance(lon1,lat1), - Coordinate.newInstance(lon2,lat2) + Coordinate.newInstance(lon2,lat2), + GreatCircleDistanceCalculator.DistanceUnit.Kilometer ); Assert.assertEquals(600,greatCircle,30.); } + @Test + public void testMeter(){ + double lon1 = 8.3858333; + double lat1 = 49.0047222; + + double lon2 = 12.1333333; + double lat2 = 54.0833333; + + double greatCircle = GreatCircleDistanceCalculator.calculateDistance( + Coordinate.newInstance(lon1,lat1), + Coordinate.newInstance(lon2,lat2), + GreatCircleDistanceCalculator.DistanceUnit.Meter + ); + Assert.assertEquals(600000,greatCircle,30000.); + } }