void setup_eqdc(Parameters& par, par_eqdc& proj_parm) { double cosphi, sinphi; int secant; proj_parm.phi1 = pj_param(par.params, "rlat_1").f; proj_parm.phi2 = pj_param(par.params, "rlat_2").f; if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10) throw proj_exception(-21); pj_enfn(par.es, proj_parm.en); proj_parm.n = sinphi = sin(proj_parm.phi1); cosphi = cos(proj_parm.phi1); secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10; if( (proj_parm.ellips = (par.es > 0.)) ) { double ml1, m1; m1 = pj_msfn(sinphi, cosphi, par.es); ml1 = pj_mlfn(proj_parm.phi1, sinphi, cosphi, proj_parm.en); if (secant) { /* secant cone */ sinphi = sin(proj_parm.phi2); cosphi = cos(proj_parm.phi2); proj_parm.n = (m1 - pj_msfn(sinphi, cosphi, par.es)) / (pj_mlfn(proj_parm.phi2, sinphi, cosphi, proj_parm.en) - ml1); } proj_parm.c = ml1 + m1 / proj_parm.n; proj_parm.rho0 = proj_parm.c - pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en); } else { if (secant) proj_parm.n = (cosphi - cos(proj_parm.phi2)) / (proj_parm.phi2 - proj_parm.phi1); proj_parm.c = proj_parm.phi1 + cos(proj_parm.phi1) / proj_parm.n; proj_parm.rho0 = proj_parm.c - par.phi0; } // par.inv = e_inverse; // par.fwd = e_forward; // par.spc = fac; }
PJ *PROJECTION(lcc) { double cosphi, sinphi; int secant; struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return pj_default_destructor (P, ENOMEM); P->opaque = Q; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (pj_param(P->ctx, P->params, "tlat_2").i) Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; else { Q->phi2 = Q->phi1; if (!pj_param(P->ctx, P->params, "tlat_0").i) P->phi0 = Q->phi1; } if (fabs(Q->phi1 + Q->phi2) < EPS10) return pj_default_destructor(P, PJD_ERR_CONIC_LAT_EQUAL); Q->n = sinphi = sin(Q->phi1); cosphi = cos(Q->phi1); secant = fabs(Q->phi1 - Q->phi2) >= EPS10; if( (Q->ellips = (P->es != 0.)) ) { double ml1, m1; P->e = sqrt(P->es); m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_tsfn(Q->phi1, sinphi, P->e); if (secant) { /* secant cone */ sinphi = sin(Q->phi2); Q->n = log(m1 / pj_msfn(sinphi, cos(Q->phi2), P->es)); Q->n /= log(ml1 / pj_tsfn(Q->phi2, sinphi, P->e)); } Q->c = (Q->rho0 = m1 * pow(ml1, -Q->n) / Q->n); Q->rho0 *= (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. : pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), Q->n); } else { if (secant) Q->n = log(cosphi / cos(Q->phi2)) / log(tan(M_FORTPI + .5 * Q->phi2) / tan(M_FORTPI + .5 * Q->phi1)); Q->c = cosphi * pow(tan(M_FORTPI + .5 * Q->phi1), Q->n) / Q->n; Q->rho0 = (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) ? 0. : Q->c * pow(tan(M_FORTPI + .5 * P->phi0), -Q->n); } P->inv = e_inverse; P->fwd = e_forward; return P; }
PJ *PROJECTION(eqdc) { double cosphi, sinphi; int secant; struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return pj_default_destructor (P, ENOMEM); P->opaque = Q; P->destructor = destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; if (fabs(Q->phi1 + Q->phi2) < EPS10) return pj_default_destructor (P, PJD_ERR_CONIC_LAT_EQUAL); if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor(P, ENOMEM); Q->n = sinphi = sin(Q->phi1); cosphi = cos(Q->phi1); secant = fabs(Q->phi1 - Q->phi2) >= EPS10; if( (Q->ellips = (P->es > 0.)) ) { double ml1, m1; m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_mlfn(Q->phi1, sinphi, cosphi, Q->en); if (secant) { /* secant cone */ sinphi = sin(Q->phi2); cosphi = cos(Q->phi2); Q->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / (pj_mlfn(Q->phi2, sinphi, cosphi, Q->en) - ml1); } Q->c = ml1 + m1 / Q->n; Q->rho0 = Q->c - pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); } else { if (secant) Q->n = (cosphi - cos(Q->phi2)) / (Q->phi2 - Q->phi1); Q->c = Q->phi1 + cos(Q->phi1) / Q->n; Q->rho0 = Q->c - P->phi0; } P->inv = e_inverse; P->fwd = e_forward; return P; }
PJ *PROJECTION(merc) { double phits=0.0; int is_phits; if( (is_phits = pj_param(P->ctx, P->params, "tlat_ts").i) ) { phits = fabs(pj_param(P->ctx, P->params, "rlat_ts").f); if (phits >= M_HALFPI) E_ERROR(-24); } if (P->es) { /* ellipsoid */ if (is_phits) P->k0 = pj_msfn(sin(phits), cos(phits), P->es); P->inv = e_inverse; P->fwd = e_forward; } else { /* sphere */ if (is_phits) P->k0 = cos(phits); P->inv = s_inverse; P->fwd = s_forward; } return P; }
inline void setup(Parameters const& par, par_aea<T>& proj_parm) { T cosphi, sinphi; int secant; if (fabs(proj_parm.phi1 + proj_parm.phi2) < epsilon10) BOOST_THROW_EXCEPTION( projection_exception(error_conic_lat_equal) ); proj_parm.n = sinphi = sin(proj_parm.phi1); cosphi = cos(proj_parm.phi1); secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= epsilon10; if( (proj_parm.ellips = (par.es > 0.))) { T ml1, m1; proj_parm.en = pj_enfn<T>(par.es); m1 = pj_msfn(sinphi, cosphi, par.es); ml1 = pj_qsfn(sinphi, par.e, par.one_es); if (secant) { /* secant cone */ T ml2, m2; sinphi = sin(proj_parm.phi2); cosphi = cos(proj_parm.phi2); m2 = pj_msfn(sinphi, cosphi, par.es); ml2 = pj_qsfn(sinphi, par.e, par.one_es); if (ml2 == ml1) BOOST_THROW_EXCEPTION( projection_exception(0) ); proj_parm.n = (m1 * m1 - m2 * m2) / (ml2 - ml1); } proj_parm.ec = 1. - .5 * par.one_es * log((1. - par.e) / (1. + par.e)) / par.e; proj_parm.c = m1 * m1 + proj_parm.n * ml1; proj_parm.dd = 1. / proj_parm.n; proj_parm.rho0 = proj_parm.dd * sqrt(proj_parm.c - proj_parm.n * pj_qsfn(sin(par.phi0), par.e, par.one_es)); } else { if (secant) proj_parm.n = .5 * (proj_parm.n + sin(proj_parm.phi2)); proj_parm.n2 = proj_parm.n + proj_parm.n; proj_parm.c = cosphi * cosphi + proj_parm.n2 * sinphi; proj_parm.dd = 1. / proj_parm.n; proj_parm.rho0 = proj_parm.dd * sqrt(proj_parm.c - proj_parm.n2 * sin(par.phi0)); } }
inline void fac(Geographic lp, Factors &fac) const { double sinphi, cosphi; sinphi = sin(lp_lat); cosphi = cos(lp_lat); this->m_fac.code |= IS_ANAL_HK; this->m_fac.h = 1.; this->m_fac.k = this->m_proj_parm.n * (this->m_proj_parm.c - (this->m_proj_parm.ellips ? pj_mlfn(lp_lat, sinphi, cosphi, this->m_proj_parm.en) : lp_lat)) / pj_msfn(sinphi, cosphi, this->m_par.es); }
static XY e_forward (LP lp, PJ *P) { /* Ellipsoidal, forward */ XY xy = {0.0,0.0}; struct pj_opaque *Q = P->opaque; double ms, sp, cp; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = -Q->ml0; } else { sp = sin(lp.phi); ms = fabs(cp = cos(lp.phi)) > TOL ? pj_msfn(sp, cp, P->es) / sp : 0.; xy.x = ms * sin(lp.lam *= sp); xy.y = (pj_mlfn(lp.phi, sp, cp, Q->en) - Q->ml0) + ms * (1. - cos(lp.lam)); } return xy; }
void setup_merc(Parameters& par) { double phits=0.0; int is_phits; if( (is_phits = pj_param(par.params, "tlat_ts").i) ) { phits = fabs(pj_param(par.params, "rlat_ts").f); if (phits >= HALFPI) throw proj_exception(-24); } if (par.es) { /* ellipsoid */ if (is_phits) par.k0 = pj_msfn(sin(phits), cos(phits), par.es); // par.inv = e_inverse; // par.fwd = e_forward; } else { /* sphere */ if (is_phits) par.k0 = cos(phits); // par.inv = s_inverse; // par.fwd = s_forward; } }