package au.gov.amsa.geo.model; import java.io.Serializable; import au.gov.amsa.risky.format.HasPosition; public class Position implements HasPosition, Serializable { private static final long serialVersionUID = 4470547471465912154L; private final float lat, lon; private final int hashCode; public Position(float lat, float lon) { this.lat = lat; this.lon = lon; this.hashCode = calculateHashCode(); } public Position(double lat, double lon) { this((float) lat, (float) lon); } @Override public float lat() { return lat; } @Override public float lon() { return lon; } @Override public String toString() { return "Position [lat=" + lat + ", lon=" + lon + "]"; } @Override public int hashCode() { return hashCode; } private int calculateHashCode() { final int prime = 31; int result = 1; long temp; temp = Double.doubleToLongBits(lat); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(lon); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Position other = (Position) obj; if (Double.doubleToLongBits(lat) != Double.doubleToLongBits(other.lat)) return false; if (Double.doubleToLongBits(lon) != Double.doubleToLongBits(other.lon)) return false; return true; } }