Skip to content

Commit

Permalink
Fixes for webmerc projection (fixes #1078)
Browse files Browse the repository at this point in the history
This is intended to supersed #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 phi0
and lam0 parameters to 0, because
https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1024
has a provision for them, even if in practice they will always be zero

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...
  • Loading branch information
rouault committed Aug 20, 2018
1 parent bbea214 commit 3210dcf
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 12 deletions.
14 changes: 10 additions & 4 deletions docs/source/operations/projections/webmerc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ From `Wikipedia <https://en.wikipedia.org/wiki/Web_Mercator>`_:
+---------------------+----------------------------------------------------------+
| **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 |
+---------------------+----------------------------------------------------------+
Expand All @@ -49,9 +49,15 @@ 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/lat_0.rst

.. include:: ../options/x_0.rst

Expand Down
10 changes: 2 additions & 8 deletions src/PJ_merc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) */
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 3210dcf

Please sign in to comment.