예제 #1
0
        private void ConvertLambert()
        {
            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_lambert.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_lambert.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();
        }
예제 #2
0
        public void ConicProj7()
        {
            var lcc = new LambertConformalConic(Ellipsoid.WGS84, 90, 90, 1);

            var(lat, lon) = lcc.Reverse(0, 0, -1e150);

            Assert.AreEqual(-90.0, lat, 0.01);
            Assert.AreEqual(0.00, Math.Abs(lon), 0.001);
        }
예제 #3
0
        public void ConicProj6()
        {
            var lcc = new LambertConformalConic(Ellipsoid.WGS84, 45, 45, 1);

            var(lat, lon) = lcc.Reverse(0, 0, double.NegativeInfinity);

            Assert.AreEqual(-90.0, lat, 0.01);
            Assert.AreEqual(0.00, Math.Abs(lon), 0.001);
        }
예제 #4
0
        public void ConicProj4()
        {
            var lcc = new LambertConformalConic(Ellipsoid.WGS84, 0, 0, 1);

            var(lat, lon) = lcc.Reverse(0, 1113195, double.PositiveInfinity);

            Assert.AreEqual(90.0, lat, 0.01);
            Assert.AreEqual(10.00, lon, 0.001);
        }
예제 #5
0
        public void ConicProj3_CheckFixForLambertConformalConic_ReverseOverflowBugs()
        {
            var lcc = new LambertConformalConic(Ellipsoid.WGS84, 0, 0, 1);

            var(lat, lon) = lcc.Reverse(0, 1113195, -1e10);

            Assert.AreEqual(-90.0, lat, 0.01);
            Assert.AreEqual(10.00, lon, 0.001);
        }
 static void Main(string[] args)
 {
     try {
         // Define the Pennsylvania South state coordinate system EPSG:3364
         // http://www.spatialreference.org/ref/epsg/3364/
         const double
             lat1 = 40 + 58 / 60.0, lat2 = 39 + 56 / 60.0,  // standard parallels
             k1 = 1,                                        // scale
             lat0 = 39 + 20 / 60.0, lon0 = -77 - 45 / 60.0, // origin
             fe = 600000, fn = 0;                           // false easting and northing
         // Set up basic projection
         LambertConformalConic PASouth = new LambertConformalConic(Constants.WGS84.MajorRadius,
                                                                   Constants.WGS84.Flattening,
                                                                   lat1, lat2, k1);
         double x0, y0;
         // Transform origin point
         PASouth.Forward(lon0, lat0, lon0, out x0, out y0);
         x0 -= fe; y0 -= fn;
         {
             // Sample conversion from geodetic to PASouth grid
             double lat = 39.95, lon = -75.17;    // Philadelphia
             double x, y;
             PASouth.Forward(lon0, lat, lon, out x, out y);
             x -= x0; y -= y0;
             Console.WriteLine(String.Format("{0} {1}", x, y));
         }
         {
             // Sample conversion from PASouth grid to geodetic
             double x = 820e3, y = 72e3;
             double lat, lon;
             x += x0; y += y0;
             PASouth.Reverse(lon0, x, y, out lat, out lon);
             Console.WriteLine(String.Format("{0} {1}", lat, lon));
         }
     }
     catch (GeographicErr e) {
         Console.WriteLine(String.Format("Caught exception: {0}", e.Message));
     }
 }
 static void Main(string[] args)
 {
     try {
         // Define the Pennsylvania South state coordinate system EPSG:3364
         // http://www.spatialreference.org/ref/epsg/3364/
         const double
             lat1 = 40 + 58/60.0, lat2 = 39 + 56/60.0, // standard parallels
             k1 = 1,                                   // scale
             lat0 = 39 + 20/60.0, lon0 =-77 - 45/60.0, // origin
             fe = 600000, fn = 0;                      // false easting and northing
         // Set up basic projection
         LambertConformalConic PASouth = new LambertConformalConic( Constants.WGS84.MajorRadius,
                                                                    Constants.WGS84.Flattening,
                                                                    lat1, lat2, k1);
         double x0, y0;
         // Transform origin point
         PASouth.Forward(lon0, lat0, lon0, out x0, out y0);
         x0 -= fe; y0 -= fn;
         {
             // Sample conversion from geodetic to PASouth grid
             double lat = 39.95, lon = -75.17;    // Philadelphia
             double x, y;
             PASouth.Forward(lon0, lat, lon, out x, out y);
             x -= x0; y -= y0;
             Console.WriteLine( String.Format("{0} {1}", x, y) );
         }
         {
             // Sample conversion from PASouth grid to geodetic
             double x = 820e3, y = 72e3;
             double lat, lon;
             x += x0; y += y0;
             PASouth.Reverse(lon0, x, y, out lat, out lon);
             Console.WriteLine( String.Format("{0} {1}", lat, lon) );
         }
     }
     catch (GeographicErr e) {
         Console.WriteLine( String.Format("Caught exception: {0}", e.Message) );
     }
 }
예제 #8
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);
 }
예제 #9
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);
 }