การแปลงพิกัดละติจูด และลองจิจูด

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            double lat = 38.89861;
            Console.WriteLine("{0} > {1}", lat, ConvertDoubleToDegreeAngleLat(lat));
            double lon = -76.96222;
            Console.WriteLine("{0} > {1}", lon, ConvertDoubleToDegreeAngleLon(lon));

            double degrees;
            double minutes;
            double seconds;
            string dir;

            Console.WriteLine();

            degrees = 38;
            minutes = 53;
            seconds = 55.0;
            dir = "N";
            Console.WriteLine("{0} {1} {2} {3} > {4:f5}", degrees, minutes, seconds, dir, ConvertDegreeAngleToDouble(degrees, minutes, seconds, dir));
            degrees = 76;
            minutes = 57;
            seconds = 44.0;
            dir = "W";
            Console.WriteLine("{0} {1} {2} {3} > {4:f5}", degrees, minutes, seconds, dir, ConvertDegreeAngleToDouble(degrees, minutes, seconds, dir));
        }

        public static string ConvertDoubleToDegreeAngleLat(double doubleDegrees)
        {
            string dir = (doubleDegrees >= 0 ? "N" : "S");
            return ConvertDoubleToDegreeAngle(doubleDegrees, dir);
        }
        public static string ConvertDoubleToDegreeAngleLon(double doubleDegrees)
        {
            string dir = (doubleDegrees >= 0 ? "E" : "W");
            return ConvertDoubleToDegreeAngle(doubleDegrees, dir);
        }
        public static string ConvertDoubleToDegreeAngle(double doubleDegrees, string dir)
        {
            doubleDegrees = Math.Abs(doubleDegrees);
            double latMinPart = ((doubleDegrees - Math.Truncate(doubleDegrees) / 1) * 60);
            double latSecPart = ((latMinPart - Math.Truncate(latMinPart) / 1) * 60);

            double degrees = Math.Truncate(doubleDegrees);
            double minutes = Math.Truncate(latMinPart);
            double seconds = latSecPart;

            return string.Format("{0} {1} {2} {3}", degrees, minutes, seconds.ToString("#.0"), dir);
        }

        public static double ConvertDegreeAngleToDouble(double degrees, double minutes, double seconds, string dir)
        {
            //Decimal degrees = 
            //   whole number of degrees, 
            //   plus minutes divided by 60, 
            //   plus seconds divided by 3600

            int multiplier = (dir == "S" || dir == "W") ? -1 : 1; //handle south and west
            return (degrees + (minutes / 60) + (seconds / 3600)) * multiplier;
        }
    }
}