Beispiel #1
0
        static string UTMUPSString(int zone, bool northp,
                                   double easting, double northing,
                                   int prec, bool abbrev)
        {
            var os = new StringBuilder();

            prec = Max(-5, Min(9 + 0 /*Math::extra_digits()*/, prec));
            // Need extra real because, since C++11, pow(float, int) returns double
            var scale = prec < 0 ? Pow(10, -prec) : 1;

            os.Append(UTMUPS.EncodeZone(zone, northp, abbrev));// << fixed << setfill('0');

            if (IsFinite(easting))
            {
                os.Append(' ');
                os.Append((easting / scale).ToFixedString(Max(0, prec)));
                if (prec < 0 && Abs(easting / scale) > 0.5)
                {
                    os.Append("0".PadLeft(-prec, '0'));
                }
            }
            else
            {
                os.Append(" nan");
            }

            if (IsFinite(northing))
            {
                os.Append(' ');
                os.Append((northing / scale).ToFixedString(Max(0, prec)));
                if (prec < 0 && Abs(northing / scale) > 0.5)
                {
                    os.Append("0".PadLeft(-prec, '0'));
                }
            }
            else
            {
                os.Append(" nan");
            }

            return(os.ToString());
        }