mapserver/server/static/js/LayerManager.js

78 lines
1.8 KiB
JavaScript
Raw Normal View History

2019-04-04 10:19:29 +02:00
/* exported LayerManager */
2019-04-21 21:51:43 +02:00
/* globals RealtimeTileLayer: true */
2019-01-29 21:07:29 +01:00
2019-04-22 17:17:41 +02:00
function LayerManager(wsChannel, layers, map, currentLayerId){
2019-02-01 13:28:26 +01:00
this.listeners = [];
this.currentLayer = layers[0];
2019-02-15 17:33:49 +01:00
this.layers = layers;
2019-04-21 21:51:43 +02:00
this.map = map;
this.layerObjects = {};
2019-02-01 13:20:50 +01:00
2019-03-13 21:28:14 +01:00
var self = this;
2019-04-21 21:51:43 +02:00
//All layers
layers.forEach(function(layer){
var tileLayer = new RealtimeTileLayer(wsChannel, layer.id, map);
self.layerObjects[layer.name] = tileLayer;
2019-04-22 17:17:41 +02:00
if (layer.id == currentLayerId){
tileLayer.addTo(map);
self.currentLayer = layer;
}
2019-04-21 21:51:43 +02:00
});
2019-02-01 13:20:50 +01:00
map.on('baselayerchange', function (e) {
2019-03-13 21:28:14 +01:00
self.setLayerId(e.layer.layerId);
2019-02-01 13:20:50 +01:00
});
2019-02-01 13:28:26 +01:00
2019-02-01 12:58:26 +01:00
}
2019-01-29 21:07:29 +01:00
2019-04-21 21:51:43 +02:00
LayerManager.prototype.switchLayer = function(layerId){
var self = this;
Object.keys(this.layerObjects).forEach(function(key){
var layerObj = self.layerObjects[key];
if (self.map.hasLayer(layerObj)){
self.map.removeLayer(layerObj);
}
});
Object.keys(this.layerObjects).forEach(function(key){
var layerObj = self.layerObjects[key];
if (layerObj.layerId == layerId){
self.map.addLayer(layerObj);
}
});
};
2019-02-15 15:51:11 +01:00
LayerManager.prototype.setLayerId = function(layerId){
var self = this;
this.layers.forEach(function(layer){
if (layer.id == layerId){
self.currentLayer = layer;
2019-03-13 21:28:14 +01:00
self.listeners.forEach(function(listener){
listener(layer);
});
return;
2019-02-15 15:51:11 +01:00
}
});
2019-04-04 10:19:29 +02:00
};
2019-02-15 15:51:11 +01:00
2019-04-14 21:35:59 +02:00
LayerManager.prototype.getLayerByY = function(y){
return this.layers.find(function(layer){
return (y >= (layer.from*16) && y <= (layer.to*16));
});
};
2019-02-15 15:51:11 +01:00
2019-02-01 12:58:26 +01:00
LayerManager.prototype.addListener = function(listener){
2019-02-01 13:28:26 +01:00
this.listeners.push(listener);
};
LayerManager.prototype.removeListener = function(listener){
this.listeners = this.listeners.filter(function(el){
return el != listener;
});
2019-02-01 12:58:26 +01:00
};
2019-01-29 21:07:29 +01:00
2019-02-01 12:58:26 +01:00
LayerManager.prototype.getCurrentLayer = function(){
2019-02-01 13:28:26 +01:00
return this.currentLayer;
2019-02-01 12:46:38 +01:00
};