diff --git a/lib/OpenLayers/Layer/Grid.js b/lib/OpenLayers/Layer/Grid.js index 637c6c163e..db5e288ec7 100644 --- a/lib/OpenLayers/Layer/Grid.js +++ b/lib/OpenLayers/Layer/Grid.js @@ -875,34 +875,23 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, { * resolution - {Number} * * Returns: - * {Object} Object containing properties tilelon, tilelat, tileoffsetx, - * tileoffsety, startcol, startrow + * {Object} Object containing properties tilelon, tilelat, startcol, + * startrow */ calculateGridLayout: function(bounds, origin, resolution) { var tilelon = resolution * this.tileSize.w; var tilelat = resolution * this.tileSize.h; - var ratio = resolution / this.map.getResolution(), - tileSize = { - w: Math.round(this.tileSize.w * ratio), - h: Math.round(this.tileSize.h * ratio) - }; - var offsetlon = bounds.left - origin.lon; var tilecol = Math.floor(offsetlon/tilelon) - this.buffer; - var tilecolremain = offsetlon/tilelon - tilecol; - var tileoffsetx = -tilecolremain * tileSize.w; var rowSign = this.tileOriginCorner.substr(0, 1) === "t" ? 1 : -1; var offsetlat = rowSign * (origin.lat - bounds.top + tilelat); var tilerow = Math[~rowSign ? 'floor' : 'ceil'](offsetlat/tilelat) - this.buffer * rowSign; - var tilerowremain = tilerow - offsetlat/tilelat; - var tileoffsety = rowSign * tilerowremain * tileSize.h; return { tilelon: tilelon, tilelat: tilelat, - tileoffsetx: tileoffsetx, tileoffsety: tileoffsety, startcol: tilecol, startrow: tilerow }; @@ -991,15 +980,19 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, { var tileLayout = this.calculateGridLayout(bounds, origin, serverResolution); this.gridLayout = tileLayout; - var startX = Math.round(tileLayout.tileoffsetx); // heaven help us - var startY = Math.round(tileLayout.tileoffsety); - var tilelon = tileLayout.tilelon; var tilelat = tileLayout.tilelat; var layerContainerDivLeft = this.map.layerContainerOriginPx.x; var layerContainerDivTop = this.map.layerContainerOriginPx.y; + var tileBounds = this.getTileBoundsForGridIndex(0, 0); + var startPx = this.map.getViewPortPxFromLonLat( + new OpenLayers.LonLat(tileBounds.left, tileBounds.top) + ); + startPx.x = Math.round(startPx.x) - layerContainerDivLeft; + startPx.y = Math.round(startPx.y) - layerContainerDivTop; + var tileData = [], center = this.map.getCenter(); var rowidx = 0; @@ -1012,10 +1005,10 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, { var colidx = 0; do { - var tileBounds = this.getTileBoundsForGridIndex(rowidx, colidx); - var x = startX + colidx * tileSize.w - layerContainerDivLeft; - var y = startY + rowidx * tileSize.h - layerContainerDivTop; - var px = new OpenLayers.Pixel(x, y); + tileBounds = this.getTileBoundsForGridIndex(rowidx, colidx); + var px = startPx.clone(); + px.x = px.x + colidx * Math.round(tileSize.w); + px.y = px.y + rowidx * Math.round(tileSize.h); var tile = row[colidx]; if (!tile) { tile = this.addTile(tileBounds, px); @@ -1219,17 +1212,12 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, { var tileLayout = this.gridLayout; tileLayout.startrow += sign * rowSign; - var bounds = this.getTileBoundsForGridIndex(rowIndex, 0); - var position = this.map.getViewPortPxFromLonLat( - new OpenLayers.LonLat(bounds.left, bounds.top) - ); - var y = Math.round(position.y - this.map.layerContainerOriginPx.y); - + var modelRow = grid[rowIndex]; var row = grid[prepend ? 'pop' : 'shift'](); for (var i=0, len=row.length; i