From 7c77b6a88b56a85fc11dd59b5ae88a18292eaa5e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 21 Aug 2012 14:35:03 +0200 Subject: [PATCH] Respect extent when requesting TileJSON tiles --- src/ol/tile/tilejson.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/ol/tile/tilejson.js b/src/ol/tile/tilejson.js index a30e12254f..691a37e0ca 100644 --- a/src/ol/tile/tilejson.js +++ b/src/ol/tile/tilejson.js @@ -105,16 +105,17 @@ ol.tilestore.TileJSON.prototype.handleTileJSONResponse = function() { var epsg4326Projection = ol.Projection.getFromCode('EPSG:4326'); - var epsg4326Extent; + var epsg4326Extent, extent; if (goog.isDef(tileJSON.bounds)) { var bounds = tileJSON.bounds; epsg4326Extent = new ol.Extent( bounds[0], bounds[1], bounds[2], bounds[3]); - var transformedExtent = epsg4326Extent.transform( + extent = epsg4326Extent.transform( ol.Projection.getTransform(epsg4326Projection, this.getProjection())); - this.setExtent(transformedExtent); + this.setExtent(extent); } else { epsg4326Extent = null; + extent = null; } var scheme = goog.isDef(tileJSON.scheme) || 'xyz'; @@ -136,10 +137,16 @@ ol.tilestore.TileJSON.prototype.handleTileJSONResponse = function() { var y = -tileCoord.y - 1; if (y < 0 || n <= y) { return null; - } else { - var x = goog.math.modulo(tileCoord.x, n); - return new ol.TileCoord(tileCoord.z, x, y); } + var x = goog.math.modulo(tileCoord.x, n); + if (!goog.isNull(extent)) { + var tileExtent = tileGrid.getTileCoordExtent( + new ol.TileCoord(tileCoord.z, x, tileCoord.y)); + if (!tileExtent.intersects(extent)) { + return null; + } + } + return new ol.TileCoord(tileCoord.z, x, y); }, ol.TileUrlFunction.createFromTemplates(tileJSON.tiles));