001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.data.projection.datum;
003    
004    import org.openstreetmap.josm.data.coor.LatLon;
005    import org.openstreetmap.josm.data.projection.Ellipsoid;
006    
007    /**
008     * Datum provides 3 dimensional offset and ellipsoid conversion.
009     */
010    public class ThreeParameterDatum extends AbstractDatum {
011        
012        protected double dx, dy, dz;
013    
014        public ThreeParameterDatum(String name, String proj4Id, Ellipsoid ellps, double dx, double dy, double dz) {
015            super(name, proj4Id, ellps);
016            this.dx = dx;
017            this.dy = dy;
018            this.dz = dz;
019        }
020    
021        @Override
022        public LatLon toWGS84(LatLon ll) {
023            double[] xyz = ellps.latLon2Cart(ll);
024            xyz[0] += dx;
025            xyz[1] += dy;
026            xyz[2] += dz;
027            return Ellipsoid.WGS84.cart2LatLon(xyz);
028        }
029    
030        @Override
031        public LatLon fromWGS84(LatLon ll) {
032            double[] xyz = Ellipsoid.WGS84.latLon2Cart(ll);
033            xyz[0] -= dx;
034            xyz[1] -= dy;
035            xyz[2] -= dz;
036            return this.ellps.cart2LatLon(xyz);
037        }
038        
039    }