1 |
package dk.daoas.adressevedligehold.afstandandenrute; |
2 |
|
3 |
import dk.daoas.adressevedligehold.beans.Address; |
4 |
|
5 |
|
6 |
|
7 |
public class GeoPointHelper { |
8 |
|
9 |
|
10 |
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ |
11 |
/* :: This function converts decimal degrees to radians : */ |
12 |
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ |
13 |
private static double deg2rad(double deg) { |
14 |
return deg * Math.PI / 180.0; |
15 |
} |
16 |
|
17 |
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ |
18 |
/* :: This function converts radians to decimal degrees : */ |
19 |
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ |
20 |
private static double rad2deg(double rad) { |
21 |
return rad * 180 / Math.PI; |
22 |
} |
23 |
|
24 |
// http://www.geodatasource.com/developers/java |
25 |
private static double distanceHaversine(double lat1, double lon1, |
26 |
double lat2, double lon2) { |
27 |
double theta = lon1 - lon2; |
28 |
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) |
29 |
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) |
30 |
* Math.cos(deg2rad(theta)); |
31 |
dist = Math.acos(dist); |
32 |
dist = rad2deg(dist); |
33 |
dist = dist * 60 * 1.1515; |
34 |
|
35 |
// indtil nu er dist i miles - så vi omregner lige til km |
36 |
dist = dist * 1.609344; |
37 |
return dist; |
38 |
} |
39 |
|
40 |
public static double beregnAfstand(Address p1, Address p2) { |
41 |
if (p1.latitude == p2.latitude && p1.longitude == p2.longitude) { |
42 |
return 0.00; //Haversine går i baglås hvis p1 og p2 er samme position |
43 |
} |
44 |
|
45 |
|
46 |
return distanceHaversine(p1.latitude, p1.longitude, p2.latitude, p2.longitude); |
47 |
} |
48 |
|
49 |
} |