/**
* Класс, используемый для заливки
*/
class Fill {
/**
* @param {object} params - опции стиля
* @param params.color {string | array} - цвет заливки
*/
constructor(params) {
this.color = params.color;
}
}
/**
* Класс, используемый для описания стиля линии
*/
class Stroke {
/**
* @param {object} params - опции стиля
* @param params.color {string | array} - цвет линии
* @param params.width {number | undefined} - толщина
* @param params.lineCap {string} - тип завершения линии - butt, round, square
* @param params.lineJoin {string} - тип соединения линии - bevel, round, miter
* @param params.lineDash {array} - порядок штриховки
* @param params.lineDashOffset {number} - отступ штриховки
* @param params.miterLimit {number} - величина максимального отступа поворота
*/
constructor(params) {
this.color = params.color;
this.width = params.width;
this.lineCap = params.lineCap;
this.lineJoin = params.lineJoin;
this.lineDash = params.lineDash;
this.miterLimit = params.miterLimit;
}
}
/**
* Класс, используемый для описания стиля значка
*/
class Icon {
/**
* @param {object} params - опции стиля
* @param params.color {string | array} - цвет значка
* @param params.anchor {array} - якорь, значение по умолчанию - [0.5, 0.5]
* @param params.anchorOrigin {string} - привязка якоря: bottom-left, bottom-right, top-leftили top-right. По умолчанию top-left.
* @param params.anchorXUnits {string} - Единицы, в которых указано значение привязки x. Значение 'fraction' указывает, что значение x является частью значка. Значение 'pixels' указывает значение x в пикселях. По умолчанию 'fraction'.
* @param params.anchorYUnits {string} - Единицы, в которых указано значение привязки y. Значение 'fraction' указывает, что значение x является частью значка. Значение 'pixels' указывает значение x в пикселях. По умолчанию 'fraction'.
* @param params.crossOrigin {string} - Атрибут для загруженных изображений. Обратите внимание, что вы должны указать crossOriginзначение, если используете средство визуализации WebGL, или хотите получить доступ к данным пикселя с помощью средства рендеринга Canvas
* @param params.img {HTMLCanvasElement} - Объект изображения для значка. Если srcопция не указана, то предоставленное изображение уже должно быть загружено. И в этом случае требуется указать размер изображения с imgSizeопцией
* @param params.offset {array} - Смещение, которое вместе с размером и началом смещения определяет суб-прямоугольник для использования с исходным изображением значка. Значение по умолчанию [0, 0].
* @param params.offsetOrigin {string} - Происхождение смещения: bottom-left, bottom-right, top-leftили top-right. По умолчанию top-left.
* @param params.opacity {number} - Прозрачность (0 - 1).
* @param params.scale {number} - Масштаб (0 + Inf)
* @param params.snapToPixel {boolean} - Привязка к пиксельным размерам
* @param params.rotateWithView {boolean} - Вращать вместе с поворотом вида (карты)
* @param params.rotation {number} - Вращение в радианах (положительное вращение по часовой стрелке). По умолчанию 0.
* @param params.size {array} - Размер значка в пикселях. Может использоваться вместе с offsetцелью определения суб-прямоугольника для использования с изображением значка источника (спрайт).
* @param params.imgSize {array} - Размер изображения в пикселях. Требуется только в том случае, если img установлено, а src - нет, и для изображений SVG в Internet Explorer 11. Приведенный imgSize должен соответствовать фактическому размеру изображения.
* @param params.src {string} - URI исходного изображения.
*/
constructor(params) {
this.anchor = params.anchor;
this.anchorOrigin = params.anchorOrigin;
this.anchorXUnits = params.anchorXUnits;
this.anchorYUnits = params.anchorYUnits;
this.color = params.color;
this.crossOrigin = params.crossOrigin;
this.img = params.img;
this.offset = params.offset;
this.offsetOrigin = params.offsetOrigin;
this.opacity = params.opacity;
this.scale = params.scale;
this.snapToPixel = params.snapToPixel;
this.rotateWithView = params.rotateWithView;
this.rotation = params.rotation;
this.size = params.size;
this.imgSize = params.imgSize;
this.src = params.src;
}
}
/**
* Класс, используемый для обозначения подписывания
*/
class Label {
/**
* @param {object} params - опции стиля
* @param params.field {string } - поле для подписывания
* @param params.exceedLength {boolean } - Разрешение тексту превышать ширину многоугольника в позиции метки или длину пути, за которым он следует. По умолчанию false
* @param params.font {string } - поле для подписывания
* @param params.maxAngle {number} - максимальный угол между соседними символами
* @param params.offsetX {number} - Горизонтальное смещение текста в пикселях. Положительный сдвиг текста будет правильным. По умолчанию 0
* @param params.offsetY {number} - Вертикальное смещение текста в пикселях. Положительный сдвинет текст вниз. По умолчанию 0.
* @param params.placement {string} - Размещение текста ('point', 'line')
* @param params.scale {number} - Масштаб (0 + Inf)
* @param params.rotateWithView {boolean} - Вращать вместе с поворотом вида (карты)
* @param params.rotation {number} - Вращение в радианах (положительное вращение по часовой стрелке). По умолчанию 0.
* @param params.textAlign {string} - Размер значка в пикселях. Может использоваться вместе с offsetцелью определения суб-прямоугольника для использования с изображением значка источника (спрайт).
* @param params.textBaseline {string} - Выравнивание текста. Возможные значения
* @param params.fill {Fill} - Стиль заливки текста.
* @param params.stroke {Stroke} - Стиль линии текста
* @param params.text {string} - Статическая подпись, используется, если не задано поле подписывания (field) или свойство от этого поля равно null или undefined
*/
constructor(params) {
this.field = params.field;
this.exceedLength = params.exceedLength;
this.font = params.font;
this.maxAngle = params.maxAngle;
this.offsetX = params.offsetX;
this.offsetY = params.offsetY;
this.placement = params.placement;
this.scale = params.scale;
this.rotateWithView = params.rotateWithView;
this.rotation = params.rotation;
this.textAlign = params.textAlign;
this.textBaseline = params.textBaseline;
this.fill = params.fill;
this.stroke = params.stroke;
}
}
/**
* Обобщенный класс униформенной конфигурации
*/
class UniformStyleConfig {
}
/**
* Класс - конфигурация униформенного стиля для точечной геометрии
*/
class PointUniformConfig extends UniformStyleConfig {
/**
* @param params {object} - параметры стиля
* @param params.label {Label} - описание подписывания
* @param params.icon {Icon} - описание значка
*/
constructor(params) {
super();
this.label = params.label;
this.icon = params.icon;
}
}
/**
* Класс - конфигурация униформенного стиля для линейной геометрии
*/
class LineStringUniformConfig extends UniformStyleConfig {
/**
* @param params {object} - параметры стиля
* @param params.label {Label} - описание подписывания
* @param params.stroke {Stroke} - описание значка
*/
constructor(params) {
super();
this.stroke = params.stroke;
this.label = params.label;
}
}
/**
* Класс - конфигурация униформенного стиля для полигональной геометрии
*/
class PolygonUniformConfig extends UniformStyleConfig {
/**
* @param params {object} - параметры стиля
* @param params.label {Label} - описание подписывания
* @param params.stroke {Stroke} - описание линии
* @param params.fill {Fill} - описание заливки
*/
constructor(params) {
super();
this.fill = params.fill;
this.stroke = params.stroke;
this.label = params.label;
}
}
/**
* Класс - конфигурация для уникальных значений стиля
*/
class UniqueStyleConfig {
/**
* @param params {object} - опции стиля
* @param params.geometryType {string} - тип геометрии
* @param params.field {string} - поле классификации
* @param params.default {UniformStyleConfig} - конфигурация униформленного стиля для дефолтовых значений
* @param params.values {object} - множество пар ключ-значений, где ключ - значение классифицируемого объекта, значение - объект типа UniformStyleConfig
*/
constructor(params) {
this.geometryType = params.geometryType;
this.field = params.field;
this.default = params.default;
this.values = params.values;
}
}
/**
* Класс - конфигурация для уникальных интервальных значений
*/
class IntervalStyleConfig {
/**
* @param params {object} - опции стиля
* @param params.geometryType {string} - тип геометрии
* @param params.field {string} - поле классификации
* @param params.default {UniformStyleConfig} - конфигурация униформленного стиля для дефолтовых значений
* @param params.values {object} - множество пар ключ-значений, где ключ - интервал значений классифицируемого объекта, значение - объект типа UniformStyleConfig
* п.с.: интервал описывается в виде выражения (X~Y) или [X~Y) или [X~Y] или (X~Y],
* где X, Y - крайние значения диапазона, [ и ] - включение границ, ( и ) - исключение границ, ~ разделитель значений
*/
constructor(params) {
this.type = params.type;
this.geometryType = params.geometryType;
this.field = params.field;
this.default = params.default;
this.values = params.values;
}
}
module.exports = {
Fill,
Stroke,
Icon,
Label,
UniformStyleConfig,
PointUniformConfig,
LineStringUniformConfig,
PolygonUniformConfig,
UniqueStyleConfig,
IntervalStyleConfig
}