mirror of
https://github.com/medialab-prado/poblados-colonizacion-colonias-penitenciarias.git
synced 2024-12-27 04:51:22 +01:00
125 lines
3.4 KiB
JavaScript
125 lines
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);
|
||
|
};
|