ConcatenatedTransform.cs
上传用户:sex100000
上传日期:2013-11-09
资源大小:1377k
文件大小:3k
源码类别:

GIS编程

开发平台:

C#

  1. // Copyright 2006 - Morten Nielsen (www.iter.dk)
  2. //
  3. // This file is part of SharpMap.
  4. // SharpMap is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU Lesser General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. // 
  9. // SharpMap is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU Lesser General Public License for more details.
  13. // You should have received a copy of the GNU Lesser General Public License
  14. // along with SharpMap; if not, write to the Free Software
  15. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  16. using System;
  17. using System.Collections.Generic;
  18. using System.Collections.ObjectModel;
  19. using System.Text;
  20. namespace SharpMap.CoordinateSystems.Transformations
  21. {
  22. internal class ConcatenatedTransform : MathTransform
  23. {
  24. protected IMathTransform _inverse;
  25. public ConcatenatedTransform()
  26. : this(new List<ICoordinateTransformation>())
  27. {
  28. }
  29. public ConcatenatedTransform(List<ICoordinateTransformation> transformlist)
  30. {
  31. _CoordinateTransformationList = transformlist;
  32. }
  33. private List<ICoordinateTransformation> _CoordinateTransformationList;
  34. public List<ICoordinateTransformation> CoordinateTransformationList
  35. {
  36. get { return _CoordinateTransformationList; }
  37. set
  38. {
  39. _CoordinateTransformationList = value;
  40. _inverse = null;
  41. }
  42. }
  43. public override SharpMap.Geometries.Point Transform(SharpMap.Geometries.Point point)
  44. {
  45. if (point is SharpMap.Geometries.Point3D)
  46. {
  47. SharpMap.Geometries.Point pnt = (point as SharpMap.Geometries.Point3D).Clone();
  48. foreach (ICoordinateTransformation ct in _CoordinateTransformationList)
  49. pnt = ct.MathTransform.Transform(pnt);
  50. return pnt;
  51. }
  52. else
  53. {
  54. SharpMap.Geometries.Point pnt = point.Clone();
  55. foreach (ICoordinateTransformation ct in _CoordinateTransformationList)
  56. pnt = ct.MathTransform.Transform(pnt);
  57. return pnt;
  58. }
  59. }
  60. public override Collection<SharpMap.Geometries.Point> TransformList(Collection<SharpMap.Geometries.Point> points)
  61. {
  62. Collection<SharpMap.Geometries.Point> pnts = new Collection<SharpMap.Geometries.Point>(points);
  63. foreach (ICoordinateTransformation ct in _CoordinateTransformationList)
  64. pnts = ct.MathTransform.TransformList(pnts);
  65. return pnts;
  66. }
  67. /// <summary>
  68. /// Returns the inverse of this conversion.
  69. /// </summary>
  70. /// <returns>IMathTransform that is the reverse of the current conversion.</returns>
  71. public override IMathTransform Inverse()
  72. {
  73. if (_inverse == null)
  74. {
  75. _inverse = new ConcatenatedTransform(_CoordinateTransformationList);
  76. _inverse.Invert();
  77. }
  78. return _inverse;
  79. }
  80. /// <summary>
  81. /// Reverses the transformation
  82. /// </summary>
  83. public override void Invert()
  84. {
  85. _CoordinateTransformationList.Reverse();
  86. foreach (ICoordinateTransformation ic in _CoordinateTransformationList)
  87. ic.MathTransform.Invert();
  88. }
  89. public override string WKT
  90. {
  91. get { throw new Exception("The method or operation is not implemented."); }
  92. }
  93. public override string XML
  94. {
  95. get { throw new Exception("The method or operation is not implemented."); }
  96. }
  97. }
  98. }