let ol = require('openlayers');
let AbstractStyle = require('./abstract');
let UniformStyle = require('./uniform');
let SymbolFabric = require('./../symbols/symbolFabric');
let LegendItem = require('./legendItem');
/**
* Класс IntervalStyle создает стиль, основанный на диапазонных значениях
* @extends AbstractStyle
*/
class DiagramStyle extends AbstractStyle {
/**
* Создает экземпляр стиля типа IntervalStyle
* @param {object} params - опции создания стиля
* @param params.geometry {string} - тип геометрии
* @param params.field {string} - поле классификации
*/
constructor(params) {
super(params);
this.type = "diagram";
this.geometryType = params.geometryType;
this.params = params;
this.field = params.field;
this.styles = [];// this.create(params);
this.styleDefault = this.createDefault(params);
this.memoize = {};
}
/**
* Возвращает функцию стиля
* @return {styleFunction} - функция стиля, определяющая символ объекта
*/
getStyle() {
let field = this.field;
let params = this.params;
let styleDefault = this.styleDefault;
const styleFunction = function (feature, resolution) {
let style = SymbolFabric().diagram(params, feature);
return style;
};
return styleFunction;
}
/**
* Присвоение стиля
* @param style
*/
setStyle(style) {
this.styles = style;
this.memoize = {};
}
/**
* Вспомогательный метод, возвращающий массив стилей
* @return {Array}
*/
styleArray() {
let self = this;
let params = self.params;
let geometryType = self.geometryType || super.testGeometry(params);
let styles = [];
/*let field = self.field;
let index = 0;
let defaultLegendItem = new LegendItem({
index: index,
field: field,
value: undefined,
style: params.default,
geometryType: geometryType
});
styles.push(defaultLegendItem);
for (let value in params.values) {
let properties = {};
properties[field] = IntervalUtils.parseInterval(value).min;
let label = field + " в диапазоне " + value;
let valueLegendItem = new LegendItem({
index: ++index,
properties: properties,
label: label,
style: params.values[value],
geometryType: geometryType
});
styles.push(valueLegendItem);
}*/
return styles;
}
/**
* Возврат легенды слоя
* @return {Array}
*/
legend() {
return this.styleArray();
}
/**
* Создание (переинициализация) стиля
* @param params
* @return {{}}
*/
create(params) {
let style = SymbolFabric().diagram(params);
return style;
}
/**
* Значение стиля по умолчанию
* @param params
* @return {UniformStyle}
*/
createDefault(params) {
let styleParameters = params.default;
return new UniformStyle(styleParameters);
}
}
module.exports = DiagramStyle;