package com.github.windbender.core; public class RegionUtil { public static float distanceInMilesBetween(float lat1, float lng1, float lat2, float lng2) { double earthRadius = 3958.75; //radius in miles double dLat = Math.toRadians(lat2-lat1); double dLng = Math.toRadians(lng2-lng1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); float dist = (float) (earthRadius * c); return dist; } public static LatLonPair movePoint(LatLonPair in, double distanceMi, double angleDegrees) { double brng = Math.PI * angleDegrees / 180; double d = distanceMi; double R = 3959; double oldLat = in.getLat() * Math.PI/ 180; double oldLon = in.getLon() * Math.PI/ 180; double newLatRad = Math.asin( Math.sin(oldLat)*Math.cos(d/R) + Math.cos(oldLat)*Math.sin(d/R)*Math.cos(brng) ); double newLonRad = oldLon + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(oldLat), Math.cos(d/R)-Math.sin(oldLat)*Math.sin(newLatRad)); return new LatLonPair(newLatRad * 180/Math.PI,newLonRad* 180/Math.PI); } public static Float distanceInMilesBetweenDouble(Float centerLat, Float centerLon, double lat, double lon) { return distanceInMilesBetween(centerLat, centerLon, (float)lat,(float)lon); } }