public void SetupUPS(AzimuthalMode pole)
 {
     ProjectionLatitude  = (pole == AzimuthalMode.SouthPole) ? -ProjectionMath.PiHalf : ProjectionMath.PiHalf;
     ProjectionLongitude = 0.0;
     ScaleFactor         = 0.994;
     FalseEasting        = 2000000.0;
     FalseNorthing       = 2000000.0;
     TrueScaleLatitude   = ProjectionMath.PiHalf;
     Initialize();
 }
예제 #2
0
 public override void Initialize()
 {
     base.Initialize();
     if (Math.Abs(Math.Abs(ProjectionLatitude) - ProjectionMath.PiHalf) < EPS10)
     {
         _mode = ProjectionLatitude < 0.0 ? AzimuthalMode.SouthPole : AzimuthalMode.NorthPole;
     }
     else if (Math.Abs(ProjectionLatitude) > EPS10)
     {
         _mode    = AzimuthalMode.Oblique;
         _sinphi0 = Math.Sin(ProjectionLatitude);
         _cosphi0 = Math.Cos(ProjectionLatitude);
     }
     else
     {
         _mode = AzimuthalMode.Equator;
     }
 }
        public override void Initialize()
        {
            base.Initialize();
            double t;

            phi0 = _projectionLatitude;

            if (Math.Abs((t = Math.Abs(phi0)) - ProjectionMath.PiHalf) < ProjectionMath.EPS10)
            {
                mode = phi0 < 0.0 ? AzimuthalMode.SouthPole : AzimuthalMode.NorthPole;
            }
            else if (Math.Abs(t) < ProjectionMath.EPS10)
            {
                mode = AzimuthalMode.Equator;
            }
            else
            {
                mode = AzimuthalMode.Oblique;
            }
            if (!_spherical)
            {
                double sinphi;

                _e  = Math.Sqrt(_es);
                qp  = ProjectionMath.Qsfn(1.0, _e, _oneEs);
                mmf = 0.5 / (1.0 - _es);
                apa = ProjectionMath.AuthSet(_es);
                switch (mode)
                {
                case AzimuthalMode.NorthPole:
                case AzimuthalMode.SouthPole:
                    dd = 1.0;
                    break;

                case AzimuthalMode.Equator:
                    dd  = 1.0 / (rq = Math.Sqrt(.5 * qp));
                    xmf = 1.0;
                    ymf = .5 * qp;
                    break;

                case AzimuthalMode.Oblique:
                    rq     = Math.Sqrt(.5 * qp);
                    sinphi = Math.Sin(phi0);
                    sinb1  = ProjectionMath.Qsfn(sinphi, _e, _oneEs) / qp;
                    cosb1  = Math.Sqrt(1.0 - sinb1 * sinb1);
                    dd     = Math.Cos(phi0) / (Math.Sqrt(1.0 - _es * sinphi * sinphi) *
                                               rq * cosb1);
                    ymf  = (xmf = rq) / dd;
                    xmf *= dd;
                    break;
                }
            }
            else
            {
                if (mode == AzimuthalMode.Oblique)
                {
                    sinph0 = Math.Sin(phi0);
                    cosph0 = Math.Cos(phi0);
                }
            }
        }