package dk.daoas.fulddaekning; public class GeoPointHelper { // Latitude (horizonal), longitude(vertical) so // 1 degree latitude is ~ 111320 meters, since the distance between the // horizonal lines is always the same // 1 degree longitude is ~111320 meters at equator but gets shorter as we // get closer to the poles. // so 1 degree longitude is 64.5 km at denmarks southern point // (gedser=54.55,11.95) // and is 59.4km at northern point (skagen = 57.75,10.65) public static double kmToLatitude(double km) { return km / 111.320; } public static double kmToLongitude(double km) {// denne er kun ca return km / 62.0; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts decimal degrees to radians : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double deg2rad(double deg) { return (deg * Math.PI / 180.0); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts radians to decimal degrees : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double rad2deg(double rad) { return (rad * 180 / Math.PI); } // http://www.geodatasource.com/developers/java private static double distanceHaversine(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; // indtil nu er dist i miles - så vi omregner lige til km dist = dist * 1.609344; return (dist); } public static double beregnAfstand(Adresse p1, Adresse p2) { if (p1.latitude == p2.latitude && p1.longitude == p2.longitude) { return 0.00; //Haversine går i baglås hvis p1 og p2 er samme position } return distanceHaversine(p1.latitude, p1.longitude, p2.latitude, p2.longitude); } }