Ejemplo n.º 1
0
 static void Main(string[] args)
 {
     try {
         const double
             lat1 = 40 + 58 / 60.0, lat2 = 39 + 56 / 60.0, // standard parallels
             k1   = 1,                                     // scale
             lon0 = -77 - 45 / 60.0;                       // Central meridan
         // Set up basic projection
         AlbersEqualArea albers = new AlbersEqualArea(Constants.WGS84.MajorRadius,
                                                      Constants.WGS84.Flattening,
                                                      lat1, lat2, k1);
         {
             // Sample conversion from geodetic to Albers Equal Area
             double lat = 39.95, lon = -75.17;    // Philadelphia
             double x, y;
             albers.Forward(lon0, lat, lon, out x, out y);
             Console.WriteLine(String.Format("X: {0} Y: {1}", x, y));
         }
         {
             // Sample conversion from Albers Equal Area grid to geodetic
             double x = 220e3, y = -53e3;
             double lat, lon;
             albers.Reverse(lon0, x, y, out lat, out lon);
             Console.WriteLine(String.Format("Latitude: {0} Longitude: {1}", lat, lon));
         }
     }
     catch (GeographicErr e) {
         Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
     }
 }
Ejemplo n.º 2
0
 static void Main(string[] args)
 {
     try {
         const double
             lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
             k1 = 1,                                   // scale
             lon0 = -77 - 45/60.0;                     // Central meridan
         // Set up basic projection
         AlbersEqualArea albers = new AlbersEqualArea( Constants.WGS84.MajorRadius,
                                                       Constants.WGS84.Flattening,
                                                       lat1, lat2, k1);
         {
             // Sample conversion from geodetic to Albers Equal Area
             double lat = 39.95, lon = -75.17;    // Philadelphia
             double x, y;
             albers.Forward(lon0, lat, lon, out x, out y);
             Console.WriteLine( String.Format("X: {0} Y: {1}", x, y ) );
         }
         {
             // Sample conversion from Albers Equal Area grid to geodetic
             double x = 220e3, y = -53e3;
             double lat, lon;
             albers.Reverse(lon0, x, y, out lat, out lon);
             Console.WriteLine( String.Format("Latitude: {0} Longitude: {1}", lat, lon ) );
         }
     }
     catch (GeographicErr e) {
         Console.WriteLine( String.Format( "Caught exception: {0}", e.Message ) );
     }
 }
Ejemplo n.º 3
0
        private void ConvertAlbers()
        {
            double lat = 0.0, lon = 0.0, x = 0.0, y = 0.0, gamma = 0.0, k = 0.0;
            double lon0 = Double.Parse(m_lon0TextBox.Text);

            switch (m_functionComboBox.SelectedIndex)
            {
            case 0:
                lat = Double.Parse(m_latitudeTextBox.Text);
                lon = Double.Parse(m_longitudeTextBox.Text);
                m_albers.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
                m_xTextBox.Text = x.ToString();
                m_yTextBox.Text = y.ToString();
                break;

            case 1:
                x = Double.Parse(m_xTextBox.Text);
                y = Double.Parse(m_yTextBox.Text);
                m_albers.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
                m_latitudeTextBox.Text  = lat.ToString();
                m_longitudeTextBox.Text = lon.ToString();
                break;
            }
            m_gammaTextBox.Text          = gamma.ToString();
            m_azimuthalScaleTextBox.Text = k.ToString();
        }
Ejemplo n.º 4
0
        public void ConicProj9_CheckFixToInfiniteLoopInAlbersEqualAreaWith_e2_LessThan_MinusOne()
        {
            var lcc = new AlbersEqualArea(6.4e6, -0.5, -10, 40, 1);

            var(x, y) = lcc.Forward(0, 85, 10);

            Assert.AreEqual(609861, x, 1);
            Assert.AreEqual(7566522, y, 1);
        }
