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}