diff options
| author | Frank Warmerdam <warmerdam@pobox.com> | 2009-09-24 01:50:23 +0000 |
|---|---|---|
| committer | Frank Warmerdam <warmerdam@pobox.com> | 2009-09-24 01:50:23 +0000 |
| commit | 84d22b2a85c5f0b4aab0fcd8be9202e603ad0f73 (patch) | |
| tree | 9f8c1f62a093b6d23feddcd75e2d434bc464130c | |
| parent | ad030cb26d6af270616b6c57755448242a7e792a (diff) | |
| download | PROJ-84d22b2a85c5f0b4aab0fcd8be9202e603ad0f73.tar.gz PROJ-84d22b2a85c5f0b4aab0fcd8be9202e603ad0f73.zip | |
remove rho from structure to establish threadsafety (#41)
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@1629 4e78687f-474d-0410-85f9-8d5e500ac6b2
| -rw-r--r-- | ChangeLog | 2 | ||||
| -rw-r--r-- | src/PJ_lcc.c | 26 |
2 files changed, 16 insertions, 12 deletions
@@ -1,5 +1,7 @@ 2009-09-23 Frank Warmerdam <warmerdam@pobox.com> + * src/pj_rho.c: move rho out of structure, threadsafety issue (#41). + * nmake.opt: improve comments (#50). * nad/epsg: regenerated - use more symbolic ellipsoid/datum names, and diff --git a/src/PJ_lcc.c b/src/PJ_lcc.c index 90107839..80a85d0b 100644 --- a/src/PJ_lcc.c +++ b/src/PJ_lcc.c @@ -2,7 +2,6 @@ double phi1; \ double phi2; \ double n; \ - double rho; \ double rho0; \ double c; \ int ellips; @@ -12,32 +11,34 @@ PROJ_HEAD(lcc, "Lambert Conformal Conic") "\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0"; # define EPS10 1.e-10 FORWARD(e_forward); /* ellipsoid & spheroid */ + double rho; if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { if ((lp.phi * P->n) <= 0.) F_ERROR; - P->rho = 0.; + rho = 0.; } else - P->rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), + rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); - xy.x = P->k0 * (P->rho * sin( lp.lam *= P->n ) ); - xy.y = P->k0 * (P->rho0 - P->rho * cos(lp.lam) ); + xy.x = P->k0 * (rho * sin( lp.lam *= P->n ) ); + xy.y = P->k0 * (P->rho0 - rho * cos(lp.lam) ); return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ + double rho; xy.x /= P->k0; xy.y /= P->k0; - if( (P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) { + if( (rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) { if (P->n < 0.) { - P->rho = -P->rho; + rho = -rho; xy.x = -xy.x; xy.y = -xy.y; } if (P->ellips) { - if ((lp.phi = pj_phi2(pow(P->rho / P->c, 1./P->n), P->e)) + if ((lp.phi = pj_phi2(pow(rho / P->c, 1./P->n), P->e)) == HUGE_VAL) I_ERROR; } else - lp.phi = 2. * atan(pow(P->c / P->rho, 1./P->n)) - HALFPI; + lp.phi = 2. * atan(pow(P->c / rho, 1./P->n)) - HALFPI; lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; @@ -46,14 +47,15 @@ INVERSE(e_inverse); /* ellipsoid & spheroid */ return (lp); } SPECIAL(fac) { + double rho; if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { if ((lp.phi * P->n) <= 0.) return; - P->rho = 0.; + rho = 0.; } else - P->rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), + rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); fac->code |= IS_ANAL_HK + IS_ANAL_CONV; - fac->k = fac->h = P->k0 * P->n * P->rho / + fac->k = fac->h = P->k0 * P->n * rho / pj_msfn(sin(lp.phi), cos(lp.phi), P->es); fac->conv = - P->n * lp.lam; } |
