# all files / ol/ resolutionconstraint.js

92.59% Statements 25/27
70% Branches 7/10
100% Functions 4/4
92.59% Lines 25/27

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    771×
    1×

    1×
    1×

    1×

    1×

    15×

    86×
    86×

    86×
    86×

    1×

    146×

    204×
    204×
    204×
    22×
    182×
    22×

    160×

    204×

    204×
    204×
    204×

    204×

     goog.provide('ol.ResolutionConstraint');
    goog.provide('ol.ResolutionConstraintType');

    goog.require('ol.array');
    goog.require('ol.math');

    /**
     * @typedef {function((number|undefined), number, number): (number|undefined)}
     */
    ol.ResolutionConstraintType;

    /**
     * @param {Array.<number>} resolutions Resolutions.
     * @return {ol.ResolutionConstraintType} Zoom function.
     */
    ol.ResolutionConstraint.createSnapToResolutions =
        function(resolutions) {
      return (
          /**
           * @param {number|undefined} resolution Resolution.
           * @param {number} delta Delta.
           * @param {number} direction Direction.
           * @return {number|undefined} Resolution.
           */
          function(resolution, delta, direction) {
            Eif (resolution !== undefined) {
              var z =
                  ol.array.linearFindNearest(resolutions, resolution, direction);
              z = ol.math.clamp(z + delta, 0, resolutions.length - 1);
              return resolutions[z];
            } else {
              return undefined;
            }
          });
    };

    /**
     * @param {number} power Power.
     * @param {number} maxResolution Maximum resolution.
     * @param {number=} opt_maxLevel Maximum level.
     * @return {ol.ResolutionConstraintType} Zoom function.
     */
    ol.ResolutionConstraint.createSnapToPower =
        function(power, maxResolution, opt_maxLevel) {
      return (
          /**
           * @param {number|undefined} resolution Resolution.
           * @param {number} delta Delta.
           * @param {number} direction Direction.
           * @return {number|undefined} Resolution.
           */
          function(resolution, delta, direction) {
            Eif (resolution !== undefined) {
              var offset;
              if (direction > 0) {
                offset = 0;
              } else if (direction < 0) {
                offset = 1;
              } else {
                offset = 0.5;
              }
              var oldLevel = Math.floor(
                  Math.log(maxResolution / resolution) / Math.log(power) + offset);
              var newLevel = Math.max(oldLevel + delta, 0);
              Eif (opt_maxLevel !== undefined) {
                newLevel = Math.min(newLevel, opt_maxLevel);
              }
              return maxResolution / Math.pow(power, newLevel);
            } else {
              return undefined;
            }
          });
    };