Use inheritance rather than creating an instance for OpenStreetMap, make attribution a function rather than a property
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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'
|
||||
],
|
||||
'© ' +
|
||||
'<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 '© <a href="http://www.openstreetmap.org">OpenStreetMap</a> ' +
|
||||
'contributors, ' +
|
||||
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA</a>';
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user