"use strict" define([ "esri/geometry" ], function(geometry) { var TilingScheme = function(layer) { this.tileInfo = layer.tileInfo; } TilingScheme.prototype = { getCellIdFromXy: function(x,y,level) { var col = Math.floor((x-this.tileInfo.origin.x) / (this.tileInfo.cols*this.tileInfo.lods[level].resolution)); var row = Math.floor((this.tileInfo.origin.y-y) / (this.tileInfo.rows*this.tileInfo.lods[level].resolution)); return [col,row]; }, getCellPolygonFromCellId: function(cellId,level) { var col1 = cellId[0]; var row1 = cellId[1]; var col2 = col1+1; var row2 = row1+1; var x1 = this.tileInfo.origin.x + (col1 * this.tileInfo.cols * this.tileInfo.lods[level].resolution); var y1 = this.tileInfo.origin.y - (row1 * this.tileInfo.rows * this.tileInfo.lods[level].resolution); var x2 = this.tileInfo.origin.x + (col2 * this.tileInfo.cols * this.tileInfo.lods[level].resolution); var y2 = this.tileInfo.origin.y - (row2 * this.tileInfo.rows * this.tileInfo.lods[level].resolution); var polygon = new geometry.Polygon(this.tileInfo.spatialReference); polygon.addRing([ [x1,y1], // clockwise [x2,y1], [x2,y2], [x1,y2], [x1,y1], ]); return polygon; }, getAllCellIdsInExtent : function(extent, gridLevel) { var cellId0 = this.getCellIdFromXy(extent.xmin, extent.ymin, gridLevel); var cellId1 = this.getCellIdFromXy(extent.xmax, extent.ymax, gridLevel); var i,j; var i0 = Math.max(Math.min(cellId0[0], cellId1[0]), this.tileInfo.lods[gridLevel].startTileCol); var i1 = Math.min(Math.max(cellId0[0], cellId1[0]), this.tileInfo.lods[gridLevel].endTileCol); var j0 = Math.max(Math.min(cellId0[1], cellId1[1]), this.tileInfo.lods[gridLevel].startTileRow); var j1 = Math.min(Math.max(cellId0[1], cellId1[1]), this.tileInfo.lods[gridLevel].endTileRow); var cellIds = []; for(i=i0; i<=i1; i++) for(j=j0; j<=j1; j++) { cellIds.push([i,j]); } return cellIds; }, } return TilingScheme; });