Skip to content

Commit

Permalink
Add webmerc projection
Browse files Browse the repository at this point in the history
  • Loading branch information
rouault committed Apr 7, 2018
1 parent 3355c67 commit 51df307
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 1 deletion.
1 change: 1 addition & 0 deletions docs/source/operations/projections/index.rst
Expand Up @@ -141,6 +141,7 @@ Projections map the spherical 3D space to a flat 2D space.
wag5
wag6
wag7
webmerc
weren
wink1
wink2
Expand Down
4 changes: 3 additions & 1 deletion docs/source/operations/projections/merc.rst
Expand Up @@ -29,9 +29,11 @@ The projection is conformal which makes it suitable for navigational purposes.
| | datum is ellipsoidal. |
| | |
| | * aux_sphere_type=0 will use the semi-major radius. |
| | This is the value to use for Google Web Mercator:: |
| | This is the value to use for Web Mercator:: |
| | |
| | proj=merc +datum=WGS84 +aux_sphere_type=0 |
| | |
| | You can also use the :ref:`webmerc` projection. |
| | * aux_sphere_type=1 will use the semi-minor radius. |
| | * aux_sphere_type=2 will calculate the authalic radius |
| | and use it. |
Expand Down
20 changes: 20 additions & 0 deletions src/PJ_merc.c
Expand Up @@ -4,6 +4,7 @@
#include "projects.h"

PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts= aux_sphere_type=";
PROJ_HEAD(webmerc, "Web Mercator / Pseudo Mercator") "\n\tCyl, Sph\n\t";

#define EPS10 1.e-10

Expand Down Expand Up @@ -118,3 +119,22 @@ PJ *PROJECTION(merc) {
return P;
}

PJ *PROJECTION(webmerc) {

if( pj_param(P->ctx, P->params, "tk_0").i ) {
return pj_default_destructor(P, PJD_ERR_INVALID_ARG);
}

if( pj_param(P->ctx, P->params, "tlat_s").i ) {
return pj_default_destructor(P, PJD_ERR_INVALID_ARG);
}

if( pj_param(P->ctx, P->params, "tlat_0").i ) {
return pj_default_destructor(P, PJD_ERR_INVALID_ARG);
}

pj_calc_ellipsoid_params (P, P->a, 0);
P->inv = s_inverse;
P->fwd = s_forward;
return P;
}
1 change: 1 addition & 0 deletions src/pj_list.h
Expand Up @@ -156,6 +156,7 @@ PROJ_HEAD(wag4, "Wagner IV")
PROJ_HEAD(wag5, "Wagner V")
PROJ_HEAD(wag6, "Wagner VI")
PROJ_HEAD(wag7, "Wagner VII")
PROJ_HEAD(webmerc, "Web Mercator / Pseudo Mercator")
PROJ_HEAD(weren, "Werenskiold I")
PROJ_HEAD(wink1, "Winkel I")
PROJ_HEAD(wink2, "Winkel II")
Expand Down
13 changes: 13 additions & 0 deletions test/gie/4D-API_cs2cs-style.gie
Expand Up @@ -228,6 +228,19 @@ accept 487147.594520173 4934316.46263998 0
expect -10370728.80 5552839.74 0
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Test that Google's Web Mercator with +proj=webmerc
-------------------------------------------------------------------------------
operation proj=pipeline step init=epsg:26915 inv step proj=webmerc datum=WGS84
-------------------------------------------------------------------------------
tolerance 20 cm
accept 487147.594520173 4934316.46263998
expect -10370728.80 5552839.74

accept 487147.594520173 4934316.46263998 0
expect -10370728.80 5552839.74 0
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Test that +datum parameters are handled correctly in pipelines.
See #872 for details.
Expand Down

0 comments on commit 51df307

Please sign in to comment.