Add layergroup support
This commit is contained in:
@@ -32,8 +32,6 @@ goog.require('goog.style');
|
||||
goog.require('goog.vec.Mat4');
|
||||
goog.require('ol.BrowserFeature');
|
||||
goog.require('ol.Collection');
|
||||
goog.require('ol.CollectionEvent');
|
||||
goog.require('ol.CollectionEventType');
|
||||
goog.require('ol.FrameState');
|
||||
goog.require('ol.IView');
|
||||
goog.require('ol.MapBrowserEvent');
|
||||
@@ -56,6 +54,8 @@ goog.require('ol.control.defaults');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.interaction.defaults');
|
||||
goog.require('ol.layer.Layer');
|
||||
goog.require('ol.layer.LayerBase');
|
||||
goog.require('ol.layer.LayerGroup');
|
||||
goog.require('ol.proj');
|
||||
goog.require('ol.proj.addCommonProjections');
|
||||
goog.require('ol.renderer.Map');
|
||||
@@ -309,9 +309,12 @@ ol.Map = function(options) {
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Array.<?number>}
|
||||
* @type {ol.layer.LayerGroup}
|
||||
*/
|
||||
this.layersListenerKeys_ = null;
|
||||
this.layerGroup_ = new ol.layer.LayerGroup();
|
||||
|
||||
goog.events.listen(this.layerGroup_, ol.ObjectEventType.CHANGE,
|
||||
this.handleLayerGroupChanged_, false, this);
|
||||
|
||||
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.LAYERS),
|
||||
this.handleLayersChanged_, false, this);
|
||||
@@ -352,7 +355,7 @@ ol.Map.prototype.addControl = function(control) {
|
||||
|
||||
/**
|
||||
* Adds the given layer to the top of this map.
|
||||
* @param {ol.layer.Layer} layer Layer.
|
||||
* @param {ol.layer.LayerBase} layer Layer.
|
||||
*/
|
||||
ol.Map.prototype.addLayer = function(layer) {
|
||||
var layers = this.getLayers();
|
||||
@@ -615,46 +618,6 @@ ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.CollectionEvent} collectionEvent Collection event.
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.handleLayersAdd_ = function(collectionEvent) {
|
||||
this.render();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {goog.events.Event} event Event.
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.handleLayersChanged_ = function(event) {
|
||||
if (!goog.isNull(this.layersListenerKeys_)) {
|
||||
goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey);
|
||||
this.layersListenerKeys_ = null;
|
||||
}
|
||||
var layers = this.getLayers();
|
||||
if (goog.isDefAndNotNull(layers)) {
|
||||
this.layersListenerKeys_ = [
|
||||
goog.events.listen(layers, ol.CollectionEventType.ADD,
|
||||
this.handleLayersAdd_, false, this),
|
||||
goog.events.listen(layers, ol.CollectionEventType.REMOVE,
|
||||
this.handleLayersRemove_, false, this)
|
||||
];
|
||||
}
|
||||
this.render();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.CollectionEvent} collectionEvent Collection event.
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.handleLayersRemove_ = function(collectionEvent) {
|
||||
this.render();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.MapBrowserEvent} mapBrowserEvent The event to handle.
|
||||
*/
|
||||
@@ -788,6 +751,23 @@ ol.Map.prototype.handleViewChanged_ = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {goog.events.Event} event Event.
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.handleLayersChanged_ = function(event) {
|
||||
this.layerGroup_.setLayers(this.getLayers());
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
ol.Map.prototype.handleLayerGroupChanged_ = function() {
|
||||
this.render();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {boolean} Is defined.
|
||||
*/
|
||||
@@ -845,14 +825,14 @@ ol.Map.prototype.removeControl = function(control) {
|
||||
|
||||
/**
|
||||
* Removes the given layer from the map.
|
||||
* @param {ol.layer.Layer} layer Layer.
|
||||
* @return {ol.layer.Layer|undefined} The removed layer or undefined if the
|
||||
* @param {ol.layer.LayerBase} layer Layer.
|
||||
* @return {ol.layer.LayerBase|undefined} The removed layer or undefined if the
|
||||
* layer was not found.
|
||||
*/
|
||||
ol.Map.prototype.removeLayer = function(layer) {
|
||||
var layers = this.getLayers();
|
||||
goog.asserts.assert(goog.isDef(layers));
|
||||
return /** @type {ol.layer.Layer|undefined} */ (layers.remove(layer));
|
||||
return /** @type {ol.layer.LayerBase|undefined} */ (layers.remove(layer));
|
||||
};
|
||||
|
||||
|
||||
@@ -869,21 +849,20 @@ ol.Map.prototype.renderFrame_ = function(time) {
|
||||
}
|
||||
|
||||
var size = this.getSize();
|
||||
var layers = this.getLayers();
|
||||
var layersArray = goog.isDef(layers) ?
|
||||
/** @type {Array.<ol.layer.Layer>} */ (layers.getArray()) : undefined;
|
||||
var view = this.getView();
|
||||
var view2D = goog.isDef(view) ? this.getView().getView2D() : undefined;
|
||||
/** @type {?ol.FrameState} */
|
||||
var frameState = null;
|
||||
if (goog.isDef(layersArray) && goog.isDef(size) && goog.isDef(view2D) &&
|
||||
view2D.isDef()) {
|
||||
if (goog.isDef(size) && goog.isDef(view2D) && view2D.isDef()) {
|
||||
var viewHints = view.getHints();
|
||||
var obj = this.layerGroup_.getLayerStatesArray();
|
||||
var layersArray = obj.layers;
|
||||
var layerStatesArray = obj.layerStates;
|
||||
var layerStates = {};
|
||||
var layer;
|
||||
for (i = 0, ii = layersArray.length; i < ii; ++i) {
|
||||
layer = layersArray[i];
|
||||
layerStates[goog.getUid(layer)] = layer.getLayerState();
|
||||
layerStates[goog.getUid(layer)] = layerStatesArray[i];
|
||||
}
|
||||
view2DState = view2D.getView2DState();
|
||||
frameState = {
|
||||
|
||||
Reference in New Issue
Block a user