respect layer.extent in canvas tilelayer renderer

This commit is contained in:
Ian Schneider
2016-06-15 11:17:34 -06:00
parent 6902791dc5
commit 44a4fbdda2

View File

@@ -276,6 +276,41 @@ ol.renderer.canvas.TileLayer.prototype.renderTileImages = function(context, fram
tilesToDraw.reverse();
pixelExtents = [];
}
var extent = layerState.extent;
var clipped = extent !== undefined;
if (clipped) {
goog.asserts.assert(extent !== undefined,
'layerState extent is defined');
var topLeft = ol.extent.getTopLeft(extent);
var topRight = ol.extent.getTopRight(extent);
var bottomRight = ol.extent.getBottomRight(extent);
var bottomLeft = ol.extent.getBottomLeft(extent);
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
topLeft, topLeft);
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
topRight, topRight);
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
bottomRight, bottomRight);
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
bottomLeft, bottomLeft);
var ox = drawOffsetX || 0;
var oy = drawOffsetY || 0;
renderContext.save();
var cx = (renderContext.canvas.width * pixelRatio) / 2;
var cy = (renderContext.canvas.height * pixelRatio) / 2;
ol.render.canvas.rotateAtOffset(renderContext, -rotation, cx, cy);
renderContext.beginPath();
renderContext.moveTo(topLeft[0] * pixelRatio + ox, topLeft[1] * pixelRatio + oy);
renderContext.lineTo(topRight[0] * pixelRatio + ox, topRight[1] * pixelRatio + oy);
renderContext.lineTo(bottomRight[0] * pixelRatio + ox, bottomRight[1] * pixelRatio + oy);
renderContext.lineTo(bottomLeft[0] * pixelRatio + ox, bottomLeft[1] * pixelRatio + oy);
renderContext.clip();
ol.render.canvas.rotateAtOffset(renderContext, rotation, cx, cy);
}
for (var i = 0, ii = tilesToDraw.length; i < ii; ++i) {
var tile = tilesToDraw[i];
var tileCoord = tile.getTileCoord();
@@ -324,6 +359,10 @@ ol.renderer.canvas.TileLayer.prototype.renderTileImages = function(context, fram
}
}
if (clipped) {
renderContext.restore();
}
if (hasRenderListeners) {
var dX = drawOffsetX - offsetX / drawScale + offsetX;
var dY = drawOffsetY - offsetY / drawScale + offsetY;