package helper; import DataStructure.GPScoordinate; /** * @author richy */ public class Distance { public static void main(String[] args) { GPScoordinate coord1 = new GPScoordinate(null, 52.517, 'N', 13.4, 'E', true); GPScoordinate coord2 = new GPScoordinate(null, 35.7, 'N', 139.767, 'E', true); System.out.println(calc(coord1, coord2)); System.out.println(calc(52.517, 13.4, 35.7, 139.767)); } /** * Returns distance in kilometers. see * http://de.wikipedia.org/wiki/Orthodrome * * @param coord1 * GPScoordinate Point 1 * @param coord2 * GPScoordinate Point 2 * @return distance in Kilometer */ static public double calc(GPScoordinate coord1, GPScoordinate coord2) { double a = DEGtoRAD(coord1.coord1); double b = DEGtoRAD(coord1.coord2); double c = DEGtoRAD(coord2.coord1); double d = DEGtoRAD(coord2.coord2); double angle = Math.acos(Math.sin(a) * Math.sin(c) + Math.cos(a) * Math.cos(c) * Math.cos(d - b)); double distance = angle * 6370; return distance; } /** * Returns distance in kilometers * * @param coordN1 * DEC (decimal) value coordinate point 1 N/S (y-axis) * @param coordE1 * DEC (decimal) value coordinate point 1 E/W (x-axis) * @param coordN2 * DEC (decimal) value coordinate point 2 N/S (y-axis) * @param coordE2 * DEC (decimal) value coordinate point 2 E/W (x-axis) * @return */ static public double calc(double coordN1, double coordE1, double coordN2, double coordE2) { GPScoordinate coord1 = new GPScoordinate(null, coordN1, 'N', coordE1, 'E', true); GPScoordinate coord2 = new GPScoordinate(null, coordN2, 'N', coordE2, 'E', true); return calc(coord1, coord2); } static private double DEGtoRAD(double deg) { // see wiki http://de.wikipedia.org/wiki/Radiant_%28Einheit%29 return deg * 0.017453293d; } @SuppressWarnings("unused") static private double RADtoDEG(double rad) { // see wiki http://de.wikipedia.org/wiki/Radiant_%28Einheit%29 return rad * 57.29577951d; } }