1 package au.gov.amsa.navigation; 2 3 import com.google.common.base.Preconditions; 4 5 public class Region { 6 7 private final double topLeftLat, topLeftLon, bottomRightLat, bottomRightLon; 8 9 public Region(double topLeftLat, double topLeftLon, double bottomLeftLat, 10 double bottomRightLon) { 11 Preconditions.checkArgument(bottomLeftLat <= topLeftLat); 12 Preconditions.checkArgument(topLeftLon <= bottomRightLon); 13 this.topLeftLat = topLeftLat; 14 this.topLeftLon = topLeftLon; 15 this.bottomRightLat = bottomLeftLat; 16 this.bottomRightLon = bottomRightLon; 17 } 18 19 public double topLeftLat() { 20 return topLeftLat; 21 } 22 23 public double topLeftLon() { 24 return topLeftLon; 25 } 26 27 public double bottomRightLat() { 28 return bottomRightLat; 29 } 30 31 public double bottomRightLon() { 32 return bottomRightLon; 33 } 34 35 public boolean inRegion(double lat, double lon) { 36 return lat >= bottomRightLat && lat <= topLeftLat && lon >= topLeftLon 37 && lon <= bottomRightLon; 38 } 39 40 @Override 41 public int hashCode() { 42 final int prime = 31; 43 int result = 1; 44 long temp; 45 temp = Double.doubleToLongBits(bottomRightLat); 46 result = prime * result + (int) (temp ^ (temp >>> 32)); 47 temp = Double.doubleToLongBits(bottomRightLon); 48 result = prime * result + (int) (temp ^ (temp >>> 32)); 49 temp = Double.doubleToLongBits(topLeftLat); 50 result = prime * result + (int) (temp ^ (temp >>> 32)); 51 temp = Double.doubleToLongBits(topLeftLon); 52 result = prime * result + (int) (temp ^ (temp >>> 32)); 53 return result; 54 } 55 56 @Override 57 public boolean equals(Object obj) { 58 if (this == obj) 59 return true; 60 if (obj == null) 61 return false; 62 if (getClass() != obj.getClass()) 63 return false; 64 Region other = (Region) obj; 65 if (Double.doubleToLongBits(bottomRightLat) != Double 66 .doubleToLongBits(other.bottomRightLat)) 67 return false; 68 if (Double.doubleToLongBits(bottomRightLon) != Double 69 .doubleToLongBits(other.bottomRightLon)) 70 return false; 71 if (Double.doubleToLongBits(topLeftLat) != Double 72 .doubleToLongBits(other.topLeftLat)) 73 return false; 74 if (Double.doubleToLongBits(topLeftLon) != Double 75 .doubleToLongBits(other.topLeftLon)) 76 return false; 77 return true; 78 } 79 80 }