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