Ejemplo n.º 5
0
 private void OnValidate(object sender, EventArgs e)
 {
     try
     {
         const double    DEG_TO_RAD = 3.1415926535897932384626433832795 / 180.0;
         AlbersEqualArea a          = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaNorth);
         a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaSouth);
         double radius = a.EquatorialRadius;
         double f      = a.Flattening;
         a = new AlbersEqualArea(radius, f, 60.0, 1.0);
         a = new AlbersEqualArea(radius, f, 60.0, 70.0, 1.0);
         a = new AlbersEqualArea(radius, f, Math.Sin(88.0 * DEG_TO_RAD), Math.Cos(88.0 * DEG_TO_RAD),
                                 Math.Sin(89.0 * DEG_TO_RAD), Math.Cos(89.0 * DEG_TO_RAD), 1.0);
         a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.CylindricalEqualArea);
         double lon0 = 0.0, lat = 32.0, lon = -86.0, x, y, gamma, k, x1, y1;
         a.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
         a.Forward(lon0, lat, lon, out x1, out y1);
         if (x != x1 || y != y1)
         {
             throw new Exception("Error in AlbersEqualArea.Forward");
         }
         a.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
         a.Reverse(lon0, x, y, out x1, out y1);
         if (lat != x1 || lon != y1)
         {
             throw new Exception("Error in AlbersEqualArea.Reverse");
         }
         LambertConformalConic b = new LambertConformalConic(radius, f, 60.0, 1.0);
         b = new LambertConformalConic(radius, f, 60.0, 65.0, 1.0);
         b = new LambertConformalConic(radius, f, Math.Sin(88.0 * DEG_TO_RAD), Math.Cos(88.0 * DEG_TO_RAD),
                                       Math.Sin(89.0 * DEG_TO_RAD), Math.Cos(89.0 * DEG_TO_RAD), 1.0);
         b = new LambertConformalConic();
         b.SetScale(60.0, 1.0);
         b.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
         b.Forward(-87.0, 32.0, -86.0, out x1, out y1);
         if (x != x1 || y != y1)
         {
             throw new Exception("Error in LambertConformalConic.Forward");
         }
         b.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
         b.Reverse(-87.0, x, y, out x1, out y1, out gamma, out k);
         if (lat != x1 || lon != y1)
         {
             throw new Exception("Error in LambertConformalConic.Reverse");
         }
         TransverseMercator c = new TransverseMercator(radius, f, 1.0);
         c = new TransverseMercator();
         c.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
         c.Forward(-87.0, 32.0, -86.0, out x1, out y1);
         if (x != x1 || y != y1)
         {
             throw new Exception("Error in TransverseMercator.Forward");
         }
         c.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
         c.Reverse(-87.0, x, y, out x1, out y1);
         if (lat != x1 || lon != y1)
         {
             throw new Exception("Error in TransverseMercator.Reverse");
         }
         TransverseMercatorExact d = new TransverseMercatorExact(radius, f, 1.0, false);
         d = new TransverseMercatorExact();
         d.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
         d.Forward(-87.0, 32.0, -86.0, out x1, out y1);
         if (x != x1 || y != y1)
         {
             throw new Exception("Error in TransverseMercatorExact.Forward");
         }
         d.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
         d.Reverse(-87.0, x, y, out x1, out y1);
         if (lat != x1 || lon != y1)
         {
             throw new Exception("Error in TransverseMercatorExact.Reverse");
         }
     }
     catch (Exception xcpt)
     {
         MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return;
     }
     MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
 }
Ejemplo n.º 6
0
 private void OnValidate(object sender, EventArgs e)
 {
     try
     {
         const double DEG_TO_RAD = 3.1415926535897932384626433832795 / 180.0;
         AlbersEqualArea a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaNorth);
         a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.AzimuthalEqualAreaSouth);
         double radius = a.MajorRadius;
         double f = a.Flattening;
         a = new AlbersEqualArea(radius, f, 60.0, 1.0);
         a = new AlbersEqualArea(radius, f, 60.0, 70.0, 1.0);
         a = new AlbersEqualArea(radius, f, Math.Sin(88.0 * DEG_TO_RAD), Math.Cos(88.0 * DEG_TO_RAD),
             Math.Sin(89.0*DEG_TO_RAD), Math.Cos(89.0*DEG_TO_RAD), 1.0);
         a = new AlbersEqualArea(AlbersEqualArea.StandardTypes.CylindricalEqualArea);
         double lon0 = 0.0, lat = 32.0, lon = -86.0, x, y, gamma, k, x1, y1;
         a.Forward(lon0, lat, lon, out x, out y, out gamma, out k);
         a.Forward(lon0, lat, lon, out x1, out y1);
         if (x != x1 || y != y1)
             throw new Exception("Error in AlbersEqualArea.Forward");
         a.Reverse(lon0, x, y, out lat, out lon, out gamma, out k);
         a.Reverse(lon0, x, y, out x1, out y1);
         if (lat != x1 || lon != y1)
             throw new Exception("Error in AlbersEqualArea.Reverse");
         LambertConformalConic b = new LambertConformalConic(radius, f, 60.0, 1.0);
         b = new LambertConformalConic(radius, f, 60.0, 65.0, 1.0);
         b = new LambertConformalConic(radius, f, Math.Sin(88.0 * DEG_TO_RAD), Math.Cos(88.0 * DEG_TO_RAD),
             Math.Sin(89.0 * DEG_TO_RAD), Math.Cos(89.0 * DEG_TO_RAD), 1.0);
         b = new LambertConformalConic();
         b.SetScale(60.0, 1.0);
         b.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
         b.Forward(-87.0, 32.0, -86.0, out x1, out y1);
         if (x != x1 || y != y1)
             throw new Exception("Error in LambertConformalConic.Forward");
         b.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
         b.Reverse(-87.0, x, y, out x1, out y1, out gamma, out k);
         if (lat != x1 || lon != y1)
             throw new Exception("Error in LambertConformalConic.Reverse");
         TransverseMercator c = new TransverseMercator(radius, f, 1.0);
         c = new TransverseMercator();
         c.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
         c.Forward(-87.0, 32.0, -86.0, out x1, out y1);
         if (x != x1 || y != y1)
             throw new Exception("Error in TransverseMercator.Forward");
         c.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
         c.Reverse(-87.0, x, y, out x1, out y1);
         if (lat != x1 || lon != y1)
             throw new Exception("Error in TransverseMercator.Reverse");
         TransverseMercatorExact d = new TransverseMercatorExact(radius, f, 1.0, false);
         d = new TransverseMercatorExact();
         d.Forward(-87.0, 32.0, -86.0, out x, out y, out gamma, out k);
         d.Forward(-87.0, 32.0, -86.0, out x1, out y1);
         if (x != x1 || y != y1)
             throw new Exception("Error in TransverseMercatorExact.Forward");
         d.Reverse(-87.0, x, y, out lat, out lon, out gamma, out k);
         d.Reverse(-87.0, x, y, out x1, out y1);
         if (lat != x1 || lon != y1)
             throw new Exception("Error in TransverseMercatorExact.Reverse");
     }
     catch (Exception xcpt)
     {
         MessageBox.Show(xcpt.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return;
     }
     MessageBox.Show("No errors detected", "OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
 }