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!"); } }
/* 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); }
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); }
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 */ }
public void Close() { TrLib.TR_Close(TR); }
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); }
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); }