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 <code>lat</code> and <code>lon</code>. 015 * 016 * @author Jan Peter Stotz 017 * 018 */ 019public class Coordinate implements ICoordinate { 020 private transient Point2D.Double data; 021 022 /** 023 * Constructs a new {@code Coordinate}. 024 * @param lat latitude in degrees 025 * @param lon longitude in degrees 026 */ 027 public Coordinate(double lat, double lon) { 028 data = new Point2D.Double(lon, lat); 029 } 030 031 @Override 032 public double getLat() { 033 return data.y; 034 } 035 036 @Override 037 public void setLat(double lat) { 038 data.y = lat; 039 } 040 041 @Override 042 public double getLon() { 043 return data.x; 044 } 045 046 @Override 047 public void setLon(double lon) { 048 data.x = lon; 049 } 050 051 private void writeObject(ObjectOutputStream out) throws IOException { 052 out.writeObject(data.x); 053 out.writeObject(data.y); 054 } 055 056 private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 057 data = new Point2D.Double(); 058 data.x = (Double) in.readObject(); 059 data.y = (Double) in.readObject(); 060 } 061 062 @Override 063 public String toString() { 064 return "Coordinate[" + data.y + ", " + data.x + ']'; 065 } 066 067 @Override 068 public int hashCode() { 069 return Objects.hashCode(data); 070 } 071 072 @Override 073 public boolean equals(Object obj) { 074 if (this == obj) 075 return true; 076 if (obj == null || !(obj instanceof Coordinate)) 077 return false; 078 final Coordinate other = (Coordinate) obj; 079 return Objects.equals(data, other.data); 080 } 081}