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

GIS编程

开发平台:

C#

  1. // Copyright 2005, 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
  21. {
  22. /// <summary>
  23. /// The Projection class defines the standard information stored with a projection
  24. /// objects. A projection object implements a coordinate transformation from a geographic
  25. /// coordinate system to a projected coordinate system, given the ellipsoid for the
  26. /// geographic coordinate system. It is expected that each coordinate transformation of
  27. /// interest, e.g., Transverse Mercator, Lambert, will be implemented as a class of
  28. /// type Projection, supporting the IProjection interface.
  29. /// </summary>
  30. public class Projection : Info, IProjection
  31. {
  32. internal Projection(string className, Collection<ProjectionParameter> parameters,
  33. string name, string authority, long code, string alias, 
  34. string remarks, string abbreviation)
  35. : base(name, authority, code, alias, abbreviation, remarks)
  36. {
  37. _Parameters = parameters;
  38. _ClassName = className;
  39. }
  40. #region Predefined projections
  41. #endregion
  42. #region IProjection Members
  43. /// <summary>
  44. /// Gets the number of parameters of the projection.
  45. /// </summary>
  46. public int NumParameters
  47. {
  48. get { return _Parameters.Count; }
  49. }
  50. private Collection<ProjectionParameter> _Parameters;
  51. /// <summary>
  52. /// Gets or sets the parameters of the projection
  53. /// </summary>
  54. internal Collection<ProjectionParameter> Parameters
  55. {
  56. get { return _Parameters; }
  57. set { _Parameters = value; }
  58. }
  59. /// <summary>
  60. /// Gets an indexed parameter of the projection.
  61. /// </summary>
  62. /// <param name="n">Index of parameter</param>
  63. /// <returns>n'th parameter</returns>
  64. public ProjectionParameter GetParameter(int n)
  65. {
  66. return _Parameters[n];
  67. }
  68. /// <summary>
  69. /// Gets an named parameter of the projection.
  70. /// </summary>
  71. /// <remarks>The parameter name is case insensitive</remarks>
  72. /// <param name="name">Name of parameter</param>
  73. /// <returns>parameter or null if not found</returns>
  74. public ProjectionParameter GetParameter(string name)
  75. {
  76.             //return _Parameters.Find(delegate(ProjectionParameter par)
  77.             //        { return par.Name.Equals(name, StringComparison.OrdinalIgnoreCase); });
  78.             for (int i = 0; i < _Parameters.Count; i++)
  79.                 if (String.Equals(_Parameters[i].Name, name, StringComparison.OrdinalIgnoreCase))
  80.                     return _Parameters[i];
  81.             return null;
  82. }
  83.         private string _ClassName;
  84. /// <summary>
  85. /// Gets the projection classification name (e.g. "Transverse_Mercator").
  86. /// </summary>
  87. public string ClassName
  88. {
  89. get { return _ClassName; }
  90. }
  91. /// <summary>
  92. /// Returns the Well-known text for this object
  93. /// as defined in the simple features specification.
  94. /// </summary>
  95. public override string WKT
  96. {
  97. get
  98. {
  99. StringBuilder sb = new StringBuilder();
  100. sb.AppendFormat("PROJECTION["{0}"", Name);
  101. if (!String.IsNullOrEmpty(Authority) && AuthorityCode > 0)
  102. sb.AppendFormat(", AUTHORITY["{0}", "{1}"]", Authority, AuthorityCode);
  103. sb.Append("]");
  104. return sb.ToString();
  105. }
  106. }
  107. /// <summary>
  108. /// Gets an XML representation of this object
  109. /// </summary>
  110. public override string XML
  111. {
  112. get
  113. {
  114. StringBuilder sb = new StringBuilder();
  115. sb.AppendFormat(SharpMap.Map.numberFormat_EnUS, "<CS_Projection Classname="{0}">{1}", ClassName, InfoXml);
  116. foreach (ProjectionParameter param in Parameters)
  117. sb.Append(param.XML);
  118. sb.Append("</CS_Projection>");
  119. return sb.ToString();
  120. }
  121. }
  122. /// <summary>
  123. /// Checks whether the values of this instance is equal to the values of another instance.
  124. /// Only parameters used for coordinate system are used for comparison.
  125. /// Name, abbreviation, authority, alias and remarks are ignored in the comparison.
  126. /// </summary>
  127. /// <param name="obj"></param>
  128. /// <returns>True if equal</returns>
  129. public override bool EqualParams(object obj)
  130. {
  131. if (!(obj is Projection))
  132. return false;
  133. Projection proj = obj as Projection;
  134. if (proj.NumParameters != this.NumParameters)
  135. return false;
  136. for (int i = 0; i < _Parameters.Count; i++)
  137. {
  138.                 //ProjectionParameter param = _Parameters.Find(delegate(ProjectionParameter par) { return par.Name.Equals(proj.GetParameter(i).Name, StringComparison.OrdinalIgnoreCase); });
  139.                 ProjectionParameter param = null;
  140.                 for (int j = 0; j < proj.Parameters.Count; j++)
  141.                     if (String.Equals(proj.Parameters[j].Name, _Parameters[i].Name, StringComparison.OrdinalIgnoreCase))
  142.                         param = _Parameters[i];
  143.                 
  144.                 if (param == null)
  145. return false;
  146. if (param.Value != proj.GetParameter(i).Value)
  147. return false;
  148. }
  149. return true;
  150. }
  151. #endregion
  152. }
  153. }