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.Bounds;
012import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
013
014/**
015 * Mercator Projection.
016 */
017public class Mercator implements Proj {
018
019    @Override
020    public String getName() {
021        return tr("Mercator");
022    }
023
024    @Override
025    public String getProj4Id() {
026        return "josm:smerc"; // "merc" is ellipsoidal Mercator projection in PROJ.4
027    }
028
029    @Override
030    public void initialize(ProjParameters params) throws ProjectionConfigurationException {
031    }
032
033    @Override
034    public double[] project(double lat_rad, double lon_rad) {
035        return new double[] {lon_rad, log(tan(PI/4 + lat_rad/2))};
036    }
037
038    @Override
039    public double[] invproject(double east, double north) {
040        return new double[] {atan(sinh(north)), east};
041    }
042
043    @Override
044    public Bounds getAlgorithmBounds() {
045        return new Bounds(-89, -180, 89, 180, false);
046    }
047}