示例#1
0
        /**
         * Return the maximum level such that the metric is at least the given
         * value, or zero if there is no such level. For example,
         * S2.kMinWidth.GetMaxLevel(0.1) returns the maximum level such that all
         * cells have a minimum width of 0.1 or larger. The return value is always a
         * valid level.
         */

        public int GetMaxLevel(double value)
        {
            if (value <= 0)
            {
                return(S2CellId.MaxLevel);
            }

            // This code is equivalent to computing a floating-point "level"
            // value and rounding down.
            var exponent = S2.Exp((1 << _dim) * _deriv / value);
            var level    = Math.Max(0,
                                    Math.Min(S2CellId.MaxLevel, ((exponent - 1) >> (_dim - 1))));

            // assert (level == 0 || getValue(level) >= value);
            // assert (level == S2CellId.MAX_LEVEL || getValue(level + 1) < value);
            return(level);
        }