let ol = require('openlayers');
let customSymbols = require('./custom/index');
/**
* Возвращает символ заливки
* @param {object} params - конфигурация символа
* @param params.color {string} - RGBA или HEX представление цвета
* @return {*}
*/
function createFillStyle(params) {
return params ? new ol.style.Fill(params) : undefined;
}
/**
* Возвращает символ линии
* @param {object} params - конфигурация символа
* @param params.width {number} - толщина
* @param params.color {string} - цвет
* @param params.lineCap {string} - тип излома
* @param params.lineJoin {string} - тип соединения
* @param params.lineDash {array} - шриховка
* @param params.lineDashOffset {number} - отступ штриховки
* @return {*}
*/
function createStrokeStyle(params) {
return params ? new ol.style.Stroke(params) : undefined;
}
/**
* Возвращает символ фигуры
* @param params
* @return {*}
*/
function createImageStyle(params) {
return params ? new ol.style.Circle({
fill: createFillStyle(params.fill),
stroke: createStrokeStyle(params.stroke),
radius: params.radius || 5
})
:
undefined;
}
/**
* Возвращает символ иконки
* @param params
* @return {*}
*/
function createIconStyle(params) {
return params ? new ol.style.Icon(params) : undefined;
}
/**
* Возвращает символ текста
* @param params
* @param feature
* @return {undefined}
*/
function createTextStyle(params, feature) {
let flag = params && params.label && feature;
let style = undefined;
if (flag) {
try {
style = new ol.style.Text({
text: feature.get(params.label.field) || params.label.text || "",
offsetX: params.label.offsetX || 0,
font: params.label.font || "10px sans-serif",
offsetY: params.label.offsetY || 0,
scale: params.label.scale || 1,
rotateWithView: params.label.rotateWithView || true,
rotation: feature.get(params.label.rotationField) || 0,
textAlign: params.label.textAlign || 'right',
textBaseline: params.label.textBaseline || 'alphabetic',
fill: createFillStyle(params.label.fill),
stroke: createStrokeStyle(params.label.style)
});
}
catch (e) {
}
}
return style;
}
function createDiagramStyle(params, feature) {
let flag = params && feature;
let style = undefined;
if (flag) {
try {
style = new ol.style.Style({
image: new customSymbols.diagram(params, feature)
});
}
catch (e) {
}
}
return style;
}
/**
* Фабрика символов, позволяющая получить объект части стиля в зависимости от выбранного типа и входных параметров
* @return {{fill: createFillStyle, stroke: createStrokeStyle, image: createImageStyle, text: createTextStyle}}
*/
function SymbolFabric() {
const fabricDict = {
"fill": createFillStyle,
"stroke": createStrokeStyle,
"image": createImageStyle,
"text": createTextStyle,
"icon": createIconStyle,
"diagram": createDiagramStyle
};
return fabricDict;
}
module.exports = SymbolFabric;