PJ *PROJECTION(rhealpix) { struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return freeup_new (P); P->opaque = Q; Q->north_square = pj_param(P->ctx, P->params,"inorth_square").i; Q->south_square = pj_param(P->ctx, P->params,"isouth_square").i; /* Check for valid north_square and south_square inputs. */ if (Q->north_square < 0 || Q->north_square > 3) { E_ERROR(-47); } if (Q->south_square < 0 || Q->south_square > 3) { E_ERROR(-47); } if (P->es) { Q->apa = pj_authset(P->es); /* For auth_lat(). */ Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ P->a = P->a*sqrt(0.5*Q->qp); /* Set P->a to authalic radius. */ P->ra = 1.0/P->a; P->fwd = e_rhealpix_forward; P->inv = e_rhealpix_inverse; } else { P->fwd = s_rhealpix_forward; P->inv = s_rhealpix_inverse; } return P; }
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(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; }
PJ *PROJECTION(utm) { int zone; struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return freeup_new (P); P->opaque = Q; if (!P->es) E_ERROR(-34); P->y0 = pj_param (P->ctx, P->params, "bsouth").i ? 10000000. : 0.; P->x0 = 500000.; if (pj_param (P->ctx, P->params, "tzone").i) /* zone input ? */ if ((zone = pj_param(P->ctx, P->params, "izone").i) > 0 && zone <= 60) --zone; else E_ERROR(-35) else /* nearest central meridian input */ if ((zone = (int)(floor ((adjlon (P->lam0) + M_PI) * 30. / M_PI))) < 0) zone = 0; else if (zone >= 60) zone = 59; P->lam0 = (zone + .5) * M_PI / 30. - M_PI; P->k0 = 0.9996; P->phi0 = 0.; return setup (P); }
void setup_tpeqd(Parameters& par, par_tpeqd& proj_parm) { double lam_1, lam_2, phi_1, phi_2, A12, pp; /* get control point locations */ phi_1 = pj_param(par.params, "rlat_1").f; lam_1 = pj_param(par.params, "rlon_1").f; phi_2 = pj_param(par.params, "rlat_2").f; lam_2 = pj_param(par.params, "rlon_2").f; if (phi_1 == phi_2 && lam_1 == lam_2) throw proj_exception(-25); par.lam0 = adjlon(0.5 * (lam_1 + lam_2)); proj_parm.dlam2 = adjlon(lam_2 - lam_1); proj_parm.cp1 = cos(phi_1); proj_parm.cp2 = cos(phi_2); proj_parm.sp1 = sin(phi_1); proj_parm.sp2 = sin(phi_2); proj_parm.cs = proj_parm.cp1 * proj_parm.sp2; proj_parm.sc = proj_parm.sp1 * proj_parm.cp2; proj_parm.ccs = proj_parm.cp1 * proj_parm.cp2 * sin(proj_parm.dlam2); proj_parm.z02 = aacos(proj_parm.sp1 * proj_parm.sp2 + proj_parm.cp1 * proj_parm.cp2 * cos(proj_parm.dlam2)); proj_parm.hz0 = .5 * proj_parm.z02; A12 = atan2(proj_parm.cp2 * sin(proj_parm.dlam2), proj_parm.cp1 * proj_parm.sp2 - proj_parm.sp1 * proj_parm.cp2 * cos(proj_parm.dlam2)); proj_parm.ca = cos(pp = aasin(proj_parm.cp1 * sin(A12))); proj_parm.sa = sin(pp); proj_parm.lp = adjlon(atan2(proj_parm.cp1 * cos(A12), proj_parm.sp1) - proj_parm.hz0); proj_parm.dlam2 *= .5; proj_parm.lamc = HALFPI - atan2(sin(A12) * proj_parm.sp1, cos(A12)) - proj_parm.dlam2; proj_parm.thz0 = tan(proj_parm.hz0); proj_parm.rhshz0 = .5 / sin(proj_parm.hz0); proj_parm.r2z0 = 0.5 / proj_parm.z02; proj_parm.z02 *= proj_parm.z02; // par.inv = s_inverse; // par.fwd = s_forward; par.es = 0.; }
PJ *PROJECTION(labrd) { double Az, sinp, R, N, t; struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return freeup_new (P); P->opaque = Q; Q->rot = pj_param(P->ctx, P->params, "bno_rot").i == 0; Az = pj_param(P->ctx, P->params, "razi").f; sinp = sin(P->phi0); t = 1. - P->es * sinp * sinp; N = 1. / sqrt(t); R = P->one_es * N / t; Q->kRg = P->k0 * sqrt( N * R ); Q->p0s = atan( sqrt(R / N) * tan(P->phi0) ); Q->A = sinp / sin(Q->p0s); t = P->e * sinp; Q->C = .5 * P->e * Q->A * log((1. + t)/(1. - t)) + - Q->A * log( tan(M_FORTPI + .5 * P->phi0)) + log( tan(M_FORTPI + .5 * Q->p0s)); t = Az + Az; Q->Ca = (1. - cos(t)) * ( Q->Cb = 1. / (12. * Q->kRg * Q->kRg) ); Q->Cb *= sin(t); Q->Cc = 3. * (Q->Ca * Q->Ca - Q->Cb * Q->Cb); Q->Cd = 6. * Q->Ca * Q->Cb; P->inv = e_inverse; P->fwd = e_forward; return P; }
void setup_airy(Parameters& par, par_airy& proj_parm) { double beta; proj_parm.no_cut = pj_param(par.params, "bno_cut").i; beta = 0.5 * (HALFPI - pj_param(par.params, "rlat_b").f); if (fabs(beta) < EPS) proj_parm.Cb = -0.5; else { proj_parm.Cb = 1./tan(beta); proj_parm.Cb *= proj_parm.Cb * log(cos(beta)); } if (fabs(fabs(par.phi0) - HALFPI) < EPS) if (par.phi0 < 0.) { proj_parm.p_halfpi = -HALFPI; proj_parm.mode = S_POLE; } else { proj_parm.p_halfpi = HALFPI; proj_parm.mode = N_POLE; } else { if (fabs(par.phi0) < EPS) proj_parm.mode = EQUIT; else { proj_parm.mode = OBLIQ; proj_parm.sinph0 = sin(par.phi0); proj_parm.cosph0 = cos(par.phi0); } } // par.fwd = s_forward; par.es = 0.; }
PJ *PROJECTION(imw_p) { double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2; int err; 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); P->opaque = Q; if (!(Q->en = pj_enfn(P->es))) return pj_default_destructor (P, ENOMEM); if( (err = phi12(P, &del, &sig)) != 0) { return destructor(P, err); } if (Q->phi_2 < Q->phi_1) { /* make sure P->phi_1 most southerly */ del = Q->phi_1; Q->phi_1 = Q->phi_2; Q->phi_2 = del; } if (pj_param(P->ctx, P->params, "tlon_1").i) Q->lam_1 = pj_param(P->ctx, P->params, "rlon_1").f; else { /* use predefined based upon latitude */ sig = fabs(sig * RAD_TO_DEG); if (sig <= 60) sig = 2.; else if (sig <= 76) sig = 4.; else sig = 8.; Q->lam_1 = sig * DEG_TO_RAD; } Q->mode = NONE_IS_ZERO; if (Q->phi_1 != 0.0) xy(P, Q->phi_1, &x1, &y1, &Q->sphi_1, &Q->R_1); else { Q->mode = PHI_1_IS_ZERO; y1 = 0.; x1 = Q->lam_1; } if (Q->phi_2 != 0.0) xy(P, Q->phi_2, &x2, &T2, &Q->sphi_2, &Q->R_2); else { Q->mode = PHI_2_IS_ZERO; T2 = 0.; x2 = Q->lam_1; } m1 = pj_mlfn(Q->phi_1, Q->sphi_1, cos(Q->phi_1), Q->en); m2 = pj_mlfn(Q->phi_2, Q->sphi_2, cos(Q->phi_2), Q->en); t = m2 - m1; s = x2 - x1; y2 = sqrt(t * t - s * s) + y1; Q->C2 = y2 - T2; t = 1. / t; Q->P = (m2 * y1 - m1 * y2) * t; Q->Q = (y2 - y1) * t; Q->Pp = (m2 * x1 - m1 * x2) * t; Q->Qp = (x2 - x1) * t; P->fwd = e_forward; P->inv = e_inverse; P->destructor = destructor; return P; }
void setup_gn_sinu(Parameters& par, par_gn_sinu& proj_parm) { if (pj_param(par.params, "tn").i && pj_param(par.params, "tm").i) { proj_parm.n = pj_param(par.params, "dn").f; proj_parm.m = pj_param(par.params, "dm").f; } else throw proj_exception(-99); setup(par, proj_parm); }
void setup_urmfps(Parameters& par, par_urmfps& proj_parm) { if (pj_param(par.params, "tn").i) { proj_parm.n = pj_param(par.params, "dn").f; if (proj_parm.n <= 0. || proj_parm.n > 1.) throw proj_exception(-40); } else throw proj_exception(-40); setup(par, proj_parm); }
PJ *PROJECTION(stere) { struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return freeup_new (P); P->opaque = Q; Q->phits = pj_param (P->ctx, P->params, "tlat_ts").i ? pj_param (P->ctx, P->params, "rlat_ts").f : HALFPI; return setup(P); }
void setup_lagrng(Parameters& par, par_lagrng& proj_parm) { double phi1; if ((proj_parm.rw = pj_param(par.params, "dW").f) <= 0) throw proj_exception(-27); proj_parm.hrw = 0.5 * (proj_parm.rw = 1. / proj_parm.rw); phi1 = pj_param(par.params, "rlat_1").f; if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL) throw proj_exception(-22); proj_parm.a1 = pow((1. - phi1)/(1. + phi1), proj_parm.hrw); par.es = 0.; // par.fwd = s_forward; }
inline void setup_tpers(Parameters& par, par_nsper<T>& proj_parm) { T omega, gamma; omega = pj_param(par.params, "dtilt").f * geometry::math::d2r<T>(); gamma = pj_param(par.params, "dazi").f * geometry::math::d2r<T>(); proj_parm.tilt = 1; proj_parm.cg = cos(gamma); proj_parm.sg = sin(gamma); proj_parm.cw = cos(omega); proj_parm.sw = sin(omega); setup(par, proj_parm); }
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; }
void setup_tpers(Parameters& par, par_nsper& proj_parm) { double omega, gamma; omega = pj_param(par.params, "dtilt").f * DEG_TO_RAD; gamma = pj_param(par.params, "dazi").f * DEG_TO_RAD; proj_parm.tilt = 1; proj_parm.cg = cos(gamma); proj_parm.sg = sin(gamma); proj_parm.cw = cos(omega); proj_parm.sw = sin(omega); setup(par, proj_parm); }
void setup_urm5(Parameters& par, par_urm5& proj_parm) { double alpha, t; proj_parm.n = pj_param(par.params, "dn").f; proj_parm.q3 = pj_param(par.params, "dq").f / 3.; alpha = pj_param(par.params, "ralpha").f; t = proj_parm.n * sin(alpha); proj_parm.m = cos(alpha) / sqrt(1. - t * t); proj_parm.rmn = 1. / (proj_parm.m * proj_parm.n); par.es = 0.; // par.inv = 0; // par.fwd = s_forward; }
PJ *PROJECTION(wintri) { struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return pj_default_destructor(P, ENOMEM); P->opaque = Q; Q->mode = WINKEL_TRIPEL; if (pj_param(P->ctx, P->params, "tlat_1").i) { if ((Q->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f)) == 0.) return pj_default_destructor (P, PJD_ERR_LAT_LARGER_THAN_90); } else /* 50d28' or acos(2/pi) */ Q->cosphi1 = 0.636619772367581343; return setup(P); }
void setup_hammer(Parameters& par, par_hammer& proj_parm) { if (pj_param(par.params, "tW").i) { if ((proj_parm.w = fabs(pj_param(par.params, "dW").f)) <= 0.) throw proj_exception(-27); } else proj_parm.w = .5; if (pj_param(par.params, "tM").i) { if ((proj_parm.m = fabs(pj_param(par.params, "dM").f)) <= 0.) throw proj_exception(-27); } else proj_parm.m = 1.; proj_parm.rm = 1. / proj_parm.m; proj_parm.m /= proj_parm.w; par.es = 0.; // par.fwd = s_forward; }
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(krovak) { double u0, n0, g; 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); P->opaque = Q; /* we want Bessel as fixed ellipsoid */ P->a = 6377397.155; P->e = sqrt(P->es = 0.006674372230614); /* if latitude of projection center is not set, use 49d30'N */ if (!pj_param(P->ctx, P->params, "tlat_0").i) P->phi0 = 0.863937979737193; /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */ /* that will correspond to using longitudes relative to greenwich */ /* as input and output, instead of lat/long relative to Ferro */ if (!pj_param(P->ctx, P->params, "tlon_0").i) P->lam0 = 0.7417649320975901 - 0.308341501185665; /* if scale not set default to 0.9999 */ if (!pj_param(P->ctx, P->params, "tk").i && !pj_param(P->ctx, P->params, "tk_0").i) P->k0 = 0.9999; Q->czech = 1; if( !pj_param(P->ctx, P->params, "tczech").i ) Q->czech = -1; /* Set up shared parameters between forward and inverse */ Q->alpha = sqrt(1. + (P->es * pow(cos(P->phi0), 4)) / (1. - P->es)); u0 = asin(sin(P->phi0) / Q->alpha); g = pow( (1. + P->e * sin(P->phi0)) / (1. - P->e * sin(P->phi0)) , Q->alpha * P->e / 2. ); double tan_half_phi0_plus_pi_4 = tan(P->phi0 / 2. + M_PI_4); if( tan_half_phi0_plus_pi_4 == 0.0 ) { return pj_default_destructor(P, PJD_ERR_INVALID_ARG); } Q->k = tan( u0 / 2. + M_PI_4) / pow (tan_half_phi0_plus_pi_4 , Q->alpha) * g; n0 = sqrt(1. - P->es) / (1. - P->es * pow(sin(P->phi0), 2)); Q->n = sin(S0); Q->rho0 = P->k0 * n0 / tan(S0); Q->ad = M_PI_2 - UQ; P->inv = krovak_e_inverse; P->fwd = krovak_e_forward; return P; }
PJ *PROJECTION(tpers) { double omega, gamma; struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return freeup_new (P); P->opaque = Q; omega = pj_param(P->ctx, P->params, "dtilt").f * DEG_TO_RAD; gamma = pj_param(P->ctx, P->params, "dazi").f * DEG_TO_RAD; Q->tilt = 1; Q->cg = cos(gamma); Q->sg = sin(gamma); Q->cw = cos(omega); Q->sw = sin(omega); return setup(P); }
static int phi12(PJ *P, double *del, double *sig) { struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque); int err = 0; if (!pj_param(P->ctx, P->params, "tlat_1").i || !pj_param(P->ctx, P->params, "tlat_2").i) { err = PJD_ERR_LAT_1_2_UNSPECIFIED; } else { Q->phi_1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->phi_2 = pj_param(P->ctx, P->params, "rlat_2").f; *del = 0.5 * (Q->phi_2 - Q->phi_1); *sig = 0.5 * (Q->phi_2 + Q->phi_1); err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? PJD_ERR_ABS_LAT1_EQ_ABS_LAT2 : 0; } return err; }
void setup_eqc(Parameters& par, par_eqc& proj_parm) { if ((proj_parm.rc = cos(pj_param(par.params, "rlat_ts").f)) <= 0.) throw proj_exception(-24); // par.inv = s_inverse; // par.fwd = s_forward; par.es = 0.; }
PJ *PROJECTION(bonne) { double c; struct pj_opaque *Q = pj_calloc (1, sizeof (struct pj_opaque)); if (0==Q) return freeup_new (P); P->opaque = Q; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(Q->phi1) < EPS10) E_ERROR(-23); if (P->es) { Q->en = pj_enfn(P->es); Q->m1 = pj_mlfn(Q->phi1, Q->am1 = sin(Q->phi1), c = cos(Q->phi1), Q->en); Q->am1 = c / (sqrt(1. - P->es * Q->am1 * Q->am1) * Q->am1); P->inv = e_inverse; P->fwd = e_forward; } else { if (fabs(Q->phi1) + EPS10 >= M_HALFPI) Q->cphi1 = 0.; else Q->cphi1 = 1. / tan(Q->phi1); P->inv = s_inverse; P->fwd = s_forward; } return P; }
PJ *PROJECTION(bonne) { double c; 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); P->opaque = Q; P->destructor = destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(Q->phi1) < EPS10) return destructor (P, PJD_ERR_LAT1_IS_ZERO); if (P->es != 0.0) { Q->en = pj_enfn(P->es); if (nullptr==Q->en) return destructor(P, ENOMEM); Q->m1 = pj_mlfn(Q->phi1, Q->am1 = sin(Q->phi1), c = cos(Q->phi1), Q->en); Q->am1 = c / (sqrt(1. - P->es * Q->am1 * Q->am1) * Q->am1); P->inv = e_inverse; P->fwd = e_forward; } else { if (fabs(Q->phi1) + EPS10 >= M_HALFPI) Q->cphi1 = 0.; else Q->cphi1 = 1. / tan(Q->phi1); P->inv = s_inverse; P->fwd = s_forward; } return P; }
PJ *PROJECTION(labrd) { double Az, sinp, R, N, t; 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); P->opaque = Q; if (P->phi0 == 0.) { return pj_default_destructor(P, PJD_ERR_LAT_0_IS_ZERO); } Az = pj_param(P->ctx, P->params, "razi").f; sinp = sin(P->phi0); t = 1. - P->es * sinp * sinp; N = 1. / sqrt(t); R = P->one_es * N / t; Q->kRg = P->k0 * sqrt( N * R ); Q->p0s = atan( sqrt(R / N) * tan(P->phi0) ); Q->A = sinp / sin(Q->p0s); t = P->e * sinp; Q->C = .5 * P->e * Q->A * log((1. + t)/(1. - t)) + - Q->A * log( tan(M_FORTPI + .5 * P->phi0)) + log( tan(M_FORTPI + .5 * Q->p0s)); t = Az + Az; Q->Ca = (1. - cos(t)) * ( Q->Cb = 1. / (12. * Q->kRg * Q->kRg) ); Q->Cb *= sin(t); Q->Cc = 3. * (Q->Ca * Q->Ca - Q->Cb * Q->Cb); Q->Cd = 6. * Q->Ca * Q->Cb; P->inv = e_inverse; P->fwd = e_forward; return P; }
void setup_cea(Parameters& par, par_cea& proj_parm) { double t = 0; if (pj_param(par.params, "tlat_ts").i && (par.k0 = cos(t = pj_param(par.params, "rlat_ts").f)) < 0.) throw proj_exception(-24); if (par.es) { t = sin(t); par.k0 /= sqrt(1. - par.es * t * t); par.e = sqrt(par.es); if (!pj_authset(par.es, proj_parm.apa)) throw proj_exception(0); proj_parm.qp = pj_qsfn(1., par.e, par.one_es); } else { } }
void setup_wink1(Parameters& par, par_wink1& proj_parm) { proj_parm.cosphi1 = cos(pj_param(par.params, "rlat_ts").f); par.es = 0.; // par.inv = s_inverse; // par.fwd = s_forward; }
static int phi12(PJ *P, double *del, double *sig) { int err = 0; if (!pj_param(P->params, "tlat_1").i || !pj_param(P->params, "tlat_2").i) { err = -41; } else { P->phi_1 = pj_param(P->params, "rlat_1").f; P->phi_2 = pj_param(P->params, "rlat_2").f; *del = 0.5 * (P->phi_2 - P->phi_1); *sig = 0.5 * (P->phi_2 + P->phi_1); err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0; } return err; }
PJ *PROJECTION(urmfps) { 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); P->opaque = Q; if (pj_param(P->ctx, P->params, "tn").i) { static_cast<struct pj_opaque*>(P->opaque)->n = pj_param(P->ctx, P->params, "dn").f; if (static_cast<struct pj_opaque*>(P->opaque)->n <= 0. || static_cast<struct pj_opaque*>(P->opaque)->n > 1.) return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE); } else { return pj_default_destructor(P, PJD_ERR_N_OUT_OF_RANGE); } return setup(P); }