Skip to content

Instantly share code, notes, and snippets.

@hanihashemi
Last active December 8, 2016 14:30
Show Gist options
  • Save hanihashemi/7098c9913660be6f2d9ad83127c2a783 to your computer and use it in GitHub Desktop.
Save hanihashemi/7098c9913660be6f2d9ad83127c2a783 to your computer and use it in GitHub Desktop.
Calculating distance between two points, using latitude and longitude
/**
* 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