Merge pull request #1030 from elemoine/touches
Exclude tiles that touches the source extent
This commit is contained in:
@@ -337,6 +337,19 @@ ol.extent.toString = function(extent) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent1 Extent 1.
|
||||
* @param {ol.Extent} extent2 Extent 2.
|
||||
* @return {boolean} Touches.
|
||||
*/
|
||||
ol.extent.touches = function(extent1, extent2) {
|
||||
var intersects = ol.extent.intersects(extent1, extent2);
|
||||
return intersects &&
|
||||
(extent1[0] == extent2[2] || extent1[2] == extent2[0] ||
|
||||
extent1[1] == extent2[3] || extent1[3] == extent2[1]);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {ol.TransformFunction} transformFn Transform function.
|
||||
|
||||
@@ -84,7 +84,8 @@ ol.source.TileWMS = function(options) {
|
||||
tileExtent = tileGrid.getTileCoordExtent(
|
||||
new ol.TileCoord(tileCoord.z, x, tileCoord.y));
|
||||
}
|
||||
if (!goog.isNull(extent) && !ol.extent.intersects(tileExtent, extent)) {
|
||||
if (!goog.isNull(extent) && (!ol.extent.intersects(tileExtent, extent) ||
|
||||
ol.extent.touches(tileExtent, extent))) {
|
||||
return null;
|
||||
}
|
||||
return new ol.TileCoord(tileCoord.z, x, tileCoord.y);
|
||||
|
||||
@@ -165,7 +165,8 @@ ol.source.WMTS = function(options) {
|
||||
tmpTileCoord.y = tileCoord.y;
|
||||
tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent);
|
||||
}
|
||||
if (!ol.extent.intersects(tileExtent, extent)) {
|
||||
if (!ol.extent.intersects(tileExtent, extent) ||
|
||||
ol.extent.touches(tileExtent, extent)) {
|
||||
return null;
|
||||
}
|
||||
return new ol.TileCoord(tileCoord.z, x, y);
|
||||
|
||||
@@ -122,7 +122,7 @@ describe('ol.extent', function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe('intersect', function() {
|
||||
describe('intersects', function() {
|
||||
|
||||
it('returns the expected value', function() {
|
||||
var intersects = ol.extent.intersects;
|
||||
@@ -157,6 +157,23 @@ describe('ol.extent', function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe('touches', function() {
|
||||
|
||||
it('returns the expected value', function() {
|
||||
var touches = ol.extent.touches;
|
||||
var extent = [50, 50, 100, 100];
|
||||
expect(touches(extent, [20, 20, 80, 80])).to.be(false);
|
||||
expect(touches(extent, [20, 20, 50, 80])).to.be(true);
|
||||
expect(touches(extent, [20, 20, 50, 40])).to.be(false);
|
||||
expect(touches(extent, [100, 20, 140, 80])).to.be(true);
|
||||
expect(touches(extent, [100, 20, 140, 40])).to.be(false);
|
||||
expect(touches(extent, [20, 20, 80, 50])).to.be(true);
|
||||
expect(touches(extent, [20, 20, 40, 50])).to.be(false);
|
||||
expect(touches(extent, [20, 100, 80, 140])).to.be(true);
|
||||
expect(touches(extent, [20, 100, 40, 140])).to.be(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('normalize', function() {
|
||||
it('returns the expected coordinate', function() {
|
||||
var extent = [0, 1, 2, 3];
|
||||
|
||||
Reference in New Issue
Block a user