001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.projection.proj;
003
004import static java.lang.Math.PI;
005import static java.lang.Math.atan;
006import static java.lang.Math.log;
007import static java.lang.Math.sinh;
008import static java.lang.Math.tan;
009import static org.openstreetmap.josm.tools.I18n.tr;
010
011import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
012
013/**
014 * Mercator Projection.
015 */
016public class Mercator implements Proj {
017
018    @Override
019    public String getName() {
020        return tr("Mercator");
021    }
022
023    @Override
024    public String getProj4Id() {
025        return "josm:smerc"; // "merc" is ellipsoidal Mercator projection in PROJ.4
026    }
027
028    @Override
029    public void initialize(ProjParameters params) throws ProjectionConfigurationException {
030    }
031
032    @Override
033    public double[] project(double lat_rad, double lon_rad) {
034        return new double[] {lon_rad, log(tan(PI/4 + lat_rad/2))};
035    }
036
037    @Override
038    public double[] invproject(double east, double north) {
039        return new double[] {atan(sinh(north)), east};
040    }
041}