Cross-dateline rendering fixed for SVG and added for VML renderer.
This commit is contained in:
@@ -90,8 +90,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
* the coordinate range, and the features will not need to be redrawn.
|
||||
*/
|
||||
setExtent: function(extent, resolutionChanged) {
|
||||
OpenLayers.Renderer.Elements.prototype.setExtent.apply(this,
|
||||
arguments);
|
||||
var coordSysUnchanged = OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, arguments);
|
||||
var resolution = this.getResolution();
|
||||
|
||||
var left = (extent.left/resolution) | 0;
|
||||
@@ -106,7 +105,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
}
|
||||
|
||||
|
||||
var org = left + " " + top;
|
||||
var org = (left - this.xOffset) + " " + top;
|
||||
this.root.coordorigin = org;
|
||||
var roots = [this.root, this.vectorRoot, this.textRoot];
|
||||
var root;
|
||||
@@ -121,7 +120,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
// matches the display Y axis of the map
|
||||
this.root.style.flip = "y";
|
||||
|
||||
return true;
|
||||
return coordSysUnchanged;
|
||||
},
|
||||
|
||||
|
||||
@@ -226,7 +225,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
var yOffset = (style.graphicYOffset != undefined) ?
|
||||
style.graphicYOffset : -(0.5 * height);
|
||||
|
||||
node.style.left = (((geometry.x/resolution - this.offset.x)+xOffset) | 0) + "px";
|
||||
node.style.left = ((((geometry.x - this.featureDx)/resolution - this.offset.x)+xOffset) | 0) + "px";
|
||||
node.style.top = (((geometry.y/resolution - this.offset.y)-(yOffset+height)) | 0) + "px";
|
||||
node.style.width = width + "px";
|
||||
node.style.height = height + "px";
|
||||
@@ -483,9 +482,9 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
var resolution = this.getResolution();
|
||||
|
||||
var scaledBox =
|
||||
new OpenLayers.Bounds((bbox.left/resolution - this.offset.x) | 0,
|
||||
new OpenLayers.Bounds(((bbox.left - this.featureDx)/resolution - this.offset.x) | 0,
|
||||
(bbox.bottom/resolution - this.offset.y) | 0,
|
||||
(bbox.right/resolution - this.offset.x) | 0,
|
||||
((bbox.right - this.featureDx)/resolution - this.offset.x) | 0,
|
||||
(bbox.top/resolution - this.offset.y) | 0);
|
||||
|
||||
// Set the internal coordinate system to draw the path
|
||||
@@ -652,7 +651,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
if(!isNaN(geometry.x)&& !isNaN(geometry.y)) {
|
||||
var resolution = this.getResolution();
|
||||
|
||||
node.style.left = (((geometry.x /resolution - this.offset.x) | 0) - radius) + "px";
|
||||
node.style.left = ((((geometry.x - this.featureDx) /resolution - this.offset.x) | 0) - radius) + "px";
|
||||
node.style.top = (((geometry.y /resolution - this.offset.y) | 0) - radius) + "px";
|
||||
|
||||
var diameter = radius * 2;
|
||||
@@ -718,7 +717,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
var comp, x, y;
|
||||
for (var i = 0; i < numComponents; i++) {
|
||||
comp = geometry.components[i];
|
||||
x = (comp.x/resolution - this.offset.x) | 0;
|
||||
x = ((comp.x - this.featureDx)/resolution - this.offset.x) | 0;
|
||||
y = (comp.y/resolution - this.offset.y) | 0;
|
||||
parts[i] = " " + x + "," + y + " l ";
|
||||
}
|
||||
@@ -754,7 +753,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
second = null;
|
||||
for (i=0, ii=points.length; i<ii; i++) {
|
||||
comp = points[i];
|
||||
x = (comp.x / resolution - this.offset.x) | 0;
|
||||
x = ((comp.x - this.featureDx) / resolution - this.offset.x) | 0;
|
||||
y = (comp.y / resolution - this.offset.y) | 0;
|
||||
pathComp = " " + x + "," + y;
|
||||
path.push(pathComp);
|
||||
@@ -801,7 +800,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
drawRectangle: function(node, geometry) {
|
||||
var resolution = this.getResolution();
|
||||
|
||||
node.style.left = ((geometry.x/resolution - this.offset.x) | 0) + "px";
|
||||
node.style.left = (((geometry.x - this.featureDx)/resolution - this.offset.x) | 0) + "px";
|
||||
node.style.top = ((geometry.y/resolution - this.offset.y) | 0) + "px";
|
||||
node.style.width = ((geometry.width/resolution) | 0) + "px";
|
||||
node.style.height = ((geometry.height/resolution) | 0) + "px";
|
||||
@@ -823,7 +822,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
var textbox = this.nodeFactory(featureId + this.LABEL_ID_SUFFIX + "_textbox", "olv:textbox");
|
||||
|
||||
var resolution = this.getResolution();
|
||||
label.style.left = ((location.x/resolution - this.offset.x) | 0) + "px";
|
||||
label.style.left = (((location.x - this.featureDx)/resolution - this.offset.x) | 0) + "px";
|
||||
label.style.top = ((location.y/resolution - this.offset.y) | 0) + "px";
|
||||
label.style.flip = "y";
|
||||
|
||||
@@ -900,7 +899,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
var comp, x, y;
|
||||
for (var i=0, len=geometry.components.length; i<len; i++) {
|
||||
comp = geometry.components[i];
|
||||
x = (comp.x / resolution - this.offset.x) | 0;
|
||||
x = ((comp.x - this.featureDx) / resolution - this.offset.x) | 0;
|
||||
y = (comp.y / resolution - this.offset.y) | 0;
|
||||
if ((i%3)==0 && (i/3)==0) {
|
||||
path.push("m");
|
||||
|
||||
Reference in New Issue
Block a user