Beispiel #1
0
        public override PJ Init()
        {
            phi1 = Proj.pj_param_r(ctx, parameters, "lat_1");
            if (Proj.pj_param_t(ctx, parameters, "lat_2"))
            {
                phi2 = Proj.pj_param_r(ctx, parameters, "lat_2");
            }
            else
            {
                phi2 = phi1;
                if (!Proj.pj_param_t(ctx, parameters, "lat_0"))
                {
                    phi0 = phi1;
                }
            }

            if (Math.Abs(phi1 + phi2) < EPS10)
            {
                Proj.pj_ctx_set_errno(ctx, -21); return(null);
            }
            double sinphi = n = Math.Sin(phi1);
            double cosphi = Math.Cos(phi1);
            bool   secant = Math.Abs(phi1 - phi2) >= EPS10;

            ellips = (es != 0.0);
            if (ellips)
            {
                e = Math.Sqrt(es);
                double m1  = Proj.pj_msfn(sinphi, cosphi, es);
                double ml1 = Proj.pj_tsfn(phi1, sinphi, e);
                if (secant)
                {                 // secant cone
                    sinphi = Math.Sin(phi2);
                    n      = Math.Log(m1 / Proj.pj_msfn(sinphi, Math.Cos(phi2), es));
                    n     /= Math.Log(ml1 / Proj.pj_tsfn(phi2, sinphi, e));
                }
                c     = rho0 = m1 * Math.Pow(ml1, -n) / n;
                rho0 *= (Math.Abs(Math.Abs(phi0) - Proj.HALFPI) < EPS10)?0.0:Math.Pow(Proj.pj_tsfn(phi0, Math.Sin(phi0), e), n);
            }
            else
            {
                if (secant)
                {
                    n = Math.Log(cosphi / Math.Cos(phi2)) / Math.Log(Math.Tan(Proj.FORTPI + 0.5 * phi2) / Math.Tan(Proj.FORTPI + 0.5 * phi1));
                }
                c    = cosphi * Math.Pow(Math.Tan(Proj.FORTPI + 0.5 * phi1), n) / n;
                rho0 = (Math.Abs(Math.Abs(phi0) - Proj.HALFPI) < EPS10)?0.0:c *Math.Pow(Math.Tan(Proj.FORTPI + 0.5 * phi0), -n);
            }

            inv = e_inverse;
            fwd = e_forward;
            spc = fac;

            return(this);
        }
Beispiel #2
0
        public override PJ Init()
        {
            phi1 = Proj.pj_param_r(ctx, parameters, "lat_1");
            phi2 = Proj.pj_param_r(ctx, parameters, "lat_2");

            if (Math.Abs(phi1 + phi2) < EPS10)
            {
                Proj.pj_ctx_set_errno(ctx, -21); return(null);
            }

            en = Proj.pj_enfn(es);
            if (en == null)
            {
                return(null);
            }

            double sinphi = n = Math.Sin(phi1);
            double cosphi = Math.Cos(phi1);
            bool   secant = Math.Abs(phi1 - phi2) >= EPS10;

            ellips = (es > 0.0);
            if (ellips)
            {
                double m1  = Proj.pj_msfn(sinphi, cosphi, es);
                double ml1 = Proj.pj_mlfn(phi1, sinphi, cosphi, en);
                if (secant)
                {                 // secant cone
                    sinphi = Math.Sin(phi2);
                    cosphi = Math.Cos(phi2);
                    n      = (m1 - Proj.pj_msfn(sinphi, cosphi, es)) / (Proj.pj_mlfn(phi2, sinphi, cosphi, en) - ml1);
                }
                c    = ml1 + m1 / n;
                rho0 = c - Proj.pj_mlfn(phi0, Math.Sin(phi0), Math.Cos(phi0), en);
            }
            else
            {
                if (secant)
                {
                    n = (cosphi - Math.Cos(phi2)) / (phi2 - phi1);
                }
                c    = phi1 + Math.Cos(phi1) / n;
                rho0 = c - phi0;
            }

            inv = e_inverse;
            fwd = e_forward;
            spc = fac;

            return(this);
        }