yk-smart-ui-test
Version:
A Component Library for Vue.js.
1,666 lines (1,602 loc) • 63.7 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/dist/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 160);
/******/ })
/************************************************************************/
/******/ ({
/***/ 160:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// EXTERNAL MODULE: external "vue-slider-component"
var external_vue_slider_component_ = __webpack_require__(47);
var external_vue_slider_component_default = /*#__PURE__*/__webpack_require__.n(external_vue_slider_component_);
// EXTERNAL MODULE: external "vue-slider-component/theme/default.css"
var default_css_ = __webpack_require__(54);
// CONCATENATED MODULE: ./packages/routebook/src/mapStyle.js
/* harmony default export */ var mapStyle = ({
styleJson: [{
'featureType': 'land',
'elementType': 'geometry',
'stylers': {
'color': '#fcfcfc'
}
}, {
'featureType': 'water',
'elementType': 'geometry',
'stylers': {
'color': '#d5e2f8'
}
}, {
'featureType': 'label',
'elementType': 'labels.text.fill',
'stylers': {
'color': '#585d99'
}
}, {
'featureType': 'highway',
'elementType': 'geometry.fill',
'stylers': {
'color': '#b5caa0ff'
}
}, {
'featureType': 'highway',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#94ad79ff'
}
}, {
'featureType': 'nationalway',
'elementType': 'geometry.fill',
'stylers': {
'color': '#b5caa0ff'
}
}, {
'featureType': 'arterial',
'elementType': 'geometry.fill',
'stylers': {
'color': '#d4e2c6ff'
}
}, {
'featureType': 'cityhighway',
'elementType': 'geometry.fill',
'stylers': {
'color': '#d4e2c6ff'
}
}, {
'featureType': 'provincialway',
'elementType': 'geometry.fill',
'stylers': {
'color': '#d4e2c6ff'
}
}, {
'featureType': 'provincialway',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#b5caa0ff'
}
}, {
'featureType': 'tertiaryway',
'elementType': 'geometry.fill',
'stylers': {
'color': '#ffffffff'
}
}, {
'featureType': 'tertiaryway',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#b5caa0ff'
}
}, {
'featureType': 'fourlevelway',
'elementType': 'geometry.fill',
'stylers': {
'color': '#ffffffff'
}
}, {
'featureType': 'fourlevelway',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#b5caa0ff'
}
}, {
'featureType': 'subway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'railway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'highwaysign',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'highwaysign',
'elementType': 'labels.icon',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'nationalwaysign',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'nationalwaysign',
'elementType': 'labels.icon',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'provincialwaysign',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'provincialwaysign',
'elementType': 'labels.icon',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'tertiarywaysign',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'tertiarywaysign',
'elementType': 'labels.icon',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'subwaylabel',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'subwaylabel',
'elementType': 'labels.icon',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'nationalway',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#94ad79ff'
}
}, {
'featureType': 'cityhighway',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#b5caa0ff'
}
}, {
'featureType': 'arterial',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#b5caa0ff'
}
}, {
'featureType': 'highway',
'stylers': {
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'stylers': {
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'stylers': {
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'stylers': {
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'highway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'stylers': {
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'stylers': {
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'stylers': {
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'stylers': {
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'nationalway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'provincialway',
'stylers': {
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '8-9'
}
}, {
'featureType': 'provincialway',
'stylers': {
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '8-9'
}
}, {
'featureType': 'provincialway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '8-9'
}
}, {
'featureType': 'provincialway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '8-9'
}
}, {
'featureType': 'provincialway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '8-9'
}
}, {
'featureType': 'provincialway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '8-9'
}
}, {
'featureType': 'cityhighway',
'stylers': {
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'stylers': {
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'stylers': {
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'stylers': {
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'geometry',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '6',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '7',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '8',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'cityhighway',
'elementType': 'labels',
'stylers': {
'visibility': 'off',
'level': '9',
'curZoomRegionId': '0',
'curZoomRegion': '6-9'
}
}, {
'featureType': 'entertainment',
'elementType': 'geometry',
'stylers': {
'color': '#e4f0d7ff'
}
}, {
'featureType': 'manmade',
'elementType': 'geometry',
'stylers': {
'color': '#effcf0ff'
}
}, {
'featureType': 'education',
'elementType': 'geometry',
'stylers': {
'color': '#e3f7e4ff'
}
}, {
'featureType': 'building',
'elementType': 'geometry.stroke',
'stylers': {
'color': '#a1cfa4ff'
}
}, {
'featureType': 'poilabel',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'poilabel',
'elementType': 'labels.icon',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'education',
'elementType': 'labels.text.fill',
'stylers': {
'color': '#7a7a7aff'
}
}, {
'featureType': 'education',
'elementType': 'labels.text.stroke',
'stylers': {
'color': '#ffffffff'
}
}, {
'featureType': 'education',
'elementType': 'labels.text',
'stylers': {
'fontsize': '26'
}
}, {
'featureType': 'manmade',
'elementType': 'labels.text.fill',
'stylers': {
'color': '#afafafff'
}
}, {
'featureType': 'manmade',
'elementType': 'labels.text',
'stylers': {
'fontsize': '26'
}
}, {
'featureType': 'scenicspotslabel',
'elementType': 'labels.text.fill',
'stylers': {
'color': '#376b6dff'
}
}, {
'featureType': 'scenicspots',
'elementType': 'labels',
'stylers': {
'visibility': 'off'
}
}, {
'featureType': 'scenicspotslabel',
'elementType': 'labels',
'stylers': {
'visibility': 'on'
}
}, {
'featureType': 'scenicspotslabel',
'elementType': 'labels.text.stroke',
'stylers': {
'color': '#ffffffff',
'weight': '4'
}
}, {
'featureType': 'country',
'elementType': 'labels.text.fill',
'stylers': {
'color': '#376b6dff'
}
}, {
'featureType': 'country',
'elementType': 'labels.text.stroke',
'stylers': {
'color': '#ffffffff',
'weight': '3'
}
}, {
'featureType': 'water',
'elementType': 'labels.text.fill',
'stylers': {
'color': '#ffffffff'
}
}, {
'featureType': 'water',
'elementType': 'labels.text.stroke',
'stylers': {
'color': '#ffffff00'
}
}, {
'featureType': 'water',
'elementType': 'labels.text',
'stylers': {
'fontsize': '24'
}
}]
});
// CONCATENATED MODULE: ./node_modules/_babel-loader@7.1.5@babel-loader/lib!./node_modules/_vue-loader@15.9.8@vue-loader/lib??vue-loader-options!./packages/routebook/src/main.vue?vue&type=script&lang=js&
//
// import BMap from 'BMap'
var BMap = null;
var ComplexCustomOverlay = null;
/* harmony default export */ var mainvue_type_script_lang_js_ = ({
name: 'YkRoutebook',
components: {
VueSlider: external_vue_slider_component_default.a
},
props: {
longitudeKey: {
type: String,
default: 'lon'
},
latitudeKey: {
type: String,
default: 'lat'
},
initPoint: {
// 初始化中心点位置。如果points有数据。就取第一个
type: Object,
default: function _default() {
return {
lon: 116.403984,
lat: 39.914034
};
}
},
height: {
type: String,
default: '600px'
},
/*
* point格式{lat: , lng: , color: }
* */
points: {
type: Array,
default: function _default() {
return [];
},
required: true
},
pointsArr: {
// 地图打点,停留点,事件点等
type: Array,
default: function _default() {
return [];
}
},
pointsColor: {
type: String,
default: '#DD425A'
},
play: {
// 播放状态
type: Boolean,
default: false
},
zoom: {
// 地图缩放等级
type: Number,
default: 6
},
speed: {
// 倍数
type: Number,
default: 1
},
speedArr: {
type: Array,
default: function _default() {
return [1, 2, 5, 10, 20, 50, 100];
}
},
speedBase: {
// 速度
type: Number,
default: 100
},
lineWidth: {
// 路径线宽度
type: Number,
default: 4
},
progress: {
// 进度
type: Number,
default: 0
},
direction: {
// Icon偏离角度
type: Number,
default: -60
},
showPoints: Boolean, // 是否显示途经点
showInfoWin: {
// 始终显示infoWindow(如果设置了landmarkPois,必须为true,两者只能生效一个)
type: Boolean,
default: false
},
autoCenter: {
// 实时刷新中心点。
type: Boolean,
default: true
},
colorsArrResource: {
type: Array,
default: function _default() {
return [
// 速度颜色数组
{ key: '#F4D035', name: '0~30km/h', min: 0, max: 30 }, { key: '#4CAF50', name: '30~60km/h', min: 30, max: 60 }, { key: '#2E63FD', name: '60~80km/h', min: 60, max: 80 }, { key: '#5D3FE4', name: '80~100km/h', min: 80, max: 100 }, { key: '#DD425A', name: '>100km/h', min: 100 }];
}
},
ctrlIcons: {
type: Object,
default: function _default() {
return {
left: __webpack_require__(75),
play: {
active: __webpack_require__(76),
inactive: __webpack_require__(77)
},
right: __webpack_require__(78)
};
}
}
},
data: function data() {
return {
map: null,
startIndex: 0,
car: null,
timeId: null,
angle: 60, // 旋转角度
myCompOverlay: null,
myPopOverlay: null,
showInfoWindow: this.showInfoWin, // 是否显示info弹窗
curPlay: this.play, // 播放状态
curProgress: 0, // 当前播放进度
curSpeed: 1, // 倍数
parsedPoints: [], // 处理点分组
value: 0,
pointsBMap: []
};
},
computed: {
beginEndTime: function beginEndTime() {
return this.points.length > 0 ? {
startTime: this.points[0].reportTime,
endTime: this.points[this.points.length - 1].reportTime
} : {};
},
colorsArr: function colorsArr() {
return this.colorsArrResource.filter(function (item) {
return item.min > 0 || item.max > 0;
});
}
},
watch: {
play: function play(newv) {
this.curPlay = newv;
if (newv) {
if (!this.car) this.$emit('update:play', false);else this.start();
} else {
this.pause();
}
},
points: function points(newv) {
console.log('newv', newv);
this.clearMap();
this.initLinesArr();
// this.initLine()
// let lon = this.points.length > 0 ? this.points[0].lon : this.initPoint.lon
// let lat = this.points.length > 0 ? this.points[0].lat : this.initPoint.lat
if (this.points.length > 0) {
this.initCar(this.points[0][this.longitudeKey], this.points[0][this.latitudeKey]); // 画车
this.initStartEndPoint(); // 画开始结束的点
}
},
curSpeed: function curSpeed() {
if (this.timeId) this.start();
},
curProgress: function curProgress(newv) {
if (this.points.length > 0) {
this.startIndex = newv;
if (newv < 0) {
this.startIndex = 0;
}
if (newv < this.points.length - 1) {
this.angle = Number(this.points[this.startIndex].direction) + this.direction;
} else {
this.startIndex = this.points.length - 1;
}
this.initCar(this.points[this.startIndex][this.longitudeKey], this.points[this.startIndex][this.latitudeKey]);
}
},
colorsArr: function colorsArr(newv) {
this.parsedPoints = []; // 清空已有数组
this.pointsBMap.forEach(function (item) {
item.enableMassClear();
});
if (this.points.length > 0) {
this.initLinesArr();
}
},
showPoints: function showPoints(newv) {
if (newv && this.pointsArr.length > 0) this.initPoints();else {
this.map.clearOverlays();
}
}
},
mounted: function mounted() {
BMap = window.BMap;
ComplexCustomOverlay = function ComplexCustomOverlay(point, el) {
this._point = point;
this._div = el;
};
ComplexCustomOverlay.prototype = new BMap.Overlay();
ComplexCustomOverlay.prototype.initialize = function (map) {
this._map = map;
map.getPanes().labelPane.appendChild(this._div);
return this._div;
};
ComplexCustomOverlay.prototype.draw = function () {
var map = this._map;
var pixel = map.pointToOverlayPixel(this._point);
/* 获取地图东北与西南角*/
var NorthEast = map.getBounds().getNorthEast(); // 东北 - 上右
var SouthWest = map.getBounds().getSouthWest(); // 西南 - 下左
var o = 20; // 距离边缘和小车的偏移值
var offsetLeft = 0;
var offsetTop = this._div.offsetHeight + o;
var lng = void 0,
lat = void 0;
var northEastX = map.pointToOverlayPixel(NorthEast).x;
var northEastY = map.pointToOverlayPixel(NorthEast).y;
if (pixel.x + this._div.offsetWidth >= northEastX) {
// console.log('到右边了')
lng = NorthEast.lng;
lat = this._point.lat;
offsetLeft = -this._div.offsetWidth - o;
pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat));
}
if (pixel.y - this._div.offsetHeight - o <= northEastY) {
// console.log('到上边了')
lng = this._point.lng;
lat = NorthEast.lat;
offsetTop = -30;
pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat));
}
// 超出下边/左边范围
if (this._point.lng < SouthWest.lng || this._point.lat < SouthWest.lat) {
// console.log('左下')
lng = this._point.lng < SouthWest.lng ? SouthWest.lng : this._point.lng;
lat = this._point.lat < SouthWest.lat ? SouthWest.lat : this._point.lat;
pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat));
if (this._point.lng < SouthWest.lng) {
offsetLeft = o;
}
}
if (this._point.lat > NorthEast.lat) {
// console.log('上.....')
lng = this._point.lng;
lat = NorthEast.lat;
offsetTop = -o;
pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat));
}
if (this._point.lng < SouthWest.lng && this._point.lat > NorthEast.lat) {
// console.log('左上。。。。')
lng = SouthWest.lng;
lat = NorthEast.lat;
offsetTop = -o;
pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat));
}
if (pixel.y - this._div.offsetHeight - o <= northEastY && pixel.x + this._div.offsetWidth >= northEastX) {
// console.log('上右')
lng = NorthEast.lng;
lat = NorthEast.lat;
offsetLeft = -this._div.offsetWidth - o;
offsetTop = -o;
pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat));
}
if (pixel.x + this._div.offsetWidth >= northEastX && this._point.lat < SouthWest.lat) {
// console.log('右下角')
lng = NorthEast.lng;
lat = SouthWest.lat;
offsetLeft = -this._div.offsetWidth - o;
pixel = map.pointToOverlayPixel(new BMap.Point(lng, lat));
}
// console.log('分割线--------------------------------------------------------')
// if (
// NorthEast.lng > 180 ||
// SouthWest.lng > 180 ||
// NorthEast.lat > 90 ||
// SouthWest.lat > 90 ||
// NorthEast.lng < 0 ||
// SouthWest.lng < 0 ||
// NorthEast.lat < 0 ||
// SouthWest.lat < 0
// ) {
// setTimeout(() => {
// map.setCenter(this._point)
// }, 100)
// alert('超过经纬度限制!')
// }
this._div.style.left = pixel.x + offsetLeft + 'px';
this._div.style.top = pixel.y - offsetTop + 'px';
};
this.initMap();
this.curSpeed = this.speedArr[0];
},
methods: {
initMap: function initMap() {
var that = this;
var map = new BMap.Map(this.$refs.mapInner, {
enableMapClick: false,
minZoom: 6,
maxZoom: 18
});
map.enableScrollWheelZoom(new BMap.Point(this.points[0] ? this.points[0][this.longitudeKey] : this.initPoint[this.longitudeKey] || this.initPoint.lon, this.points[0] ? this.points[0][this.latitudeKey] : this.initPoint[this.latitudeKey] || this.initPoint.lat), this.zoom);
map.centerAndZoom(new BMap.Point(this.points[0] ? this.points[0][this.longitudeKey] : this.initPoint[this.longitudeKey] || this.initPoint.lon, this.points[0] ? this.points[0][this.latitudeKey] : this.initPoint[this.latitudeKey] || this.initPoint.lat), this.zoom);
this.map = map;
if (this.points.length > 0) {
this.clearMap();
this.initLinesArr();
this.initLine();
this.initCar(this.points[0][this.longitudeKey], this.points[0][this.latitudeKey]); // 画车
this.initStartEndPoint(); // 画开始结束的点
}
this.map.setMapStyle(mapStyle);
this.map.addEventListener('zoomend', function () {
that.initInfoWindow('zoomend');
});
},
initPoints: function initPoints() {
var _this2 = this;
var _this = this;
// 地图打点
this.pointsArr.forEach(function (item, index) {
var p = new BMap.Point(item[_this2.longitudeKey], item[_this2.latitudeKey]);
var pointMarker = new BMap.Marker(p, {
icon: new BMap.Icon(__webpack_require__(79), new BMap.Size(32, 32)),
zIndex: 99
});
pointMarker.addEventListener('mouseover', function (e) {
console.log('mouseover', e.currentTarget);
_this.hoverPopCard(e.currentTarget);
_this.$emit('clickPoint', item);
});
pointMarker.addEventListener('mouseout', function (e) {
_this.clearPopcard(e.currentTarget);
});
_this2.map.addOverlay(pointMarker);
});
},
initLinesArr: function initLinesArr() {
var _this3 = this;
// 初始化分段数组
this.points.forEach(function (item) {
var speed = parseInt(item.speed);
for (var i = 0; i < _this3.colorsArr.length; i++) {
var element = _this3.colorsArr[i];
if (element.max ? speed < element.max && speed > element.min : speed > element.min) {
_this3.pushData(element.min, item, element);
} else if (element.min === 0 && element.max === 0) {
_this3.pushData(element.min, item, _this3.colorsArr[i + 1]);
}
}
});
this.initLine();
},
pushData: function pushData(tag, value, color) {
if (this.parsedPoints.length === 0 || this.parsedPoints[this.parsedPoints.length - 1].tag !== tag) {
this.parsedPoints.push({
tag: tag,
color: color.key,
points: []
});
}
this.parsedPoints[this.parsedPoints.length - 1].points.push(value);
},
initLine: function initLine() {
var _this4 = this;
// 清除已有的线
var allLines = this.map.getOverlays();
allLines.forEach(function (item) {
_this4.map.removeOverlay(item);
});
console.log('initLine', allLines);
// 画轨迹
// 画不同颜色的路线
this.parsedPoints.forEach(function (item, index, arr) {
// 解决断点情况。每个首尾相连
if (index + 1 < arr.length) {
item.points.push(arr[index + 1].points[0]);
}
var polyLine = new BMap.Polyline(item.points.map(function (it) {
return new BMap.Point(it[_this4.longitudeKey], it[_this4.latitudeKey]);
}), {
strokeColor: item.color, // 设置颜色
strokeWeight: _this4.lineWidth, // 宽度
strokeOpacity: 1
});
polyLine.disableMassClear();
_this4.pointsBMap.push(polyLine);
_this4.map.addOverlay(polyLine);
});
// 添加途经点
if (this.pointsArr.length > 0 && this.showPoints) this.initPoints();
console.timeEnd();
},
initStartEndPoint: function initStartEndPoint() {
var startIcon = new BMap.Icon(__webpack_require__(80), new BMap.Size(40, 40));
var endIcon = new BMap.Icon(__webpack_require__(81), new BMap.Size(40, 40));
var startPoint = new BMap.Point(this.points[0][this.longitudeKey], this.points[0][this.latitudeKey]);
var start = new BMap.Marker(startPoint, {
icon: startIcon
});
var endPoint = new BMap.Point(this.points[this.points.length - 1][this.longitudeKey], this.points[this.points.length - 1][this.latitudeKey]);
var end = new BMap.Marker(endPoint, {
icon: endIcon
});
start.disableMassClear();
end.disableMassClear();
this.map.addOverlay(start);
this.map.addOverlay(end);
},
initCar: function initCar(lng, lat) {
this.car && this.map.removeOverlay(this.car);
var that = this;
// 创建小车图标
var myIcon = new BMap.Icon(__webpack_require__(82), new BMap.Size(94, 94));
// 创建Marker标注,使用小车图标
var pt = new BMap.Point(lng, lat);
this.car = new BMap.Marker(pt, {
icon: myIcon,
rotation: that.angle,
zIndex: 99
});
this.car.disableMassClear();
if (this.showInfoWindow) this.initInfoWindow();
// 将标注添加到地图
this.map.addOverlay(this.car);
if (this.points.length > 0) {
this.map.setCenter(new BMap.Point(lng, lat));
}
// 点标记添加点击事件
this.car.addEventListener('click', function () {
console.log('点击了小车');
that.showInfoWindow = !that.showInfoWindow;
that.$emit('carClick', { lng: lng, lat: lat, isShow: that.showInfoWindow });
// that.initCar()
that.initInfoWindow();
// this.map.openInfoWindow(infoWindow, point); // 开启信息窗口
});
},
initInfoWindow: function initInfoWindow(type) {
var _this5 = this;
this.myCompOverlay && this.map.removeOverlay(this.myCompOverlay);
if (this.showPopCard && this.points.length > 0) {
this.$nextTick(function () {
if (type === 'zoomend') {
setTimeout(function () {
_this5.myCompOverlay = new ComplexCustomOverlay(_this5.car.getPosition(), _this5.$refs.slotContainer);
_this5.map.addOverlay(_this5.myCompOverlay);
}, 100);
} else {
_this5.myCompOverlay = new ComplexCustomOverlay(_this5.car.getPosition(), _this5.$refs.slotContainer);
_this5.map.addOverlay(_this5.myCompOverlay);
}
});
}
},
// 停留点弹窗
hoverPopCard: function hoverPopCard(point, data) {
var _this6 = this;
this.myPopOverlay && this.map.removeOverlay(this.myPopOverlay);
console.log(this.$refs.slotPopCard);
console.log(point.getPosition());
if (this.pointsArr.length > 0) {
this.$nextTick(function () {
_this6.myPopOverlay = new ComplexCustomOverlay(point.getPosition(), _this6.$refs.slotPopCard);
_this6.map.addOverlay(_this6.myPopOverlay);
});
}
},
clearPopcard: function clearPopcard() {
this.myPopOverlay && this.map.removeOverlay(this.myPopOverlay);
},
start: function start() {
this.timeId && clearTimeout(this.timeId);
this.timeId = null;
if (this.startIndex < this.points.length) {
this.intervalFn();
}
},
intervalFn: function intervalFn() {
var _this7 = this;
if (this.points.length === 0) return;
this.timeId = null;
clearTimeout(this.timeId);
// console.log('运动=>', this.startIndex)
if (this.startIndex === this.points.length - 1) {
this.finished();
return;
}
// this.angle = getAngle(this.points[this.startIndex].lon, this.points[this.startIndex].lat, this.points[this.startIndex+1].lon, this.points[this.startIndex+1].lat)
this.angle = Number(this.points[this.startIndex].direction) + this.direction;
this.startIndex++;
this.initCar(this.points[this.startIndex][this.longitudeKey], this.points[this.startIndex][this.latitudeKey]);
this.$emit('update:progress', this.startIndex);
this.curProgress = this.startIndex;
// console.log('当前速度=>', parseInt(this.points[this.startIndex].speed) * this.speedBase / this.curSpeed)
this.timeId = setTimeout(function () {
_this7.intervalFn();
}, parseInt(this.points[this.startIndex].speed) * this.speedBase / this.curSpeed + 10);
},
pause: function pause() {
clearTimeout(this.timeId);
this.timeId = null;
},
togglePlay: function togglePlay() {
console.log(this.points);
if (this.points.length === 0) {
return;
}
this.curPlay = !this.curPlay;
if (this.curPlay) {
if (!this.car) this.curPlay = false;else this.start();
} else {
this.pause();
}
},
forwardOrBackward: function forwardOrBackward(type) {
// console.log(type)
if (this.points.length > 0) {
if (type > 0) this.curProgress += 20;else this.curProgress -= 20;
}
},
handleProgressChange: function handleProgressChange(e) {
this.curProgress = e;
this.$emit('update:progress', e);
},
setSpeed: function setSpeed(event) {
var speed = event.target.value;
console.log('速度改变了->', speed);
this.curSpeed = speed;
if (this.curPlay) {
this.pause();
this.intervalFn();
}
},
finished: function finished() {
this.pause();
this.startIndex = 0;
this.$emit('update:play', false);
this.$emit('finished');
this.curPlay = false;
},
clearMap: function clearMap() {
this.map.clearOverlays();
this.parsedPoints = [];
this.curProgress = 0;
this.curSpeed = this.speedArr[0];
this.finished();
}
},
render: function render() {
var _this8 = this;
var h = arguments[0];
// element 进度条 <el-slider max={this.points.length} value={this.curProgress} showTooltip={false} onInput={this.handleProgressChange} onChange={this.handleProgressChange}> </el-slider>
var slotEl = h(
'div',
{ ref: 'slotContainer', 'class': 'slot-container' },
[this.$slots.default]
);
var slotPopCard = h(
'div',
{ ref: 'slotPopCard', 'class': 'slot-popcard-container' },
[this.$slots.popcard]
);
var pauseIcn = h('i', { 'class': 'yk_icon_arrow_fill_right', style: 'color:white' });
var palyIcn = h('i', { 'class': 'yk_icon_media_pause', style: 'color:white' });
return h(
'div',
{ 'class': 'yk-routebook' },
[h(
'div',
{ 'class': 'routebook-map-box' },
[h(
'div',
{ ref: 'mapInner', style: { height: this.height } },
[' ']
), this.points.length > 0 ? slotEl : null, this.pointsArr.length > 0 ? slotPopCard : null, h(
'span',
{
'class': { disabled: this.points.length === 0, 'get-position': true },
on: {
'click': function click() {
if (_this8.points.length === 0) return;
_this8.map.setCenter(_this8.car.getPosition());
}
}
},
[' ']
), h(
'div',
{ 'class': 'routebook-speed-info' },
[h('ul', [this.colorsArr.map(function (item) {
return h(
'li',
{ 'class': 'speed-item' },
[h(
'span',
{ style: { background: item.key } },
[' ']
), item.name]
);
})])]
), h(
'div',
{ 'class': 'play-crl routebook-flex' },
[h(
'div',
{ 'class': 'play-icon yk-flex-c', on: {
'click': this.togglePlay
}
},
[this.curPlay ? palyIcn : pauseIcn]
), h(
'div',
{ 'class': 'routebook-progress yk-ml8' },
[h(
'div',
{ 'class': 'routebook-rm' },
[h(
'vue-slider',
{
ref: 'slider',
attrs: { value: this.curProgress,
max: this.points.length > 0 ? this.points.length - 1 : 1,
height: 4,
dotSize: 10,
railStyle: {
background: '#ffffff'
},
duration: 0,
processStyle: {
background: '#2E63FD'
},
disabled: this.points.length === 0,
tooltip: 'none',
attrs: this.$attrs
},
on: {
'change': this.handleProgressChange
}
},
[' ']
)]
)]
), h(
'div',
{ 'class': 'routebook-flex yk-ml8' },
[h(
'div',
{ 'class': 'play-icon yk-flex-c ' },
[h('i', {
'class': 'yk_icon_arrow_double_left',
style: 'color:white',
on: {
'click': this.forwardOrBackward.bind(this, -1)
}
})]
), h(
'div',
{ 'class': 'play-icon yk-flex-c yk-ml8' },
[h('i', {
'class': 'yk_icon_arrow_double_right',
style: 'color:white',
on: {
'click': this.forwardOrBackward.bind(this, 1)
}
})]
), h(
'div',
{ 'class': 'yk-flex-c yk-ml8' },
[h(
'select',
{ 'class': 'routebook-select', on: {
'change': this.setSpeed.bind(this)
}
},
[this.speedArr.map(function (item) {
return h(
'option',
{
domProps: {
'value': item
}
},
[item, 'X']
);
})]
)]
)]
)]
)]
)]
);
}
});
// CONCATENATED MODULE: ./packages/routebook/src/main.vue?vue&type=script&lang=js&
/* harmony default export */ var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_);
// EXTERNAL MODULE: ./node_modules/_vue-loader@15.9.8@vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(2);
// CONCATENATED MODULE: ./packages/routebook/src/main.vue
var render, staticRenderFns
/* normalize component */
var component = Object(componentNormalizer["a" /* default */])(
src_mainvue_type_script_lang_js_,
render,
staticRenderFns,
false,
null,
null,
null
)
/* hot reload */
if (false) { var api; }
component.options.__file = "packages/routebook/src/main.vue"
/* harmony default export */ var main = (component.exports);
// CONCATENATED MODULE: ./packages/routebook/index.js
/* istanbul ignore next */
main.install = function (Vue) {
Vue.component(main.name, main);
};
/* harmony default export */ var routebook = __webpack_exports__["default"] = (main);
/***/ }),
/***/ 2:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; });
/* globals __VUE_SSR_CONTEXT__ */
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.
function normalizeComponent (
scriptExports,
render,
staticRenderFns,
functionalTemplate,
injectStyles,
scopeId,
moduleIdentifier, /* server only */
shadowMode /* vue-cli only */
) {
// Vue.extend constructor export interop
var options = typeof scriptExports === 'function'
? scriptExports.options
: scriptExports
// render functions
if (render) {
options.render = render
options.staticRenderFns = staticRenderFns
options._compiled = true
}
// functional template
if (functionalTemplate) {
options.functional = true
}
// scopedId
if (scopeId) {
options._scopeId = 'data-v-' + scopeId
}
var hook
if (moduleIdentifier) { // server build
hook = function (context) {
// 2.3 injection
context =
context || // cached call
(this.$vnode && this.$vnode.ssrContext) || // stateful
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
// 2.2 with runInNewContext: true
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
context = __VUE_SSR_CONTEXT__
}
// inject component styles
if (injectStyles) {
injectStyles.call(this, context)
}
// register component module identifier for async chunk inferrence
if (context && context._registeredComponents) {
context._registeredComponents.add(moduleIdentifier)
}
}
// used by ssr in case component is cached and beforeCreate
// never gets called
options._ssrRegister = hook
} else if (injectStyles) {
hook = shadowMode
? function () {
injectStyles.call(
this,
(options.functional ? this.parent : this).$root.$options.shadowRoot
)
}
: injectStyles
}
if (hook) {
if (options.functional) {
// for template-only hot-reload because in that case the render fn doesn't
// go through the normalizer
options._injectStyles = hook
// register for functional component in vue file
var originalRender = options.render
options.render = function renderWithStyleInjection (h, context) {
hook.call(context)
return originalRender(h, context)
}
} else {
// inject component registration as beforeCreate hook
var existing = options.beforeCreate
options.beforeCreate = existing
? [].concat(existing, hook)
: [hook]
}
}
return {
exports: scriptExports,
options: options
}
}
/***/ }),
/***/ 47:
/***/ (function(module, exports) {
module.exports = require("vue-slider-component");
/***/ }),
/***/ 54:
/***/ (function(module, exports) {
module.exports = require("vue-slider-component/theme/default.css");
/***/ }),
/***/ 75:
/***/ (function(module, exports) {
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJCAYAAAA7KqwyAAAAx0lEQVQoU33RO0rEQRDE4a8VfCJiJIJi6gsDBR+YmAuCjwN4Lm8i3kPwEGKgecnIf2F3nbWjYWq6prt+pVNJtnGO76p6mX6S5BCP+KhxMckGLrAzuq+q59E5ydbQeDTc5dcgyRJOsY+5cdNmkGQNt7jC/ISe5ABnWOitg3fcYbmnV5Knf5pbTxt3cYa5ZrA3TNDW6NUbHrDSnWDIoP1wgpZuL4NV3OD6TwZTFNYHCrszKGwOFI4nKHQ4N1yX+Kqq147e1r7H5w/sij/xDGxhNQAAAABJRU5ErkJggg=="
/***/ }),
/***/ 76:
/***/ (function(module, exports) {
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAuCAYAAAC4e0AJAAAFBklEQVRoQ9Waa6xcUxTHf8ubi3o/41kU8QhaxCff64P4QD+IRJQiEo8iPohHiWcIEUQIQSQ+eSUiHpGgivRWG/VolSAtbUNdTet1lS3/mX2ma3bPnDnn3pkz05Xc5M7sffb6r33WXvu/1hpjkhJC2AaYEv92BXYGdgC2BQz4D/gH+Bv4HdgAjJnZX5NU3Vh8QhJC2BM4ENg7Aq26jgxZC6w2MxlXWSqDDyHsCxwGaJd7IXozq4EfzGy8yoKlwYcQdgGmRffopGP/aNgBgObLfeQevwIrBTB+znv+X+B7YJWZhTJGlAIfQpB7HA3Iv73o8wzgbOA0QG+lSOQeXwEfA+8AP+dM/k1zzExnpFAKwYcQNK7d1k562Q44B7ggZ6ybzmxcO/0B8BzwXfKQjPzczNYXLdYRfIwiJwB7JQucAlwDHFoWZZd5MuIV4GngDzdXZ0EGyOVyJRd83PETE+AKfZcAs2II7BH21jKrgNuBbxIDlprZWJ6yTuDl3we7B3YEbgPO7DXiZD0dbun5xH2/CfjUzPxbaQxvAT6EoIhxnHt4J+Be4KQ+A8+WF9g7gPedPt0Ji8xMrtSSNvAhBO2woocOZGbcncBZNQHP1Cjez5XPO70rzezbIvDHA/u5CRdGP68Ze0PdOmA2oNApUewfNTO9hXa3CSHsBpzqXOko4HH3FgZhwHvxDGS615nZ0jzwCov7OISPAPpu0HK9/N2B0O5vzHya6OuKJNkZmA7cP2jUUf8y4AqHRURuuQevC+dIN+GB6EJDgp+rgc8iGEWjBYo8jZ0OIWinM5YoHvNC1YtodPk4T77ePEuXzhxh+jRxsqYUjZXcnTeBe9xc3by/WAhh+xgKM5c5P3lNpdaf8+AY6zc2yeCUEeOJuaL7TSkaK7U4yMfPBUQlJD+a2QqBVzIhKpCJLqTTSy7amjZrXjsFefGWzZSoaKyCnisjI9UjG8xskcAfAkx1i7wM7FFh0cbUGsA/BLwacW0ys/kCfwxwUPxSsf61qsBrAv8SoPCdyQKB9/H9cOCZIQWfXlijAn8ykJ0u0YNHhxT8QuBGh23xVg/eu80RMaOpvPk1HFhR5FsdsIbb+AO7uzvRlQyoAXzugU1DpfJJVcAqSQ3gH465rnC1QmV6Sd0XE5JhA38V8EUE1bqkUnqgBHtOJeRdKEAP6IFIk+iBSJmkSQ/0X0LMlHg/X5WYLVw2zlORmM2eOcKMYzcTs6Kxkpv0NnCXm9skZhF8Sol1FSv+D4tcByyOYLagxEq8fTKi/+8eEuQrgMsclvZkJO5+mgY+lpRABmXLTUkdpz0NjODTBFw1SlEFVcoGJR8CNzvl+Ql4NCAtfVwMXDQg5CrxqfSRJQqdSx8RfFp0Uglb6ZcKUXWKDuUNwBKntLjoFA1Iy31qEqiSoLdShyjVU1h81ynrXu7LJid8R1/LgHmxgdBPA1TmU51yvlNSvtAad1/xPy1xq355OXBe1QuspLVrYolbdZpMVFitVuKOBsjf85oLZwDXAnKvXogO4huxtNiohEWZWHPBuU+nto7ufnENlUlE7CYiAv0R8CzwdbLA5No6frEQghJ0FV7ThppcSeVvNdTU7ulWddBu6sZUQ+0t4Kccq9WH+nLSDbXEgG6tTL0l5QbiSVkrU6H3T9fKVOPMu4ZX0Z9WZmKE2pWqMoxMxFdynul/EzlVulW273OM6PTDCZ0HuZLcoS8/nPgfi4LibpuTuuoAAAAASUVORK5CYII="
/***/ }),
/***/ 77:
/***/ (function(module, exports) {
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAuCAYAAAC4e0AJAAAHTklEQVRoQ9Vab4wkVRGv6tfdM90zvfPP3dub81gOb2/1cgdB7/Q4IBBPQowXcvoBNkgwBvwbE09BY6KJCxhEwQRDhG9HEP2K6JeLf2IiImDkxMjBoatBArreze3O9HTP9HRPvy7zxumxt3d2t3tn9w5fMsnM63pVv6quV69e1SCMOObm5qTjx48XiEh88kEQaJIkqYjIAACJKGCMdV3XdbPZbMt1Xcu27fquXbs6I4oG3CiDRqNR4pxvR8RKH2gqVpzzliRJZ0ul0gIidlMt7hOnBr+wsDCuadqUsPJGBA5ZE0iStDA2NvYGInppeCYGT0R6o9GYAYDCagIymcw2xtgUIk4CgC7cBwA6nPMlInrTdd03giAY6i5ExInoH+Vy+S1EpCRKJALfarW2e543DQBSlCkiSpqmHWSMXc8Yex8AjK8jtEtEZ4IgeMFxnF/5vl8bQt84f/78menpaXc9BdYET0RoWdYM51xYcjAQUc7lckdlWb4FAJY9W09g5DnnnP+22+3+sNPpvB5dR0RiD5wul8vmWvxWBU9EUr1e34eI5SgDTdOuVFX1OCJekgLoWqRCiadbrdaJIAjaEUKxF04XCoWl1RYPBS8sfu7cuf2qqg6Ai4iSz+fvYIzNihC4ScCjbN5qt9v3eJ73t6gCzWbz5ampqfoweUNBmKY5HQTBjnCBoigZXdfnEPHQFoCOsux4njfXbrd/H04Skd/pdP5YrVajb6X3eAX4s2fPblNV9T3hYkmSsoZhfAcRL99i4CF73/O8+9rt9jPhhDgTKpXKKUQMlu296I/5+flMpVI5KDZkfx4LhcK3EPHwBQIeivFc173LcZzT4QQivlksFv++KvjFxcW9kiRNhASGYdzGGLvjAgMPxS1alnUn57zRnyDXdV+cnJxsDRQKv9RqNUOW5feGrqSq6m5d1x8DgPAtXHAdiOg3pmnORfx/sVwuv7wC/NLSkgiL7wgfFAqFRxBx3wVHHBPouu7djuOcCqe73e6LExMT9mDDElGm0WiISNLbwJqmHchkMg9ebOBCPhG9Zprm5wa72fcXxsfH/zIAv7S0dAkiXhax+vcQUbhQ4vHCqx48frIFMztluO0GHSZKIiPenOG67hcdx/lzXxm/VCo9JyJPz9K1Wu2ALMu9LFFRlO25XO7HaQ+iTz1UB6v933xKYQAfuSoLx67RIKuOfp5xzn9uWdYDoSlEFKpWq+fFZUFpNBoiFPakGIZxM2Ns8JqS2m723pWneDGPcOsRHa69PAM4gg5EZDebzWMi8xR4JEn6Z6FQmMdms1nhnO+PuIw4kN6fFHRINwx8+Gz3Dhluv1GHPe/ceOByXffzjuOc6fk6olUsFk/h4uLiTkmS3hUKKhaLPwGA4maCD3ldu1+F2SM6VMaWZdaJRPm+/7Bt2z8N/b5cLj8rLL+Hc14Vk4wxwzCMnyXiFiNay/JR0owCcNPVGhw9lIVMiv3AOX/KsqxHIkZ+DqPxPZvNXprNZh/fSvAh74MzCtx1i5FYVPzAEvEe6/X6FQBQElw0TdubyWR+kJhjhDCp5cMlMgP40deXXRXWFEtEfzBN86shERG9dNHAH5hR4O50ll8JPuo2iqLsyuVyJ7bS8sLnj16lwU2HU/v8M5ZlfTPE1nOb2IYdMwyjt6PTjiRuc/U+FW790MaiDRE9ZZrm8g07JFQ+vVZ5