示例#1
0
 public CoordinateTransformation(string mlb1, string mlb2)
 {
     mlb_in  = mlb1;
     mlb_out = mlb2;
     TR      = TrLib.TR_Open(mlb1, mlb2, "");
     is_init = (TR != IntPtr.Zero);
     if (!is_init)               //can discuss if we should throw an exception here.....
     {
         throw new ArgumentException("Invalid input labels!");
     }
 }
示例#2
0
 /* versions of overloaded transformation method defined here */
 public TrLib.TR_Error Transform(Point pt)
 {
     TrLib.TR_Error err;
     if (!is_init)
     {
         pt.return_code = TrLib.TR_Error.TR_LABEL_ERROR;
         return(TrLib.TR_Error.TR_LABEL_ERROR);
     }
     err            = TrLib.TR_Transform(TR, out pt.x, out pt.y, out pt.z, 1);
     pt.return_code = err;
     return((TrLib.TR_Error)err);
 }
示例#3
0
 public TrLib.TR_Error Transform(double[] X, double[] Y, double[] Z)
 {
     TrLib.TR_Error ERR = TrLib.TR_Error.TR_OK, err;
     if ((X.Length != Y.Length) || (Z.Length != X.Length))
     {
         throw new ArgumentException("Sizes of input arrays must agree!");
     }
     for (int i = 0; i < X.Length; i++)
     {
         err = TrLib.TR_Transform(TR, out X[i], out Y[i], out Z[i], 1);
         if (err != TrLib.TR_Error.TR_OK)
         {
             ERR = err;
         }
     }
     return(ERR);
 }
示例#4
0
        static void Main(string[] args)
        {
            TrLib.TR_Error error;
            int            i;

            if (args.Length > 0)
            {
                System.Console.WriteLine("Initialising library.");
                error = TrLib.InitLibrary(args[0]);
                System.Console.WriteLine("Init: {0}\n", error);
            }
            else
            {
                System.Console.WriteLine("Specify geoid library as first input parameter!");
                return;
            }
            System.Console.WriteLine("Loading functions from {0}", TrLib.TRLIB);
            string version = TrLib.GetVersion();

            System.Console.WriteLine("This is TrLib. v. {0}\n", version);
            TrLib.SetThreadMode(false);
            /*test various versions of overloaded transformation method*/
            System.Console.WriteLine("\nTransformation from utm32Ewgs84 to utm33Eed50, using CoordinateTransformation class:\n");
            System.Console.WriteLine("We try out various forms of overloaded method...\n");
            CoordinateTransformation tr = new CoordinateTransformation("utm32Ewgs84", "utm33Eed50");

            System.Console.WriteLine("First transformation of a single point class:");
            Point pt = new Point(512200.1, 6143200.2, 100.0);

            System.Console.WriteLine("In: X:{0:f6}  Y:{1:f6}  Z:{2:f6}", pt.x, pt.y, pt.z);
            error = tr.Transform(pt);
            System.Console.WriteLine("out: X:{0:f6}  Y:{1:f6}  Z:{2:f6} ret:{3:d}", pt.x, pt.y, pt.z, pt.return_code);
            double x = 512200.1, y = 6143200.2, z = 100.0, x1, y1, z1;

            error = tr.Transform(ref x, ref y, ref z);
            System.Console.WriteLine("Same thing, but with doubles as input:\nout: X:{0:f6}  Y:{1:f6}  Z:{2:f6} ret:{3:d}", x, y, z, error);
            x     = 512200.1;
            y     = 6143200.2;
            z     = 100.0;
            error = tr.Transform(x, y, z, out x1, out y1, out z1);
            System.Console.WriteLine("Same thing, but with 'old style point input':\nout: X:{0:f6}  Y:{1:f6}  Z:{2:f6} ret:{3:d}", x1, y1, z1, error);
            double[] X = new double[] { 512200.1, 512499.1 };
            double[] Y = new double[] { 6143200.1, 6143300.1 };
            double[] Z = new double[] { 100, 200 };
            System.Console.WriteLine("Then an array:");
            for (i = 0; i < X.Length; i++)
            {
                System.Console.WriteLine("in: X: {0,8:f4}  Y: {1,8:f4} Z: {2,4:f4}", X[i], Y[i], Z[i]);
            }
            error = tr.Transform(X, Y, Z);
            for (i = 0; i < X.Length; i++)
            {
                System.Console.WriteLine("out: X: {0,8:f4}  Y: {1,8:f4} Z: {2,4:f4} ret: {3:d}", X[i], Y[i], Z[i], error);
            }
            X     = new double[] { 512200.1, 512499.1 };
            Y     = new double[] { 6143200.1, 6143300.1 };
            error = tr.Transform(X, Y);
            System.Console.WriteLine("Same thing, but with only X,Y in input...");
            for (i = 0; i < X.Length; i++)
            {
                System.Console.WriteLine("out: X: {0,8:f4}  Y: {1,8:f4}  ret: {2:d}", X[i], Y[i], error);
            }
            /* and now for a speed test */
            int       n = 50000;
            string    elapsedTime;
            Stopwatch stopWatch = new Stopwatch();
            TimeSpan  ts;

            System.Console.WriteLine("Speed test with {0:d} points:", n);
            X = new double[n];
            Y = new double[n];
            Z = new double[n];
            for (i = 0; i < n; i++)
            {
                X[i] = 512200.0 + ((double)i) / n * 1000.0;
                Y[i] = 6143200.0 + ((double)i) / n * 1000.0;
                Z[i] = 100.0 + ((double)i) / n * 10.0;
            }
            stopWatch.Start();
            error = tr.Transform(X, Y, Z);
            stopWatch.Stop();
            ts = stopWatch.Elapsed;
            // Format and display the TimeSpan value.
            elapsedTime = String.Format("{0:00}:{1:00} seconds", ts.Seconds, ts.Milliseconds / 10);
            Console.WriteLine("RunTime, class-method: " + elapsedTime);
            tr.Close();             /*remember to close the transformation in order to free memory in shared library */
        }
示例#5
0
 public void Close()
 {
     TrLib.TR_Close(TR);
 }
示例#6
0
 public TrLib.TR_Error Transform(double x, double y, double z, out double x_o, out double y_o, out double z_o)
 {
     TrLib.TR_Error err;
     err = TrLib.TR_TransformPoint(TR, x, y, z, out x_o, out y_o, out z_o);
     return(err);
 }
示例#7
0
 public TrLib.TR_Error Transform(ref double x, ref double y, ref double z)
 {
     TrLib.TR_Error err;
     err = TrLib.TR_Transform(TR, out x, out y, out z, 1);
     return(err);
 }