Use inheritance rather than creating an instance for OpenStreetMap, make attribution a function rather than a property

This commit is contained in:
Tom Payne
2012-07-26 00:25:03 +02:00
parent bcee2d3a12
commit ed4a888469
5 changed files with 77 additions and 56 deletions

View File

@@ -2,7 +2,7 @@ goog.require('goog.object');
goog.require('ol.Coordinate');
goog.require('ol.RendererHint');
goog.require('ol.createMap');
goog.require('ol.tilelayer.createOpenStreetMap');
goog.require('ol.layer.OpenStreetMap');
var twoMaps = true;
@@ -12,7 +12,7 @@ var layer;
target = /** @type {!HTMLDivElement} */ document.getElementById('map1');
map = map1 = ol.createMap(target, undefined, ol.RendererHint.DOM);
layer = ol.tilelayer.createOpenStreetMap({
layer = new ol.layer.OpenStreetMap({
'opacity': 0.9
});
map.getLayers().push(layer);

View File

@@ -9,9 +9,8 @@ goog.require('ol.Projection');
* @constructor
* @param {ol.Projection} projection Projection.
* @param {ol.Extent=} opt_extent Extent.
* @param {string=} opt_attribution Attribution.
*/
ol.Store = function(projection, opt_extent, opt_attribution) {
ol.Store = function(projection, opt_extent) {
/**
* @private
@@ -25,20 +24,16 @@ ol.Store = function(projection, opt_extent, opt_attribution) {
*/
this.extent_ = goog.isDef(opt_extent) ? opt_extent : projection.getExtent();
/**
* @private
* @type {string|undefined}
*/
this.attribution_ = opt_attribution;
};
/**
* @param {ol.Extent} extent Extent.
* @param {number} resolution Resolution.
* @return {string|undefined} Attribution.
*/
ol.Store.prototype.getAttribution = function() {
return this.attribution_;
ol.Store.prototype.getAttribution = function(extent, resolution) {
return undefined;
};

View File

@@ -1,25 +1,45 @@
goog.provide('ol.tilelayer.createOpenStreetMap');
goog.provide('ol.layer.OpenStreetMap');
goog.provide('ol.store.OpenStreetMap');
goog.require('ol.Layer');
goog.require('ol.TileLayer');
goog.require('ol.tilestore.createXYZ');
goog.require('ol.TileUrlFunction');
goog.require('ol.tilestore.XYZ');
/**
* @constructor
* @extends {ol.TileLayer}
* @param {Object.<string, *>=} opt_values Values.
* @return {ol.Layer} Layer.
*/
ol.tilelayer.createOpenStreetMap = function(opt_values) {
var store = ol.tilestore.createXYZ(
18,
[
'http://a.tile.openstreetmap.org/{z}/{x}/{y}.png',
'http://b.tile.openstreetmap.org/{z}/{x}/{y}.png',
'http://c.tile.openstreetmap.org/{z}/{x}/{y}.png'
],
'&copy; ' +
'<a href="http://www.openstreetmap.org">OpenStreetMap</a> ' +
'contributors, ' +
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA</a>');
return new ol.TileLayer(store, opt_values);
ol.layer.OpenStreetMap = function(opt_values) {
var tileStore = new ol.store.OpenStreetMap();
goog.base(this, tileStore, opt_values);
};
goog.inherits(ol.layer.OpenStreetMap, ol.TileLayer);
/**
* @constructor
* @extends {ol.tilestore.XYZ}
*/
ol.store.OpenStreetMap = function() {
goog.base(this, 18, ol.TileUrlFunction.createFromTemplates([
'http://a.tile.openstreetmap.org/{z}/{x}/{y}.png',
'http://b.tile.openstreetmap.org/{z}/{x}/{y}.png',
'http://c.tile.openstreetmap.org/{z}/{x}/{y}.png'
]));
};
goog.inherits(ol.store.OpenStreetMap, ol.tilestore.XYZ);
/**
* @inheritDoc
*/
ol.store.OpenStreetMap.prototype.getAttribution =
function(extent, resolution) {
return '&copy; <a href="http://www.openstreetmap.org">OpenStreetMap</a> ' +
'contributors, ' +
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA</a>';
};

View File

@@ -15,13 +15,12 @@ goog.require('ol.TileUrlFunctionType');
* @param {ol.TileGrid} tileGrid Tile grid.
* @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL.
* @param {ol.Extent=} opt_extent Extent.
* @param {string=} opt_attribution Attribution.
* @param {?string=} opt_crossOrigin Cross origin.
*/
ol.TileStore = function(projection, tileGrid, tileUrlFunction, opt_extent,
opt_attribution, opt_crossOrigin) {
ol.TileStore = function(
projection, tileGrid, tileUrlFunction, opt_extent, opt_crossOrigin) {
goog.base(this, projection, opt_extent, opt_attribution);
goog.base(this, projection, opt_extent);
/**
* @private

View File

@@ -1,6 +1,6 @@
goog.provide('ol.tilegrid.createXYZ');
goog.provide('ol.tilelayer.createXYZ');
goog.provide('ol.tilestore.createXYZ');
goog.provide('ol.layer.XYZ');
goog.provide('ol.tilegrid.XYZ');
goog.provide('ol.tilestore.XYZ');
goog.require('goog.math');
goog.require('ol.Coordinate');
@@ -14,11 +14,13 @@ goog.require('ol.TileStore');
goog.require('ol.TileUrlFunction');
/**
* @constructor
* @extends {ol.TileGrid}
* @param {number} maxZoom Maximum zoom.
* @return {ol.TileGrid} Tile grid.
*/
ol.tilegrid.createXYZ = function(maxZoom) {
ol.tilegrid.XYZ = function(maxZoom) {
var resolutions = new Array(maxZoom + 1);
var z;
@@ -31,40 +33,44 @@ ol.tilegrid.createXYZ = function(maxZoom) {
-ol.Projection.EPSG_3857_HALF_SIZE, ol.Projection.EPSG_3857_HALF_SIZE);
var tileSize = new ol.Size(256, 256);
return new ol.TileGrid(resolutions, extent, origin, tileSize);
goog.base(this, resolutions, extent, origin, tileSize);
};
goog.inherits(ol.tilegrid.XYZ, ol.TileGrid);
/**
* @constructor
* @extends {ol.TileLayer}
* @param {number} maxZoom Maximum zoom.
* @param {Array.<string>} templates Templates.
* @param {string=} opt_attribution Attribution.
* @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL function.
* @param {string=} opt_crossOrigin Cross origin.
* @param {Object.<string, *>=} opt_values Values.
* @return {ol.Layer} Layer.
*/
ol.tilelayer.createXYZ =
function(maxZoom, templates, opt_attribution, opt_crossOrigin, opt_values) {
var store = ol.tilestore.createXYZ(
maxZoom, templates, opt_attribution, opt_crossOrigin);
return new ol.TileLayer(store, opt_values);
ol.layer.XYZ = function(maxZoom, tileUrlFunction, opt_crossOrigin, opt_values) {
var tileStore = new ol.tilestore.XYZ(
maxZoom, tileUrlFunction, opt_crossOrigin);
goog.base(this, tileStore, opt_values);
};
goog.inherits(ol.layer.XYZ, ol.TileLayer);
/**
* @constructor
* @extends {ol.TileStore}
* @param {number} maxZoom Maximum zoom.
* @param {Array.<string>} templates Templates.
* @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL function.
* @param {string=} opt_attribution Attribution.
* @param {string=} opt_crossOrigin Cross origin.
* @return {ol.TileStore} Tile store.
*/
ol.tilestore.createXYZ =
function(maxZoom, templates, opt_attribution, opt_crossOrigin) {
ol.tilestore.XYZ =
function(maxZoom, tileUrlFunction, opt_attribution, opt_crossOrigin) {
var projection = ol.Projection.getFromCode('EPSG:3857');
var tileGrid = ol.tilegrid.createXYZ(maxZoom);
var tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(
var tileGrid = new ol.tilegrid.XYZ(maxZoom);
var tileUrlFunction2 = ol.TileUrlFunction.withTileCoordTransform(
function(tileCoord) {
var n = 1 << tileCoord.z;
var y = -tileCoord.y - 1;
@@ -75,10 +81,11 @@ ol.tilestore.createXYZ =
return new ol.TileCoord(tileCoord.z, x, y);
}
},
ol.TileUrlFunction.createFromTemplates(templates));
tileUrlFunction);
var extent = projection.getExtent();
return new ol.TileStore(projection, tileGrid, tileUrlFunction, extent,
opt_attribution, opt_crossOrigin);
goog.base(
this, projection, tileGrid, tileUrlFunction2, extent, opt_crossOrigin);
};
goog.inherits(ol.tilestore.XYZ, ol.TileStore);