rendered paste bodydiff -Nur osm_vanilla/OpenLayers-2.10/lib//OpenLayers/Layer/XYZ.js OpenLayers-2.10/lib//OpenLayers/Layer/XYZ.js
--- osm_vanilla/OpenLayers-2.10/lib//OpenLayers/Layer/XYZ.js 2010-09-02 23:43:25.000000000 +0200
+++ OpenLayers-2.10/lib//OpenLayers/Layer/XYZ.js 2010-11-06 00:20:55.571034709 +0100
@@ -53,15 +53,16 @@
* options - {Object} Hashtable of extra options to tag onto the layer
*/
initialize: function(name, url, options) {
+ factor = 1.48607709750566893424;
if (options && options.sphericalMercator || this.sphericalMercator) {
options = OpenLayers.Util.extend({
maxExtent: new OpenLayers.Bounds(
- -128 * 156543.0339,
- -128 * 156543.0339,
- 128 * 156543.0339,
- 128 * 156543.0339
+ -128 * 156543.0339 * factor,
+ -128 * 156543.0339 * factor,
+ 128 * 156543.0339 * factor,
+ 128 * 156543.0339 * factor
),
- maxResolution: 156543.0339,
+ maxResolution: 156543.0339 * factor,
numZoomLevels: 19,
units: "m",
projection: "EPSG:900913"
@@ -110,9 +111,18 @@
*/
getURL: function (bounds) {
var res = this.map.getResolution();
- var x = Math.round((bounds.left - this.maxExtent.left)
+ var f = 1.48607709750566893424;
+
+
+ // TODO: why exactly is bounds incorrect?
+
+ var left = f * Math.sqrt(1/f) * (bounds.left - this.maxExtent.left/f) + (this.maxExtent.left);
+
+
+ var x = Math.round((left - this.maxExtent.left)
/ (res * this.tileSize.w));
- var y = Math.round((this.maxExtent.top - bounds.top)
+ var top = - (f / Math.sqrt(f)) * ((this.maxExtent.top/f) - bounds.top) + this.maxExtent.top;
+ var y = Math.round((this.maxExtent.top - top)
/ (res * this.tileSize.h));
var z = this.map.getZoom() + this.zoomOffset;