Last active
December 8, 2016 14:30
-
-
Save hanihashemi/7098c9913660be6f2d9ad83127c2a783 to your computer and use it in GitHub Desktop.
Calculating distance between two points, using latitude and longitude
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Created by hani on 12/6/16. | |
*/ | |
public class DistanceCalculator { | |
public String distance(double lat1, double lon1, double lat2, double lon2) { | |
double theta = lon1 - lon2; | |
Double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); | |
dist = Math.acos(dist); | |
dist = rad2deg(dist); | |
dist = dist * 60 * 1.1515; | |
dist = dist * 1.609344; | |
if (dist == 0) | |
return ""; | |
else if (dist < 1) | |
return String.format("%s m", (int) (dist * 1000)); | |
else return String.format("%s km", round(dist, 1)); | |
} | |
private double round(double value, int precision) { | |
int scale = (int) Math.pow(10, precision); | |
return (double) Math.round(value * scale) / scale; | |
} | |
private double deg2rad(double deg) { | |
return (deg * Math.PI / 180.0); | |
} | |
private double rad2deg(double rad) { | |
return (rad * 180 / Math.PI); | |
} | |
} | |
============================================ | |
==========Distance Calculator Test========== | |
============================================ | |
/** | |
* Created by hani on 12/6/16. | |
*/ | |
public class DistanceCalculatorTest { | |
@Test | |
public void distance_kilometer() { | |
DistanceCalculator distanceCalculator = new DistanceCalculator(); | |
String distance = distanceCalculator.distance(35.689197, 51.388974, 34.639944, 50.875942); | |
Assert.assertEquals("125.6 km", distance); | |
} | |
@Test | |
public void distance_kilometer_meter() { | |
DistanceCalculator distanceCalculator = new DistanceCalculator(); | |
String distance = distanceCalculator.distance(38.898556, 77.037852, 38.897147, 77.043934); | |
Assert.assertEquals("549 m", distance); | |
} | |
@Test | |
public void distance_equal() { | |
DistanceCalculator distanceCalculator = new DistanceCalculator(); | |
String distance = distanceCalculator.distance(35.689197, 51.388974, 35.689197, 51.388974); | |
Assert.assertEquals("", distance); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment