mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
add great circle costs
This commit is contained in:
parent
fa7e942ad7
commit
843bd18be2
2 changed files with 19 additions and 3 deletions
|
|
@ -42,7 +42,7 @@ public class GreatCircleDistanceCalculator {
|
||||||
* @param coord2 - to coord
|
* @param coord2 - to coord
|
||||||
* @return great circle distance
|
* @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 lon1 = coord1.getX();
|
||||||
double lon2 = coord2.getX();
|
double lon2 = coord2.getX();
|
||||||
double lat1 = coord1.getY();
|
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 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 c = 2 * Math.asin(Math.sqrt(a));
|
||||||
double distance = R * c;
|
double distance = R * c;
|
||||||
if(unit.equals(DistanceUnit.Meter)){
|
if(distanceUnit.equals(DistanceUnit.Meter)){
|
||||||
distance = distance * 1000.;
|
distance = distance * 1000.;
|
||||||
}
|
}
|
||||||
return distance;
|
return distance;
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,26 @@ public class GreatCircleDistanceCalculatorTest {
|
||||||
|
|
||||||
double greatCircle = GreatCircleDistanceCalculator.calculateDistance(
|
double greatCircle = GreatCircleDistanceCalculator.calculateDistance(
|
||||||
Coordinate.newInstance(lon1,lat1),
|
Coordinate.newInstance(lon1,lat1),
|
||||||
Coordinate.newInstance(lon2,lat2)
|
Coordinate.newInstance(lon2,lat2),
|
||||||
|
GreatCircleDistanceCalculator.DistanceUnit.Kilometer
|
||||||
);
|
);
|
||||||
Assert.assertEquals(600,greatCircle,30.);
|
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.);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue