diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index f7f53bf08e..e21d37c8e3 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -117,14 +117,16 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments); - var resolution = this.getResolution(); - var left = -extent.left / resolution; - var top = extent.top / resolution; + var resolution = this.getResolution(), + left = -extent.left / resolution, + rightLL = -extent.right, + top = extent.top / resolution; // If the resolution has changed, start over changing the corner, because // the features will redraw. if (resolutionChanged) { this.left = left; + this.rightLL = rightLL; this.top = top; // Set the viewbox var extentString = "0 0 " + this.size.w + " " + this.size.h; @@ -133,6 +135,17 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { this.translate(0, 0); return true; } else { + if (this.map.baseLayer && this.map.baseLayer.wrapDateLine) { + var oldLeft = this.left * resolution, + newLeft = left * resolution, + worldBounds = this.map.getMaxExtent(), + worldWidth = worldBounds.getWidth(), + oldCenterX = (oldLeft + this.rightLL) / 2, + newCenterX = (newLeft + rightLL) / 2, + worldsAway = Math.round((oldCenterX - newCenterX) / worldWidth); + left += worldsAway * worldWidth / resolution; + console.log(extent.toString()); + } var inRange = this.translate(left - this.left, top - this.top); if (!inRange) { // recenter the coordinate system @@ -505,7 +518,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { */ drawCircle: function(node, geometry, radius) { var resolution = this.getResolution(); - var x = (geometry.x / resolution + this.left); + var x = ((geometry.x - this.featureDx) / resolution + this.left); var y = (this.top - geometry.y / resolution); if (this.inValidRange(x, y)) { @@ -615,7 +628,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { */ drawRectangle: function(node, geometry) { var resolution = this.getResolution(); - var x = (geometry.x / resolution + this.left); + var x = ((geometry.x - this.featureDx) / resolution + this.left); var y = (this.top - geometry.y / resolution); if (this.inValidRange(x, y)) { @@ -681,7 +694,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { drawText: function(featureId, style, location) { var resolution = this.getResolution(); - var x = (location.x / resolution + this.left); + var x = ((location.x - this.featureDx) / resolution + this.left); var y = (location.y / resolution - this.top); var label = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX, "text"); @@ -833,9 +846,9 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { var resolution = this.getResolution(); var maxX = this.MAX_PIXEL - this.translationParameters.x; var maxY = this.MAX_PIXEL - this.translationParameters.y; - var x1 = goodComponent.x / resolution + this.left; + var x1 = (goodComponent.x - this.featureDx) / resolution + this.left; var y1 = this.top - goodComponent.y / resolution; - var x2 = badComponent.x / resolution + this.left; + var x2 = (badComponent.x - this.featureDx) / resolution + this.left; var y2 = this.top - badComponent.y / resolution; var k; if (x2 < -maxX || x2 > maxX) { @@ -862,7 +875,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { */ getShortString: function(point) { var resolution = this.getResolution(); - var x = (point.x / resolution + this.left); + var x = ((point.x - this.featureDx) / resolution + this.left); var y = (this.top - point.y / resolution); if (this.inValidRange(x, y)) {