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

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. /// The IEllipsoid interface defines the standard information stored with ellipsoid objects.
  23. /// </summary>
  24. public class Ellipsoid : Info, IEllipsoid
  25. {
  26. /// <summary>
  27. /// Initializes a new instance of an Ellipsoid
  28. /// </summary>
  29. /// <param name="semiMajorAxis">Semi major axis</param>
  30. /// <param name="semiMinorAxis">Semi minor axis</param>
  31. /// <param name="inverseFlattening">Inverse flattening</param>
  32. /// <param name="isIvfDefinitive">Inverse Flattening is definitive for this ellipsoid (Semi-minor axis will be overridden)</param>
  33. /// <param name="axisUnit">Axis unit</param>
  34. /// <param name="name">Name</param>
  35. /// <param name="authority">Authority name</param>
  36. /// <param name="code">Authority-specific identification code.</param>
  37. /// <param name="alias">Alias</param>
  38. /// <param name="abbreviation">Abbreviation</param>
  39. /// <param name="remarks">Provider-supplied remarks</param>
  40. internal Ellipsoid(
  41. double semiMajorAxis, 
  42. double semiMinorAxis, 
  43. double inverseFlattening,
  44. bool isIvfDefinitive,
  45. ILinearUnit axisUnit, string name, string authority, long code, string alias, 
  46. string abbreviation, string remarks)
  47. : base(name, authority, code, alias, abbreviation, remarks)
  48. {
  49. _SemiMajorAxis = semiMajorAxis;
  50. _InverseFlattening = inverseFlattening;
  51. _AxisUnit = axisUnit;
  52. _IsIvfDefinitive = isIvfDefinitive;
  53. if (isIvfDefinitive)
  54. _SemiMinorAxis = (1.0 - (1.0 / _InverseFlattening)) * semiMajorAxis;
  55. else
  56. _SemiMinorAxis = semiMinorAxis;
  57. }
  58. #region Predefined ellipsoids
  59. /// <summary>
  60. /// WGS 84 ellipsoid
  61. /// </summary>
  62. /// <remarks>
  63. /// Inverse flattening derived from four defining parameters 
  64. /// (semi-major axis;
  65. /// C20 = -484.16685*10e-6;
  66. /// earth's angular velocity w = 7292115e11 rad/sec;
  67. /// gravitational constant GM = 3986005e8 m*m*m/s/s).
  68. /// </remarks>
  69. public static Ellipsoid WGS84
  70. {
  71. get
  72. {
  73. return new Ellipsoid(6378137, 0, 298.257223563, true, LinearUnit.Metre, "WGS 84", "EPSG", 7030, "WGS84", "",
  74. "Inverse flattening derived from four defining parameters (semi-major axis; C20 = -484.16685*10e-6; earth's angular velocity w = 7292115e11 rad/sec; gravitational constant GM = 3986005e8 m*m*m/s/s).");
  75. }
  76. }
  77. /// <summary>
  78. /// WGS 72 Ellipsoid
  79. /// </summary>
  80. public static Ellipsoid WGS72
  81. {
  82. get
  83. {
  84. return new Ellipsoid(6378135.0, 0, 298.26, true, LinearUnit.Metre, "WGS 72", "EPSG", 7043, "WGS 72", String.Empty, String.Empty);
  85. }
  86. }
  87. /// <summary>
  88. /// GRS 1980 / International 1979 ellipsoid
  89. /// </summary>
  90. /// <remarks>
  91. /// Adopted by IUGG 1979 Canberra.
  92. /// Inverse flattening is derived from
  93. /// geocentric gravitational constant GM = 3986005e8 m*m*m/s/s;
  94. /// dynamic form factor J2 = 108263e8 and Earth's angular velocity = 7292115e-11 rad/s.")
  95. /// </remarks>
  96. public static Ellipsoid GRS80
  97. {
  98. get
  99. {
  100. return new Ellipsoid(6378137, 0, 298.257222101, true, LinearUnit.Metre, "GRS 1980", "EPSG", 7019, "International 1979", "",
  101. "Adopted by IUGG 1979 Canberra.  Inverse flattening is derived from geocentric gravitational constant GM = 3986005e8 m*m*m/s/s; dynamic form factor J2 = 108263e8 and Earth's angular velocity = 7292115e-11 rad/s.");
  102. }
  103. }
  104. /// <summary>
  105. /// International 1924 / Hayford 1909 ellipsoid
  106. /// </summary>
  107. /// <remarks>
  108. /// Described as a=6378388 m. and b=6356909m. from which 1/f derived to be 296.95926. 
  109. /// The figure was adopted as the International ellipsoid in 1924 but with 1/f taken as
  110. /// 297 exactly from which b is derived as 6356911.946m.
  111. /// </remarks>
  112. public static Ellipsoid International1924
  113. {
  114. get
  115. {
  116. return new Ellipsoid(6378388, 0, 297, true, LinearUnit.Metre, "International 1924", "EPSG", 7022, "Hayford 1909", String.Empty,
  117. "Described as a=6378388 m. and b=6356909 m. from which 1/f derived to be 296.95926. The figure was adopted as the International ellipsoid in 1924 but with 1/f taken as 297 exactly from which b is derived as 6356911.946m.");
  118. }
  119. }
  120. /// <summary>
  121. /// Clarke 1880
  122. /// </summary>
  123. /// <remarks>
  124. /// Clarke gave a and b and also 1/f=293.465 (to 3 decimal places).  1/f derived from a and b = 293.4663077
  125. /// </remarks>
  126. public static Ellipsoid Clarke1880
  127. {
  128. get
  129. {
  130. return new Ellipsoid(20926202, 0, 297, true, LinearUnit.ClarkesFoot, "Clarke 1880", "EPSG", 7034, "Clarke 1880", String.Empty,
  131. "Clarke gave a and b and also 1/f=293.465 (to 3 decimal places).  1/f derived from a and b = 293.4663077