Fix {-y} template calculation for custom (TMS) tile grids

Previously, {-y} only worked for the standard web mercator tile grid. Now
a tile grid with an extent is required (which we get from
ol.tilegrid.createXYZ() anyway), and then the y calculation for TMS style
tile grids works as expected.
This commit is contained in:
Andreas Hocevar
2015-09-28 16:37:21 +02:00
parent 79766ad25c
commit 8248ec63ba
6 changed files with 58 additions and 25 deletions

View File

@@ -28,29 +28,45 @@ describe('ol.TileUrlFunction', function() {
});
describe('createFromTemplate', function() {
var tileGrid = ol.tilegrid.createXYZ();
it('creates expected URL', function() {
var tileUrl = ol.TileUrlFunction.createFromTemplate('{z}/{x}/{y}');
var tileUrl = ol.TileUrlFunction.createFromTemplate(
'{z}/{x}/{y}', tileGrid);
expect(tileUrl([3, 2, -2])).to.eql('3/2/1');
expect(tileUrl(null)).to.be(undefined);
});
it('accepts {-y} placeholder', function() {
var tileUrl = ol.TileUrlFunction.createFromTemplate('{z}/{x}/{-y}');
var tileUrl = ol.TileUrlFunction.createFromTemplate(
'{z}/{x}/{-y}', tileGrid);
expect(tileUrl([3, 2, -3])).to.eql('3/2/5');
});
it('returns correct value for {-y} with custom tile grids', function() {
var customTileGrid = new ol.tilegrid.TileGrid({
extent: [-180, -90, 180, 90],
origin: [-180, -90],
resolutions: [360 / 256, 360 / 512, 360 / 1024, 360 / 2048]
});
var tileUrl = ol.TileUrlFunction.createFromTemplate(
'{z}/{x}/{-y}', customTileGrid);
expect(tileUrl([3, 2, -3])).to.eql('3/2/1');
});
it('replaces multiple placeholder occurrences', function() {
var tileUrl = ol.TileUrlFunction.createFromTemplate('{z}/{z}{x}{y}');
var tileUrl = ol.TileUrlFunction.createFromTemplate(
'{z}/{z}{x}{y}', tileGrid);
expect(tileUrl([3, 2, -2])).to.eql('3/321');
});
});
describe('createFromTemplates', function() {
var tileGrid = ol.tilegrid.createXYZ();
it('creates expected URL', function() {
var templates = [
'http://tile-1/{z}/{x}/{y}',
'http://tile-2/{z}/{x}/{y}',
'http://tile-3/{z}/{x}/{y}'
];
var tileUrlFunction = ol.TileUrlFunction.createFromTemplates(templates);
var tileUrlFunction = ol.TileUrlFunction.createFromTemplates(
templates, tileGrid);
var tileCoord = [3, 2, -2];
sinon.stub(ol.tilecoord, 'hash', function() { return 3; });
@@ -68,10 +84,11 @@ describe('ol.TileUrlFunction', function() {
});
describe('createFromTileUrlFunctions', function() {
var tileGrid = ol.tilegrid.createXYZ();
it('creates expected URL', function() {
var tileUrl = ol.TileUrlFunction.createFromTileUrlFunctions([
ol.TileUrlFunction.createFromTemplate('a'),
ol.TileUrlFunction.createFromTemplate('b')
ol.TileUrlFunction.createFromTemplate('a', tileGrid),
ol.TileUrlFunction.createFromTemplate('b', tileGrid)
]);
var tileUrl1 = tileUrl([1, 0, 0]);
var tileUrl2 = tileUrl([1, 0, 1]);
@@ -84,3 +101,4 @@ describe('ol.TileUrlFunction', function() {
goog.require('ol.TileCoord');
goog.require('ol.TileUrlFunction');
goog.require('ol.tilegrid.TileGrid');