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

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.Text;
  19. namespace SharpMap.CoordinateSystems
  20. {
  21. /// <summary>
  22. /// Definition of linear units.
  23. /// </summary>
  24. public class LinearUnit : Info, ILinearUnit
  25. {
  26. /// <summary>
  27. /// Creates an instance of a linear unit
  28. /// </summary>
  29. /// <param name="metersPerUnit">Number of meters per <see cref="LinearUnit" /></param>
  30. /// <param name="name">Name</param>
  31. /// <param name="authority">Authority name</param>
  32. /// <param name="authorityCode">Authority-specific identification code.</param>
  33. /// <param name="alias">Alias</param>
  34. /// <param name="abbreviation">Abbreviation</param>
  35. /// <param name="remarks">Provider-supplied remarks</param>
  36. public LinearUnit(double metersPerUnit, string name, string authority, long authorityCode, string alias, string abbreviation, string remarks)
  37. :
  38. base(name, authority, authorityCode, alias, abbreviation, remarks)
  39. {
  40. _MetersPerUnit = metersPerUnit;
  41. }
  42. #region Predefined units
  43. /// <summary>
  44. /// Returns the meters linear unit.
  45. /// Also known as International metre. SI standard unit.
  46. /// </summary>
  47. public static ILinearUnit Metre
  48. {
  49. get { return new LinearUnit(1.0,"metre", "EPSG", 9001, "m", String.Empty, "Also known as International metre. SI standard unit."); }
  50. }
  51. /// <summary>
  52. /// Returns the foot linear unit (1ft = 0.3048m).
  53. /// </summary>
  54. public static ILinearUnit Foot
  55. {
  56. get { return new LinearUnit(0.3048, "foot", "EPSG", 9002, "ft", String.Empty, String.Empty); }
  57. }
  58. /// <summary>
  59. /// Returns the US Survey foot linear unit (1ftUS = 0.304800609601219m).
  60. /// </summary>
  61. public static ILinearUnit USSurveyFoot
  62. {
  63. get { return new LinearUnit(0.304800609601219, "US survey foot", "EPSG", 9003, "American foot", "ftUS", "Used in USA."); }
  64. }
  65. /// <summary>
  66. /// Returns the Nautical Mile linear unit (1NM = 1852m).
  67. /// </summary>
  68. public static ILinearUnit NauticalMile
  69. {
  70. get { return new LinearUnit(1852, "nautical mile", "EPSG", 9030, "NM", String.Empty, String.Empty); }
  71. }
  72. /// <summary>
  73. /// Returns Clarke's foot.
  74. /// </summary>
  75. /// <remarks>
  76. /// Assumes Clarke's 1865 ratio of 1 British foot = 0.3047972654 French legal metres applies to the international metre. 
  77. /// Used in older Australian, southern African &amp; British West Indian mapping.
  78. /// </remarks>
  79. public static ILinearUnit ClarkesFoot
  80. {
  81. get { return new LinearUnit(0.3047972654, "Clarke's foot", "EPSG", 9005, "Clarke's foot", String.Empty, "Assumes Clarke's 1865 ratio of 1 British foot = 0.3047972654 French legal metres applies to the international metre. Used in older Australian, southern African & British West Indian mapping."); }
  82. }
  83. #endregion
  84. #region ILinearUnit Members
  85. private double _MetersPerUnit;
  86. /// <summary>
  87. /// Gets or sets the number of meters per <see cref="LinearUnit"/>.
  88. /// </summary>
  89. public double MetersPerUnit
  90. {
  91. get { return _MetersPerUnit; }
  92. set { _MetersPerUnit = value; }
  93. }
  94. /// <summary>
  95. /// Returns the Well-known text for this object
  96. /// as defined in the simple features specification.
  97. /// </summary>
  98. public override string WKT
  99. {
  100. get
  101. {
  102. StringBuilder sb = new StringBuilder();
  103. sb.AppendFormat(SharpMap.Map.numberFormat_EnUS, "UNIT["{0}", {1}", Name, MetersPerUnit);
  104. if (!String.IsNullOrEmpty(Authority) && AuthorityCode > 0)
  105. sb.AppendFormat(", AUTHORITY["{0}", "{1}"]", Authority, AuthorityCode);
  106. sb.Append("]");
  107. return sb.ToString();
  108. }
  109. }
  110. /// <summary>
  111. /// Gets an XML representation of this object
  112. /// </summary>
  113. public override string XML
  114. {
  115. get
  116. {
  117. return String.Format(SharpMap.Map.numberFormat_EnUS, "<CS_LinearUnit MetersPerUnit="{0}">{1}</CS_LinearUnit>", MetersPerUnit, InfoXml);
  118. }
  119. }
  120. #endregion
  121. /// <summary>
  122. /// Checks whether the values of this instance is equal to the values of another instance.
  123. /// Only parameters used for coordinate system are used for comparison.
  124. /// Name, abbreviation, authority, alias and remarks are ignored in the comparison.
  125. /// </summary>
  126. /// <param name="obj"></param>
  127. /// <returns>True if equal</returns>
  128. public override bool EqualParams(object obj)
  129. {
  130. if (!(obj is SharpMap.CoordinateSystems.LinearUnit))
  131. return false;
  132. return (obj as LinearUnit).MetersPerUnit == this.MetersPerUnit;
  133. }
  134. }
  135. }