Source: layers/tiled.js

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;