move properties from layer/XYZ to layer/TileLayer

This commit is contained in:
Éric Lemoine
2012-06-21 12:41:43 +02:00
parent 5da8fc8d49
commit 5f1e53a0c9
4 changed files with 232 additions and 75 deletions

View File

@@ -6,6 +6,169 @@ goog.require('ol.layer.Layer');
* @constructor
* @extends {ol.layer.Layer}
*/
ol.layer.TileLayer = function() {};
ol.layer.TileLayer = function() {
/**
* @protected
* @type {ol.Projection}
*/
this.projection_ = null;
/**
* @private
* @type {ol.Bounds}
*/
this.extent_ = null;
/**
* @protected
* @type {number}
*/
this.tileWidth_ = 256;
/**
* @protected
* @type {number}
*/
this.tileHeight_ = 256;
/**
* @protected
* @type {number|undefined}
*/
this.tileOriginX_ = undefined;
/**
* @protected
* @type {number|undefined}
*/
this.tileOriginY_ = undefined;
/**
* @private
* @type {string}
*/
this.tileOriginCorner_ = 'bl';
/**
* @protected
* @type {Array.<number>}
*/
this.resolutions_ = null;
};
goog.inherits(ol.layer.TileLayer, ol.layer.Layer);
/**
* Get layer extent. Return null if the layer has no extent
* and no projection.
* @return {ol.UnreferencedBounds}
*/
ol.layer.TileLayer.prototype.getExtent = function() {
if (!goog.isNull(this.extent_)) {
return this.extent_;
}
if (!goog.isNull(this.projection_)) {
return this.projection_.getExtent();
}
return null;
};
/**
* Get tile origin.
* @return {Array.<number>}
*/
ol.layer.TileLayer.prototype.getTileOrigin = function() {
if (goog.isDef(this.tileOriginX_) &&
goog.isDef(this.tileOriginY_)) {
return [this.tileOriginX_, this.tileOriginY_];
}
var errmsg;
if (goog.isDef(this.tileOriginCorner_)) {
var extent = this.getExtent();
if (!goog.isNull(extent)) {
var tileOriginX, tileOriginY;
switch (this.tileOriginCorner_) {
case "tl":
tileOriginX = extent.getMinX();
tileOriginY = extent.getMaxY();
break;
case "tr":
tileOriginX = extent.getMaxX();
tileOriginY = extent.getMaxY();
break;
case "bl":
tileOriginX = extent.getMinX();
tileOriginY = extent.getMinY();
break;
case "br":
tileOriginX = extent.getMaxX();
tileOriginY = extent.getMinY();
break;
default:
// FIXME user error
goog.asserts.assert(false);
}
return [tileOriginX, tileOriginY];
}
// FIXME user error
goog.asserts.assert(false);
}
// FIXME user error
goog.asserts.assert(false);
return null;
};
/**
* Set layer projection.
* @param {ol.Projection} projection
*/
ol.layer.TileLayer.prototype.setProjection = function(projection) {
this.projection_ = projection;
};
/**
* Set layer extent.
* @param {ol.Bounds} extent
*/
ol.layer.TileLayer.prototype.setExtent = function(extent) {
this.extent_ = extent;
};
/**
* Set tile width and height.
* @param {number} width
* @param {number} height
*/
ol.layer.TileLayer.prototype.setTileSize = function(width, height) {
this.tileWidth_ = width;
this.tileHeight_ = height;
};
/**
* Set tile origin.
* @param {number} tileOriginX
* @param {number} tileOriginY
*/
ol.layer.TileLayer.prototype.setTileOrigin = function(tileOriginX, tileOriginY) {
this.tileOriginX_ = tileOriginX;
this.tileOriginY_ = tileOriginY;
};
/**
* Set tile origin corner.
* @param {string} tileOriginCorner
*/
ol.layer.TileLayer.prototype.setTileOriginCorner = function(tileOriginCorner) {
this.tileOriginCorner_ = tileOriginCorner;
};
/**
* Set resolutions for the layer.
* @param {Array.<number>} resolutions
*/
ol.layer.TileLayer.prototype.setResolutions = function(resolutions) {
this.resolutions_ = resolutions;
};

View File

