public bool Parse(string input, out CoordinateDD dd)
        {
            dd = new CoordinateDD();
            CoordinateDMS dms;

            // try to parse all types?

            if (CoordinateDD.TryParse(input, out dd))
            {
                return(true);
            }
            else if (CoordinateDMS.TryParse(input, out dms))
            {
                dd.Lat = Math.Abs(dms.LatDegrees) + (dms.LatMinutes / 60.0) + (dms.LatSeconds / 3600.0);
                dd.Lon = Math.Abs(dms.LonDegrees) + (dms.LonMinutes / 60.0) + (dms.LonSeconds / 3600.0);

                if (dms.LatDegrees < 0)
                {
                    dd.Lat *= -1;
                }

                if (dms.LonDegrees < 0)
                {
                    dd.Lon *= -1;
                }

                return(true);
            }

            return(false);
        }
        public virtual bool CanGetDMS(int srFactoryCode, out string coord)
        {
            CoordinateDMS dms;

            if (CoordinateDMS.TryParse(InputCoordinate, out dms))
            {
                coord = dms.ToString("", new CoordinateDMSFormatter());
                return(true);
            }
            else
            {
                coord = string.Empty;
                return(false);
            }
        }