cesium-examples/map/2d/code/ol-plot.js

5332 lines
159 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* author: FDD <smileFDD@gmail.com>
* ol-plot v2.1.3
* build-time: 2018-3-27 21:54
* LICENSE: MIT
* (c) 2016-2018 https://sakitam-fdd.github.io/ol-plot
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('openlayers')) :
typeof define === 'function' && define.amd ? define(['openlayers'], factory) :
(global.olPlot = factory(global.ol));
}(this, (function (ol) { 'use strict';
ol = ol && ol.hasOwnProperty('default') ? ol['default'] : ol;
const Observable = function () {
this.Events = {};
this.__cnt = 0;
};
Observable.hasOwnKey = Function.call.bind(Object.hasOwnProperty);
Observable.slice = Function.call.bind(Array.prototype.slice);
/**
* 事件分发
* @param eventName
* @param callback
* @param context
* @returns {(*|*)[]}
*/
Observable.prototype.on = function (eventName, callback, context) {
return (this.bindEvent(eventName, callback, 0, context))
};
/**
* 取消监听
* @param event
* @returns {boolean}
*/
Observable.prototype.un = function (event) {
var eventName = '';
var key = '';
var r = false;
var type = typeof event;
var that = this;
if (type === 'string') {
if (Observable.hasOwnKey(this.Events, event)) {
delete this.Events[event];
return true
}
return false
} else if (type === 'object') {
eventName = event[0];
key = event[1];
if (Observable.hasOwnKey(this.Events, eventName) && Observable.hasOwnKey(this.Events[eventName], key)) {
delete this.Events[eventName][key];
return true
}
return false
} else if (type === 'function') {
that.eachEvent(that.Events, function (keyA, itemA) {
that.eachEvent(itemA, function (keyB, itemB) {
if (itemB[0] === event) {
delete that.Events[keyA][keyB];
r = true;
}
});
});
return r
}
return true
};
/**
* 事件监听(只触发一次)
* @param eventName
* @param callback
* @param context
* @returns {(*|*)[]}
*/
Observable.prototype.once = function (eventName, callback, context) {
return (this.bindEvent(eventName, callback, 1, context))
};
/**
* 响应事件
* @param eventName
* @param args
*/
Observable.prototype.action = function (eventName, args) {
if (Observable.hasOwnKey(this.Events, eventName)) {
this.eachEvent(this.Events[eventName], function (key, item) {
item[0].apply(item[2], args);
if (item[1]) {
delete this.Events[eventName][key];
}
});
}
};
/**
* 实时触发响应
* @param eventName
*/
Observable.prototype.dispatch = function (eventName) {
var that = this;
var args = Observable.slice(arguments, 1);
setTimeout(function () {
that.action(eventName, args);
});
};
/**
* 延后触发响应
* @param eventName
*/
Observable.prototype.dispatchSync = function (eventName) {
this.action(eventName, Observable.slice(arguments, 1));
};
/**
* 清空发布中心
*/
Observable.prototype.clear = function () {
this.Events = {};
};
/**
* 绑定事件
* @param eventName
* @param callback
* @param isOne
* @param context
* @returns {[*,*]}
*/
Observable.prototype.bindEvent = function (eventName, callback, isOne, context) {
if (typeof eventName !== 'string' || typeof callback !== 'function') {
throw new Error('传入的事件名称和回调函数有误!')
}
if (!Observable.hasOwnKey(this.Events, eventName)) {
this.Events[eventName] = {};
}
this.Events[eventName][++this.__cnt] = [callback, isOne, context];
return [eventName, this.__cnt]
};
/**
* 循环触发事件
* @param obj
* @param callback
*/
Observable.prototype.eachEvent = function (obj, callback) {
for (var key in obj) {
if (Observable.hasOwnKey(obj, key)) {
callback(key, obj[key]);
}
}
};
var FITTING_COUNT = 100;
var HALF_PI = Math.PI / 2;
var ZERO_TOLERANCE = 0.0001;
var TWO_PI = Math.PI * 2;
var BASE_LAYERNAME = 'ol-plot-vector-layer';
var BASE_HELP_CONTROL_POINT_ID = 'plot-helper-control-point-div';
var BASE_HELP_HIDDEN = 'plot-helper-hidden-div';
var DEF_TEXT_STYEL = {
borderRadius: '2px',
fontSize: '12px',
outline: 0,
overflow: 'hidden',
boxSizing: 'border-box',
border: '1px solid #eeeeee',
fontFamily: 'Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans CJK SC,WenQuanYi Micro Hei,Arial,sans-serif',
color: '#010500',
fontWeight: 400,
padding: '3px',
fontStretch: 'normal',
lineHeight: 'normal',
textAlign: 'left',
marginLeft: 'auto',
marginRight: 'auto',
width: 'auto',
height: 'auto',
background: 'rgb(255, 255, 255)',
fontStyle: '',
fontVariant: ''
};
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var inherits = function (subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
};
var possibleConstructorReturn = function (self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return call && (typeof call === "object" || typeof call === "function") ? call : self;
};
var MathDistance = function MathDistance(pnt1, pnt2) {
return Math.sqrt(Math.pow(pnt1[0] - pnt2[0], 2) + Math.pow(pnt1[1] - pnt2[1], 2));
};
var wholeDistance = function wholeDistance(points) {
var distance = 0;
if (points && Array.isArray(points) && points.length > 0) {
points.forEach(function (item, index) {
if (index < points.length - 1) {
distance += MathDistance(item, points[index + 1]);
}
});
}
return distance;
};
var getBaseLength = function getBaseLength(points) {
return Math.pow(wholeDistance(points), 0.99);
};
var Mid = function Mid(point1, point2) {
return [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2];
};
var getCircleCenterOfThreePoints = function getCircleCenterOfThreePoints(point1, point2, point3) {
var pntA = [(point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2];
var pntB = [pntA[0] - point1[1] + point2[1], pntA[1] + point1[0] - point2[0]];
var pntC = [(point1[0] + point3[0]) / 2, (point1[1] + point3[1]) / 2];
var pntD = [pntC[0] - point1[1] + point3[1], pntC[1] + point1[0] - point3[0]];
return getIntersectPoint(pntA, pntB, pntC, pntD);
};
var getIntersectPoint = function getIntersectPoint(pntA, pntB, pntC, pntD) {
if (pntA[1] === pntB[1]) {
var _f = (pntD[0] - pntC[0]) / (pntD[1] - pntC[1]);
var _x = _f * (pntA[1] - pntC[1]) + pntC[0];
var _y = pntA[1];
return [_x, _y];
}
if (pntC[1] === pntD[1]) {
var _e = (pntB[0] - pntA[0]) / (pntB[1] - pntA[1]);
var _x2 = _e * (pntC[1] - pntA[1]) + pntA[0];
var _y2 = pntC[1];
return [_x2, _y2];
}
var e = (pntB[0] - pntA[0]) / (pntB[1] - pntA[1]);
var f = (pntD[0] - pntC[0]) / (pntD[1] - pntC[1]);
var y = (e * pntA[1] - pntA[0] - f * pntC[1] + pntC[0]) / (e - f);
var x = e * y - e * pntA[1] + pntA[0];
return [x, y];
};
var getAzimuth = function getAzimuth(startPoint, endPoint) {
var azimuth = void 0;
var angle = Math.asin(Math.abs(endPoint[1] - startPoint[1]) / MathDistance(startPoint, endPoint));
if (endPoint[1] >= startPoint[1] && endPoint[0] >= startPoint[0]) {
azimuth = angle + Math.PI;
} else if (endPoint[1] >= startPoint[1] && endPoint[0] < startPoint[0]) {
azimuth = Math.PI * 2 - angle;
} else if (endPoint[1] < startPoint[1] && endPoint[0] < startPoint[0]) {
azimuth = angle;
} else if (endPoint[1] < startPoint[1] && endPoint[0] >= startPoint[0]) {
azimuth = Math.PI - angle;
}
return azimuth;
};
var getAngleOfThreePoints = function getAngleOfThreePoints(pntA, pntB, pntC) {
var angle = getAzimuth(pntB, pntA) - getAzimuth(pntB, pntC);
return angle < 0 ? angle + Math.PI * 2 : angle;
};
var isClockWise = function isClockWise(pnt1, pnt2, pnt3) {
return (pnt3[1] - pnt1[1]) * (pnt2[0] - pnt1[0]) > (pnt2[1] - pnt1[1]) * (pnt3[0] - pnt1[0]);
};
var getCubicValue = function getCubicValue(t, startPnt, cPnt1, cPnt2, endPnt) {
t = Math.max(Math.min(t, 1), 0);
var tp = 1 - t,
t2 = t * t;
var t3 = t2 * t;
var tp2 = tp * tp;
var tp3 = tp2 * tp;
var x = tp3 * startPnt[0] + 3 * tp2 * t * cPnt1[0] + 3 * tp * t2 * cPnt2[0] + t3 * endPnt[0];
var y = tp3 * startPnt[1] + 3 * tp2 * t * cPnt1[1] + 3 * tp * t2 * cPnt2[1] + t3 * endPnt[1];
return [x, y];
};
var getThirdPoint = function getThirdPoint(startPnt, endPnt, angle, distance, clockWise) {
var azimuth = getAzimuth(startPnt, endPnt);
var alpha = clockWise ? azimuth + angle : azimuth - angle;
var dx = distance * Math.cos(alpha);
var dy = distance * Math.sin(alpha);
return [endPnt[0] + dx, endPnt[1] + dy];
};
var getArcPoints = function getArcPoints(center, radius, startAngle, endAngle) {
var x = null,
y = null,
pnts = [],
angleDiff = endAngle - startAngle;
angleDiff = angleDiff < 0 ? angleDiff + Math.PI * 2 : angleDiff;
for (var i = 0; i <= 100; i++) {
var angle = startAngle + angleDiff * i / 100;
x = center[0] + radius * Math.cos(angle);
y = center[1] + radius * Math.sin(angle);
pnts.push([x, y]);
}
return pnts;
};
var getBisectorNormals = function getBisectorNormals(t, pnt1, pnt2, pnt3) {
var normal = getNormal(pnt1, pnt2, pnt3);
var bisectorNormalRight = null,
bisectorNormalLeft = null,
dt = null,
x = null,
y = null;
var dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]);
var uX = normal[0] / dist;
var uY = normal[1] / dist;
var d1 = MathDistance(pnt1, pnt2);
var d2 = MathDistance(pnt2, pnt3);
if (dist > ZERO_TOLERANCE) {
if (isClockWise(pnt1, pnt2, pnt3)) {
dt = t * d1;
x = pnt2[0] - dt * uY;
y = pnt2[1] + dt * uX;
bisectorNormalRight = [x, y];
dt = t * d2;
x = pnt2[0] + dt * uY;
y = pnt2[1] - dt * uX;
bisectorNormalLeft = [x, y];
} else {
dt = t * d1;
x = pnt2[0] + dt * uY;
y = pnt2[1] - dt * uX;
bisectorNormalRight = [x, y];
dt = t * d2;
x = pnt2[0] - dt * uY;
y = pnt2[1] + dt * uX;
bisectorNormalLeft = [x, y];
}
} else {
x = pnt2[0] + t * (pnt1[0] - pnt2[0]);
y = pnt2[1] + t * (pnt1[1] - pnt2[1]);
bisectorNormalRight = [x, y];
x = pnt2[0] + t * (pnt3[0] - pnt2[0]);
y = pnt2[1] + t * (pnt3[1] - pnt2[1]);
bisectorNormalLeft = [x, y];
}
return [bisectorNormalRight, bisectorNormalLeft];
};
var getNormal = function getNormal(pnt1, pnt2, pnt3) {
var dX1 = pnt1[0] - pnt2[0];
var dY1 = pnt1[1] - pnt2[1];
var d1 = Math.sqrt(dX1 * dX1 + dY1 * dY1);
dX1 /= d1;
dY1 /= d1;
var dX2 = pnt3[0] - pnt2[0];
var dY2 = pnt3[1] - pnt2[1];
var d2 = Math.sqrt(dX2 * dX2 + dY2 * dY2);
dX2 /= d2;
dY2 /= d2;
var uX = dX1 + dX2;
var uY = dY1 + dY2;
return [uX, uY];
};
var getLeftMostControlPoint = function getLeftMostControlPoint(controlPoints, t) {
var _ref = [controlPoints[0], controlPoints[1], controlPoints[2], null, null],
pnt1 = _ref[0],
pnt2 = _ref[1],
pnt3 = _ref[2],
controlX = _ref[3],
controlY = _ref[4];
var pnts = getBisectorNormals(0, pnt1, pnt2, pnt3);
var normalRight = pnts[0];
var normal = getNormal(pnt1, pnt2, pnt3);
var dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]);
if (dist > ZERO_TOLERANCE) {
var mid = Mid(pnt1, pnt2);
var pX = pnt1[0] - mid[0];
var pY = pnt1[1] - mid[1];
var d1 = MathDistance(pnt1, pnt2);
var n = 2.0 / d1;
var nX = -n * pY;
var nY = n * pX;
var a11 = nX * nX - nY * nY;
var a12 = 2 * nX * nY;
var a22 = nY * nY - nX * nX;
var dX = normalRight[0] - mid[0];
var dY = normalRight[1] - mid[1];
controlX = mid[0] + a11 * dX + a12 * dY;
controlY = mid[1] + a12 * dX + a22 * dY;
} else {
controlX = pnt1[0] + t * (pnt2[0] - pnt1[0]);
controlY = pnt1[1] + t * (pnt2[1] - pnt1[1]);
}
return [controlX, controlY];
};
var getRightMostControlPoint = function getRightMostControlPoint(controlPoints, t) {
var count = controlPoints.length;
var pnt1 = controlPoints[count - 3];
var pnt2 = controlPoints[count - 2];
var pnt3 = controlPoints[count - 1];
var pnts = getBisectorNormals(0, pnt1, pnt2, pnt3);
var normalLeft = pnts[1];
var normal = getNormal(pnt1, pnt2, pnt3);
var dist = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1]);
var controlX = null,
controlY = null;
if (dist > ZERO_TOLERANCE) {
var mid = Mid(pnt2, pnt3);
var pX = pnt3[0] - mid[0];
var pY = pnt3[1] - mid[1];
var d1 = MathDistance(pnt2, pnt3);
var n = 2.0 / d1;
var nX = -n * pY;
var nY = n * pX;
var a11 = nX * nX - nY * nY;
var a12 = 2 * nX * nY;
var a22 = nY * nY - nX * nX;
var dX = normalLeft[0] - mid[0];
var dY = normalLeft[1] - mid[1];
controlX = mid[0] + a11 * dX + a12 * dY;
controlY = mid[1] + a12 * dX + a22 * dY;
} else {
controlX = pnt3[0] + t * (pnt2[0] - pnt3[0]);
controlY = pnt3[1] + t * (pnt2[1] - pnt3[1]);
}
return [controlX, controlY];
};
var getCurvePoints = function getCurvePoints(t, controlPoints) {
var leftControl = getLeftMostControlPoint(controlPoints, t);
var pnt1 = null,
pnt2 = null,
pnt3 = null,
normals = [leftControl],
points = [];
for (var i = 0; i < controlPoints.length - 2; i++) {
var _ref2 = [controlPoints[i], controlPoints[i + 1], controlPoints[i + 2]];
pnt1 = _ref2[0];
pnt2 = _ref2[1];
pnt3 = _ref2[2];
var normalPoints = getBisectorNormals(t, pnt1, pnt2, pnt3);
normals = normals.concat(normalPoints);
}
var rightControl = getRightMostControlPoint(controlPoints, t);
if (rightControl) {
normals.push(rightControl);
}
for (var _i = 0; _i < controlPoints.length - 1; _i++) {
pnt1 = controlPoints[_i];
pnt2 = controlPoints[_i + 1];
points.push(pnt1);
for (var _t = 0; _t < FITTING_COUNT; _t++) {
var pnt = getCubicValue(_t / FITTING_COUNT, pnt1, normals[_i * 2], normals[_i * 2 + 1], pnt2);
points.push(pnt);
}
points.push(pnt2);
}
return points;
};
var getBezierPoints = function getBezierPoints(points) {
if (points.length <= 2) {
return points;
} else {
var bezierPoints = [];
var n = points.length - 1;
for (var t = 0; t <= 1; t += 0.01) {
var x = 0,
y = 0;
for (var index = 0; index <= n; index++) {
var factor = getBinomialFactor(n, index);
var a = Math.pow(t, index);
var b = Math.pow(1 - t, n - index);
x += factor * a * b * points[index][0];
y += factor * a * b * points[index][1];
}
bezierPoints.push([x, y]);
}
bezierPoints.push(points[n]);
return bezierPoints;
}
};
var getFactorial = function getFactorial(n) {
var result = 1;
switch (n) {
case n <= 1:
result = 1;
break;
case n === 2:
result = 2;
break;
case n === 3:
result = 6;
break;
case n === 24:
result = 24;
break;
case n === 5:
result = 120;
break;
default:
for (var i = 1; i <= n; i++) {
result *= i;
}
break;
}
return result;
};
var getBinomialFactor = function getBinomialFactor(n, index) {
return getFactorial(n) / (getFactorial(index) * getFactorial(n - index));
};
var getQBSplinePoints = function getQBSplinePoints(points) {
if (points.length <= 2) {
return points;
} else {
var n = 2,
bSplinePoints = [];
var m = points.length - n - 1;
bSplinePoints.push(points[0]);
for (var i = 0; i <= m; i++) {
for (var t = 0; t <= 1; t += 0.05) {
var x = 0,
y = 0;
for (var k = 0; k <= n; k++) {
var factor = getQuadricBSplineFactor(k, t);
x += factor * points[i + k][0];
y += factor * points[i + k][1];
}
bSplinePoints.push([x, y]);
}
}
bSplinePoints.push(points[points.length - 1]);
return bSplinePoints;
}
};
var getQuadricBSplineFactor = function getQuadricBSplineFactor(k, t) {
var res = 0;
if (k === 0) {
res = Math.pow(t - 1, 2) / 2;
} else if (k === 1) {
res = (-2 * Math.pow(t, 2) + 2 * t + 1) / 2;
} else if (k === 2) {
res = Math.pow(t, 2) / 2;
}
return res;
};
var getuuid = function getuuid() {
var s = [],
hexDigits = '0123456789abcdef';
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = '4';
s[19] = hexDigits.substr(s[19] & 0x3 | 0x8, 1);
s[8] = s[13] = s[18] = s[23] = '-';
return s.join('');
};
var isObject = function isObject(value) {
var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
return value !== null && (type === 'object' || type === 'function');
};
var merge = function merge(a, b) {
for (var key in b) {
if (isObject(b[key]) && isObject(a[key])) {
merge(a[key], b[key]);
} else {
a[key] = b[key];
}
}
return a;
};
var $Group = ol.layer.Group;
var $VectorLayer = ol.layer.Vector;
var $VectorSource = ol.source.Vector;
var $Style = ol.style.Style;
var $Stroke = ol.style.Stroke;
var $Circle = ol.style.Circle;
var $Fill = ol.style.Fill;
var getLayerByLayerName = function getLayerByLayerName(map, layerName) {
try {
var targetLayer = null;
if (map) {
var layers = map.getLayers().getArray();
targetLayer = getLayerInternal(layers, 'layerName', layerName);
}
return targetLayer;
} catch (e) {
console.log(e);
}
};
var getLayerInternal = function getLayerInternal(layers, key, value) {
var _target = null;
if (layers.length > 0) {
layers.every(function (layer) {
if (layer instanceof $Group) {
var _layers = layer.getLayers().getArray();
_target = getLayerInternal(_layers, key, value);
if (_target) {
return false;
} else {
return true;
}
} else if (layer.get(key) === value) {
_target = layer;
return false;
} else {
return true;
}
});
}
return _target;
};
var createVectorLayer = function createVectorLayer(map, layerName, params) {
try {
if (map) {
var vectorLayer = getLayerByLayerName(map, layerName);
if (!(vectorLayer instanceof $VectorLayer)) {
vectorLayer = null;
}
if (!vectorLayer) {
if (params && params.create) {
vectorLayer = new $VectorLayer({
layerName: layerName,
params: params,
layerType: 'vector',
source: new $VectorSource({
wrapX: false
}),
style: new $Style({
fill: new $Fill({
color: 'rgba(67, 110, 238, 0.4)'
}),
stroke: new $Stroke({
color: '#4781d9',
width: 2
}),
image: new $Circle({
radius: 7,
fill: new $Fill({
color: '#ffcc33'
})
})
})
});
}
}
if (map && vectorLayer) {
if (params && params.hasOwnProperty('selectable')) {
vectorLayer.set('selectable', params.selectable);
}
var _vectorLayer = getLayerByLayerName(map, layerName);
if (!_vectorLayer || !(_vectorLayer instanceof $VectorLayer)) {
map.addLayer(vectorLayer);
}
}
return vectorLayer;
}
} catch (e) {
console.log(e);
}
};
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var autosize = createCommonjsModule(function (module, exports) {
/*!
autosize 4.0.1
license: MIT
http://www.jacklmoore.com/autosize
*/
(function (global, factory) {
if (typeof undefined === "function" && undefined.amd) {
undefined(['module', 'exports'], factory);
} else {
factory(module, exports);
}
})(commonjsGlobal, function (module, exports) {
var map = typeof Map === "function" ? new Map() : function () {
var keys = [];
var values = [];
return {
has: function has(key) {
return keys.indexOf(key) > -1;
},
get: function get(key) {
return values[keys.indexOf(key)];
},
set: function set(key, value) {
if (keys.indexOf(key) === -1) {
keys.push(key);
values.push(value);
}
},
delete: function _delete(key) {
var index = keys.indexOf(key);
if (index > -1) {
keys.splice(index, 1);
values.splice(index, 1);
}
}
};
}();
var createEvent = function createEvent(name) {
return new Event(name, { bubbles: true });
};
try {
new Event('test');
} catch (e) {
// IE does not support `new Event()`
createEvent = function createEvent(name) {
var evt = document.createEvent('Event');
evt.initEvent(name, true, false);
return evt;
};
}
function assign(ta) {
if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
var heightOffset = null;
var clientWidth = null;
var cachedHeight = null;
function init() {
var style = window.getComputedStyle(ta, null);
if (style.resize === 'vertical') {
ta.style.resize = 'none';
} else if (style.resize === 'both') {
ta.style.resize = 'horizontal';
}
if (style.boxSizing === 'content-box') {
heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
} else {
heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
}
// Fix when a textarea is not on document body and heightOffset is Not a Number
if (isNaN(heightOffset)) {
heightOffset = 0;
}
update();
}
function changeOverflow(value) {
{
// Chrome/Safari-specific fix:
// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
// made available by removing the scrollbar. The following forces the necessary text reflow.
var width = ta.style.width;
ta.style.width = '0px';
// Force reflow:
/* jshint ignore:start */
ta.offsetWidth;
/* jshint ignore:end */
ta.style.width = width;
}
ta.style.overflowY = value;
}
function getParentOverflows(el) {
var arr = [];
while (el && el.parentNode && el.parentNode instanceof Element) {
if (el.parentNode.scrollTop) {
arr.push({
node: el.parentNode,
scrollTop: el.parentNode.scrollTop
});
}
el = el.parentNode;
}
return arr;
}
function resize() {
if (ta.scrollHeight === 0) {
// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
return;
}
var overflows = getParentOverflows(ta);
var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
ta.style.height = '';
ta.style.height = ta.scrollHeight + heightOffset + 'px';
// used to check if an update is actually necessary on window.resize
clientWidth = ta.clientWidth;
// prevents scroll-position jumping
overflows.forEach(function (el) {
el.node.scrollTop = el.scrollTop;
});
if (docTop) {
document.documentElement.scrollTop = docTop;
}
}
function update() {
resize();
var styleHeight = Math.round(parseFloat(ta.style.height));
var computed = window.getComputedStyle(ta, null);
// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
// The actual height not matching the style height (set via the resize method) indicates that
// the max-height has been exceeded, in which case the overflow should be allowed.
if (actualHeight !== styleHeight) {
if (computed.overflowY === 'hidden') {
changeOverflow('scroll');
resize();
actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
}
} else {
// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
if (computed.overflowY !== 'hidden') {
changeOverflow('hidden');
resize();
actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
}
}
if (cachedHeight !== actualHeight) {
cachedHeight = actualHeight;
var evt = createEvent('autosize:resized');
try {
ta.dispatchEvent(evt);
} catch (err) {
// Firefox will throw an error on dispatchEvent for a detached element
// https://bugzilla.mozilla.org/show_bug.cgi?id=889376
}
}
}
var pageResize = function pageResize() {
if (ta.clientWidth !== clientWidth) {
update();
}
};
var destroy = function (style) {
window.removeEventListener('resize', pageResize, false);
ta.removeEventListener('input', update, false);
ta.removeEventListener('keyup', update, false);
ta.removeEventListener('autosize:destroy', destroy, false);
ta.removeEventListener('autosize:update', update, false);
Object.keys(style).forEach(function (key) {
ta.style[key] = style[key];
});
map.delete(ta);
}.bind(ta, {
height: ta.style.height,
resize: ta.style.resize,
overflowY: ta.style.overflowY,
overflowX: ta.style.overflowX,
wordWrap: ta.style.wordWrap
});
ta.addEventListener('autosize:destroy', destroy, false);
// IE9 does not fire onpropertychange or oninput for deletions,
// so binding to onkeyup to catch most of those events.
// There is no way that I know of to detect something like 'cut' in IE9.
if ('onpropertychange' in ta && 'oninput' in ta) {
ta.addEventListener('keyup', update, false);
}
window.addEventListener('resize', pageResize, false);
ta.addEventListener('input', update, false);
ta.addEventListener('autosize:update', update, false);
ta.style.overflowX = 'hidden';
ta.style.wordWrap = 'break-word';
map.set(ta, {
destroy: destroy,
update: update
});
init();
}
function destroy(ta) {
var methods = map.get(ta);
if (methods) {
methods.destroy();
}
}
function update(ta) {
var methods = map.get(ta);
if (methods) {
methods.update();
}
}
var autosize = null;
// Do nothing in Node.js environment and IE8 (or lower)
if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
autosize = function autosize(el) {
return el;
};
autosize.destroy = function (el) {
return el;
};
autosize.update = function (el) {
return el;
};
} else {
autosize = function autosize(el, options) {
if (el) {
Array.prototype.forEach.call(el.length ? el : [el], function (x) {
return assign(x, options);
});
}
return el;
};
autosize.destroy = function (el) {
if (el) {
Array.prototype.forEach.call(el.length ? el : [el], destroy);
}
return el;
};
autosize.update = function (el) {
if (el) {
Array.prototype.forEach.call(el.length ? el : [el], update);
}
return el;
};
}
exports.default = autosize;
module.exports = exports['default'];
});
});
var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
var MOZ_HACK_REGEXP = /^moz([A-Z])/;
var create = function create(tagName, className, container, id) {
var el = document.createElement(tagName);
el.className = className || '';
if (id) {
el.id = id;
}
if (container) {
container.appendChild(el);
}
return el;
};
var getElement = function getElement(id) {
return typeof id === 'string' ? document.getElementById(id) : id;
};
var remove = function remove(el) {
var parent = el.parentNode;
if (parent) {
parent.removeChild(el);
}
};
var createHidden = function createHidden(tagName, parent, id) {
var element = document.createElement(tagName);
element.style.display = 'none';
if (id) {
element.id = id;
}
if (parent) {
parent.appendChild(element);
}
return element;
};
var camelCase = function camelCase(name) {
return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) {
return offset ? letter.toUpperCase() : letter;
}).replace(MOZ_HACK_REGEXP, 'Moz$1');
};
var on = function () {
if (document.addEventListener) {
return function (element, event, handler) {
if (element && event && handler) {
element.addEventListener(event, handler, false);
}
};
}
}();
var off = function () {
if (document.removeEventListener) {
return function (element, event, handler) {
if (element && event) {
element.removeEventListener(event, handler, false);
}
};
}
}();
function hasClass(el, cls) {
if (!el || !cls) return false;
if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
if (el.classList) {
return el.classList.contains(cls);
} else {
return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
}
}
function getStyle(element, styleName) {
if (!element || !styleName) return null;
styleName = camelCase(styleName);
if (styleName === 'float') {
styleName = 'cssFloat';
}
try {
var computed = document.defaultView.getComputedStyle(element, '');
return element.style[styleName] || computed ? computed[styleName] : null;
} catch (e) {
return element.style[styleName];
}
}
function setStyle(element, styleName, value) {
if (!element || !styleName) return;
if ((typeof styleName === 'undefined' ? 'undefined' : _typeof(styleName)) === 'object') {
for (var prop in styleName) {
if (styleName.hasOwnProperty(prop)) {
setStyle(element, prop, styleName[prop]);
}
}
} else {
styleName = camelCase(styleName);
if (styleName === 'opacity') {
element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';
} else {
element.style[styleName] = value;
}
}
}
var $DragPan = ol.interaction.DragPan;
var PlotTextBox = function (_ol$Overlay) {
inherits(PlotTextBox, _ol$Overlay);
function PlotTextBox() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
classCallCheck(this, PlotTextBox);
var _ref = [options['id'], options['element'], options['offset'], options['stopEvent'], options['positioning'], options['insertFirst'], options['autoPan'], options['autoPanAnimation'], options['autoPanMargin'], options['className'] ? options['className'] : 'ol-plot-text-editor'],
id = _ref[0],
element = _ref[1],
offset = _ref[2],
stopEvent = _ref[3],
positioning = _ref[4],
insertFirst = _ref[5],
autoPan = _ref[6],
autoPanAnimation = _ref[7],
autoPanMargin = _ref[8],
className = _ref[9];
var _this = possibleConstructorReturn(this, _ol$Overlay.call(this, {
id: id,
element: element,
stopEvent: stopEvent,
insertFirst: insertFirst,
autoPan: autoPan,
autoPanAnimation: autoPanAnimation,
autoPanMargin: autoPanMargin,
className: className
}));
_this.setOffset(offset !== undefined ? offset : [0, 0]);
_this.setPositioning(positioning !== undefined ? positioning : 'center-center');
_this.mapDragPan = undefined;
_this.isClick_ = false;
_this.dragging_ = false;
_this.isFocus_ = false;
_this.options_ = options;
_this._position = options['position'] && options['position'].length > 0 ? options['position'] : [];
_this.handleTimer_ = null;
_this.currentPixel_ = [];
_this.createTextContent(options);
return _this;
}
PlotTextBox.prototype.createTextContent = function createTextContent(options) {
var _className = options.className || 'ol-plot-text-editor';
var content = document.createElement('textarea');
content.className = _className;
content.style.width = options['width'] + 'px';
content.style.height = options['height'] + 'px';
content.style.minHeight = options['minHeight'] + 'px';
content.setAttribute('id', options['id']);
content.setAttribute('autofocus', true);
autosize(content);
on(content, 'focus', this.handleFocus_.bind(this));
on(content, 'blur', this.handleBlur_.bind(this));
on(content, 'click', this.handleClick_.bind(this));
on(content, 'mousedown', this.handleDragStart_.bind(this));
on(window, 'mouseup', this.handleDragEnd_.bind(this));
this.set('isPlotText', true);
this.setElement(content);
this.createCloseButton(options);
this.createResizeButton(options);
this.setPosition(this._position);
this.dispatchEvent('textBoxDrawEnd', {
overlay: this,
element: content,
uuid: options['id']
});
};
PlotTextBox.prototype.getTextAreaFromContent_ = function getTextAreaFromContent_() {
var _node = '';
var childrens_ = Array.prototype.slice.call(this.element && this.element.children, 0);
if (childrens_.length > 0) {
childrens_.every(function (ele) {
if (ele.nodeType === 1 && ele.nodeName.toLowerCase() === 'textarea') {
_node = ele;
return false;
} else {
return true;
}
});
}
return _node;
};
PlotTextBox.prototype.createCloseButton = function createCloseButton(options) {
var _closeSpan = document.createElement('span');
_closeSpan.className = 'ol-plot-text-editor-close';
_closeSpan.setAttribute('data-id', options['id']);
off(_closeSpan, 'click', this.closeCurrentPlotText.bind(this));
on(_closeSpan, 'click', this.closeCurrentPlotText.bind(this));
this.element.appendChild(_closeSpan);
};
PlotTextBox.prototype.createResizeButton = function createResizeButton(options) {
var _resizeSpan = document.createElement('span');
_resizeSpan.className = 'ol-plot-text-editor-resize';
_resizeSpan.setAttribute('data-id', options['id']);
off(_resizeSpan, 'mousedown', this.handleResizeMouseDown_.bind(this));
off(_resizeSpan, 'mousemove', this.handleResizeMouseMove_.bind(this));
on(_resizeSpan, 'mousedown', this.handleResizeMouseDown_.bind(this));
on(_resizeSpan, 'mousemove', this.handleResizeMouseMove_.bind(this));
this.element.appendChild(_resizeSpan);
};
PlotTextBox.prototype.resizeButtonMoveHandler_ = function resizeButtonMoveHandler_(event) {
var pixel_ = event.pixel;
var element_ = this.getTextAreaFromContent_();
if (pixel_.length < 1 || this.currentPixel_.length < 1 || !element_) return;
var _offset = [pixel_[0] - this.currentPixel_[0], pixel_[1] - this.currentPixel_[1]];
var _size = [element_.offsetWidth, element_.offsetHeight];
var _width = _size[0] + _offset[0] * 2;
var _height = _size[1] + _offset[1] * 2;
setStyle(element_, 'width', _width + 'px');
setStyle(element_, 'height', _height + 'px');
this.currentPixel_ = pixel_;
this.getMap().render();
};
PlotTextBox.prototype.handleResizeMouseMove_ = function handleResizeMouseMove_(event) {
event.stopImmediatePropagation();
};
PlotTextBox.prototype.handleResizeMouseDown_ = function handleResizeMouseDown_(event) {
if (!this.getMap()) return;
this.currentPixel_ = [event.x, event.y];
this.getMap().on('pointermove', this.resizeButtonMoveHandler_, this);
on(this.getMap().getViewport(), 'mouseup', this.handleResizeMouseUp_.bind(this));
};
PlotTextBox.prototype.handleResizeMouseUp_ = function handleResizeMouseUp_(event) {
if (!this.getMap()) return;
this.getMap().un('pointermove', this.resizeButtonMoveHandler_, this);
off(this.getMap().getViewport(), 'mouseup', this.handleResizeMouseUp_.bind(this));
this.currentPixel_ = [];
};
PlotTextBox.prototype.closeCurrentPlotText = function closeCurrentPlotText(event) {
if (!this.getMap()) return;
if (event && hasClass(event.target, 'ol-plot-text-editor-close')) {
var _id = event.target.getAttribute('data-id');
if (_id) {
var _overlay = this.getMap().getOverlayById(_id);
if (_overlay) {
this.getMap().removeOverlay(_overlay);
}
}
}
};
PlotTextBox.prototype.handleFocus_ = function handleFocus_() {
this.isFocus_ = true;
if (this.getMap()) {
this.getMap().set('activeTextArea', this);
this.getMap().dispatchEvent('activeTextArea');
}
};
PlotTextBox.prototype.handleBlur_ = function handleBlur_() {
this.isFocus_ = false;
if (this.getMap()) {
this.getMap().set('activeTextArea', null);
this.getMap().set('disActiveTextArea', this);
this.getMap().dispatchEvent('disActiveTextArea');
}
};
PlotTextBox.prototype.handleDragStart_ = function handleDragStart_(event) {
var _this2 = this;
if (!this.getMap()) return;
if (!this.dragging_ && this.isMoveModel() && this.isFocus_) {
this.handleTimer_ = window.setTimeout(function () {
window.clearTimeout(_this2.handleTimer_);
_this2.handleTimer_ = null;
if (!_this2.isClick_) {
_this2.dragging_ = true;
_this2.disableMapDragPan();
_this2.preCursor_ = _this2.element.style.cursor;
on(_this2.getMap().getViewport(), 'mousemove', _this2.handleDragDrag_.bind(_this2));
on(_this2.element, 'mouseup', _this2.handleDragEnd_.bind(_this2));
}
}, 300);
}
};
PlotTextBox.prototype.handleDragDrag_ = function handleDragDrag_(event) {
if (this.dragging_) {
this.element.style.cursor = 'move';
this._position = this.getMap().getCoordinateFromPixel([event.clientX, event.clientY]);
this.setPosition(this._position);
}
};
PlotTextBox.prototype.handleDragEnd_ = function handleDragEnd_(event) {
this.isClick_ = false;
window.clearTimeout(this.handleTimer_);
this.handleTimer_ = null;
if (this.dragging_ && this.isFocus_) {
this.dragging_ = false;
this.enableMapDragPan();
this.element.style.cursor = this.preCursor_;
off(this.getMap().getViewport(), 'mousemove', this.handleDragDrag_.bind(this));
off(this.element, 'mouseup', this.handleDragEnd_.bind(this));
}
};
PlotTextBox.prototype.handleClick_ = function handleClick_(event) {
if (event.target === this.element) {
this.isClick_ = true;
} else {
this.isClick_ = false;
}
};
PlotTextBox.prototype.isMoveModel = function isMoveModel() {
var range = window.getSelection().getRangeAt(0);
return range.collapsed;
};
PlotTextBox.prototype.setStyle = function setStyle$$1() {
var style = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _element = this.getTextAreaFromContent_();
if (_element) {
for (var key in style) {
if (style[key]) {
setStyle(_element, key, style[key]);
}
}
}
};
PlotTextBox.prototype.getStyle = function getStyle$$1() {
var _style = {};
var _element = this.getTextAreaFromContent_();
if (_element) {
for (var key in DEF_TEXT_STYEL) {
_style[key] = getStyle(_element, key);
}
}
return _style;
};
PlotTextBox.prototype.setValue = function setValue(value) {
var _element = this.getTextAreaFromContent_();
if (_element) {
_element.value = value;
if (value) {
autosize.update(_element);
}
this.getMap().render();
}
};
PlotTextBox.prototype.getValue = function getValue() {
var _element = this.getTextAreaFromContent_();
if (_element) {
return _element.value;
} else {
return '';
}
};
PlotTextBox.prototype.getWidth = function getWidth() {
var element_ = this.getTextAreaFromContent_();
if (element_ && element_.offsetWidth) {
return element_.offsetWidth;
} else {
return 0;
}
};
PlotTextBox.prototype.getHeight = function getHeight() {
var element_ = this.getTextAreaFromContent_();
if (element_ && element_.offsetHeight) {
return element_.offsetHeight;
} else {
return 0;
}
};
PlotTextBox.prototype.enableMapDragPan = function enableMapDragPan() {
var _map = this.getMap();
if (!_map) return;
if (this.mapDragPan && this.mapDragPan instanceof $DragPan) {
_map.addInteraction(this.mapDragPan);
delete this.mapDragPan;
}
};
PlotTextBox.prototype.disableMapDragPan = function disableMapDragPan() {
var _this3 = this;
var _map = this.getMap();
if (!_map) return;
var interactions = _map.getInteractions().getArray();
interactions.every(function (item) {
if (item instanceof $DragPan) {
_this3.mapDragPan = item;
_map.removeInteraction(item);
return false;
} else {
return true;
}
});
};
PlotTextBox.prototype.setMap = function setMap(map) {
ol.Overlay.prototype.setMap.call(this, map);
if (map && map instanceof ol.Map) {
this.setStyle(merge(DEF_TEXT_STYEL, this.options_['style']));
this.setValue(this.options_['value']);
}
};
return PlotTextBox;
}(ol.Overlay);
var TEXTAREA = 'TextArea';
var ARC = 'Arc';
var CURVE = 'Curve';
var GATHERING_PLACE = 'GatheringPlace';
var POLYLINE = 'Polyline';
var FREEHANDLINE = 'FreeHandLine';
var POINT = 'Point';
var PENNANT = 'Pennant';
var RECTANGLE = 'RectAngle';
var CIRCLE = 'Circle';
var ELLIPSE = 'Ellipse';
var LUNE = 'Lune';
var SECTOR = 'Sector';
var CLOSED_CURVE = 'ClosedCurve';
var POLYGON = 'Polygon';
var FREE_POLYGON = 'FreePolygon';
var ATTACK_ARROW = 'AttackArrow';
var DOUBLE_ARROW = 'DoubleArrow';
var STRAIGHT_ARROW = 'StraightArrow';
var FINE_ARROW = 'FineArrow';
var ASSAULT_DIRECTION = 'AssaultDirection';
var TAILED_ATTACK_ARROW = 'TailedAttackArrow';
var SQUAD_COMBAT = 'SquadCombat';
var TAILED_SQUAD_COMBAT = 'TailedSquadCombat';
var RECTFLAG = 'RectFlag';
var TRIANGLEFLAG = 'TriangleFlag';
var CURVEFLAG = 'CurveFlag';
var PlotTypes = Object.freeze({
TEXTAREA: TEXTAREA,
ARC: ARC,
CURVE: CURVE,
GATHERING_PLACE: GATHERING_PLACE,
POLYLINE: POLYLINE,
FREEHANDLINE: FREEHANDLINE,
POINT: POINT,
PENNANT: PENNANT,
RECTANGLE: RECTANGLE,
CIRCLE: CIRCLE,
ELLIPSE: ELLIPSE,
LUNE: LUNE,
SECTOR: SECTOR,
CLOSED_CURVE: CLOSED_CURVE,
POLYGON: POLYGON,
FREE_POLYGON: FREE_POLYGON,
ATTACK_ARROW: ATTACK_ARROW,
DOUBLE_ARROW: DOUBLE_ARROW,
STRAIGHT_ARROW: STRAIGHT_ARROW,
FINE_ARROW: FINE_ARROW,
ASSAULT_DIRECTION: ASSAULT_DIRECTION,
TAILED_SQUAD_COMBAT: TAILED_SQUAD_COMBAT,
TAILED_ATTACK_ARROW: TAILED_ATTACK_ARROW,
SQUAD_COMBAT: SQUAD_COMBAT,
RECTFLAG: RECTFLAG,
TRIANGLEFLAG: TRIANGLEFLAG,
CURVEFLAG: CURVEFLAG
});
var Point = function (_ol$geom$Point) {
inherits(Point, _ol$geom$Point);
function Point(coordinates, point, params) {
classCallCheck(this, Point);
var _this = possibleConstructorReturn(this, _ol$geom$Point.call(this, []));
_this.type = POINT;
_this.options = params || {};
_this.set('params', _this.options);
_this.fixPointCount = 1;
if (point && point.length > 0) {
_this.setPoints(point);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Point.prototype.getPlotType = function getPlotType() {
return this.type;
};
Point.prototype.generate = function generate() {
var pnt = this.points[0];
this.setCoordinates(pnt);
};
Point.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Point.prototype.getMap = function getMap() {
return this.map;
};
Point.prototype.isPlot = function isPlot() {
return true;
};
Point.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Point.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Point.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Point.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Point.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Point.prototype.finishDrawing = function finishDrawing() {};
return Point;
}(ol.geom.Point);
var Pennant = function (_ol$geom$Point) {
inherits(Pennant, _ol$geom$Point);
function Pennant(coordinates, point, params) {
classCallCheck(this, Pennant);
var _this = possibleConstructorReturn(this, _ol$geom$Point.call(this, []));
_this.type = PENNANT;
_this.options = params || {};
_this.set('params', _this.options);
if (point && point.length > 0) {
_this.setPoints(point);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Pennant.prototype.getPlotType = function getPlotType() {
return this.type;
};
Pennant.prototype.generate = function generate() {
this.setCoordinates(this.points);
};
Pennant.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Pennant.prototype.getMap = function getMap() {
return this.map;
};
Pennant.prototype.isPlot = function isPlot() {
return true;
};
Pennant.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Pennant.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Pennant.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Pennant.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Pennant.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Pennant.prototype.finishDrawing = function finishDrawing() {};
return Pennant;
}(ol.geom.Point);
var Polyline = function (_ol$geom$LineString) {
inherits(Polyline, _ol$geom$LineString);
function Polyline(coordinates, points, params) {
classCallCheck(this, Polyline);
var _this = possibleConstructorReturn(this, _ol$geom$LineString.call(this, []));
_this.type = POLYLINE;
_this.freehand = false;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Polyline.prototype.getPlotType = function getPlotType() {
return this.type;
};
Polyline.prototype.generate = function generate() {
this.setCoordinates(this.points);
};
Polyline.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Polyline.prototype.getMap = function getMap() {
return this.map;
};
Polyline.prototype.isPlot = function isPlot() {
return true;
};
Polyline.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Polyline.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Polyline.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Polyline.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Polyline.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Polyline.prototype.finishDrawing = function finishDrawing() {};
return Polyline;
}(ol.geom.LineString);
var Arc = function (_ol$geom$LineString) {
inherits(Arc, _ol$geom$LineString);
function Arc(coordinates, points, params) {
classCallCheck(this, Arc);
var _this = possibleConstructorReturn(this, _ol$geom$LineString.call(this, []));
_this.type = ARC;
_this.fixPointCount = 3;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Arc.prototype.getPlotType = function getPlotType() {
return this.type;
};
Arc.prototype.generate = function generate() {
var count = this.getPointCount();
if (count < 2) return;
if (count === 2) {
this.setCoordinates(this.points);
} else {
var _ref = [this.points[0], this.points[1], this.points[2], null, null],
pnt1 = _ref[0],
pnt2 = _ref[1],
pnt3 = _ref[2],
startAngle = _ref[3],
endAngle = _ref[4];
var center = getCircleCenterOfThreePoints(pnt1, pnt2, pnt3);
var radius = MathDistance(pnt1, center);
var angle1 = getAzimuth(pnt1, center);
var angle2 = getAzimuth(pnt2, center);
if (isClockWise(pnt1, pnt2, pnt3)) {
startAngle = angle2;
endAngle = angle1;
} else {
startAngle = angle1;
endAngle = angle2;
}
this.setCoordinates(getArcPoints(center, radius, startAngle, endAngle));
}
};
Arc.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Arc.prototype.getMap = function getMap() {
return this.map;
};
Arc.prototype.isPlot = function isPlot() {
return true;
};
Arc.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Arc.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Arc.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Arc.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Arc.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Arc.prototype.finishDrawing = function finishDrawing() {};
return Arc;
}(ol.geom.LineString);
var Circle = function (_ol$geom$Polygon) {
inherits(Circle, _ol$geom$Polygon);
function Circle(coordinates, points, params) {
classCallCheck(this, Circle);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = CIRCLE;
_this.fixPointCount = 2;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Circle.prototype.getPlotType = function getPlotType() {
return this.type;
};
Circle.prototype.generate = function generate() {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
var center = this.points[0];
var radius = MathDistance(center, this.points[1]);
this.setCoordinates([this.generatePoints(center, radius)]);
}
};
Circle.prototype.generatePoints = function generatePoints(center, radius) {
var x = null,
y = null,
angle = null,
points = [];
for (var i = 0; i <= 100; i++) {
angle = Math.PI * 2 * i / 100;
x = center[0] + radius * Math.cos(angle);
y = center[1] + radius * Math.sin(angle);
points.push([x, y]);
}
return points;
};
Circle.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Circle.prototype.getMap = function getMap() {
return this.map;
};
Circle.prototype.isPlot = function isPlot() {
return true;
};
Circle.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Circle.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Circle.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Circle.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Circle.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Circle.prototype.finishDrawing = function finishDrawing() {};
return Circle;
}(ol.geom.Polygon);
var Curve = function (_ol$geom$LineString) {
inherits(Curve, _ol$geom$LineString);
function Curve(coordinates, points, params) {
classCallCheck(this, Curve);
var _this = possibleConstructorReturn(this, _ol$geom$LineString.call(this, []));
_this.type = CURVE;
_this.t = 0.3;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Curve.prototype.getPlotType = function getPlotType() {
return this.type;
};
Curve.prototype.generate = function generate() {
var count = this.getPointCount();
if (count < 2) {
return false;
} else if (count === 2) {
this.setCoordinates(this.points);
} else {
var points = getCurvePoints(this.t, this.points);
this.setCoordinates(points);
}
};
Curve.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Curve.prototype.getMap = function getMap() {
return this.map;
};
Curve.prototype.isPlot = function isPlot() {
return true;
};
Curve.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Curve.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Curve.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Curve.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Curve.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Curve.prototype.finishDrawing = function finishDrawing() {};
return Curve;
}(ol.geom.LineString);
var FreeHandLine = function (_ol$geom$LineString) {
inherits(FreeHandLine, _ol$geom$LineString);
function FreeHandLine(coordinates, points, params) {
classCallCheck(this, FreeHandLine);
var _this = possibleConstructorReturn(this, _ol$geom$LineString.call(this, []));
_this.type = FREEHANDLINE;
_this.freehand = true;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
FreeHandLine.prototype.getPlotType = function getPlotType() {
return this.type;
};
FreeHandLine.prototype.generate = function generate() {
this.setCoordinates(this.points);
};
FreeHandLine.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
FreeHandLine.prototype.getMap = function getMap() {
return this.map;
};
FreeHandLine.prototype.isPlot = function isPlot() {
return true;
};
FreeHandLine.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
FreeHandLine.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
FreeHandLine.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
FreeHandLine.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
FreeHandLine.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
FreeHandLine.prototype.finishDrawing = function finishDrawing() {};
return FreeHandLine;
}(ol.geom.LineString);
var RectAngle = function (_ol$geom$Polygon) {
inherits(RectAngle, _ol$geom$Polygon);
function RectAngle(coordinates, points, params) {
classCallCheck(this, RectAngle);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = RECTANGLE;
_this.fixPointCount = 2;
_this.set('params', params);
_this.isFill = params['isFill'] === false ? params['isFill'] : true;
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
RectAngle.prototype.getPlotType = function getPlotType() {
return this.type;
};
RectAngle.prototype.generate = function generate() {
if (this.points.length === 2) {
var coordinates = [];
if (this.isFill) {
var extent = ol.extent.boundingExtent(this.points);
var polygon = ol.geom.Polygon.fromExtent(extent);
coordinates = polygon.getCoordinates();
} else {
var start = this.points[0];
var end = this.points[1];
coordinates = [start, [start[0], end[1]], end, [end[0], start[1]], start];
}
this.setCoordinates(coordinates);
}
};
RectAngle.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
RectAngle.prototype.getMap = function getMap() {
return this.map;
};
RectAngle.prototype.isPlot = function isPlot() {
return true;
};
RectAngle.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
RectAngle.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
RectAngle.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
RectAngle.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
RectAngle.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
RectAngle.prototype.finishDrawing = function finishDrawing() {};
return RectAngle;
}(ol.geom.Polygon);
var Ellipse = function (_ol$geom$Polygon) {
inherits(Ellipse, _ol$geom$Polygon);
function Ellipse(coordinates, points, params) {
classCallCheck(this, Ellipse);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = ELLIPSE;
_this.fixPointCount = 2;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Ellipse.prototype.getPlotType = function getPlotType() {
return this.type;
};
Ellipse.prototype.generate = function generate() {
if (this.getPointCount() < 2) {
return false;
} else {
var _ref = [this.points[0], this.points[1]],
pnt1 = _ref[0],
pnt2 = _ref[1];
var center = Mid(pnt1, pnt2);
var majorRadius = Math.abs((pnt1[0] - pnt2[0]) / 2);
var minorRadius = Math.abs((pnt1[1] - pnt2[1]) / 2);
var res = this.generatePoints(center, majorRadius, minorRadius);
this.setCoordinates([res]);
}
};
Ellipse.prototype.generatePoints = function generatePoints(center, majorRadius, minorRadius) {
var x = null,
y = null,
angle = null,
points = [];
for (var i = 0; i <= FITTING_COUNT; i++) {
angle = Math.PI * 2 * i / FITTING_COUNT;
x = center[0] + majorRadius * Math.cos(angle);
y = center[1] + minorRadius * Math.sin(angle);
points.push([x, y]);
}
return points;
};
Ellipse.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Ellipse.prototype.getMap = function getMap() {
return this.map;
};
Ellipse.prototype.isPlot = function isPlot() {
return true;
};
Ellipse.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Ellipse.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Ellipse.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Ellipse.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Ellipse.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Ellipse.prototype.finishDrawing = function finishDrawing() {};
return Ellipse;
}(ol.geom.Polygon);
var Lune = function (_ol$geom$Polygon) {
inherits(Lune, _ol$geom$Polygon);
function Lune(coordinates, points, params) {
classCallCheck(this, Lune);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = LUNE;
_this.fixPointCount = 3;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Lune.prototype.getPlotType = function getPlotType() {
return this.type;
};
Lune.prototype.generate = function generate() {
if (this.getPointCount() < 2) {
return false;
} else {
var pnts = this.getPoints();
if (this.getPointCount() === 2) {
var mid = Mid(pnts[0], pnts[1]);
var d = MathDistance(pnts[0], mid);
var pnt = getThirdPoint(pnts[0], mid, HALF_PI, d);
pnts.push(pnt);
}
var _ref = [pnts[0], pnts[1], pnts[2], undefined, undefined],
pnt1 = _ref[0],
pnt2 = _ref[1],
pnt3 = _ref[2],
startAngle = _ref[3],
endAngle = _ref[4];
var center = getCircleCenterOfThreePoints(pnt1, pnt2, pnt3);
var radius = MathDistance(pnt1, center);
var angle1 = getAzimuth(pnt1, center);
var angle2 = getAzimuth(pnt2, center);
if (isClockWise(pnt1, pnt2, pnt3)) {
startAngle = angle2;
endAngle = angle1;
} else {
startAngle = angle1;
endAngle = angle2;
}
pnts = getArcPoints(center, radius, startAngle, endAngle);
pnts.push(pnts[0]);
this.setCoordinates([pnts]);
}
};
Lune.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Lune.prototype.getMap = function getMap() {
return this.map;
};
Lune.prototype.isPlot = function isPlot() {
return true;
};
Lune.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Lune.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Lune.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Lune.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Lune.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Lune.prototype.finishDrawing = function finishDrawing() {};
return Lune;
}(ol.geom.Polygon);
var Sector = function (_ol$geom$Polygon) {
inherits(Sector, _ol$geom$Polygon);
function Sector(coordinates, points, params) {
classCallCheck(this, Sector);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = SECTOR;
_this.fixPointCount = 3;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Sector.prototype.getPlotType = function getPlotType() {
return this.type;
};
Sector.prototype.generate = function generate() {
var points = this.getPointCount();
if (points < 2) {
return false;
} else if (points === 2) {
this.setCoordinates([this.points]);
} else {
var pnts = this.getPoints();
var _ref = [pnts[0], pnts[1], pnts[2]],
center = _ref[0],
pnt2 = _ref[1],
pnt3 = _ref[2];
var radius = MathDistance(pnt2, center);
var startAngle = getAzimuth(pnt2, center);
var endAngle = getAzimuth(pnt3, center);
var pList = getArcPoints(center, radius, startAngle, endAngle);
pList.push(center, pList[0]);
this.setCoordinates([pList]);
}
};
Sector.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Sector.prototype.getMap = function getMap() {
return this.map;
};
Sector.prototype.isPlot = function isPlot() {
return true;
};
Sector.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Sector.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Sector.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Sector.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Sector.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Sector.prototype.finishDrawing = function finishDrawing() {};
return Sector;
}(ol.geom.Polygon);
var ClosedCurve = function (_ol$geom$Polygon) {
inherits(ClosedCurve, _ol$geom$Polygon);
function ClosedCurve(coordinates, points, params) {
classCallCheck(this, ClosedCurve);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = CLOSED_CURVE;
_this.t = 0.3;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
ClosedCurve.prototype.getPlotType = function getPlotType() {
return this.type;
};
ClosedCurve.prototype.generate = function generate() {
var points = this.getPointCount();
if (points < 2) {
return false;
} else if (points === 2) {
this.setCoordinates([this.points]);
} else {
var pnts = this.getPoints();
pnts.push(pnts[0], pnts[1]);
var normals = [],
pList = [];
for (var i = 0; i < pnts.length - 2; i++) {
var normalPoints = getBisectorNormals(this.t, pnts[i], pnts[i + 1], pnts[i + 2]);
normals = normals.concat(normalPoints);
}
var count = normals.length;
normals = [normals[count - 1]].concat(normals.slice(0, count - 1));
for (var _i = 0; _i < pnts.length - 2; _i++) {
var pnt1 = pnts[_i];
var pnt2 = pnts[_i + 1];
pList.push(pnt1);
for (var t = 0; t <= FITTING_COUNT; t++) {
var pnt = getCubicValue(t / FITTING_COUNT, pnt1, normals[_i * 2], normals[_i * 2 + 1], pnt2);
pList.push(pnt);
}
pList.push(pnt2);
}
this.setCoordinates([pList]);
}
};
ClosedCurve.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
ClosedCurve.prototype.getMap = function getMap() {
return this.map;
};
ClosedCurve.prototype.isPlot = function isPlot() {
return true;
};
ClosedCurve.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
ClosedCurve.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
ClosedCurve.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
ClosedCurve.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
ClosedCurve.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
ClosedCurve.prototype.finishDrawing = function finishDrawing() {};
return ClosedCurve;
}(ol.geom.Polygon);
var Polygon = function (_ol$geom$Polygon) {
inherits(Polygon, _ol$geom$Polygon);
function Polygon(coordinates, points, params) {
classCallCheck(this, Polygon);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = POLYGON;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
Polygon.prototype.getPlotType = function getPlotType() {
return this.type;
};
Polygon.prototype.generate = function generate() {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
this.setCoordinates([this.points]);
}
};
Polygon.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
Polygon.prototype.getMap = function getMap() {
return this.map;
};
Polygon.prototype.isPlot = function isPlot() {
return true;
};
Polygon.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
Polygon.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
Polygon.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
Polygon.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
Polygon.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
Polygon.prototype.finishDrawing = function finishDrawing() {};
return Polygon;
}(ol.geom.Polygon);
var FreePolygon = function (_ol$geom$Polygon) {
inherits(FreePolygon, _ol$geom$Polygon);
function FreePolygon(coordinates, points, params) {
classCallCheck(this, FreePolygon);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = FREE_POLYGON;
_this.freehand = true;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
FreePolygon.prototype.getPlotType = function getPlotType() {
return this.type;
};
FreePolygon.prototype.generate = function generate() {
this.setCoordinates([this.points]);
};
FreePolygon.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
FreePolygon.prototype.getMap = function getMap() {
return this.map;
};
FreePolygon.prototype.isPlot = function isPlot() {
return true;
};
FreePolygon.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
FreePolygon.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
FreePolygon.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
FreePolygon.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
FreePolygon.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
FreePolygon.prototype.finishDrawing = function finishDrawing() {};
return FreePolygon;
}(ol.geom.Polygon);
var AttackArrow = function (_ol$geom$Polygon) {
inherits(AttackArrow, _ol$geom$Polygon);
function AttackArrow(coordinates, points, params) {
classCallCheck(this, AttackArrow);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = ATTACK_ARROW;
_this.headHeightFactor = 0.18;
_this.headWidthFactor = 0.3;
_this.neckHeightFactor = 0.85;
_this.neckWidthFactor = 0.15;
_this.headTailFactor = 0.8;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
AttackArrow.prototype.getPlotType = function getPlotType() {
return this.type;
};
AttackArrow.prototype.generate = function generate() {
try {
var points = this.getPointCount();
if (points < 2) {
return false;
} else if (points === 2) {
this.setCoordinates([this.points]);
} else {
var pnts = this.getPoints();
var _ref = [pnts[0], pnts[1]],
tailLeft = _ref[0],
tailRight = _ref[1];
if (isClockWise(pnts[0], pnts[1], pnts[2])) {
tailLeft = pnts[1];
tailRight = pnts[0];
}
var midTail = Mid(tailLeft, tailRight);
var bonePnts = [midTail].concat(pnts.slice(2));
var headPnts = this.getArrowHeadPoints(bonePnts, tailLeft, tailRight);
var _ref2 = [headPnts[0], headPnts[4]],
neckLeft = _ref2[0],
neckRight = _ref2[1];
var tailWidthFactor = MathDistance(tailLeft, tailRight) / getBaseLength(bonePnts);
var bodyPnts = this.getArrowBodyPoints(bonePnts, neckLeft, neckRight, tailWidthFactor);
var count = bodyPnts.length;
var leftPnts = [tailLeft].concat(bodyPnts.slice(0, count / 2));
leftPnts.push(neckLeft);
var rightPnts = [tailRight].concat(bodyPnts.slice(count / 2, count));
rightPnts.push(neckRight);
leftPnts = getQBSplinePoints(leftPnts);
rightPnts = getQBSplinePoints(rightPnts);
this.setCoordinates([leftPnts.concat(headPnts, rightPnts.reverse())]);
}
} catch (e) {
console.log(e);
}
};
AttackArrow.prototype.getArrowPoints = function getArrowPoints(pnt1, pnt2, pnt3, clockWise) {
var midPnt = Mid(pnt1, pnt2);
var len = MathDistance(midPnt, pnt3);
var midPnt1 = getThirdPoint(pnt3, midPnt, 0, len * 0.3, true);
var midPnt2 = getThirdPoint(pnt3, midPnt, 0, len * 0.5, true);
midPnt1 = getThirdPoint(midPnt, midPnt1, HALF_PI, len / 5, clockWise);
midPnt2 = getThirdPoint(midPnt, midPnt2, HALF_PI, len / 4, clockWise);
var points = [midPnt, midPnt1, midPnt2, pnt3];
var arrowPnts = this.getArrowHeadPoints(points);
if (arrowPnts && Array.isArray(arrowPnts) && arrowPnts.length > 0) {
var _ref3 = [arrowPnts[0], arrowPnts[4]],
neckLeftPoint = _ref3[0],
neckRightPoint = _ref3[1];
var tailWidthFactor = MathDistance(pnt1, pnt2) / getBaseLength(points) / 2;
var bodyPnts = this.getArrowBodyPoints(points, neckLeftPoint, neckRightPoint, tailWidthFactor);
if (bodyPnts) {
var n = bodyPnts.length;
var lPoints = bodyPnts.slice(0, n / 2);
var rPoints = bodyPnts.slice(n / 2, n);
lPoints.push(neckLeftPoint);
rPoints.push(neckRightPoint);
lPoints = lPoints.reverse();
lPoints.push(pnt2);
rPoints = rPoints.reverse();
rPoints.push(pnt1);
return lPoints.reverse().concat(arrowPnts, rPoints);
}
} else {
throw new Error('插值出错');
}
};
AttackArrow.prototype.getArrowHeadPoints = function getArrowHeadPoints(points, tailLeft, tailRight) {
try {
var len = getBaseLength(points);
var headHeight = len * this.headHeightFactor;
var headPnt = points[points.length - 1];
len = MathDistance(headPnt, points[points.length - 2]);
var tailWidth = MathDistance(tailLeft, tailRight);
if (headHeight > tailWidth * this.headTailFactor) {
headHeight = tailWidth * this.headTailFactor;
}
var headWidth = headHeight * this.headWidthFactor;
var neckWidth = headHeight * this.neckWidthFactor;
headHeight = headHeight > len ? len : headHeight;
var neckHeight = headHeight * this.neckHeightFactor;
var headEndPnt = getThirdPoint(points[points.length - 2], headPnt, 0, headHeight, true);
var neckEndPnt = getThirdPoint(points[points.length - 2], headPnt, 0, neckHeight, true);
var headLeft = getThirdPoint(headPnt, headEndPnt, HALF_PI, headWidth, false);
var headRight = getThirdPoint(headPnt, headEndPnt, HALF_PI, headWidth, true);
var neckLeft = getThirdPoint(headPnt, neckEndPnt, HALF_PI, neckWidth, false);
var neckRight = getThirdPoint(headPnt, neckEndPnt, HALF_PI, neckWidth, true);
return [neckLeft, headLeft, headPnt, headRight, neckRight];
} catch (e) {
console.log(e);
}
};
AttackArrow.prototype.getArrowBodyPoints = function getArrowBodyPoints(points, neckLeft, neckRight, tailWidthFactor) {
var allLen = wholeDistance(points);
var len = getBaseLength(points);
var tailWidth = len * tailWidthFactor;
var neckWidth = MathDistance(neckLeft, neckRight);
var widthDif = (tailWidth - neckWidth) / 2;
var tempLen = 0,
leftBodyPnts = [],
rightBodyPnts = [];
for (var i = 1; i < points.length - 1; i++) {
var angle = getAngleOfThreePoints(points[i - 1], points[i], points[i + 1]) / 2;
tempLen += MathDistance(points[i - 1], points[i]);
var w = (tailWidth / 2 - tempLen / allLen * widthDif) / Math.sin(angle);
var left = getThirdPoint(points[i - 1], points[i], Math.PI - angle, w, true);
var right = getThirdPoint(points[i - 1], points[i], angle, w, false);
leftBodyPnts.push(left);
rightBodyPnts.push(right);
}
return leftBodyPnts.concat(rightBodyPnts);
};
AttackArrow.prototype.getTempPoint4 = function getTempPoint4(linePnt1, linePnt2, point) {
try {
var midPnt = Mid(linePnt1, linePnt2);
var len = MathDistance(midPnt, point);
var angle = getAngleOfThreePoints(linePnt1, midPnt, point);
var symPnt = undefined,
distance1 = undefined,
distance2 = undefined,
mid = undefined;
if (angle < HALF_PI) {
distance1 = len * Math.sin(angle);
distance2 = len * Math.cos(angle);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, false);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, true);
} else if (angle >= HALF_PI && angle < Math.PI) {
distance1 = len * Math.sin(Math.PI - angle);
distance2 = len * Math.cos(Math.PI - angle);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, false);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, false);
} else if (angle >= Math.PI && angle < Math.PI * 1.5) {
distance1 = len * Math.sin(angle - Math.PI);
distance2 = len * Math.cos(angle - Math.PI);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, true);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, true);
} else {
distance1 = len * Math.sin(Math.PI * 2 - angle);
distance2 = len * Math.cos(Math.PI * 2 - angle);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, true);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, false);
}
return symPnt;
} catch (e) {
console.log(e);
}
};
AttackArrow.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
AttackArrow.prototype.getMap = function getMap() {
return this.map;
};
AttackArrow.prototype.isPlot = function isPlot() {
return true;
};
AttackArrow.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
AttackArrow.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
AttackArrow.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
AttackArrow.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
AttackArrow.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
AttackArrow.prototype.finishDrawing = function finishDrawing() {};
return AttackArrow;
}(ol.geom.Polygon);
var DoubleArrow = function (_ol$geom$Polygon) {
inherits(DoubleArrow, _ol$geom$Polygon);
function DoubleArrow(coordinates, points, params) {
classCallCheck(this, DoubleArrow);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = DOUBLE_ARROW;
_this.headHeightFactor = 0.25;
_this.headWidthFactor = 0.3;
_this.neckHeightFactor = 0.85;
_this.neckWidthFactor = 0.15;
_this.connPoint = null;
_this.tempPoint4 = null;
_this.fixPointCount = 4;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
DoubleArrow.prototype.getPlotType = function getPlotType() {
return this.type;
};
DoubleArrow.prototype.generate = function generate() {
try {
var count = this.getPointCount();
if (count < 2) {
return false;
} else if (count === 2) {
this.setCoordinates([this.points]);
return false;
}
if (count > 2) {
var _ref = [this.points[0], this.points[1], this.points[2]],
pnt1 = _ref[0],
pnt2 = _ref[1],
pnt3 = _ref[2];
if (count === 3) {
this.tempPoint4 = this.getTempPoint4(pnt1, pnt2, pnt3);
this.connPoint = Mid(pnt1, pnt2);
} else if (count === 4) {
this.tempPoint4 = this.points[3];
this.connPoint = Mid(pnt1, pnt2);
} else {
this.tempPoint4 = this.points[3];
this.connPoint = this.points[4];
}
var leftArrowPnts = undefined,
rightArrowPnts = undefined;
if (isClockWise(pnt1, pnt2, pnt3)) {
leftArrowPnts = this.getArrowPoints(pnt1, this.connPoint, this.tempPoint4, false);
rightArrowPnts = this.getArrowPoints(this.connPoint, pnt2, pnt3, true);
} else {
leftArrowPnts = this.getArrowPoints(pnt2, this.connPoint, pnt3, false);
rightArrowPnts = this.getArrowPoints(this.connPoint, pnt1, this.tempPoint4, true);
}
var m = leftArrowPnts.length;
var t = (m - 5) / 2;
var llBodyPnts = leftArrowPnts.slice(0, t);
var lArrowPnts = leftArrowPnts.slice(t, t + 5);
var lrBodyPnts = leftArrowPnts.slice(t + 5, m);
var rlBodyPnts = rightArrowPnts.slice(0, t);
var rArrowPnts = rightArrowPnts.slice(t, t + 5);
var rrBodyPnts = rightArrowPnts.slice(t + 5, m);
rlBodyPnts = getBezierPoints(rlBodyPnts);
var bodyPnts = getBezierPoints(rrBodyPnts.concat(llBodyPnts.slice(1)));
lrBodyPnts = getBezierPoints(lrBodyPnts);
var pnts = rlBodyPnts.concat(rArrowPnts, bodyPnts, lArrowPnts, lrBodyPnts);
this.setCoordinates([pnts]);
}
} catch (e) {
console.log(e);
}
};
DoubleArrow.prototype.getArrowPoints = function getArrowPoints(pnt1, pnt2, pnt3, clockWise) {
var midPnt = Mid(pnt1, pnt2);
var len = MathDistance(midPnt, pnt3);
var midPnt1 = getThirdPoint(pnt3, midPnt, 0, len * 0.3, true);
var midPnt2 = getThirdPoint(pnt3, midPnt, 0, len * 0.5, true);
midPnt1 = getThirdPoint(midPnt, midPnt1, HALF_PI, len / 5, clockWise);
midPnt2 = getThirdPoint(midPnt, midPnt2, HALF_PI, len / 4, clockWise);
var points = [midPnt, midPnt1, midPnt2, pnt3];
var arrowPnts = this.getArrowHeadPoints(points);
if (arrowPnts && Array.isArray(arrowPnts) && arrowPnts.length > 0) {
var _ref2 = [arrowPnts[0], arrowPnts[4]],
neckLeftPoint = _ref2[0],
neckRightPoint = _ref2[1];
var tailWidthFactor = MathDistance(pnt1, pnt2) / getBaseLength(points) / 2;
var bodyPnts = this.getArrowBodyPoints(points, neckLeftPoint, neckRightPoint, tailWidthFactor);
if (bodyPnts) {
var n = bodyPnts.length;
var lPoints = bodyPnts.slice(0, n / 2);
var rPoints = bodyPnts.slice(n / 2, n);
lPoints.push(neckLeftPoint);
rPoints.push(neckRightPoint);
lPoints = lPoints.reverse();
lPoints.push(pnt2);
rPoints = rPoints.reverse();
rPoints.push(pnt1);
return lPoints.reverse().concat(arrowPnts, rPoints);
}
} else {
throw new Error('插值出错');
}
};
DoubleArrow.prototype.getArrowHeadPoints = function getArrowHeadPoints(points) {
try {
var len = getBaseLength(points);
var headHeight = len * this.headHeightFactor;
var headPnt = points[points.length - 1];
var headWidth = headHeight * this.headWidthFactor;
var neckWidth = headHeight * this.neckWidthFactor;
var neckHeight = headHeight * this.neckHeightFactor;
var headEndPnt = getThirdPoint(points[points.length - 2], headPnt, 0, headHeight, true);
var neckEndPnt = getThirdPoint(points[points.length - 2], headPnt, 0, neckHeight, true);
var headLeft = getThirdPoint(headPnt, headEndPnt, HALF_PI, headWidth, false);
var headRight = getThirdPoint(headPnt, headEndPnt, HALF_PI, headWidth, true);
var neckLeft = getThirdPoint(headPnt, neckEndPnt, HALF_PI, neckWidth, false);
var neckRight = getThirdPoint(headPnt, neckEndPnt, HALF_PI, neckWidth, true);
return [neckLeft, headLeft, headPnt, headRight, neckRight];
} catch (e) {
console.log(e);
}
};
DoubleArrow.prototype.getArrowBodyPoints = function getArrowBodyPoints(points, neckLeft, neckRight, tailWidthFactor) {
var allLen = wholeDistance(points);
var len = getBaseLength(points);
var tailWidth = len * tailWidthFactor;
var neckWidth = MathDistance(neckLeft, neckRight);
var widthDif = (tailWidth - neckWidth) / 2;
var tempLen = 0,
leftBodyPnts = [],
rightBodyPnts = [];
for (var i = 1; i < points.length - 1; i++) {
var angle = getAngleOfThreePoints(points[i - 1], points[i], points[i + 1]) / 2;
tempLen += MathDistance(points[i - 1], points[i]);
var w = (tailWidth / 2 - tempLen / allLen * widthDif) / Math.sin(angle);
var left = getThirdPoint(points[i - 1], points[i], Math.PI - angle, w, true);
var right = getThirdPoint(points[i - 1], points[i], angle, w, false);
leftBodyPnts.push(left);
rightBodyPnts.push(right);
}
return leftBodyPnts.concat(rightBodyPnts);
};
DoubleArrow.prototype.getTempPoint4 = function getTempPoint4(linePnt1, linePnt2, point) {
try {
var midPnt = Mid(linePnt1, linePnt2);
var len = MathDistance(midPnt, point);
var angle = getAngleOfThreePoints(linePnt1, midPnt, point);
var symPnt = undefined,
distance1 = undefined,
distance2 = undefined,
mid = undefined;
if (angle < HALF_PI) {
distance1 = len * Math.sin(angle);
distance2 = len * Math.cos(angle);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, false);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, true);
} else if (angle >= HALF_PI && angle < Math.PI) {
distance1 = len * Math.sin(Math.PI - angle);
distance2 = len * Math.cos(Math.PI - angle);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, false);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, false);
} else if (angle >= Math.PI && angle < Math.PI * 1.5) {
distance1 = len * Math.sin(angle - Math.PI);
distance2 = len * Math.cos(angle - Math.PI);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, true);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, true);
} else {
distance1 = len * Math.sin(Math.PI * 2 - angle);
distance2 = len * Math.cos(Math.PI * 2 - angle);
mid = getThirdPoint(linePnt1, midPnt, HALF_PI, distance1, true);
symPnt = getThirdPoint(midPnt, mid, HALF_PI, distance2, false);
}
return symPnt;
} catch (e) {
console.log(e);
}
};
DoubleArrow.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
DoubleArrow.prototype.getMap = function getMap() {
return this.map;
};
DoubleArrow.prototype.isPlot = function isPlot() {
return true;
};
DoubleArrow.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
DoubleArrow.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
DoubleArrow.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
DoubleArrow.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
DoubleArrow.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
DoubleArrow.prototype.finishDrawing = function finishDrawing() {
if (this.getPointCount() === 3 && this.tempPoint4 !== null) {
this.points.push(this.tempPoint4);
}
if (this.connPoint !== null) {
this.points.push(this.connPoint);
}
};
return DoubleArrow;
}(ol.geom.Polygon);
var StraightArrow = function (_ol$geom$LineString) {
inherits(StraightArrow, _ol$geom$LineString);
function StraightArrow(coordinates, points, params) {
classCallCheck(this, StraightArrow);
var _this = possibleConstructorReturn(this, _ol$geom$LineString.call(this, []));
_this.type = STRAIGHT_ARROW;
_this.fixPointCount = 2;
_this.maxArrowLength = 3000000;
_this.arrowLengthScale = 5;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
StraightArrow.prototype.getPlotType = function getPlotType() {
return this.type;
};
StraightArrow.prototype.generate = function generate() {
try {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
var pnts = this.getPoints();
var _ref = [pnts[0], pnts[1]],
pnt1 = _ref[0],
pnt2 = _ref[1];
var distance = MathDistance(pnt1, pnt2);
var len = distance / this.arrowLengthScale;
len = len > this.maxArrowLength ? this.maxArrowLength : len;
var leftPnt = getThirdPoint(pnt1, pnt2, Math.PI / 6, len, false);
var rightPnt = getThirdPoint(pnt1, pnt2, Math.PI / 6, len, true);
this.setCoordinates([pnt1, pnt2, leftPnt, pnt2, rightPnt]);
}
} catch (e) {
console.log(e);
}
};
StraightArrow.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
StraightArrow.prototype.getMap = function getMap() {
return this.map;
};
StraightArrow.prototype.isPlot = function isPlot() {
return true;
};
StraightArrow.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
StraightArrow.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
StraightArrow.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
StraightArrow.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
StraightArrow.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
StraightArrow.prototype.finishDrawing = function finishDrawing() {};
return StraightArrow;
}(ol.geom.LineString);
var FineArrow = function (_ol$geom$Polygon) {
inherits(FineArrow, _ol$geom$Polygon);
function FineArrow(coordinates, points, params) {
classCallCheck(this, FineArrow);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = FINE_ARROW;
_this.tailWidthFactor = 0.1;
_this.neckWidthFactor = 0.2;
_this.headWidthFactor = 0.25;
_this.headAngle = Math.PI / 8.5;
_this.neckAngle = Math.PI / 13;
_this.fixPointCount = 2;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
FineArrow.prototype.getPlotType = function getPlotType() {
return this.type;
};
FineArrow.prototype.generate = function generate() {
try {
var cont = this.getPointCount();
if (cont < 2) {
return false;
} else {
var pnts = this.getPoints();
var _ref = [pnts[0], pnts[1]],
pnt1 = _ref[0],
pnt2 = _ref[1];
var len = getBaseLength(pnts);
var tailWidth = len * this.tailWidthFactor;
var neckWidth = len * this.neckWidthFactor;
var headWidth = len * this.headWidthFactor;
var tailLeft = getThirdPoint(pnt2, pnt1, HALF_PI, tailWidth, true);
var tailRight = getThirdPoint(pnt2, pnt1, HALF_PI, tailWidth, false);
var headLeft = getThirdPoint(pnt1, pnt2, this.headAngle, headWidth, false);
var headRight = getThirdPoint(pnt1, pnt2, this.headAngle, headWidth, true);
var neckLeft = getThirdPoint(pnt1, pnt2, this.neckAngle, neckWidth, false);
var neckRight = getThirdPoint(pnt1, pnt2, this.neckAngle, neckWidth, true);
var pList = [tailLeft, neckLeft, headLeft, pnt2, headRight, neckRight, tailRight];
this.setCoordinates([pList]);
}
} catch (e) {
console.log(e);
}
};
FineArrow.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
FineArrow.prototype.getMap = function getMap() {
return this.map;
};
FineArrow.prototype.isPlot = function isPlot() {
return true;
};
FineArrow.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
FineArrow.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
FineArrow.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
FineArrow.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
FineArrow.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
FineArrow.prototype.finishDrawing = function finishDrawing() {};
return FineArrow;
}(ol.geom.Polygon);
var AssaultDirection = function (_FineArrow) {
inherits(AssaultDirection, _FineArrow);
function AssaultDirection(coordinates, points, params) {
classCallCheck(this, AssaultDirection);
var _this = possibleConstructorReturn(this, _FineArrow.call(this, coordinates, points, params));
_this.tailWidthFactor = 0.05;
_this.neckWidthFactor = 0.1;
_this.headWidthFactor = 0.15;
_this.type = ASSAULT_DIRECTION;
_this.headAngle = Math.PI / 4;
_this.neckAngle = Math.PI * 0.17741;
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
_this.set('params', params);
return _this;
}
return AssaultDirection;
}(FineArrow);
var TailedAttackArrow = function (_AttackArrow) {
inherits(TailedAttackArrow, _AttackArrow);
function TailedAttackArrow(coordinates, points, params) {
classCallCheck(this, TailedAttackArrow);
var _this = possibleConstructorReturn(this, _AttackArrow.call(this, coordinates, points, params));
_this.type = TAILED_ATTACK_ARROW;
_this.headHeightFactor = 0.18;
_this.headWidthFactor = 0.3;
_this.neckHeightFactor = 0.85;
_this.neckWidthFactor = 0.15;
_this.tailWidthFactor = 0.1;
_this.headTailFactor = 0.8;
_this.swallowTailFactor = 1;
_this.swallowTailPnt = null;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
TailedAttackArrow.prototype.generate = function generate() {
try {
var points = this.getPointCount();
if (points < 2) {
return false;
} else if (points === 2) {
this.setCoordinates([this.points]);
return false;
} else {
var pnts = this.getPoints();
var _ref = [pnts[0], pnts[1]],
tailLeft = _ref[0],
tailRight = _ref[1];
if (isClockWise(pnts[0], pnts[1], pnts[2])) {
tailLeft = pnts[1];
tailRight = pnts[0];
}
var midTail = Mid(tailLeft, tailRight);
var bonePnts = [midTail].concat(pnts.slice(2));
var headPnts = this.getArrowHeadPoints(bonePnts, tailLeft, tailRight);
var _ref2 = [headPnts[0], headPnts[4]],
neckLeft = _ref2[0],
neckRight = _ref2[1];
var tailWidth = MathDistance(tailLeft, tailRight);
var allLen = getBaseLength(bonePnts);
var len = allLen * this.tailWidthFactor * this.swallowTailFactor;
this.swallowTailPnt = getThirdPoint(bonePnts[1], bonePnts[0], 0, len, true);
var factor = tailWidth / allLen;
var bodyPnts = this.getArrowBodyPoints(bonePnts, neckLeft, neckRight, factor);
var count = bodyPnts.length;
var leftPnts = [tailLeft].concat(bodyPnts.slice(0, count / 2));
leftPnts.push(neckLeft);
var rightPnts = [tailRight].concat(bodyPnts.slice(count / 2, count));
rightPnts.push(neckRight);
leftPnts = getQBSplinePoints(leftPnts);
rightPnts = getQBSplinePoints(rightPnts);
this.setCoordinates([leftPnts.concat(headPnts, rightPnts.reverse(), [this.swallowTailPnt, leftPnts[0]])]);
}
} catch (e) {
console.log(e);
}
};
return TailedAttackArrow;
}(AttackArrow);
var SquadCombat = function (_AttackArrow) {
inherits(SquadCombat, _AttackArrow);
function SquadCombat(coordinates, points, params) {
classCallCheck(this, SquadCombat);
var _this = possibleConstructorReturn(this, _AttackArrow.call(this, coordinates, points, params));
_this.type = SQUAD_COMBAT;
_this.headHeightFactor = 0.18;
_this.headWidthFactor = 0.3;
_this.neckHeightFactor = 0.85;
_this.neckWidthFactor = 0.15;
_this.tailWidthFactor = 0.1;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
SquadCombat.prototype.generate = function generate() {
try {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
var pnts = this.getPoints();
var tailPnts = this.getTailPoints(pnts);
var headPnts = this.getArrowHeadPoints(pnts, tailPnts[0], tailPnts[1]);
var neckLeft = headPnts[0];
var neckRight = headPnts[4];
var bodyPnts = this.getArrowBodyPoints(pnts, neckLeft, neckRight, this.tailWidthFactor);
var _count = bodyPnts.length;
var leftPnts = [tailPnts[0]].concat(bodyPnts.slice(0, _count / 2));
leftPnts.push(neckLeft);
var rightPnts = [tailPnts[1]].concat(bodyPnts.slice(_count / 2, _count));
rightPnts.push(neckRight);
leftPnts = getQBSplinePoints(leftPnts);
rightPnts = getQBSplinePoints(rightPnts);
this.setCoordinates([leftPnts.concat(headPnts, rightPnts.reverse())]);
}
} catch (e) {
console.log(e);
}
};
SquadCombat.prototype.getTailPoints = function getTailPoints(points) {
var allLen = getBaseLength(points);
var tailWidth = allLen * this.tailWidthFactor;
var tailLeft = getThirdPoint(points[1], points[0], HALF_PI, tailWidth, false);
var tailRight = getThirdPoint(points[1], points[0], HALF_PI, tailWidth, true);
return [tailLeft, tailRight];
};
return SquadCombat;
}(AttackArrow);
var TailedSquadCombat = function (_AttackArrow) {
inherits(TailedSquadCombat, _AttackArrow);
function TailedSquadCombat(coordinates, points, params) {
classCallCheck(this, TailedSquadCombat);
var _this = possibleConstructorReturn(this, _AttackArrow.call(this, coordinates, points, params));
_this.type = TAILED_SQUAD_COMBAT;
_this.headHeightFactor = 0.18;
_this.headWidthFactor = 0.3;
_this.neckHeightFactor = 0.85;
_this.neckWidthFactor = 0.15;
_this.tailWidthFactor = 0.1;
_this.swallowTailFactor = 1;
_this.swallowTailPnt = null;
_this.fixPointCount = 2;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
TailedSquadCombat.prototype.generate = function generate() {
try {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
var pnts = this.getPoints();
var tailPnts = this.getTailPoints(pnts);
var headPnts = this.getArrowHeadPoints(pnts, tailPnts[0], tailPnts[2]);
var neckLeft = headPnts[0];
var neckRight = headPnts[4];
var bodyPnts = this.getArrowBodyPoints(pnts, neckLeft, neckRight, this.tailWidthFactor);
var _count = bodyPnts.length;
var leftPnts = [tailPnts[0]].concat(bodyPnts.slice(0, _count / 2));
leftPnts.push(neckLeft);
var rightPnts = [tailPnts[2]].concat(bodyPnts.slice(_count / 2, _count));
rightPnts.push(neckRight);
leftPnts = getQBSplinePoints(leftPnts);
rightPnts = getQBSplinePoints(rightPnts);
this.setCoordinates([leftPnts.concat(headPnts, rightPnts.reverse(), [tailPnts[1], leftPnts[0]])]);
}
} catch (e) {
console.log(e);
}
};
TailedSquadCombat.prototype.getTailPoints = function getTailPoints(points) {
var allLen = getBaseLength(points);
var tailWidth = allLen * this.tailWidthFactor;
var tailLeft = getThirdPoint(points[1], points[0], HALF_PI, tailWidth, false);
var tailRight = getThirdPoint(points[1], points[0], HALF_PI, tailWidth, true);
var len = tailWidth * this.swallowTailFactor;
var swallowTailPnt = getThirdPoint(points[1], points[0], 0, len, true);
return [tailLeft, swallowTailPnt, tailRight];
};
return TailedSquadCombat;
}(AttackArrow);
var GatheringPlace = function (_ol$geom$Polygon) {
inherits(GatheringPlace, _ol$geom$Polygon);
function GatheringPlace(coordinates, points, params) {
classCallCheck(this, GatheringPlace);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = GATHERING_PLACE;
_this.t = 0.4;
_this.fixPointCount = 3;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
GatheringPlace.prototype.getPlotType = function getPlotType() {
return this.type;
};
GatheringPlace.prototype.generate = function generate() {
var pnts = this.getPoints();
var points = this.getPointCount();
if (pnts.length < 2) {
return false;
} else {
if (points === 2) {
var _mid = Mid(pnts[0], pnts[1]);
var d = MathDistance(pnts[0], _mid) / 0.9;
var pnt = getThirdPoint(pnts[0], _mid, HALF_PI, d, true);
pnts = [pnts[0], pnt, pnts[1]];
}
var mid = Mid(pnts[0], pnts[2]);
pnts.push(mid, pnts[0], pnts[1]);
var normals = [],
pnt1 = undefined,
pnt2 = undefined,
pnt3 = undefined,
pList = [];
for (var i = 0; i < pnts.length - 2; i++) {
pnt1 = pnts[i];
pnt2 = pnts[i + 1];
pnt3 = pnts[i + 2];
var normalPoints = getBisectorNormals(this.t, pnt1, pnt2, pnt3);
normals = normals.concat(normalPoints);
}
var count = normals.length;
normals = [normals[count - 1]].concat(normals.slice(0, count - 1));
for (var _i = 0; _i < pnts.length - 2; _i++) {
pnt1 = pnts[_i];
pnt2 = pnts[_i + 1];
pList.push(pnt1);
for (var t = 0; t <= FITTING_COUNT; t++) {
var _pnt = getCubicValue(t / FITTING_COUNT, pnt1, normals[_i * 2], normals[_i * 2 + 1], pnt2);
pList.push(_pnt);
}
pList.push(pnt2);
}
this.setCoordinates([pList]);
}
};
GatheringPlace.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
GatheringPlace.prototype.getMap = function getMap() {
return this.map;
};
GatheringPlace.prototype.isPlot = function isPlot() {
return true;
};
GatheringPlace.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
GatheringPlace.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
GatheringPlace.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
GatheringPlace.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
GatheringPlace.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
GatheringPlace.prototype.finishDrawing = function finishDrawing() {};
return GatheringPlace;
}(ol.geom.Polygon);
var RectFlag = function (_ol$geom$Polygon) {
inherits(RectFlag, _ol$geom$Polygon);
function RectFlag(coordinates, points, params) {
classCallCheck(this, RectFlag);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = RECTFLAG;
_this.fixPointCount = 2;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
RectFlag.prototype.getPlotType = function getPlotType() {
return this.type;
};
RectFlag.prototype.generate = function generate() {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
this.setCoordinates([this.calculatePonits(this.points)]);
}
};
RectFlag.prototype.calculatePonits = function calculatePonits(points) {
var components = [];
if (points.length > 1) {
var startPoint = points[0];
var endPoint = points[points.length - 1];
var point1 = [endPoint[0], startPoint[1]];
var point2 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2];
var point3 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2];
var point4 = [startPoint[0], endPoint[1]];
components = [startPoint, point1, point2, point3, point4];
}
return components;
};
RectFlag.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
RectFlag.prototype.getMap = function getMap() {
return this.map;
};
RectFlag.prototype.isPlot = function isPlot() {
return true;
};
RectFlag.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
RectFlag.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
RectFlag.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
RectFlag.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
RectFlag.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
RectFlag.prototype.finishDrawing = function finishDrawing() {};
return RectFlag;
}(ol.geom.Polygon);
var TriangleFlag = function (_ol$geom$Polygon) {
inherits(TriangleFlag, _ol$geom$Polygon);
function TriangleFlag(coordinates, points, params) {
classCallCheck(this, TriangleFlag);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = TRIANGLEFLAG;
_this.fixPointCount = 2;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
TriangleFlag.prototype.getPlotType = function getPlotType() {
return this.type;
};
TriangleFlag.prototype.generate = function generate() {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
this.setCoordinates([this.calculatePonits(this.points)]);
}
};
TriangleFlag.prototype.calculatePonits = function calculatePonits(points) {
var components = [];
if (points.length > 1) {
var startPoint = points[0];
var endPoint = points[points.length - 1];
var point1 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2];
var point2 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2];
var point3 = [startPoint[0], endPoint[1]];
components = [startPoint, point1, point2, point3];
}
return components;
};
TriangleFlag.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
TriangleFlag.prototype.getMap = function getMap() {
return this.map;
};
TriangleFlag.prototype.isPlot = function isPlot() {
return true;
};
TriangleFlag.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
TriangleFlag.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
TriangleFlag.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
TriangleFlag.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
TriangleFlag.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
TriangleFlag.prototype.finishDrawing = function finishDrawing() {};
return TriangleFlag;
}(ol.geom.Polygon);
var CurveFlag = function (_ol$geom$Polygon) {
inherits(CurveFlag, _ol$geom$Polygon);
function CurveFlag(coordinates, points, params) {
classCallCheck(this, CurveFlag);
var _this = possibleConstructorReturn(this, _ol$geom$Polygon.call(this, []));
_this.type = CURVEFLAG;
_this.fixPointCount = 2;
_this.set('params', params);
if (points && points.length > 0) {
_this.setPoints(points);
} else if (coordinates && coordinates.length > 0) {
_this.setCoordinates(coordinates);
}
return _this;
}
CurveFlag.prototype.getPlotType = function getPlotType() {
return this.type;
};
CurveFlag.prototype.generate = function generate() {
var count = this.getPointCount();
if (count < 2) {
return false;
} else {
this.setCoordinates([this.calculatePonits(this.points)]);
}
};
CurveFlag.prototype.calculatePonits = function calculatePonits(points) {
var components = [];
if (points.length > 1) {
var startPoint = points[0];
var endPoint = points[points.length - 1];
var point1 = startPoint;
var point2 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) / 8 + startPoint[1]];
var point3 = [(startPoint[0] + endPoint[0]) / 2, startPoint[1]];
var point4 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], -(endPoint[1] - startPoint[1]) / 8 + startPoint[1]];
var point5 = [endPoint[0], startPoint[1]];
var point6 = [endPoint[0], (startPoint[1] + endPoint[1]) / 2];
var point7 = [(endPoint[0] - startPoint[0]) * 3 / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 3 / 8 + startPoint[1]];
var point8 = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2];
var point9 = [(endPoint[0] - startPoint[0]) / 4 + startPoint[0], (endPoint[1] - startPoint[1]) * 5 / 8 + startPoint[1]];
var point10 = [startPoint[0], (startPoint[1] + endPoint[1]) / 2];
var point11 = [startPoint[0], endPoint[1]];
var curve1 = getBezierPoints([point1, point2, point3, point4, point5]);
var curve2 = getBezierPoints([point6, point7, point8, point9, point10]);
components = curve1.concat(curve2);
components.push(point11);
}
return components;
};
CurveFlag.prototype.setMap = function setMap(map) {
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
};
CurveFlag.prototype.getMap = function getMap() {
return this.map;
};
CurveFlag.prototype.isPlot = function isPlot() {
return true;
};
CurveFlag.prototype.setPoints = function setPoints(value) {
this.points = !value ? [] : value;
if (this.points.length >= 1) {
this.generate();
}
};
CurveFlag.prototype.getPoints = function getPoints() {
return this.points.slice(0);
};
CurveFlag.prototype.getPointCount = function getPointCount() {
return this.points.length;
};
CurveFlag.prototype.updatePoint = function updatePoint(point, index) {
if (index >= 0 && index < this.points.length) {
this.points[index] = point;
this.generate();
}
};
CurveFlag.prototype.updateLastPoint = function updateLastPoint(point) {
this.updatePoint(point, this.points.length - 1);
};
CurveFlag.prototype.finishDrawing = function finishDrawing() {};
return CurveFlag;
}(ol.geom.Polygon);
var Geometry = Object.freeze({
Point: Point,
Pennant: Pennant,
Polyline: Polyline,
Arc: Arc,
Circle: Circle,
Curve: Curve,
FreeHandLine: FreeHandLine,
RectAngle: RectAngle,
Ellipse: Ellipse,
Lune: Lune,
Sector: Sector,
ClosedCurve: ClosedCurve,
Polygon: Polygon,
FreePolygon: FreePolygon,
AttackArrow: AttackArrow,
DoubleArrow: DoubleArrow,
StraightArrow: StraightArrow,
FineArrow: FineArrow,
AssaultDirection: AssaultDirection,
TailedAttackArrow: TailedAttackArrow,
SquadCombat: SquadCombat,
TailedSquadCombat: TailedSquadCombat,
GatheringPlace: GatheringPlace,
RectFlag: RectFlag,
TriangleFlag: TriangleFlag,
CurveFlag: CurveFlag,
PlotTextBox: PlotTextBox
});
var $DrawInteraction = ol.interaction.Draw;
var $Style$1 = ol.style.Style;
var $Icon = ol.style.Icon;
var $Stroke$1 = ol.style.Stroke;
var $Fill$1 = ol.style.Fill;
var PlotDraw = function (_Observable) {
inherits(PlotDraw, _Observable);
function PlotDraw(map, params) {
classCallCheck(this, PlotDraw);
var _this = possibleConstructorReturn(this, _Observable.call(this));
if (map && map instanceof ol.Map) {
_this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
_this.options = params || {};
_this.points = null;
_this.plot = null;
_this.feature = null;
_this.plotType = null;
_this.plotParams = null;
_this.mapViewport = _this.map.getViewport();
_this.dblClickZoomInteraction = null;
_this.drawInteraction_ = null;
_this.layerName = _this.options && _this.options['layerName'] ? _this.options['layerName'] : BASE_LAYERNAME;
_this.drawLayer = createVectorLayer(_this.map, _this.layerName, {
create: true
});
_this.drawLayer.setZIndex(_this.options['zIndex'] || 99);
return _this;
}
PlotDraw.prototype.createPlot = function createPlot(type, points, _params) {
var params = _params || {};
switch (type) {
case TEXTAREA:
return 'TextArea';
case POINT:
return new Point([], points, params);
case PENNANT:
return new Pennant([], points, params);
case POLYLINE:
return new Polyline([], points, params);
case ARC:
return new Arc([], points, params);
case CIRCLE:
return new Circle([], points, params);
case CURVE:
return new Curve([], points, params);
case FREEHANDLINE:
return new FreeHandLine([], points, params);
case RECTANGLE:
return new RectAngle([], points, params);
case ELLIPSE:
return new Ellipse([], points, params);
case LUNE:
return new Lune([], points, params);
case SECTOR:
return new Sector([], points, params);
case CLOSED_CURVE:
return new ClosedCurve([], points, params);
case POLYGON:
return new Polygon([], points, params);
case ATTACK_ARROW:
return new AttackArrow([], points, params);
case FREE_POLYGON:
return new FreePolygon([], points, params);
case DOUBLE_ARROW:
return new DoubleArrow([], points, params);
case STRAIGHT_ARROW:
return new StraightArrow([], points, params);
case FINE_ARROW:
return new FineArrow([], points, params);
case ASSAULT_DIRECTION:
return new AssaultDirection([], points, params);
case TAILED_ATTACK_ARROW:
return new TailedAttackArrow([], points, params);
case SQUAD_COMBAT:
return new SquadCombat([], points, params);
case TAILED_SQUAD_COMBAT:
return new TailedSquadCombat([], points, params);
case GATHERING_PLACE:
return new GatheringPlace([], points, params);
case RECTFLAG:
return new RectFlag([], points, params);
case TRIANGLEFLAG:
return new TriangleFlag([], points, params);
case CURVEFLAG:
return new CurveFlag([], points, params);
}
return null;
};
PlotDraw.prototype.active = function active(type) {
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
this.disActive();
this.deactiveMapTools();
this.plotType = type;
this.plotParams = params;
if (type === TEXTAREA) {
this.activeInteraction();
} else if (Object.keys(PlotTypes).some(function (key) {
return PlotTypes[key] === type;
})) {
this.map.on('click', this.mapFirstClickHandler, this);
} else {
console.warn('不存在的标绘类型!');
}
};
PlotDraw.prototype.activeInteraction = function activeInteraction() {
this.drawInteraction_ = new $DrawInteraction({
style: new $Style$1({
fill: new $Fill$1({
color: 'rgba(255, 255, 255, 0.7)'
}),
stroke: new $Stroke$1({
color: 'rgba(0, 0, 0, 0.15)',
width: 2
}),
image: new $Icon({
anchor: [1, 1],
anchorXUnits: 'fraction',
anchorYUnits: 'fraction',
opacity: 0.75,
src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABgklEQVQ4T41T0W3CQAy1lfwRqR0h/CE5UhkBJmiZADpB0wlKJwA2aDegE5QR+Igl/noj9OPuLydXPuXQEYUKS5FyPvvd87ONRDRFxEdr7c4Y8ws3WFmW90VRvIjIF1ZVtQaANxH59N6v8zwvRaQEgCMATDu88I+Ipm1bk2XZHhEfAOAdFW00Gh2YOQafOeidHoaYEdGHc65GDZhMJuXpdDJ99hqkPmZe9e9iTgCoqmrWNM0hDerq/FGftXbcZxFzAgARrZg5vBaNiGpE3OhZRF6Zedu7DzkRYMrMKlQKYBBRQVVgw8zj3n3IGWSg9ESkds6tiqJQbe4AYJ6WGVkPAqh4+romdP9LbXMqZh/gXIKqm+d5EK9vbduOY7d0AAdL6AYLmqbRAQtGRMc4ONF/wSC2RF/PsuwbABapqLEjKqb3fq4sLtoYh6Lbiydr7TbtuwYDgH5qB9XmPEjdKG+Y+Xmo7ms+Lcs5N0uX6ei9X9y4TGtEXIZlukb7PzbdmNcisv8DtQILak2vZsYAAAAASUVORK5CYII='
})
}),
type: 'Circle',
geometryFunction: $DrawInteraction.createBox()
});
this.map.addInteraction(this.drawInteraction_);
this.drawInteraction_.on('drawend', this.textAreaDrawEnd, this);
};
PlotDraw.prototype.textAreaDrawEnd = function textAreaDrawEnd(event) {
if (event && event.feature) {
this.map.removeInteraction(this.drawInteraction_);
var extent = event.feature.getGeometry().getExtent();
var _center = [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];
var topLeft = this.map.getPixelFromCoordinate([extent[0], extent[1]]);
var bottomRight = this.map.getPixelFromCoordinate([extent[2], extent[3]]);
var _ref = [Math.abs(topLeft[0] - bottomRight[0]), Math.abs(topLeft[1] - bottomRight[1])],
_width = _ref[0],
_height = _ref[1];
var _plotText = new PlotTextBox({
id: getuuid(),
position: _center,
value: '',
width: _width,
height: _height,
style: {
width: _width + 'px',
height: _height + 'px'
}
});
if (this.map && this.map instanceof ol.Map && _plotText) {
this.map.addOverlay(_plotText);
} else {
console.warn('未传入地图对象或者plotText创建失败');
}
} else {
console.info('未获取到要素!');
}
};
PlotDraw.prototype.disActive = function disActive() {
this.removeEventHandlers();
if (this.drawInteraction_) {
this.map.removeInteraction(this.drawInteraction_);
this.drawInteraction_ = null;
}
this.points = [];
this.plot = null;
this.feature = null;
this.plotType = null;
this.plotParams = null;
this.activateMapTools();
};
PlotDraw.prototype.isDrawing = function isDrawing() {
return !!this.plotType;
};
PlotDraw.prototype.mapFirstClickHandler = function mapFirstClickHandler(event) {
this.map.un('click', this.mapFirstClickHandler, this);
this.points.push(event.coordinate);
this.plot = this.createPlot(this.plotType, this.points, this.plotParams);
this.feature = new ol.Feature(this.plot);
this.feature.set('isPlot', true);
this.drawLayer.getSource().addFeature(this.feature);
if (this.plotType === POINT || this.plotType === PENNANT) {
this.plot.finishDrawing();
this.drawEnd(event);
} else {
this.map.on('click', this.mapNextClickHandler, this);
if (!this.plot.freehand) {
this.map.on('dblclick', this.mapDoubleClickHandler, this);
}
this.map.un('pointermove', this.mapMouseMoveHandler, this);
this.map.on('pointermove', this.mapMouseMoveHandler, this);
}
if (this.plotType && this.feature) {
this.plotParams['plotType'] = this.plotType;
this.feature.setProperties(this.plotParams);
}
};
PlotDraw.prototype.mapNextClickHandler = function mapNextClickHandler(event) {
if (!this.plot.freehand) {
if (MathDistance(event.coordinate, this.points[this.points.length - 1]) < 0.0001) {
return false;
}
}
this.points.push(event.coordinate);
this.plot.setPoints(this.points);
if (this.plot.fixPointCount === this.plot.getPointCount()) {
this.mapDoubleClickHandler(event);
}
if (this.plot && this.plot.freehand) {
this.mapDoubleClickHandler(event);
}
};
PlotDraw.prototype.mapDoubleClickHandler = function mapDoubleClickHandler(event) {
event.preventDefault();
this.plot.finishDrawing();
this.drawEnd(event);
};
PlotDraw.prototype.mapMouseMoveHandler = function mapMouseMoveHandler(event) {
var coordinate = event.coordinate;
if (MathDistance(coordinate, this.points[this.points.length - 1]) < 0.0001) {
return false;
}
if (!this.plot.freehand) {
var pnts = this.points.concat([coordinate]);
this.plot.setPoints(pnts);
} else {
this.points.push(coordinate);
this.plot.setPoints(this.points);
}
};
PlotDraw.prototype.removeEventHandlers = function removeEventHandlers() {
this.map.un('click', this.mapFirstClickHandler, this);
this.map.un('click', this.mapNextClickHandler, this);
this.map.un('pointermove', this.mapMouseMoveHandler, this);
this.map.un('dblclick', this.mapDoubleClickHandler, this);
};
PlotDraw.prototype.drawEnd = function drawEnd(event) {
this.dispatchSync('drawEnd', {
type: 'drawEnd',
originalEvent: event,
feature: this.feature
});
if (this.feature && this.options['isClear']) {
this.drawLayer.getSource().removeFeature(this.feature);
}
this.disActive();
};
PlotDraw.prototype.addFeature = function addFeature() {
this.feature = new ol.Feature(this.plot);
if (this.feature && this.drawLayer) {
this.drawLayer.getSource().addFeature(this.feature);
}
};
PlotDraw.prototype.deactiveMapTools = function deactiveMapTools() {
var _this2 = this;
var interactions = this.map.getInteractions().getArray();
interactions.every(function (item) {
if (item instanceof ol.interaction.DoubleClickZoom) {
_this2.dblClickZoomInteraction = item;
_this2.map.removeInteraction(item);
return false;
} else {
return true;
}
});
};
PlotDraw.prototype.activateMapTools = function activateMapTools() {
if (this.dblClickZoomInteraction && this.dblClickZoomInteraction instanceof ol.interaction.DoubleClickZoom) {
this.map.addInteraction(this.dblClickZoomInteraction);
this.dblClickZoomInteraction = null;
}
};
return PlotDraw;
}(Observable);
var PlotEdit = function (_Observable) {
inherits(PlotEdit, _Observable);
function PlotEdit(map) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
classCallCheck(this, PlotEdit);
var _this = possibleConstructorReturn(this, _Observable.call(this));
if (map && map instanceof ol.Map) {
_this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
_this.options = options;
_this.mapViewport = _this.map.getViewport();
_this.activePlot = null;
_this.startPoint = null;
_this.ghostControlPoints = null;
_this.controlPoints = null;
_this.mouseOver = false;
_this.elementTable = {};
_this.activeControlPointId = null;
_this.mapDragPan = null;
_this.previousCursor_ = null;
return _this;
}
PlotEdit.prototype.initHelperDom = function initHelperDom() {
var _this2 = this;
if (!this.map || !this.activePlot) {
return false;
}
var parent = this.getMapParentElement();
if (!parent) {
return false;
} else {
var hiddenDiv = createHidden('div', parent, BASE_HELP_HIDDEN);
var cPnts = this.getControlPoints();
if (cPnts && Array.isArray(cPnts) && cPnts.length > 0) {
cPnts.forEach(function (item, index) {
var id = BASE_HELP_CONTROL_POINT_ID + '-' + index;
create('div', BASE_HELP_CONTROL_POINT_ID, hiddenDiv, id);
_this2.elementTable[id] = index;
});
}
}
};
PlotEdit.prototype.getMapParentElement = function getMapParentElement() {
var mapElement = this.map.getTargetElement();
if (!mapElement) {
return false;
} else {
return mapElement.parentNode;
}
};
PlotEdit.prototype.destroyHelperDom = function destroyHelperDom() {
var _this3 = this;
if (this.controlPoints && Array.isArray(this.controlPoints) && this.controlPoints.length > 0) {
this.controlPoints.forEach(function (item, index) {
if (item && item instanceof ol.Overlay) {
_this3.map.removeOverlay(item);
}
var element = getElement(BASE_HELP_CONTROL_POINT_ID + '-' + index);
if (element) {
off(element, 'mousedown', _this3.controlPointMouseDownHandler.bind(_this3));
off(element, 'mousemove', _this3.controlPointMouseMoveHandler2.bind(_this3));
}
});
this.controlPoints = [];
}
var parent = this.getMapParentElement();
var hiddenDiv = getElement(BASE_HELP_HIDDEN);
if (hiddenDiv && parent) {
remove(hiddenDiv, parent);
}
};
PlotEdit.prototype.initControlPoints = function initControlPoints() {
this.controlPoints = [];
var cPnts = this.getControlPoints();
if (cPnts && Array.isArray(cPnts) && cPnts.length > 0) {
if (cPnts.length > this.options['limitControlPoints'] && this.options.hasOwnProperty('limitControlPoints') && this.options['limitControlPoints'] > 2) {
var _n = Math.floor(cPnts.length / (this.options['limitControlPoints'] - 2)) || 1;
for (var i = 0; i < this.options['limitControlPoints'] - 2; i++) {
var _index = (i + 1) * _n - 1;
this._addControlPoint(cPnts, _index);
}
this._addControlPoint(cPnts, 0);
this._addControlPoint(cPnts, cPnts.length - 1);
} else {
for (var _i = 0; _i < cPnts.length; _i++) {
this._addControlPoint(cPnts, _i);
}
}
this.map.render();
}
};
PlotEdit.prototype._addControlPoint = function _addControlPoint(points, _index) {
var id = BASE_HELP_CONTROL_POINT_ID + '-' + _index;
this.elementTable[id] = _index;
var element = getElement(id);
var pnt = new ol.Overlay({
id: id,
position: points[_index],
positioning: 'center-center',
element: element
});
this.controlPoints.push(pnt);
this.map.addOverlay(pnt);
on(element, 'mousedown', this.controlPointMouseDownHandler.bind(this));
on(element, 'mousemove', this.controlPointMouseMoveHandler2.bind(this));
};
PlotEdit.prototype.controlPointMouseMoveHandler2 = function controlPointMouseMoveHandler2(e) {
e.stopImmediatePropagation();
};
PlotEdit.prototype.controlPointMouseDownHandler = function controlPointMouseDownHandler(e) {
this.activeControlPointId = e.target.id;
this.map.on('pointermove', this.controlPointMouseMoveHandler, this);
on(this.mapViewport, 'mouseup', this.controlPointMouseUpHandler.bind(this));
};
PlotEdit.prototype.controlPointMouseMoveHandler = function controlPointMouseMoveHandler(event) {
var coordinate = event.coordinate;
if (this.activeControlPointId) {
var plot = this.activePlot.getGeometry();
var index = this.elementTable[this.activeControlPointId];
plot.updatePoint(coordinate, index);
var overlay = this.map.getOverlayById(this.activeControlPointId);
if (overlay) {
overlay.setPosition(coordinate);
}
}
};
PlotEdit.prototype.controlPointMouseUpHandler = function controlPointMouseUpHandler(event) {
this.map.un('pointermove', this.controlPointMouseMoveHandler, this);
off(this.mapViewport, 'mouseup', this.controlPointMouseUpHandler.bind(this));
};
PlotEdit.prototype.activate = function activate(plot) {
var _this4 = this;
if (plot && plot instanceof ol.Feature && plot.get('isPlot') && plot.getGeometry().isPlot && plot !== this.activePlot) {
this.deactivate();
this.activePlot = plot;
this.previousCursor_ = this.map.getTargetElement().style.cursor;
window.setTimeout(function () {
_this4.dispatch('active_plot_change', _this4.activePlot);
}, 500);
this.map.on('pointermove', this.plotMouseOverOutHandler, this);
this.initHelperDom();
this.initControlPoints();
}
};
PlotEdit.prototype.getControlPoints = function getControlPoints() {
var points = [];
if (this.activePlot) {
var geom = this.activePlot.getGeometry();
if (geom) {
points = geom.getPoints();
}
}
return points;
};
PlotEdit.prototype.plotMouseOverOutHandler = function plotMouseOverOutHandler(e) {
var feature = this.map.forEachFeatureAtPixel(e.pixel, function (feature) {
return feature;
});
if (feature && feature === this.activePlot) {
if (!this.mouseOver) {
this.mouseOver = true;
this.map.getTargetElement().style.cursor = 'move';
this.map.on('pointerdown', this.plotMouseDownHandler, this);
}
} else {
if (this.mouseOver) {
this.mouseOver = false;
this.map.getTargetElement().style.cursor = 'default';
this.map.un('pointerdown', this.plotMouseDownHandler, this);
}
}
return feature;
};
PlotEdit.prototype.plotMouseDownHandler = function plotMouseDownHandler(event) {
this.ghostControlPoints = this.getControlPoints();
this.startPoint = event.coordinate;
this.disableMapDragPan();
this.map.on('pointerup', this.plotMouseUpHandler, this);
this.map.on('pointerdrag', this.plotMouseMoveHandler, this);
};
PlotEdit.prototype.plotMouseMoveHandler = function plotMouseMoveHandler(event) {
var deltaX = event.coordinate[0] - this.startPoint[0],
deltaY = event.coordinate[1] - this.startPoint[1],
newPoints = [];
if (this.ghostControlPoints && Array.isArray(this.ghostControlPoints) && this.ghostControlPoints.length > 0) {
for (var i = 0; i < this.ghostControlPoints.length; i++) {
var coordinate = [this.ghostControlPoints[i][0] + deltaX, this.ghostControlPoints[i][1] + deltaY];
newPoints.push(coordinate);
var id = BASE_HELP_CONTROL_POINT_ID + '-' + i;
var overlay = this.map.getOverlayById(id);
if (overlay) {
overlay.setPosition(coordinate);
overlay.setPositioning('center-center');
}
}
}
var _geometry = this.activePlot.getGeometry();
_geometry.setPoints(newPoints);
};
PlotEdit.prototype.plotMouseUpHandler = function plotMouseUpHandler(event) {
this.enableMapDragPan();
this.map.un('pointerup', this.plotMouseUpHandler, this);
this.map.un('pointerdrag', this.plotMouseMoveHandler, this);
};
PlotEdit.prototype.disconnectEventHandlers = function disconnectEventHandlers() {
this.map.un('pointermove', this.plotMouseOverOutHandler, this);
this.map.un('pointermove', this.controlPointMouseMoveHandler, this);
off(this.mapViewport, 'mouseup', this.controlPointMouseUpHandler.bind(this));
this.map.un('pointerdown', this.plotMouseDownHandler, this);
this.map.un('pointerup', this.plotMouseUpHandler, this);
this.map.un('pointerdrag', this.plotMouseMoveHandler, this);
};
PlotEdit.prototype.deactivate = function deactivate() {
this.activePlot = null;
this.mouseOver = false;
this.map.getTargetElement().style.cursor = this.previousCursor_;
this.previousCursor_ = null;
this.destroyHelperDom();
this.disconnectEventHandlers();
this.enableMapDragPan();
this.elementTable = {};
this.activeControlPointId = null;
this.startPoint = null;
};
PlotEdit.prototype.disableMapDragPan = function disableMapDragPan() {
var _this5 = this;
var interactions = this.map.getInteractions().getArray();
interactions.every(function (item) {
if (item instanceof ol.interaction.DragPan) {
_this5.mapDragPan = item;
_this5.map.removeInteraction(item);
return false;
} else {
return true;
}
});
};
PlotEdit.prototype.enableMapDragPan = function enableMapDragPan() {
if (this.mapDragPan && this.mapDragPan instanceof ol.interaction.DragPan) {
this.map.addInteraction(this.mapDragPan);
this.mapDragPan = null;
}
};
PlotEdit.getLimitControlPoints = function getLimitControlPoints(points, limit) {
var _coordinates = [];
if (points && points.length > 0) {
var _n = Math.floor(points.length / limit) || 1;
for (var i = 0; i < limit; i++) {
_coordinates.push(points[(i + 1) * _n - 1]);
}
}
return _coordinates;
};
return PlotEdit;
}(Observable);
var StyleFactory = function StyleFactory(options) {
var option = options && (typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object' ? options : {};
var style = new ol.style.Style({});
if (option['geometry'] && option['geometry'] instanceof ol.geom.Geometry) {
style.setGeometry(option['geometry']);
}
if (option['zIndex'] && typeof option['zIndex'] === 'number') {
style.setZIndex(option['zIndex']);
}
if (option['fill'] && _typeof(option['fill']) === 'object') {
style.setFill(this._getFill(option['fill']));
}
if (option['image'] && _typeof(option['image']) === 'object') {
style.setImage(this._getImage(option['image']));
}
if (option['stroke'] && _typeof(option['stroke']) === 'object') {
style.setStroke(this._getStroke(option['stroke']));
}
if (option['text'] && _typeof(option['text']) === 'object') {
style.setText(this._getText(option['text']));
}
return style;
};
StyleFactory.prototype._getRegularShape = function (options) {
try {
var regularShape = new ol.style.RegularShape({
fill: this._getFill(options['fill']) || undefined,
points: typeof options['points'] === 'number' ? options['points'] : 1,
radius: typeof options['radius'] === 'number' ? options['radius'] : undefined,
radius1: typeof options['radius1'] === 'number' ? options['radius1'] : undefined,
radius2: typeof options['radius2'] === 'number' ? options['radius2'] : undefined,
angle: typeof options['angle'] === 'number' ? options['angle'] : 0,
snapToPixel: typeof options['snapToPixel'] === 'boolean' ? options['snapToPixel'] : true,
stroke: this._getStroke(options['stroke']) || undefined,
rotation: typeof options['rotation'] === 'number' ? options['rotation'] : 0,
rotateWithView: typeof options['rotateWithView'] === 'boolean' ? options['rotateWithView'] : false,
atlasManager: options['atlasManager'] ? options['atlasManager'] : undefined
});
return regularShape;
} catch (e) {
console.log(e);
}
};
StyleFactory.prototype._getImage = function (options) {
try {
var image = void 0;
options = options || {};
if (options['type'] === 'icon') {
image = this._getIcon(options['image']);
} else {
image = this._getRegularShape(options['image']);
}
return image;
} catch (e) {
console.log(e);
}
};
StyleFactory.prototype._getIcon = function (options) {
try {
options = options || {};
var icon = new ol.style.Icon({
anchor: options['imageAnchor'] ? options['imageAnchor'] : [0.5, 0.5],
anchorXUnits: options['imageAnchorXUnits'] ? options['imageAnchorXUnits'] : 'fraction',
anchorYUnits: options['imageAnchorYUnits'] ? options['imageAnchorYUnits'] : 'fraction',
anchorOrigin: options['imageAnchorOrigin'] ? options['imageAnchorYUnits'] : 'top-left',
color: options['imageColor'] ? options['imageColor'] : undefined,
crossOrigin: options['crossOrigin'] ? options['crossOrigin'] : undefined,
img: options['img'] ? options['img'] : undefined,
offset: options['offset'] && Array.isArray(options['offset']) && options['offset'].length === 2 ? options['offset'] : [0, 0],
offsetOrigin: options['offsetOrigin'] ? options['offsetOrigin'] : 'top-left',
scale: typeof options['scale'] === 'number' ? options['scale'] : 1,
snapToPixel: typeof options['snapToPixel'] === 'boolean' ? options['snapToPixel'] : true,
rotateWithView: typeof options['rotateWithView'] === 'boolean' ? options['rotateWithView'] : false,
opacity: typeof options['imageOpacity'] === 'number' ? options['imageOpacity'] : 1,
rotation: typeof options['imageRotation'] === 'number' ? options['imageRotation'] : 0,
size: options['size'] && Array.isArray(options['size']) && options['size'].length === 2 ? options['size'] : undefined,
imgSize: options['imgSize'] && Array.isArray(options['imgSize']) && options['imgSize'].length === 2 ? options['imgSize'] : undefined,
src: options['imageSrc'] ? options['imageSrc'] : undefined
});
return icon;
} catch (error) {
console.log(error);
}
};
StyleFactory.prototype._getStroke = function (options) {
try {
options = options || {};
var stroke = new ol.style.Stroke({
color: options['strokeColor'] ? options['strokeColor'] : undefined,
lineCap: options['strokeLineCap'] && typeof options['strokeLineCap'] === 'string' ? options['strokeLineCap'] : 'round',
lineJoin: options['strokeLineJoin'] && typeof options['strokeLineJoin'] === 'string' ? options['strokeLineJoin'] : 'round',
lineDash: options['strokeLineDash'] ? options['strokeLineDash'] : undefined,
lineDashOffset: typeof options['strokeLineDashOffset'] === 'number' ? options['strokeLineDashOffset'] : '0',
miterLimit: typeof options['strokeMiterLimit'] === 'number' ? options['strokeMiterLimit'] : 10,
width: typeof options['strokeWidth'] === 'number' ? options['strokeWidth'] : undefined
});
return stroke;
} catch (error) {
console.log(error);
}
};
StyleFactory.prototype._getText = function (options) {
try {
var text = new ol.style.Text({
font: options['textFont'] && typeof options['textFont'] === 'string' ? options['textFont'] : '10px sans-serif',
offsetX: typeof options['textOffsetX'] === 'number' ? options['textOffsetX'] : 0,
offsetY: typeof options['textOffsetY'] === 'number' ? options['textOffsetY'] : 0,
scale: typeof options['textScale'] === 'number' ? options['textScale'] : undefined,
rotation: typeof options['textRotation'] === 'number' ? options['textRotation'] : 0,
text: options['text'] && typeof options['text'] === 'string' ? options['text'] : undefined,
textAlign: options['textAlign'] && typeof options['textAlign'] === 'string' ? options['textAlign'] : 'start',
textBaseline: options['textBaseline'] && typeof options['textBaseline'] === 'string' ? options['textBaseline'] : 'alphabetic',
rotateWithView: typeof options['rotateWithView'] === 'boolean' ? options['rotateWithView'] : false,
fill: this._getFill(options['textFill']),
stroke: this._getStroke(options['textStroke'])
});
return text;
} catch (error) {
console.log(error);
}
};
StyleFactory.prototype._getFill = function (options) {
try {
options = options || {};
var fill = new ol.style.Fill({
color: options['fillColor'] ? options['fillColor'] : undefined
});
return fill;
} catch (error) {
console.log(error);
}
};
var PlotUtils = function () {
function PlotUtils(map, options) {
classCallCheck(this, PlotUtils);
if (map && map instanceof ol.Map) {
this.map = map;
} else {
throw new Error('传入的不是地图对象!');
}
this.options = options;
this.layerName = this.options && this.options['layerName'] ? this.options['layerName'] : BASE_LAYERNAME;
}
PlotUtils.prototype.getBaseStyle = function getBaseStyle(feature) {
var style = feature.getStyle();
if (!style) {
var layer = getLayerByLayerName(this.map, this.layerName);
if (layer && layer instanceof ol.layer.Vector) {
style = layer.getStyle();
} else {
return false;
}
}
return style;
};
PlotUtils.prototype.setIcon = function setIcon(feature, image) {
try {
if (feature && feature instanceof ol.Feature) {
var style = this.getBaseStyle(feature);
var tempStyle = style.clone();
var _image = this._getImage(image);
if (_image) {
tempStyle.setImage(_image);
feature.setStyle(tempStyle);
}
}
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.setBackgroundColor = function setBackgroundColor(feature, backgroundColor) {
try {
if (feature && feature instanceof ol.Feature) {
var style = this.getBaseStyle(feature);
var tempStyle = style.clone();
var fill = tempStyle.getFill();
var color = fill.getColor();
if (color) {
var tempColor = ol.color.asArray(color);
var _color = ol.color.asArray(backgroundColor);
var currentColor = this.handleBackgroundColor(_color, tempColor[3]);
fill.setColor(currentColor);
feature.setStyle(tempStyle);
}
}
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.setOpacity = function setOpacity(feature, opacity) {
try {
if (feature && feature instanceof ol.Feature) {
var style = this.getBaseStyle(feature);
if (style) {
var tempStyle = style.clone();
var fill = tempStyle.getFill();
var color = fill.getColor();
if (color) {
var tempColor = ol.color.asArray(color);
tempColor[3] = opacity;
var currentColor = 'rgba(' + tempColor.join(',') + ')';
fill.setColor(currentColor);
feature.setStyle(tempStyle);
}
}
}
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.setBorderColor = function setBorderColor(feature, borderColor) {
try {
if (feature && feature instanceof ol.Feature) {
var style = this.getBaseStyle(feature);
var tempStyle = style.clone();
var stroke = tempStyle.getStroke();
stroke.setColor(borderColor);
feature.setStyle(tempStyle);
}
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.setBorderWidth = function setBorderWidth(feature, borderWidth) {
try {
if (feature && feature instanceof ol.Feature) {
var style = this.getBaseStyle(feature);
var tempStyle = style.clone();
var stroke = tempStyle.getStroke();
stroke.setWidth(borderWidth);
feature.setStyle(tempStyle);
}
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.handleBackgroundColor = function handleBackgroundColor(color, opacity) {
try {
if (!opacity) opacity = 1;
var tempColor = ol.color.asArray(color);
tempColor[3] = opacity;
return 'rgba(' + tempColor.join(',') + ')';
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.getColor = function getColor(color) {
try {
var colorTarget = ol.color.asArray(color);
return ol.color.asString(colorTarget);
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.fixObject = function fixObject(obj) {
if (obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object') {
for (var key in obj) {
if (key && typeof obj[key] === 'undefined') {
delete obj[key];
}
}
}
return obj;
};
PlotUtils.prototype.getStroke_ = function getStroke_(style) {
var stroke = null;
if (style) {
var olStyle_ = style.getStroke();
if (olStyle_) {
stroke = {};
stroke['strokeColor'] = this.getColor(olStyle_.getColor());
stroke['strokeWidth'] = olStyle_.getWidth();
stroke['strokeLineDash'] = olStyle_.getLineDash();
stroke['lineDashOffset'] = olStyle_.getLineDashOffset();
stroke['strokeLineCap'] = olStyle_.getLineCap();
stroke['strokeLineJoin'] = olStyle_.getLineJoin();
stroke['strokeMiterLimit'] = olStyle_.getMiterLimit();
}
}
return this.fixObject(stroke);
};
PlotUtils.prototype.getFill_ = function getFill_(style) {
var fill = null;
if (style) {
var olStyle_ = style.getFill();
if (olStyle_) {
fill = {};
var color = olStyle_.getColor();
fill['fillColor'] = this.getColor(color);
}
}
return this.fixObject(fill);
};
PlotUtils.prototype.getText_ = function getText_(style) {
var text = null;
if (style) {
var olStyle_ = style.getText();
if (olStyle_) {
text = {};
text['textFont'] = olStyle_.getFont();
text['textOffsetX'] = olStyle_.getOffsetX();
text['textOffsetY'] = olStyle_.getOffsetY();
text['textScale'] = olStyle_.getScale();
text['textRotation'] = olStyle_.getRotation();
text['text'] = olStyle_.getText();
text['textAlign'] = olStyle_.getTextAlign();
text['textBaseline'] = olStyle_.getTextBaseline();
text['rotateWithView'] = olStyle_.getRotateWithView();
text['textFill'] = this.getFill_(olStyle_);
text['textStroke'] = this.getStroke_(olStyle_);
}
}
return this.fixObject(text);
};
PlotUtils.prototype.getImage_ = function getImage_(style) {
var image = null;
if (style) {
var olStyle_ = style.getImage();
if (olStyle_) {
image = {};
if (olStyle_ instanceof ol.style.Icon) {
image['type'] = 'icon';
image['image'] = {};
image['image']['imageAnchor'] = olStyle_.getAnchor();
image['image']['imageColor'] = olStyle_.getColor();
image['image']['imageSrc'] = olStyle_.getSrc();
image['image']['imgSize'] = olStyle_.getSize();
image['image']['scale'] = olStyle_.getScale();
image['image']['imageRotation'] = olStyle_.getRotation();
image['image']['rotateWithView'] = olStyle_.getRotateWithView();
image['image']['imageOpacity'] = olStyle_.getOpacity();
image['image']['snapToPixel'] = olStyle_.getSnapToPixel();
image['image']['offset'] = olStyle_.getOrigin();
} else if (olStyle_ instanceof ol.style.RegularShape) {
image['type'] = '';
image['image'] = {};
image['image']['fill'] = this.getFill_(olStyle_);
image['image']['points'] = olStyle_.getPoints();
image['image']['radius'] = olStyle_.getRadius();
image['image']['radius2'] = olStyle_.getRadius2();
image['image']['angle'] = olStyle_.getAngle();
image['image']['stroke'] = this.getStroke_(olStyle_);
image['image']['rotateWithView'] = olStyle_.getRotateWithView();
image['image']['snapToPixel'] = olStyle_.getSnapToPixel();
}
}
}
return this.fixObject(image);
};
PlotUtils.prototype.getStyleCode = function getStyleCode(feature) {
try {
if (feature && feature instanceof ol.Feature) {
var style = this.getBaseStyle(feature);
if (style && style instanceof ol.style.Style) {
var fill = this.getFill_(style);
var _ref = [1, null],
opacity = _ref[0],
rgbaArray = _ref[1],
backgroundColor = _ref[2];
if (fill && fill['fillColor']) {
rgbaArray = ol.color.asArray(fill['fillColor']);
opacity = parseFloat(rgbaArray[3]);
if (rgbaArray && typeof opacity === 'number') {
backgroundColor = this.handleBackgroundColor(ol.color.asString(rgbaArray), opacity);
}
}
var stroke = this.getStroke_(style);
var text = this.getText_(style);
var icon = this.getImage_(style);
return {
fill: {
fillColor: backgroundColor,
opacity: opacity
},
stroke: stroke,
image: icon,
text: text
};
}
}
} catch (e) {
console.warn(e);
}
};
PlotUtils.prototype.removeAllFeatures = function removeAllFeatures() {
var layer = getLayerByLayerName(this.map, this.layerName);
var overlays_ = this.map.getOverlays().getArray();
if (layer) {
var source = layer.getSource();
source.clear();
}
if (overlays_ && overlays_.length > 0) {
var len = overlays_.length;
for (var i = 0; i < len; i++) {
if (overlays_[i] && overlays_[i].get('isPlotText')) {
this.map.removeOverlay(overlays_[i]);
i--;
}
}
}
};
PlotUtils.prototype.getFeatures = function getFeatures() {
var _this = this;
var rFeatures = [];
var layer = getLayerByLayerName(this.map, this.layerName);
if (layer) {
var source = layer.getSource();
if (source && source instanceof ol.source.Vector) {
var features = source.getFeatures();
if (features && features.length > 0) {
features.forEach(function (feature, index) {
if (feature && feature.getGeometry) {
var geom = feature.getGeometry();
if (geom && geom.getCoordinates) {
var type = geom.getType();
var coordinates = geom.getCoordinates();
rFeatures.push({
'type': 'Feature',
'geometry': {
'type': type,
'coordinates': coordinates
},
'properties': {
'type': feature.getGeometry().getPlotType(),
'style': _this.getStyleCode(feature),
'points': feature.getGeometry().getPoints()
}
});
}
}
});
}
}
}
var overlays_ = this.map.getOverlays().getArray();
overlays_.forEach(function (overlay) {
if (overlay.get('isPlotText')) {
var style_ = overlay.getStyle();
style_['width'] = overlay.getWidth() + 'px';
style_['height'] = overlay.getHeight() + 'px';
rFeatures.push({
'type': 'Feature',
'geometry': {
'type': 'PlotText',
'coordinates': overlay.getPosition()
},
'properties': {
'id': overlay.getId(),
'width': overlay.getWidth(),
'height': overlay.getHeight(),
'style': style_,
'value': overlay.getValue()
}
});
}
});
return rFeatures;
};
PlotUtils.prototype.addFeatures = function addFeatures(features) {
var _this2 = this;
if (features && Array.isArray(features) && features.length > 0) {
var layer = getLayerByLayerName(this.map, this.layerName);
if (!layer) {
layer = createVectorLayer(this.map, this.layerName, {
create: true
});
layer.setZIndex(this.options['zIndex'] || 99);
}
if (layer) {
var source = layer.getSource();
if (source && source instanceof ol.source.Vector) {
var _extents = [];
features.forEach(function (feature) {
if (feature && feature['geometry'] && feature['geometry']['type'] !== 'PlotText') {
if (feature['properties']['type'] && Geometry[feature['properties']['type']]) {
var feat = new ol.Feature({
geometry: new Geometry[feature['properties']['type']]([], feature['properties']['points'], feature['properties'])
});
feat.set('isPlot', true);
_extents.push(feat.getGeometry().getExtent());
if (feature['properties']['style']) {
var style_ = new StyleFactory(feature['properties']['style']);
if (style_) {
feat.setStyle(style_);
}
}
source.addFeature(feat);
} else {
console.warn('不存在的标绘类型!');
}
} else if (feature && feature['geometry'] && feature['geometry']['type'] === 'PlotText') {
_extents.push(new ol.geom.Point(feature.geometry['coordinates']).getExtent());
var _plotText = new PlotTextBox({
id: feature.properties.id,
position: feature.geometry['coordinates'],
width: feature.properties['width'],
height: feature.properties['height'],
value: feature.properties['value'],
style: feature.properties.style
});
if (_this2.map && _this2.map instanceof ol.Map && _plotText) {
_this2.map.addOverlay(_plotText);
} else {
console.warn('未传入地图对象或者plotText创建失败');
}
}
});
if (this.options['zoomToExtent'] && _extents && _extents.length > 0) {
var _extent = this._getExtent(_extents);
var size = this.map.getSize();
var _view = this.map.getView();
_view.fit(_extent, {
size: size,
duration: 800,
maxZoom: _view.getMaxZoom() || undefined
});
}
}
}
}
};
PlotUtils.prototype._getExtent = function _getExtent(extents) {
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var bbox = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];
var _extent = extents.reduce(function (prev, coord) {
return [Math.min(coord[0], prev[0]), Math.min(coord[1], prev[1]), Math.max(coord[2], prev[2]), Math.max(coord[3], prev[3])];
}, bbox);
var size = ol.extent.getSize(_extent);
var adjust = typeof params['adjust'] === 'number' ? params['adjust'] : 0.2;
var minWidth = typeof params['minWidth'] === 'number' ? params['minWidth'] : 0.05;
var minHeight = typeof params['minHeight'] === 'number' ? params['minHeight'] : 0.05;
if (size[0] <= minWidth || size[1] <= minHeight) {
var bleft = ol.extent.getBottomLeft(_extent);
var tright = ol.extent.getTopRight(_extent);
var xmin = bleft[0] - adjust;
var ymin = bleft[1] - adjust;
var xmax = tright[0] + adjust;
var ymax = tright[1] + adjust;
_extent = ol.extent.buffer([xmin, ymin, xmax, ymax], adjust);
}
return _extent;
};
return PlotUtils;
}();
var olPlot = function olPlot(map, options) {
classCallCheck(this, olPlot);
this.plotDraw = new PlotDraw(map, options);
this.plotEdit = new PlotEdit(map, options);
this.plotUtils = new PlotUtils(map, options);
};
olPlot.PlotTypes = PlotTypes;
olPlot.Geometry = Geometry;
return olPlot;
})));