001// License: GPL. For details, see Readme.txt file. 002package org.openstreetmap.gui.jmapviewer; 003 004import java.awt.geom.Point2D; 005import java.io.IOException; 006import java.io.ObjectInputStream; 007import java.io.ObjectOutputStream; 008import java.util.Objects; 009 010import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate; 011 012/** 013 * This class encapsulates a Point2D.Double and provide access 014 * via <tt>lat</tt> and <tt>lon</tt>. 015 * 016 * @author Jan Peter Stotz 017 * 018 */ 019public class Coordinate implements ICoordinate { 020 private transient Point2D.Double data; 021 022 public Coordinate(double lat, double lon) { 023 data = new Point2D.Double(lon, lat); 024 } 025 026 @Override 027 public double getLat() { 028 return data.y; 029 } 030 031 @Override 032 public void setLat(double lat) { 033 data.y = lat; 034 } 035 036 @Override 037 public double getLon() { 038 return data.x; 039 } 040 041 @Override 042 public void setLon(double lon) { 043 data.x = lon; 044 } 045 046 private void writeObject(ObjectOutputStream out) throws IOException { 047 out.writeObject(data.x); 048 out.writeObject(data.y); 049 } 050 051 private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 052 data = new Point2D.Double(); 053 data.x = (Double) in.readObject(); 054 data.y = (Double) in.readObject(); 055 } 056 057 @Override 058 public String toString() { 059 return "Coordinate[" + data.y + ", " + data.x + ']'; 060 } 061 062 @Override 063 public int hashCode() { 064 int hash = 3; 065 hash = 61 * hash + Objects.hashCode(this.data); 066 return hash; 067 } 068 069 @Override 070 public boolean equals(Object obj) { 071 if (obj == null) { 072 return false; 073 } 074 if (getClass() != obj.getClass()) { 075 return false; 076 } 077 final Coordinate other = (Coordinate) obj; 078 if (!Objects.equals(this.data, other.data)) { 079 return false; 080 } 081 return true; 082 } 083}