# all files / ol/ tilecoord.js

100% Statements 40/40
100% Branches 14/14
100% Functions 5/5
100% Lines 40/40

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    941×

    1×
    24797×
    24730×
    24730×
    24730×
    24730×

    67×

    1×
    1980×

    1×
    22×

    1×
    13×
    13×
    13×
    13×
    13×

    45×
    45×
    16×

    45×
    22×

    45×
    45×

    13×

    1×
    321×
    321×
    321×

    321×
    2×

    319×
    319×
    319×
    18×

    301×

    319×
    6×

    313×

     goog.provide('ol.tilecoord');

    /**
     * @param {number} z Z.
     * @param {number} x X.
     * @param {number} y Y.
     * @param {ol.TileCoord=} opt_tileCoord Tile coordinate.
     * @return {ol.TileCoord} Tile coordinate.
     */
    ol.tilecoord.createOrUpdate = function(z, x, y, opt_tileCoord) {
      if (opt_tileCoord !== undefined) {
        opt_tileCoord[0] = z;
        opt_tileCoord[1] = x;
        opt_tileCoord[2] = y;
        return opt_tileCoord;
      } else {
        return [z, x, y];
      }
    };

    /**
     * @param {number} z Z.
     * @param {number} x X.
     * @param {number} y Y.
     * @return {string} Key.
     */
    ol.tilecoord.getKeyZXY = function(z, x, y) {
      return z + '/' + x + '/' + y;
    };

    /**
     * @param {ol.TileCoord} tileCoord Tile coord.
     * @return {number} Hash.
     */
    ol.tilecoord.hash = function(tileCoord) {
      return (tileCoord[1] << tileCoord[0]) + tileCoord[2];
    };

    /**
     * @param {ol.TileCoord} tileCoord Tile coord.
     * @return {string} Quad key.
     */
    ol.tilecoord.quadKey = function(tileCoord) {
      var z = tileCoord[0];
      var digits = new Array(z);
      var mask = 1 << (z - 1);
      var i, charCode;
      for (i = 0; i < z; ++i) {
        // 48 is charCode for 0 - '0'.charCodeAt(0)
        charCode = 48;
        if (tileCoord[1] & mask) {
          charCode += 1;
        }
        if (tileCoord[2] & mask) {
          charCode += 2;
        }
        digits[i] = String.fromCharCode(charCode);
        mask >>= 1;
      }
      return digits.join('');
    };

    /**
     * @param {ol.TileCoord} tileCoord Tile coordinate.
     * @param {!ol.tilegrid.TileGrid} tileGrid Tile grid.
     * @return {boolean} Tile coordinate is within extent and zoom level range.
     */
    ol.tilecoord.withinExtentAndZ = function(tileCoord, tileGrid) {
      var z = tileCoord[0];
      var x = tileCoord[1];
      var y = tileCoord[2];

      if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {
        return false;
      }
      var extent = tileGrid.getExtent();
      var tileRange;
      if (!extent) {
        tileRange = tileGrid.getFullTileRange(z);
      } else {
        tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
      }
      if (!tileRange) {
        return true;
      } else {
        return tileRange.containsXY(x, y);
      }
    };