Making it explicit that this is a range of tiles
With tile range extending rectangle, a tile range that represented a single tile was not allowed.
This commit is contained in:
@@ -1,23 +1,44 @@
|
||||
goog.provide('ol.TileRange');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('ol.Rectangle');
|
||||
goog.require('ol.Size');
|
||||
goog.require('ol.TileCoord');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* A representation of a contiguous block of tiles. A tile range is specified
|
||||
* by its min/max tile coordinates and is inclusive of coordinates.
|
||||
*
|
||||
* @constructor
|
||||
* @extends {ol.Rectangle}
|
||||
* @param {number} minX Minimum X.
|
||||
* @param {number} minY Minimum Y.
|
||||
* @param {number} maxX Maximum X.
|
||||
* @param {number} maxY Maximum Y.
|
||||
*/
|
||||
ol.TileRange = function(minX, minY, maxX, maxY) {
|
||||
goog.base(this, minX, minY, maxX, maxY);
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.minX = minX;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.minY = minY;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.maxX = maxX;
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.maxY = maxY;
|
||||
|
||||
};
|
||||
goog.inherits(ol.TileRange, ol.Rectangle);
|
||||
|
||||
|
||||
/**
|
||||
@@ -62,7 +83,28 @@ ol.TileRange.prototype.containsTileRange = function(tileRange) {
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {ol.TileRange} range Other range.
|
||||
* @return {boolean} The two ranges are equivalent.
|
||||
*/
|
||||
ol.TileRange.prototype.equals = function(range) {
|
||||
return this.minX == range.minX && this.minY == range.minY &&
|
||||
this.maxX == range.maxX && this.maxY == range.maxY;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Extend this range so it includes the other.
|
||||
* @param {ol.TileRange} other Other range.
|
||||
*/
|
||||
ol.TileRange.prototype.extend = function(other) {
|
||||
this.minX = Math.min(this.minX, other.minX);
|
||||
this.minY = Math.min(this.minY, other.minY);
|
||||
this.maxX = Math.max(this.maxX, other.maxX);
|
||||
this.maxY = Math.max(this.maxY, other.maxY);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} Height.
|
||||
*/
|
||||
ol.TileRange.prototype.getHeight = function() {
|
||||
@@ -71,9 +113,30 @@ ol.TileRange.prototype.getHeight = function() {
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @return {ol.Size} Size.
|
||||
*/
|
||||
ol.TileRange.prototype.getSize = function() {
|
||||
return new ol.Size(this.getWidth(), this.getHeight());
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {number} Width.
|
||||
*/
|
||||
ol.TileRange.prototype.getWidth = function() {
|
||||
return this.maxX - this.minX + 1;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Test for range intersection.
|
||||
* @param {ol.TileRange} other Other range.
|
||||
* @return {boolean} The two ranges intersect.
|
||||
*/
|
||||
ol.TileRange.prototype.intersects = function(other) {
|
||||
return this.minX <= other.maxX &&
|
||||
this.maxX >= other.minX &&
|
||||
this.minY <= other.maxY &&
|
||||
this.maxY >= other.minY;
|
||||
};
|
||||
|
||||
|
||||
@@ -2,6 +2,20 @@ goog.provide('ol.test.TileRange');
|
||||
|
||||
describe('ol.TileRange', function() {
|
||||
|
||||
describe('constructor', function() {
|
||||
it('creates a range', function() {
|
||||
var range = new ol.TileRange(1, 2, 3, 4);
|
||||
expect(range).toBeA(ol.TileRange);
|
||||
});
|
||||
|
||||
it('can represent a range of one tile', function() {
|
||||
var range = new ol.TileRange(2, 3, 2, 3);
|
||||
expect(range).toBeA(ol.TileRange);
|
||||
expect(range.getHeight()).toBe(1);
|
||||
expect(range.getWidth()).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('contains', function() {
|
||||
it('returns the expected value', function() {
|
||||
var tileRange = new ol.TileRange(1, 1, 3, 3);
|
||||
@@ -53,6 +67,36 @@ describe('ol.TileRange', function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe('equals', function() {
|
||||
it('determines equivalence of two ranges', function() {
|
||||
var one = new ol.TileRange(0, 1, 2, 4);
|
||||
var same = new ol.TileRange(0, 1, 2, 4);
|
||||
var diff1 = new ol.TileRange(0, 1, 2, 5);
|
||||
var diff2 = new ol.TileRange(0, 1, 3, 4);
|
||||
var diff3 = new ol.TileRange(0, 2, 2, 4);
|
||||
var diff4 = new ol.TileRange(1, 1, 2, 4);
|
||||
expect(one.equals(same)).toBe(true);
|
||||
expect(one.equals(diff1)).toBe(false);
|
||||
expect(one.equals(diff2)).toBe(false);
|
||||
expect(one.equals(diff3)).toBe(false);
|
||||
expect(one.equals(diff4)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('extent', function() {
|
||||
it('modifies range so it includes another', function() {
|
||||
var one = new ol.TileRange(0, 1, 2, 4);
|
||||
var other = new ol.TileRange(-1, 10, -3, 12);
|
||||
one.extend(other);
|
||||
|
||||
expect(one.minX).toBe(-1);
|
||||
expect(one.minY).toBe(1);
|
||||
expect(one.maxX).toBe(2);
|
||||
expect(one.maxY).toBe(12);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSize', function() {
|
||||
it('returns the expected size', function() {
|
||||
var tileRange = new ol.TileRange(0, 1, 2, 4);
|
||||
@@ -62,6 +106,29 @@ describe('ol.TileRange', function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe('intersects', function() {
|
||||
it('determines if two ranges overlap', function() {
|
||||
var one = new ol.TileRange(0, 1, 2, 4);
|
||||
var overlapsRight = new ol.TileRange(2, 1, 4, 4);
|
||||
var overlapsLeft = new ol.TileRange(-3, 1, 0, 4);
|
||||
var overlapsTop = new ol.TileRange(0, 4, 2, 5);
|
||||
var overlapsBottom = new ol.TileRange(0, -3, 2, 1);
|
||||
expect(one.intersects(overlapsLeft)).toBe(true);
|
||||
expect(one.intersects(overlapsRight)).toBe(true);
|
||||
expect(one.intersects(overlapsTop)).toBe(true);
|
||||
expect(one.intersects(overlapsBottom)).toBe(true);
|
||||
|
||||
var right = new ol.TileRange(3, 1, 5, 4);
|
||||
var left = new ol.TileRange(-3, 1, -1, 4);
|
||||
var above = new ol.TileRange(0, 5, 2, 6);
|
||||
var below = new ol.TileRange(0, -3, 2, 0);
|
||||
expect(one.intersects(right)).toBe(false);
|
||||
expect(one.intersects(left)).toBe(false);
|
||||
expect(one.intersects(above)).toBe(false);
|
||||
expect(one.intersects(below)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
goog.require('ol.TileRange');
|
||||
|
||||
Reference in New Issue
Block a user