let AbstractLayer = require('./abstract');
let ol = require('openlayers');
/**
* Класс TiledLayer - слой, рендеринг которого производится на серверной части
* @extends AbstractLayer
*/
class TiledLayer extends AbstractLayer {
/**
* Создание экземпляра слоя типа TiledLayer
* @param params
* @param params.url - адрес геосервера
* @param params.className - имя слоя
* @return {ol.layer.Tile}
*/
constructor(params) {
super(params);
this.layer = create(params);
this.initStore(params);
}
/**
* @param params
* @param params.className - имя класса
* @param params.mappings - объект, содержащий трансляцию полей (подстановка)
*/
initStore(params) {
this.store = {};
this.store.className = params.className;
this.store.id = params.id;
this.store.layerType = "opengis.layers.tiled";
this.store.mappings = params.mappings;
}
identify(params) {
let geometry = params.geometry || params.coordinate;
let source = this.layer.getSource();
let viewResolution = this.getMap().getView().getResolution();
return source.getGetFeatureInfoUrl(
geometry,
viewResolution, 'EPSG:3857',
{
layers: this.store.className
});
}
search(params){
return [];
}
}
function create(params) {
let scheme = params.className.split(":")[0];
let sourceWMS = new ol.source.TileWMS({
url: params.url + "/" + scheme + "/wms",
params: {
layers: params.className,
tiled: true
},
serverType: 'geoserver',
crossOrigin: true
});
return new ol.layer.Tile({
source: sourceWMS,
visible: params.visible || true,
opacity: params.opacity || 1,
minResolution: params.minResolution || 0,
maxResolution: params.minResolution || 0
});
}
module.exports = TiledLayer;