From 589a540a21fb914b09fb19d5e0a89c6d955042c0 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 20 Aug 2018 14:57:24 +0200 Subject: [PATCH] Fixes for webmerc projection (fixes #1078) This is intended to supersed /~https://github.com/OSGeo/proj.4/pull/1080 with a number of differences. What is kept from #1080 is not forcing the ellipsoid_params to be the one of a sphere. This is not required for correct coordinate computation and avoid lying on the various distorsion parameters. For better interoperability with EPSG, we also no longer force the lam0 parameter to 0, because https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1024 has a provision for it, even if in practice they will always be zero phi0 should always be zero and is not used by the formulas. Another difference with the #1080 approach is that we do not force the WGS84 ellipsoid. Perhaps someone will use webmerc for another planet, even if that is a crazy idea... --- docs/source/operations/projections/webmerc.rst | 12 ++++++++---- src/PJ_merc.c | 10 ++-------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/source/operations/projections/webmerc.rst b/docs/source/operations/projections/webmerc.rst index 92da2d45cf..3a3d9a47b3 100644 --- a/docs/source/operations/projections/webmerc.rst +++ b/docs/source/operations/projections/webmerc.rst @@ -24,9 +24,9 @@ From `Wikipedia `_: +---------------------+----------------------------------------------------------+ | **Classification** | Cylindrical (non conformant if used with ellipsoid) | +---------------------+----------------------------------------------------------+ -| **Available forms** | Forward and inverse, spherical projection | +| **Available forms** | Forward and inverse | +---------------------+----------------------------------------------------------+ -| **Defined area** | Global, but best used near the equator | +| **Defined area** | Global | +---------------------+----------------------------------------------------------+ | **Alias** | webmerc | +---------------------+----------------------------------------------------------+ @@ -49,9 +49,13 @@ Example:: Parameters ################################################################################ -.. note:: All parameters for the projection are optional. +.. note:: All parameters for the projection are optional, except the ellipsoid + definition, which is WGS84 for the typical use case of EPSG:3857. + In which case, the other parameters are set to their default 0 value. -.. include:: ../options/R.rst +.. include:: ../options/ellps.rst + +.. include:: ../options/lon_0.rst .. include:: ../options/x_0.rst diff --git a/src/PJ_merc.c b/src/PJ_merc.c index b75f9b1149..46cd4b3dd2 100644 --- a/src/PJ_merc.c +++ b/src/PJ_merc.c @@ -9,7 +9,7 @@ #include "projects.h" PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts="; -PROJ_HEAD(webmerc, "Web Mercator / Pseudo Mercator") "\n\tCyl, Sph\n\t"; +PROJ_HEAD(webmerc, "Web Mercator / Pseudo Mercator") "\n\tCyl, Ell\n\t"; #define EPS10 1.e-10 static double logtanpfpim1(double x) { /* log(tan(x/2 + M_FORTPI)) */ @@ -92,15 +92,9 @@ PJ *PROJECTION(merc) { PJ *PROJECTION(webmerc) { - /* Overriding k_0, lat_0 and lon_0 with fixed parameters */ + /* Overriding k_0 with fixed parameter */ P->k0 = 1.0; - P->phi0 = 0.0; - P->lam0 = 0.0; - P->b = P->a; - /* Clean up the ellipsoidal parameters to reflect the sphere */ - P->es = P->e = P->f = 0; - pj_calc_ellipsoid_params (P, P->a, 0); P->inv = s_inverse; P->fwd = s_forward; return P;