diff options
| -rw-r--r-- | src/projections/lagrng.cpp | 14 | ||||
| -rw-r--r-- | test/gie/builtins.gie | 9 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/projections/lagrng.cpp b/src/projections/lagrng.cpp index ac7a37a4..d37a00e6 100644 --- a/src/projections/lagrng.cpp +++ b/src/projections/lagrng.cpp @@ -26,12 +26,12 @@ static PJ_XY lagrng_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque); double v, c; - if (fabs(fabs(lp.phi) - M_HALFPI) < TOL) { + const double sin_phi = sin(lp.phi); + if (fabs(fabs(sin_phi) - 1) < TOL) { xy.x = 0; xy.y = lp.phi < 0 ? -2. : 2.; } else { - lp.phi = sin(lp.phi); - v = Q->a1 * pow((1. + lp.phi)/(1. - lp.phi), Q->hrw); + v = Q->a1 * pow((1. + sin_phi)/(1. - sin_phi), Q->hrw); lp.lam *= Q->rw; c = 0.5 * (v + 1./v) + cos(lp.lam); if (c < TOL) { @@ -70,7 +70,7 @@ static PJ_LP lagrng_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver PJ *PROJECTION(lagrng) { - double phi1; + double sin_phi1; struct pj_opaque *Q = static_cast<struct pj_opaque*>(pj_calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) return pj_default_destructor (P, ENOMEM); @@ -85,11 +85,11 @@ PJ *PROJECTION(lagrng) { Q->hw = 0.5 * Q->w; Q->rw = 1. / Q->w; Q->hrw = 0.5 * Q->rw; - phi1 = sin(pj_param(P->ctx, P->params, "rlat_1").f); - if (fabs(fabs(phi1) - 1.) < TOL) + sin_phi1 = sin(pj_param(P->ctx, P->params, "rlat_1").f); + if (fabs(fabs(sin_phi1) - 1.) < TOL) return pj_default_destructor(P, PJD_ERR_LAT_LARGER_THAN_90); - Q->a1 = pow((1. - phi1)/(1. + phi1), Q->hrw); + Q->a1 = pow((1. - sin_phi1)/(1. + sin_phi1), Q->hrw); Q->a2 = Q->a1 * Q->a1; P->es = 0.; diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index 08b8c9b2..ba9fc0aa 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -2593,7 +2593,14 @@ direction inverse accept 2 0 0 expect failure errno tolerance_condition - +------------------------------------------------------------------------------- +operation +proj=lagrng +R=1 +------------------------------------------------------------------------------- +tolerance 0.1 mm +accept 0 89.9999999 +expect 0 2 +accept 0 -89.9999999 +expect 0 -2 =============================================================================== Larrivee |
