package models.path; import play.Play; public class GeoUtil { private GeoUtil() {} public static final double walkSpeed = Play.application().configuration().getDouble("geo.walkspeed"); // m/s public static final double busSpeed = Play.application().configuration().getDouble("geo.busspeed"); // m/s public static final double walkTime = Play.application().configuration().getDouble("geo.walktime"); public static int getTimeInSecondByWalk(double meters) { return (int) (meters/walkSpeed); } public static int getTimeInSecondByBus(double meters) { return (int) (meters/busSpeed); } public static double getDistanceInMeters(double lat1, double lon1, double lat2, double lon2) { double rlat1 = toRadians(lat1); // double rlon1 = toRadians(lon1); double rlat2 = toRadians(lat2); // double rlon2 = toRadians(lon2); double R = 6371000; // meters double dlat = toRadians(lat2-lat1); double dlon = toRadians(lon2-lon1); double a = Math.sin(dlat/2) * Math.sin(dlat/2) + Math.cos(rlat1) * Math.cos(rlat2) * Math.sin(dlon/2) * Math.sin(dlon/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return R * c; } public static double toRadians(double degree) { return Math.PI * degree/180.0; } public static double getWalkDistance() { return walkTime * walkSpeed; } }