From 9ab440e615f921a8b9ae81f4f8dd6b896587b73a Mon Sep 17 00:00:00 2001 From: tschaub Date: Thu, 29 Sep 2011 19:51:20 -0600 Subject: [PATCH] Calculate x-offset for features outside the world bounds. --- lib/OpenLayers/Renderer/Canvas.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/OpenLayers/Renderer/Canvas.js b/lib/OpenLayers/Renderer/Canvas.js index 582fe62e14..2d2f79e581 100644 --- a/lib/OpenLayers/Renderer/Canvas.js +++ b/lib/OpenLayers/Renderer/Canvas.js @@ -580,7 +580,7 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, { getLocalXY: function(point) { var resolution = this.getResolution(); var extent = this.extent; - var x = (point.x / resolution + (-extent.left / resolution)); + var x = ((point.x - this.featureDx) / resolution + (-extent.left / resolution)); var y = ((extent.top / resolution) - point.y / resolution); return [x, y]; }, @@ -666,10 +666,21 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, { this.hitContext.clearRect(0, 0, width, height); } var labelMap = []; - var feature, style; + var feature, style, bounds; + var worldBounds = (this.map.baseLayer && this.map.baseLayer.wrapDateLine) && this.map.getMaxExtent(); for (var id in this.features) { if (!this.features.hasOwnProperty(id)) { continue; } feature = this.features[id][0]; + + this.featureDx = 0; + if (worldBounds) { + bounds = feature.geometry.getBounds(); + if (!(bounds.intersectsBounds(this.extent))) { + var wrappedBounds = bounds.wrapDateLine(worldBounds); + this.featureDx = bounds.left - wrappedBounds.left; + } + } + style = this.features[id][1]; this.drawGeometry(feature.geometry, style, feature.id); if(style.label) {