Example #1
0
        // ellipsoid
        LP e_inverse(XY xy)
        {
            LP lp;

            lp.lam = lp.phi = 0;

            xy.x /= k0;
            xy.y /= k0;
            double rho = Libc.hypot(xy.x, xy.y);

            if (rho != 0)
            {
                double c    = 2.0 * Math.Atan2(rho, R2);
                double sinc = Math.Sin(c);
                double cosc = Math.Cos(c);
                lp.phi = Math.Asin(cosc * sinc0 + xy.y * sinc * cosc0 / rho);
                lp.lam = Math.Atan2(xy.x * sinc, rho * cosc0 * cosc - xy.y * sinc0 * sinc);
            }
            else
            {
                lp.phi = phic0;
                lp.lam = 0.0;
            }

            return(GAUSS.pj_inv_gauss(ctx, lp, en));
        }
Example #2
0
        // ellipsoid
        XY e_forward(LP lp)
        {
            XY xy;

            xy.x = xy.y = 0;

            lp = GAUSS.pj_gauss(ctx, lp, en);
            double sinc = Math.Sin(lp.phi);
            double cosc = Math.Cos(lp.phi);
            double cosl = Math.Cos(lp.lam);
            double k    = k0 * R2 / (1.0 + sinc0 * sinc + cosc0 * cosc * cosl);

            xy.x = k * cosc * Math.Sin(lp.lam);
            xy.y = k * (cosc0 * sinc - sinc0 * cosc * cosl);

            return(xy);
        }
Example #3
0
        public override PJ Init()
        {
            double R;

            en = GAUSS.pj_gauss_ini(e, phi0, out phic0, out R);
            if (en == null)
            {
                return(null);
            }

            sinc0 = Math.Sin(phic0);
            cosc0 = Math.Cos(phic0);
            R2    = 2.0 * R;
            inv   = e_inverse;
            fwd   = e_forward;

            return(this);
        }