aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2018-04-09 22:38:39 +0200
committerGitHub <noreply@github.com>2018-04-09 22:38:39 +0200
commit875d5168b7978fb35ae3e71be85baa176403447d (patch)
treee613c2eb254d571ec55290c148ec51f3488e1b50 /src
parent89af2753651f8c21eae9df631a71c0a3b03bcc3b (diff)
parent3a2ddb6c6efbccf388ea89e177ca51fd25946ecf (diff)
downloadPROJ-875d5168b7978fb35ae3e71be85baa176403447d.tar.gz
PROJ-875d5168b7978fb35ae3e71be85baa176403447d.zip
Merge pull request #925 from rouault/aux_sphere_type
Add a dedicated proj=webmerc operation
Diffstat (limited to 'src')
-rw-r--r--src/PJ_merc.c17
-rw-r--r--src/PJ_pipeline.c2
-rw-r--r--src/pj_list.h1
-rw-r--r--src/proj_4D_api.c4
4 files changed, 22 insertions, 2 deletions
diff --git a/src/PJ_merc.c b/src/PJ_merc.c
index 18303c45..a3e5e846 100644
--- a/src/PJ_merc.c
+++ b/src/PJ_merc.c
@@ -1,8 +1,10 @@
#define PJ_LIB__
+#include "proj_internal.h"
#include "proj.h"
#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";
#define EPS10 1.e-10
@@ -76,3 +78,18 @@ PJ *PROJECTION(merc) {
return P;
}
+PJ *PROJECTION(webmerc) {
+
+ /* Overriding k_0, lat_0 and lon_0 with fixed parameters */
+ 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;
+}
diff --git a/src/PJ_pipeline.c b/src/PJ_pipeline.c
index b60e05a8..aa7d76f8 100644
--- a/src/PJ_pipeline.c
+++ b/src/PJ_pipeline.c
@@ -306,6 +306,8 @@ static void set_ellipsoid(PJ *P) {
/* the PJ you provided". */
proj_errno_reset (P);
}
+ P->a_orig = P->a;
+ P->es_orig = P->es;
pj_calc_ellipsoid_params (P, P->a, P->es);
diff --git a/src/pj_list.h b/src/pj_list.h
index 09a66034..440f7972 100644
--- a/src/pj_list.h
+++ b/src/pj_list.h
@@ -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")
diff --git a/src/proj_4D_api.c b/src/proj_4D_api.c
index 11a56ac0..aed4685b 100644
--- a/src/proj_4D_api.c
+++ b/src/proj_4D_api.c
@@ -485,7 +485,7 @@ Returns 1 on success, 0 on failure
if (0==d[0] && 0==d[1] && 0==d[2] && 0==d[3] && 0==d[4] && 0==d[5] && 0==d[6]) {
/* If the current ellipsoid is not WGS84, then make sure the */
/* change in ellipsoid is still done. */
- if (!(fabs(P->a - 6378137.0) < 1e-8 && fabs(P->f - 1./ 298.257223563) < 1e-15)) {
+ if (!(fabs(P->a_orig - 6378137.0) < 1e-8 && fabs(P->es_orig - 0.0066943799901413) < 1e-15)) {
do_cart = 1;
}
break;
@@ -512,7 +512,7 @@ Returns 1 on success, 0 on failure
/* geocentric/cartesian space or we need to do a Helmert transform. */
if (P->is_geocent || P->helmert || do_cart) {
char def[150];
- sprintf (def, "break_cs2cs_recursion proj=cart a=%40.20g f=%40.20g", P->a, P->f);
+ sprintf (def, "break_cs2cs_recursion proj=cart a=%40.20g es=%40.20g", P->a_orig, P->es_orig);
Q = proj_create (P->ctx, def);
if (0==Q)
return 0;