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
14 public struct Degree
\r
17 private double degree;
\r
18 private static readonly double degToRad = Constants.Pi / 180.0;
\r
19 private static readonly double radToDeg = 180.0 / Constants.Pi;
\r
22 #region constructors
\r
23 public Degree(double degree)
\r
25 this.degree = degree;
\r
28 public Degree(int degree, int minute, int second)
\r
30 if ((degree >= 0 && minute >= 0 && second >= 0) ||
\r
31 (degree <= 0 && minute <= 0 && second <= 0))
\r
33 this.degree = (double)degree + minute / 60.0 + second / 3600.0;
\r
38 -Math.Abs((double)degree)
\r
39 - Math.Abs(minute / 60.0)
\r
40 - Math.Abs(second / 3600.0);
\r
44 public Degree(bool negative, uint degree, uint minute, uint second)
\r
46 this.degree = (double)degree + minute / 60.0 + second / 3600.0;
\r
49 this.degree = -degree;
\r
55 public static implicit operator Degree(double degree)
\r
57 return new Degree(degree);
\r
60 public static implicit operator double(Degree degree)
\r
62 return degree.degree;
\r
80 return (int)(degree * 60) % 60;
\r
88 return (int)(degree * 3600) % 60;
\r
92 public double Radian
\r
96 return degree * degToRad;
\r
102 #region public methods
\r
104 public static Degree FromRadian(double rad)
\r
106 return new Degree(rad * radToDeg);
\r
109 public static Degree FromGpsFormat(string angle)
\r
111 return FromNmeaFormat(angle, null);
\r
114 public static Degree FromNmeaFormat(string angle, string direction)
\r
116 decimal raw = Decimal.Parse(angle);
\r
117 double deg = (double)(Math.Floor(raw / 100m) + (raw % 100m) / 60m);
\r
118 if (direction == "S" || direction == "W")
\r
120 return new Degree(-deg);
\r
122 return new Degree(deg);
\r
125 public override string ToString()
\r
129 return String.Format("-{0}°{1}′{2}″",
\r
130 -Deg, -Minute, -Second);
\r
134 return String.Format("{0}°{1}′{2}″", Deg, Minute, Second);
\r
138 public string ToString(string format)
\r
140 return degree.ToString(format);
\r