summaryrefslogtreecommitdiffstats
path: root/helper/Distance.java
blob: 680998b4b1035e8b7fa0cd0fef11f3b76888ac51 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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;
	}
}