// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.data.projection.datum; import java.io.IOException; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.projection.Ellipsoid; import org.openstreetmap.josm.tools.JosmRuntimeException; /** * Datum based of NTV2 grid shift file. */ public class NTV2Datum extends AbstractDatum { private final NTV2GridShiftFileWrapper nadgrids; /** * Constructs a new {@code NTV2Datum}. * @param name datum name * @param proj4Id PROJ.4 id * @param ellps ellipsoid * @param nadgrids NTV2 grid shift file wrapper */ public NTV2Datum(String name, String proj4Id, Ellipsoid ellps, NTV2GridShiftFileWrapper nadgrids) { super(name, proj4Id, ellps); this.nadgrids = nadgrids; } @Override public LatLon toWGS84(LatLon ll) { NTV2GridShift gs = new NTV2GridShift(ll); try { nadgrids.getShiftFile().gridShiftForward(gs); return new LatLon(ll.lat() + gs.getLatShiftDegrees(), ll.lon() + gs.getLonShiftPositiveEastDegrees()); } catch (IOException e) { throw new JosmRuntimeException(e); } } @Override public LatLon fromWGS84(LatLon ll) { NTV2GridShift gs = new NTV2GridShift(ll); try { nadgrids.getShiftFile().gridShiftReverse(gs); return new LatLon(ll.lat() + gs.getLatShiftDegrees(), ll.lon() + gs.getLonShiftPositiveEastDegrees()); } catch (IOException e) { throw new JosmRuntimeException(e); } } }