4 * This software is distributed under a zlib-style license.
\r
5 * See license.txt for more information.
\r
9 using System.Collections.Generic;
\r
15 /// Height(or Altitude) in metre
\r
17 public struct Height
\r
19 #region type definitions
\r
20 public enum Base : int
\r
27 BesselEllipsoid = Ellipsoid | 41,
\r
28 Grs80Ellipsoid = Ellipsoid | 80,
\r
29 Wgs84Ellipsoid = Ellipsoid | 84,
\r
34 private double height;
\r
35 private Base baseLevel;
\r
38 #region constructors
\r
39 public Height(double height)
\r
40 :this(height, Base.Unknown)
\r
44 public Height(double height, Base baseLevel)
\r
47 this.height = height;
\r
48 this.baseLevel = baseLevel;
\r
53 public static implicit operator Height(double height)
\r
55 return new Height(height);
\r
58 public static implicit operator double(Height height)
\r
60 return height.height;
\r
63 public static Height operator +(Height left, double right)
\r
65 return new Height(left.height + right, left.baseLevel);
\r
68 public static Height operator +(double left, Height right)
\r
70 return new Height(right.height + left, right.baseLevel);
\r
73 public static double operator -(Height left, Height right)
\r
75 if (left.baseLevel != right.baseLevel)
\r
77 if (left.baseLevel != Base.Unknown &&
\r
78 right.baseLevel != Base.Unknown)
\r
80 throw new InvalidOperationException(
\r
81 "mismatched base level");
\r
84 return left.height - right.height;
\r
90 public Base BaseLevel
\r
98 public bool IsAltitude
\r
102 return (baseLevel == Base.MeanSeaLevel) ||
\r
103 (baseLevel == Base.Geoid);
\r
108 #region public methods
\r