Merge remote-tracking branch 'openlayers/master' into vector-api

This commit is contained in:
Tom Payne
2014-01-13 16:07:39 +01:00
9 changed files with 102 additions and 39 deletions

View File

@@ -12,6 +12,7 @@ var map = new ol.Map({
}) })
], ],
renderers: ol.RendererHints.createFromQueryData(), renderers: ol.RendererHints.createFromQueryData(),
ol3Logo: false,
target: 'map', target: 'map',
view: new ol.View2D({ view: new ol.View2D({
center: [0, 0], center: [0, 0],

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
resources/logo-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -31,6 +31,7 @@
* @property {ol.Collection|Array.<ol.interaction.Interaction>|undefined} interactions * @property {ol.Collection|Array.<ol.interaction.Interaction>|undefined} interactions
* Interactions that are initially added to the map. * Interactions that are initially added to the map.
* @property {Array.<ol.layer.Base>|ol.Collection|undefined} layers Layers. * @property {Array.<ol.layer.Base>|ol.Collection|undefined} layers Layers.
* @property {boolean|undefined} ol3Logo Show ol3 logo. Default is `true`.
* @property {ol.Collection|Array.<ol.Overlay>|undefined} overlays * @property {ol.Collection|Array.<ol.Overlay>|undefined} overlays
* Overlays initially added to the map. * Overlays initially added to the map.
* @property {ol.RendererHint|undefined} renderer Renderer. * @property {ol.RendererHint|undefined} renderer Renderer.

View File

@@ -90,15 +90,25 @@ ol.control.Logo.prototype.updateElement_ = function(frameState) {
} }
} }
var image, logoElement; var image, logoElement, logoKey;
for (logo in logos) { for (logoKey in logos) {
if (!(logo in logoElements)) { if (!(logoKey in logoElements)) {
image = new Image(); image = new Image();
image.src = logo; image.src = logoKey;
logoElement = goog.dom.createElement(goog.dom.TagName.LI); var logoValue = logos[logoKey];
logoElement.appendChild(image); var child;
if (logoValue === '') {
child = image;
} else {
child = goog.dom.createDom(goog.dom.TagName.A, {
'href': logoValue,
'target': '_blank'
});
child.appendChild(image);
}
logoElement = goog.dom.createDom(goog.dom.TagName.LI, undefined, child);
goog.dom.appendChild(this.ulElement_, logoElement); goog.dom.appendChild(this.ulElement_, logoElement);
logoElements[logo] = logoElement; logoElements[logoKey] = logoElement;
} }
} }

View File

@@ -26,7 +26,7 @@ goog.require('ol.layer.LayerState');
* index: number, * index: number,
* layersArray: Array.<ol.layer.Layer>, * layersArray: Array.<ol.layer.Layer>,
* layerStates: Object.<number, ol.layer.LayerState>, * layerStates: Object.<number, ol.layer.LayerState>,
* logos: Object.<string, boolean>, * logos: Object.<string, string>,
* pixelToCoordinateMatrix: goog.vec.Mat4.Number, * pixelToCoordinateMatrix: goog.vec.Mat4.Number,
* postRenderFunctions: Array.<ol.PostRenderFunction>, * postRenderFunctions: Array.<ol.PostRenderFunction>,
* size: ol.Size, * size: ol.Size,

View File

@@ -65,6 +65,41 @@ goog.require('ol.structs.PriorityQueue');
goog.require('ol.vec.Mat4'); goog.require('ol.vec.Mat4');
/**
* @const
* @type {string}
*/
ol.OL3_URL = 'http://ol3js.org/';
/**
* @const
* @type {string}
*/
ol.OL3_LOGO_URL = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBI' +
'WXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAA' +
'AhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszW' +
'WMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvY' +
'asvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvX' +
'H1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1Vk' +
'bMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW' +
'2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLP' +
'VcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqT' +
'acrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaar' +
'ldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+Hi' +
'zeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDn' +
'BAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSF' +
'hYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJ' +
'REFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxC' +
'Brb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe' +
'0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8' +
'a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7a' +
'hgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCn' +
'B3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDg' +
'q82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC';
/** /**
* @enum {string} * @enum {string}
* @todo stability experimental * @todo stability experimental
@@ -143,6 +178,12 @@ ol.Map = function(options) {
this.devicePixelRatio_ = goog.isDef(options.devicePixelRatio) ? this.devicePixelRatio_ = goog.isDef(options.devicePixelRatio) ?
options.devicePixelRatio : ol.BrowserFeature.DEVICE_PIXEL_RATIO; options.devicePixelRatio : ol.BrowserFeature.DEVICE_PIXEL_RATIO;
/**
* @private
* @type {boolean}
*/
this.ol3Logo_ = optionsInternal.ol3Logo;
/** /**
* @private * @private
* @type {goog.async.AnimationDelay} * @type {goog.async.AnimationDelay}
@@ -1087,6 +1128,9 @@ ol.Map.prototype.renderFrame_ = function(time) {
viewHints: viewHints, viewHints: viewHints,
wantedTiles: {} wantedTiles: {}
}; };
if (this.ol3Logo_) {
frameState.logos[ol.OL3_LOGO_URL] = ol.OL3_URL;
}
} }
var preRenderFunctions = this.preRenderFunctions_; var preRenderFunctions = this.preRenderFunctions_;
@@ -1242,6 +1286,7 @@ ol.Map.prototype.withFrozenRendering = function(f, opt_obj) {
/** /**
* @typedef {{controls: ol.Collection, * @typedef {{controls: ol.Collection,
* interactions: ol.Collection, * interactions: ol.Collection,
* ol3Logo: boolean,
* overlays: ol.Collection, * overlays: ol.Collection,
* rendererConstructor: * rendererConstructor:
* function(new: ol.renderer.Map, Element, ol.Map), * function(new: ol.renderer.Map, Element, ol.Map),
@@ -1261,6 +1306,8 @@ ol.Map.createOptionsInternal = function(options) {
*/ */
var values = {}; var values = {};
var ol3Logo = goog.isDef(options.ol3Logo) ? options.ol3Logo : true;
var layerGroup = (options.layers instanceof ol.layer.Group) ? var layerGroup = (options.layers instanceof ol.layer.Group) ?
options.layers : new ol.layer.Group({layers: options.layers}); options.layers : new ol.layer.Group({layers: options.layers});
values[ol.MapProperty.LAYERGROUP] = layerGroup; values[ol.MapProperty.LAYERGROUP] = layerGroup;
@@ -1348,6 +1395,7 @@ ol.Map.createOptionsInternal = function(options) {
return { return {
controls: controls, controls: controls,
interactions: interactions, interactions: interactions,
ol3Logo: ol3Logo,
overlays: overlays, overlays: overlays,
rendererConstructor: rendererConstructor, rendererConstructor: rendererConstructor,
values: values values: values

View File

@@ -162,7 +162,7 @@ ol.renderer.Layer.prototype.updateAttributions =
ol.renderer.Layer.prototype.updateLogos = function(frameState, source) { ol.renderer.Layer.prototype.updateLogos = function(frameState, source) {
var logo = source.getLogo(); var logo = source.getLogo();
if (goog.isDef(logo)) { if (goog.isDef(logo)) {
frameState.logos[logo] = true; frameState.logos[logo] = '';
} }
}; };

View File

@@ -115,37 +115,40 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse =
}); });
}))); })));
var transform = ol.proj.getTransformFromProjections( if (resource.imageryProviders) {
ol.proj.get('EPSG:4326'), this.getProjection()); var transform = ol.proj.getTransformFromProjections(
var attributions = goog.array.map( ol.proj.get('EPSG:4326'), this.getProjection());
resource.imageryProviders,
function(imageryProvider) { var attributions = goog.array.map(
var html = imageryProvider.attribution; resource.imageryProviders,
/** @type {Object.<string, Array.<ol.TileRange>>} */ function(imageryProvider) {
var tileRanges = {}; var html = imageryProvider.attribution;
goog.array.forEach( /** @type {Object.<string, Array.<ol.TileRange>>} */
imageryProvider.coverageAreas, var tileRanges = {};
function(coverageArea) { goog.array.forEach(
var minZ = coverageArea.zoomMin; imageryProvider.coverageAreas,
var maxZ = coverageArea.zoomMax; function(coverageArea) {
var bbox = coverageArea.bbox; var minZ = coverageArea.zoomMin;
var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]]; var maxZ = coverageArea.zoomMax;
var extent = ol.extent.transform(epsg4326Extent, transform); var bbox = coverageArea.bbox;
var tileRange, z, zKey; var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]];
for (z = minZ; z <= maxZ; ++z) { var extent = ol.extent.transform(epsg4326Extent, transform);
zKey = z.toString(); var tileRange, z, zKey;
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); for (z = minZ; z <= maxZ; ++z) {
if (zKey in tileRanges) { zKey = z.toString();
tileRanges[zKey].push(tileRange); tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
} else { if (zKey in tileRanges) {
tileRanges[zKey] = [tileRange]; tileRanges[zKey].push(tileRange);
} else {
tileRanges[zKey] = [tileRange];
}
} }
} });
}); return new ol.Attribution({html: html, tileRanges: tileRanges});
return new ol.Attribution({html: html, tileRanges: tileRanges}); });
}); attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION);
attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION); this.setAttributions(attributions);
this.setAttributions(attributions); }
this.setLogo(brandLogoUri); this.setLogo(brandLogoUri);