poblados-colonizacion-colon.../docs/colonizacion-leaflet/js/leaflet.timedimension.layer.js
2017-06-18 04:33:09 +02:00

125 lines
No EOL
3.4 KiB
JavaScript

/*
* L.TimeDimension.Layer: an abstract Layer that can be managed/synchronized with a TimeDimension.
* The constructor recieves a layer (of any kind) and options.
* Any children class should implement `_onNewTimeLoading`, `isReady` and `_update` functions
* to react to time changes.
*/
L.TimeDimension.Layer = (L.Layer || L.Class).extend({
includes: L.Mixin.Events,
options: {
opacity: 1,
zIndex: 1
},
initialize: function(layer, options) {
L.setOptions(this, options || {});
this._map = null;
this._baseLayer = layer;
this._currentLayer = null;
this._timeDimension = this.options.timeDimension || null;
},
addTo: function(map) {
map.addLayer(this);
return this;
},
onAdd: function(map) {
this._map = map;
if (!this._timeDimension && map.timeDimension) {
this._timeDimension = map.timeDimension;
}
this._timeDimension.on("timeloading", this._onNewTimeLoading, this);
this._timeDimension.on("timeload", this._update, this);
this._timeDimension.registerSyncedLayer(this);
this._update();
},
onRemove: function(map) {
this._timeDimension.unregisterSyncedLayer(this);
this._timeDimension.off("timeloading", this._onNewTimeLoading, this);
this._timeDimension.off("timeload", this._update, this);
this.eachLayer(map.removeLayer, map);
this._map = null;
},
eachLayer: function(method, context) {
method.call(context, this._baseLayer);
return this;
},
setZIndex: function(zIndex) {
this.options.zIndex = zIndex;
if (this._baseLayer.setZIndex) {
this._baseLayer.setZIndex(zIndex);
}
if (this._currentLayer && this._currentLayer.setZIndex) {
this._currentLayer.setZIndex(zIndex);
}
return this;
},
setOpacity: function(opacity) {
this.options.opacity = opacity;
if (this._baseLayer.setOpacity) {
this._baseLayer.setOpacity(opacity);
}
if (this._currentLayer && this._currentLayer.setOpacity) {
this._currentLayer.setOpacity(opacity);
}
return this;
},
bringToBack: function() {
if (!this._currentLayer) {
return;
}
this._currentLayer.bringToBack();
return this;
},
bringToFront: function() {
if (!this._currentLayer) {
return;
}
this._currentLayer.bringToFront();
return this;
},
_onNewTimeLoading: function(ev) {
// to be implemented for each type of layer
this.fire('timeload', {
time: ev.time
});
return;
},
isReady: function(time) {
// to be implemented for each type of layer
return true;
},
_update: function() {
// to be implemented for each type of layer
return true;
},
getBaseLayer: function() {
return this._baseLayer;
},
getBounds: function() {
var bounds = new L.LatLngBounds();
if (this._currentLayer) {
bounds.extend(this._currentLayer.getBounds ? this._currentLayer.getBounds() : this._currentLayer.getLatLng());
}
return bounds;
}
});
L.timeDimension.layer = function(layer, options) {
return new L.TimeDimension.Layer(layer, options);
};