--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/GeoPoint.java 2015/06/11 20:39:28 2578 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/GeoPoint.java 2015/06/11 21:10:17 2579 @@ -25,7 +25,40 @@ return 62.8 * Math.sqrt( 3.1 * (pwrLat + pwrLng) ); } - public static float beregnAfstand(GeoPoint p1, GeoPoint p2) { +/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ +/*:: 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(GeoPoint p1, GeoPoint p2) { + return distanceHaversine(p1.latitude, p1.longitude, p2.latitude, p2.longitude); + } + + + // denne er nok den mest præcise - men er også den langsomste + public static float beregnAfstand_google(GeoPoint p1, GeoPoint p2) { float[] result = new float[1]; computeDistanceAndBearing(p1.latitude, p1.longitude, p2.latitude, p2.longitude, result);