mirror of
https://github.com/Esri/offline-editor-js.git
synced 2025-12-15 15:20:05 +00:00
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
"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;
|
|
}); |