Files @ 65c134a3d619
Branch filter:

Location: seniordesign-ui/GMap.NET.WindowsMobile/GMap.NET.GPS/DegreesMinutesSeconds.cs

mkanning@CL-ENS241-10.cedarville.edu
Initial import of mapping source (huge commit)
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
//
#region Using directives

using System;

#endregion

namespace GMap.NET.GPS
{
   /// <summary>
   /// class that represents a gps coordinate in degrees, minutes, and seconds.  
   /// </summary>
   public class DegreesMinutesSeconds
   {

      bool isPositive;
      /// <summary>
      /// Returns true if the degrees, minutes and seconds refer to a positive value,
      /// false otherwise.
      /// </summary>
      public bool IsPositive
      {
         get
         {
            return isPositive;
         }
      }

      uint degrees;
      /// <summary>
      /// The degrees unit of the coordinate
      /// </summary>
      public uint Degrees
      {
         get
         {
            return degrees;
         }
      }

      uint minutes;
      /// <summary>
      /// The minutes unit of the coordinate
      /// </summary>
      public uint Minutes
      {
         get
         {
            return minutes;
         }
      }

      double seconds;
      /// <summary>
      /// The seconds unit of the coordinate
      /// </summary>
      public double Seconds
      {
         get
         {
            return seconds;
         }
      }

      /// <summary>
      /// Constructs a new instance of DegreesMinutesSeconds converting 
      /// from decimal degrees
      /// </summary>
      /// <param name="decimalDegrees">Initial value as decimal degrees</param>
      public DegreesMinutesSeconds(double decimalDegrees)
      {
         isPositive = (decimalDegrees > 0);

         degrees = (uint) Math.Abs(decimalDegrees);

         double doubleMinutes = (Math.Abs(decimalDegrees) - Math.Abs((double) degrees)) * 60.0;
         minutes = (uint) doubleMinutes;

         seconds = (doubleMinutes - (double) minutes) * 60.0;
      }

      /// <summary>
      /// Constructs a new instance of DegreesMinutesSeconds
      /// </summary>
      /// <param name="isPositive">True if the coordinates are positive coordinate, false if they
      /// are negative coordinates.</param>
      /// <param name="degrees">Degrees unit of the coordinate</param>
      /// <param name="minutes">Minutes unit of the coordinate</param>
      /// <param name="seconds">Seconds unit of the coordinate. This should be a positive value.</param>
      public DegreesMinutesSeconds(bool isPositive, uint degrees, uint minutes, double seconds)
      {
         this.isPositive = isPositive;
         this.degrees = degrees;
         this.minutes = minutes;
         this.seconds = seconds;
      }

      /// <summary>
      /// Converts the decimal, minutes, seconds coordinate to 
      /// decimal degrees
      /// </summary>
      /// <returns></returns>
      public double ToDecimalDegrees()
      {
         double val = (double) degrees + ((double) minutes / 60.0) + ((double) seconds / 3600.0);
         val = isPositive ? val : val * -1;
         return val;
      }

      /// <summary>
      /// Converts the instance to a string in format: D M' S"
      /// </summary>
      /// <returns>string representation of degrees, minutes, seconds</returns>
      public override string ToString()
      {
         return degrees + "d " + minutes + "' " + seconds + "\"";
      }
   }
}