From e140a5d84375b4b917eb0dfea6279527241ee9e8 Mon Sep 17 00:00:00 2001 From: pgiraud Date: Mon, 4 Apr 2011 07:20:48 +0000 Subject: [PATCH] Adding wrapDateLine support for XYZ layers. The OSM layer now wraps the date line by default. p=tomh, r=me (Closes #2246) git-svn-id: http://svn.openlayers.org/trunk/openlayers@11864 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- examples/mobile-drawing.js | 5 ++++- lib/OpenLayers/Layer/XYZ.js | 7 +++++++ tests/Layer/XYZ.html | 13 ++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/examples/mobile-drawing.js b/examples/mobile-drawing.js index c4083e8a7b..98998d0072 100644 --- a/examples/mobile-drawing.js +++ b/examples/mobile-drawing.js @@ -35,6 +35,9 @@ function init() { }) ]); + var osm = new OpenLayers.Layer.OSM(); + osm.wrapDateLine = false; + map = new OpenLayers.Map({ div: 'map', projection: 'EPSG:900913', @@ -53,7 +56,7 @@ function init() { new OpenLayers.Control.ZoomPanel(), toolbar ], - layers: [new OpenLayers.Layer.OSM(), vector], + layers: [osm, vector], center: new OpenLayers.LonLat(0, 0), zoom: 1, theme: null diff --git a/lib/OpenLayers/Layer/XYZ.js b/lib/OpenLayers/Layer/XYZ.js index d8cbf53716..4689f9c9f0 100644 --- a/lib/OpenLayers/Layer/XYZ.js +++ b/lib/OpenLayers/Layer/XYZ.js @@ -148,6 +148,12 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, { OpenLayers.Util.indexOf(this.serverResolutions, res) : this.map.getZoom() + this.zoomOffset; + var limit = Math.pow(2, z); + if (this.wrapDateLine) + { + x = ((x % limit) + limit) % limit; + } + return {'x': x, 'y': y, 'z': z}; }, @@ -199,5 +205,6 @@ OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { obj = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [obj]); return obj; }, + wrapDateLine: true, CLASS_NAME: "OpenLayers.Layer.OSM" }); diff --git a/tests/Layer/XYZ.html b/tests/Layer/XYZ.html index dd15b56d7d..a13ee845c3 100644 --- a/tests/Layer/XYZ.html +++ b/tests/Layer/XYZ.html @@ -108,7 +108,7 @@ */ function test_Layer_XYZ_getURL(t) { - t.plan(2); + t.plan(6); var map = new OpenLayers.Map('map'); layer = new OpenLayers.Layer.XYZ(name, url); @@ -120,6 +120,17 @@ layer.url = ["http://tilecache1/", "http://tilecache2/", "http://tilecache3/"]; tileurl = layer.getURL(new OpenLayers.Bounds(3.515625,45,4.21875,45.703125)); t.eq(tileurl, "http://tilecache1/", "Tile URL is deterministic"); + + layer.url = url; + tileurl = layer.getURL(new OpenLayers.Bounds(180.515625,45,181.21875,45.703125)); + t.eq(tileurl, "http://labs.metacarta.com/wms-c/Basic.py/1.0.0/basic/9/513/63.png", "Tile URL is correct"); + tileurl = layer.getURL(new OpenLayers.Bounds(-181.515625,45,-180.21875,45.703125)); + t.eq(tileurl, "http://labs.metacarta.com/wms-c/Basic.py/1.0.0/basic/9/-2/63.png", "Tile URL is correct"); + layer.wrapDateLine = true; + tileurl = layer.getURL(new OpenLayers.Bounds(180.515625,45,181.21875,45.703125)); + t.eq(tileurl, "http://labs.metacarta.com/wms-c/Basic.py/1.0.0/basic/9/1/63.png", "Tile URL is correct"); + tileurl = layer.getURL(new OpenLayers.Bounds(-181.515625,45,-180.21875,45.703125)); + t.eq(tileurl, "http://labs.metacarta.com/wms-c/Basic.py/1.0.0/basic/9/510/63.png", "Tile URL is correct"); map.destroy(); } function test_Layer_XYZ_Rounding(t) {