/// <summary> /// create the transformation parameters /// </summary> /// <param name="values">The parameters appears in order by Tx, Ty, Tz, S, Rx, Ry, Rz, Px, Py, Pz. Usually, translation parameter unit is meter, sacle factor is ppm, rotation parameter unit is second.</param> public TransParameters(CoordinateDatum from, CoordinateDatum to, params double[] values) { From = from; To = to; _values = new Dictionary <string, double>(); #region Three pamaters if (values.Length > 0) { _values.Add("Tx", values[0]); } if (values.Length > 1) { _values.Add("Ty", values[1]); } if (values.Length > 2) { _values.Add("Tz", values[2]); } #endregion #region Four parameters if (values.Length > 3) { _values.Add("S", values[3]); } #endregion #region Seven parameters if (values.Length > 4) { _values.Add("Rx", values[4]); } if (values.Length > 5) { _values.Add("Ry", values[5]); } if (values.Length > 6) { _values.Add("Rz", values[6]); } #endregion #region Ten parameters (Molodensky-Badekas transform) if (values.Length > 7) { _values.Add("Px", values[7]); } if (values.Length > 8) { _values.Add("Py", values[8]); } if (values.Length > 9) { _values.Add("Pz", values[9]); } #endregion }
/// <summary> /// invert the transformation parameters /// </summary> public void Invert() { foreach (string key in _values.Keys) { _values[key] *= -1; } CoordinateDatum datum = To; To = From; From = datum; }
/// <summary> /// create the transformation parameters /// </summary> /// <param name="values">parameters. Usually, translation parameter unit is meter, rotation parameter unit is second, sacle factor is ppm.</param> /// <param name="from">source datum</param> /// <param name="to">target datum</param> /// <param name="code">code of transformation</param> /// <param name="location">region of use</param> public TransParameters(CoordinateDatum from, CoordinateDatum to, string code = "", string location = "", params double[] values) : this(from, to, values) { Code = code; Location = location; }