コード例 #1
0
        /// <summary>
        /// Format this object to a Degrees-Minutes-Seconds string.
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        protected override string DoFormat(string format, object arg, IFormatProvider formatProvider)
        {
            DegreeMinuteSecond dms = null;

            if (!DegreeMinuteSecondFormatInfo.TryParse(arg, out dms))
            {
                // Provide default formatting if the argument is not as expected (Double or DegreeMinuteSecond).
                return(FormatUnexpectedDataType(format, arg));
            }

            var bearing = base.DoFormat(format, dms.Bearing, formatProvider);

            // Just in case rounding took us up to 360°!
            return(bearing == null ? "–" : bearing.Replace("360", "0"));
        }
コード例 #2
0
        /// <summary>
        /// Format this object to a Milliradian (NATO) string.
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        protected override string DoFormat(string format, object arg, IFormatProvider formatProvider)
        {
            DegreeMinuteSecond dms = null;

            if (!DegreeMinuteSecondFormatInfo.TryParse(arg, out dms))
            {
                // Provide default formatting if the argument is not as expected (Double or DegreeMinuteSecond).
                return(FormatUnexpectedDataType(format, arg));
            }

            UpdateScaleFromFormatString(format);
            var mils = dms.Bearing * (6400 / 360);
            var m    = Math.Round(mils, base.Scale);

            return(string.Format("{0}{1}{2}", m, base.Separator, this.MilsSymbol));
        }
コード例 #3
0
        /// <summary>
        /// Format this object to a Degrees-Minutes-Seconds string.
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        protected override string DoFormat(string format, object arg, IFormatProvider formatProvider)
        {
            DegreeMinuteSecond dms = null;

            if (!DegreeMinuteSecondFormatInfo.TryParse(arg, out dms))
            {
                // Provide default formatting if the argument is not as expected (Double or DegreeMinuteSecond).
                return(FormatUnexpectedDataType(format, arg));
            }

            DegreeMinuteSecond degreeMinuteSecond = dms.Degrees < 0 ? new DegreeMinuteSecond(Math.Abs(dms.Degrees)) : dms;
            string             latitude           = base.DoFormat(format, degreeMinuteSecond, formatProvider);
            string             cardinal           = dms.Degrees < 0 ? Direction.South : Direction.North;

            return(latitude == null ? "–" : latitude + base.Separator + cardinal);
        }
コード例 #4
0
        /// <summary>
        /// Format this object to a Compass Point string.
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        protected override string DoFormat(string format, object arg, IFormatProvider formatProvider)
        {
            DegreeMinuteSecond dms = null;

            if (!DegreeMinuteSecondFormatInfo.TryParse(arg, out dms))
            {
                // Provide default formatting if the argument is not as expected (Double or DegreeMinuteSecond).
                return(FormatUnexpectedDataType(format, arg));
            }

            // No of compass points at required precision (1=>4, 2=>8, 3=>16).
            var    n             = 4 * Math.Pow(2, _precision - 1);
            double cardinalIndex = Math.Round(dms.Bearing * n / 360) % n * 16 / n;
            var    cardinal      = Cardinals[(int)cardinalIndex];

            return(cardinal);
        }
コード例 #5
0
        /// <summary>
        /// Format this object to a Degrees-Minutes-Seconds string.
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg"></param>
        /// <param name="formatProvider"></param>
        /// <returns></returns>
        protected virtual string DoFormat(string format, object arg, IFormatProvider formatProvider)
        {
            if (arg == null)
            {
                throw new ArgumentNullException(nameof(arg), "The argument cannot be null.");
            }

            DegreeMinuteSecond dms = null;

            if (!DegreeMinuteSecondFormatInfo.TryParse(arg, out dms))
            {
                // Provide default formatting if the argument is not as expected (Double or DegreeMinuteSecond).
                return(FormatUnexpectedDataType(format, arg));
            }

            // Adjust for missing format.
#pragma warning disable S3900
            string f = string.Empty;
            if (string.IsNullOrWhiteSpace(format))
            {
                // Default to everything.
                f = "DMS";
            }
            else
            {
                f = format.ToUpper(System.Globalization.CultureInfo.CurrentCulture);
            }
#pragma warning restore S3900

            UpdateScaleFromFormatString(format);

            string secondsFormat = "S";
            string minutesFormat = "M";
            if (f.Contains(secondsFormat))
            {
                return(ToDegreeMinuteSecond(dms));
            }
            else if (f.Contains(minutesFormat))
            {
                return(ToDegreeMinute(dms));
            }
            else
            {
                return(ToDegree(dms));
            }
        }