diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-11-29 14:10:15 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-11-29 15:46:23 +0100 |
| commit | bc0c9f3e96dc4a9829f1f3d1e1307b4dd5dd10de (patch) | |
| tree | bc1d30153ddbae531c157afa2609204f9be64152 /src | |
| parent | 87270ae6f1840872d5f49c70258941197b0ce809 (diff) | |
| download | PROJ-bc0c9f3e96dc4a9829f1f3d1e1307b4dd5dd10de.tar.gz PROJ-bc0c9f3e96dc4a9829f1f3d1e1307b4dd5dd10de.zip | |
Inverse tmerc spherical: fix wrong sign of latitude when lat_0 is used (fixes #2468)
Corrected formula given by @evanmiller
Diffstat (limited to 'src')
| -rw-r--r-- | src/projections/tmerc.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/projections/tmerc.cpp b/src/projections/tmerc.cpp index 8cae9968..2d13b064 100644 --- a/src/projections/tmerc.cpp +++ b/src/projections/tmerc.cpp @@ -203,11 +203,13 @@ static PJ_LP approx_s_inv (PJ_XY xy, PJ *P) { return proj_coord_error().lp; } g = .5 * (h - 1. / h); - h = cos (P->phi0 + xy.y / Q->esp); + /* D, as in equation 8-8 of USGS "Map Projections - A Working Manual" */ + const double D = P->phi0 + xy.y / Q->esp; + h = cos (D); lp.phi = asin(sqrt((1. - h * h) / (1. + g * g))); /* Make sure that phi is on the correct hemisphere when false northing is used */ - if (xy.y < 0. && -lp.phi+P->phi0 < 0.0) lp.phi = -lp.phi; + lp.phi = copysign(lp.phi, D); lp.lam = (g != 0.0 || h != 0.0) ? atan2 (g, h) : 0.; return lp; |