@@ -22,41 +22,9 @@ ol.layer.XYZ = function(url) {
*/
this.url_ = url;
/**
* @private
* @type {number}
*/
this.tileWidth_ = 256;
goog.base(this);
/**
* @private
* @type {number}
*/
this.tileHeight_ = 256;
/**
* @private
* @type {number}
*/
this.tileOriginX_ = -20037508.34;
/**
* @private
* @type {number}
*/
this.tileOriginY_ = 20037508.34;
/**
* @private
* @type {ol.Projection}
*/
this.projection_ = new ol.Projection('EPSG:900913');
/**
* @private
* @type {Array.<number>}
*/
this.resolutions_ = [
this.setResolutions([
156543.03390625, 78271.516953125, 39135.7584765625,
19567.87923828125, 9783.939619140625, 4891.9698095703125,
2445.9849047851562, 1222.9924523925781, 611.4962261962891,
@@ -65,48 +33,11 @@ ol.layer.XYZ = function(url) {
4.777314267158508, 2.388657133579254, 1.194328566789627,
0.5971642833948135, 0.29858214169740677, 0.14929107084870338,
0.07464553542435169
];
]);
};
goog.inherits(ol.layer.XYZ, ol.layer.TileLayer);
/**
* Set tile width and height.
* @param {number} width
* @param {number} height
*/
ol.layer.XYZ.prototype.setTileSize = function(width, height) {
this.tileWidth_ = width;
this.tileHeight_ = height;
};
/**
* Set the layer max extent.
* @param {ol.Bounds} maxExtent
*/
ol.layer.XYZ.prototype.setMaxExtent = function(maxExtent) {
this.maxExtent_ = maxExtent;
};
/**
* Set tile origin.
* @param {number} tileOriginX
* @param {number} tileOriginY
*/
ol.layer.XYZ.prototype.setTileOrigin = function(tileOriginX, tileOriginY) {
this.tileOriginX_ = tileOriginX;
this.tileOriginY_ = tileOriginY;
};
/**
* Set resolutions for the layer.
* @param {Array.<number>} resolutions
*/
ol.layer.XYZ.prototype.setResolutions = function(resolutions) {
this.resolutions_ = resolutions;
};
/**
* Get data from the layer. This is the layer's main API function.
* @param {ol.Bounds} bounds
@@ -126,8 +57,9 @@ ol.layer.XYZ.prototype.getData = function(bounds, resolution) {
tileWidth = me.tileWidth_,
tileHeight = me.tileHeight_,
tileOriginX = me.tileOriginX_,
tileOriginY = me.tileOriginY_,
tileOrigin = me.getTileOrigin(),
tileOriginX = tileOrigin[0],
tileOriginY = tileOrigin[1],
tileWidthGeo = tileWidth * resolution,
tileHeightGeo = tileHeight * resolution,

View File

@@ -63,6 +63,7 @@
<script type="text/javascript" src="spec/ol/TileSet.test.js"></script>
<script type="text/javascript" src="spec/ol/geom/Point.test.js"></script>
<script type="text/javascript" src="spec/ol/geom/MultiPoint.test.js"></script>
<script type="text/javascript" src="spec/ol/layer/TileLayer.test.js"></script>
<script type="text/javascript" src="spec/ol/layer/XYZ.test.js"></script>
<script type="text/javascript" src="spec/ol/Feature.test.js"></script>

View File

@@ -0,0 +1,61 @@
describe('ol.layer.TileLayer', function() {
describe('create a tile layer', function() {
it('returns an ol.layer.TileLayer instance', function() {
var layer = new ol.layer.TileLayer();
expect(layer instanceof ol.layer.TileLayer).toBe(true);
});
});
describe('get tile origin', function() {
var layer;
beforeEach(function() {
layer = new ol.layer.TileLayer();
});
describe('with tileOriginX and tileOriginY set', function() {
beforeEach(function() {
layer.setTileOrigin(1, 2);
});
it('returns the expected origin', function() {
var origin = layer.getTileOrigin();
expect(origin).toEqual([1, 2]);
});
});
describe('with extent set', function() {
beforeEach(function() {
layer.setExtent(new ol.Bounds(-180, -90, 180, 90));
});
it('returns the expected origin', function() {
var origin = layer.getTileOrigin();
expect(origin).toEqual([-180, -90]);
});
});
describe('with extent and tileOriginCorner set', function() {
beforeEach(function() {
layer.setExtent(new ol.Bounds(-180, -90, 180, 90));
layer.setTileOriginCorner('tr');
});
it('returns the expected origin', function() {
var origin = layer.getTileOrigin();
expect(origin).toEqual([180, 90]);
});
});
});
});