/*! * * @supermap/vue-iclient.(https://iclient.supermap.io) * Copyright© 2000 - 2020 SuperMap Software Co.Ltd * license: Apache-2.0 * version: v10.1.0 * */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("xlsx"), require("../static/libs/mapboxgl/mapbox-gl-enhance.js"), require("vue"), require("three/examples/jsm/loaders/GLTFLoader"), require("vue-echarts"), require("three"), require("ant-design-vue"), require("echarts-liquidfill"), require("three/examples/jsm/loaders/OBJLoader2"), require("vue-cesium"), require("video.js"), require("../static/libs/deckgl/deck.gl.min.js"), require("../static/libs/echarts-layer/EchartsLayer.js"), require("../static/libs/iclient-mapboxgl/iclient-mapboxgl.min.js"), require("echarts"), require("../static/libs/mapbox-gl-draw/mapbox-gl-draw.js"), require("shapefile")); else if(typeof define === 'function' && define.amd) define(["xlsx", "../static/libs/mapboxgl/mapbox-gl-enhance.js", "vue", "three/examples/jsm/loaders/GLTFLoader", "vue-echarts", "three", "ant-design-vue", "echarts-liquidfill", "three/examples/jsm/loaders/OBJLoader2", "vue-cesium", "video.js", "../static/libs/deckgl/deck.gl.min.js", "../static/libs/echarts-layer/EchartsLayer.js", "../static/libs/iclient-mapboxgl/iclient-mapboxgl.min.js", "echarts", "../static/libs/mapbox-gl-draw/mapbox-gl-draw.js", "shapefile"], factory); else if(typeof exports === 'object') exports["Components"] = factory(require("xlsx"), require("../static/libs/mapboxgl/mapbox-gl-enhance.js"), require("vue"), require("three/examples/jsm/loaders/GLTFLoader"), require("vue-echarts"), require("three"), require("ant-design-vue"), require("echarts-liquidfill"), require("three/examples/jsm/loaders/OBJLoader2"), require("vue-cesium"), require("video.js"), require("../static/libs/deckgl/deck.gl.min.js"), require("../static/libs/echarts-layer/EchartsLayer.js"), require("../static/libs/iclient-mapboxgl/iclient-mapboxgl.min.js"), require("echarts"), require("../static/libs/mapbox-gl-draw/mapbox-gl-draw.js"), require("shapefile")); else root["SuperMap"] = root["SuperMap"] || {}, root["SuperMap"]["Components"] = factory(root["XLSX"], root["mapboxgl"], root["Vue"], root["THREE.GLTFLoader"], root["VueECharts"], root["THREE"], root["antd"], root["echarts-liquidfill"], root["THREE.OBJLoader2"], root["VueCesium"], root["_videojs"], root["DeckGL"], root["EchartsLayer"], root["SuperMap"], root["echarts"], root["MapboxDraw"], root["shapefile"]); })(window, function(__WEBPACK_EXTERNAL_MODULE__1c98__, __WEBPACK_EXTERNAL_MODULE__3d57__, __WEBPACK_EXTERNAL_MODULE__5643__, __WEBPACK_EXTERNAL_MODULE__6d09__, __WEBPACK_EXTERNAL_MODULE__8275__, __WEBPACK_EXTERNAL_MODULE__8b5b__, __WEBPACK_EXTERNAL_MODULE_a587__, __WEBPACK_EXTERNAL_MODULE_acbb__, __WEBPACK_EXTERNAL_MODULE_b9f8__, __WEBPACK_EXTERNAL_MODULE_be1f__, __WEBPACK_EXTERNAL_MODULE_be3f__, __WEBPACK_EXTERNAL_MODULE_ca40__, __WEBPACK_EXTERNAL_MODULE_e76e__, __WEBPACK_EXTERNAL_MODULE_f240__, __WEBPACK_EXTERNAL_MODULE_f840__, __WEBPACK_EXTERNAL_MODULE_fc22__, __WEBPACK_EXTERNAL_MODULE_ffd5__) { return /******/ (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 = "/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ({ /***/ 0: /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__("5c15"); /***/ }), /***/ "022b": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/common/indicator/Indicator.vue?vue&type=template&id=39b17318& var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"sm-component-indicator",style:(_vm.getBackgroundStyle)},[_c('div',{class:("sm-component-indicator__content sm-component-indicator__content-" + _vm.mode)},[_c('span',{directives:[{name:"show",rawName:"v-show",value:(_vm.showTitleUnit),expression:"showTitleUnit"}],staticClass:"sm-component-indicator__title",style:([_vm.unit_titleStyle, _vm.getTextColorStyle])},[_vm._v(_vm._s(_vm.titleData))]),_vm._v(" "),_c('div',[_c('span',{staticClass:"sm-component-indicator__num",style:(_vm.indicatorStyle)},[(_vm.isNumber(_vm.indicatorNum))?_c('countTo',{attrs:{"decimals":_vm.calDecimals,"startVal":_vm.startData,"endVal":_vm.numData,"duration":Number(_vm.duration) || 1000,"separator":_vm.separator,"numBackground":_vm.numBackground,"numSpacing":_vm.numSpacing,"separatorBackground":_vm.separatorBackground,"fontSize":parseFloat(_vm.fontSize) + _vm.fontUnit}}):_vm._e(),_vm._v("\n "+_vm._s(_vm.isNumber(_vm.indicatorNum) ? '' : _vm.indicatorNum)+"\n ")],1),_vm._v(" "),_c('span',{directives:[{name:"show",rawName:"v-show",value:(_vm.showTitleUnit),expression:"showTitleUnit"}],staticClass:"sm-component-indicator__unit",style:([_vm.unit_titleStyle, _vm.getTextColorStyle])},[_vm._v(_vm._s(_vm.unitData))])])])])} var staticRenderFns = [] // CONCATENATED MODULE: ./src/common/indicator/Indicator.vue?vue&type=template&id=39b17318& /* concated harmony reexport render */__webpack_require__.d(__webpack_exports__, "a", function() { return render; }); /* concated harmony reexport staticRenderFns */__webpack_require__.d(__webpack_exports__, "b", function() { return staticRenderFns; }); /***/ }), /***/ "027a": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.request = request; exports.generatePointsFeatures = exports.clearSearchResultLayer = exports.resetSearchSourceData = exports.addPoints = exports.toBBoxString = exports.tdtSetHighlightIcon = exports.getStatisticsResult = exports.sourceNames = exports.tiandituTransit = exports.tiandituSearch = exports.config = void 0; var _axios = _interopRequireDefault(__webpack_require__("bd18")); var _bbox = _interopRequireDefault(__webpack_require__("1164")); var _transformScale = _interopRequireDefault(__webpack_require__("f052")); var _envelope = _interopRequireDefault(__webpack_require__("0c08")); var _helpers = __webpack_require__("38ce"); var _sprite = _interopRequireDefault(__webpack_require__("090e")); var _sprite2 = _interopRequireDefault(__webpack_require__("074d")); var CancelToken = _axios.default.CancelToken; var axiosService = _axios.default.create(); var cancelSourceList = {}; axiosService.interceptors.request.use( // 请求拦截 function (config) { cancelRequest(config.url); config.cancelToken = new CancelToken(function executor(c) { // An executor function receives a cancel function as a parameter cancelSourceList[config.url] = c; }); return config; }, function (error) { return Promise.reject(error); }); axiosService.interceptors.response.use(function (response) { cancelRequest(response.config.url); return response; }, function (error) { var isCancel = _axios.default.isCancel(error); if (isCancel) { var cancelError = { isCancel: isCancel }; return Promise.reject(cancelError); } else { return Promise.reject(error.response && error.response.data); // 返回接口返回的错误信息 } }); function request(_ref) { var url = _ref.url, _ref$params = _ref.params, params = _ref$params === void 0 ? {} : _ref$params, _ref$method = _ref.method, method = _ref$method === void 0 ? 'get' : _ref$method; var options = { url: url, method: method }; if (method.toLowerCase() === 'get') { options.params = params; } else { options.data = params; } return axiosService(options).then(function (res) { return res.data; }).catch(function (error) { return Promise.reject(error); }); } function cancelRequest(sourceName) { var source = cancelSourceList[sourceName]; if (typeof source === 'function') { source('取消重复请求'); delete cancelSourceList[sourceName]; } } var config = { HOME_URL: 'https://www.tianditu.gov.cn', feedbackIp: 'https://www.tianditu.gov.cn/feedback', T_URL: 'https://map.tianditu.gov.cn', T_SSO_URL: 'https://sso.tianditu.gov.cn', T_UMS_URL: 'https://uums.tianditu.gov.cn', SEARCH_URL: 'https://api.tianditu.gov.cn/search', DRIVE_URL: 'https://api.tianditu.gov.cn/drive', BUS_URL: 'https://api.tianditu.gov.cn/transit', GEOCODE_URL: 'https://api.tianditu.gov.cn/geocoder', API_URL: 'https://lbs.tianditu.gov.cn/' }; exports.config = config; var tiandituSearch = function tiandituSearch(url, params) { return request({ url: url, params: params }); }; exports.tiandituSearch = tiandituSearch; var tiandituTransit = function tiandituTransit(url, params) { return request({ url: url, params: params }); }; exports.tiandituTransit = tiandituTransit; var sourceNames = { // tdtSearch-xxxx searchResultPoints: 'tdt-search-searchResultPoints', searchResultLine: 'tdt-search-searchResultLine', searchResultPolygon: 'tdt-search-searchResultPolygon', searchResultPointsOfLine: 'tdt-search-searchResultPointsOfLine' }; // search和route共用的方法 exports.sourceNames = sourceNames; var getStatisticsResult = function getStatisticsResult(data) { var result = { priorityCitys: data.priorityCitys, allAdmins: data.allAdmins.map(function (parent, index) { var parentKey = "0-".concat(index); var item = { key: parentKey, title: parent.name, info: parent, children: [], scopedSlots: { title: 'title', info: 'info' } }; parent.childAdmins && parent.childAdmins.forEach(function (child, key) { var childKey = "".concat(parentKey, "-").concat(key); var subItem = { key: childKey, title: child.name, info: child, children: [], scopedSlots: { title: 'title', info: 'info' } }; child.childAdmins && child.childAdmins.forEach(function (grandSon, subKey) { var grandKey = "".concat(childKey, "-").concat(subKey); var grandItem = { key: grandKey, title: grandSon.name, info: grandSon, scopedSlots: { title: 'title', info: 'info' } }; subItem.children.push(grandItem); }); item.children.push(subItem); }); return item; }) }; return result; }; // 点设置高亮 exports.getStatisticsResult = getStatisticsResult; var tdtSetHighlightIcon = function tdtSetHighlightIcon(map, sourceName, hotPointID) { if (map.getLayer("".concat(sourceName, "-highlight"))) { if (hotPointID) { map.setFilter("".concat(sourceName, "-highlight"), ['==', 'hotPointID', hotPointID]); return; } map.setFilter("".concat(sourceName, "-highlight"), ['==', 'hotPointID', '']); } }; // bounds转换成string exports.tdtSetHighlightIcon = tdtSetHighlightIcon; var toBBoxString = function toBBoxString(map) { var bounds = map.getBounds(); return bounds.getWest().toFixed(5) + ',' + bounds.getSouth().toFixed(5) + ',' + bounds.getEast().toFixed(5) + ',' + bounds.getNorth().toFixed(5); }; // 添加点图层 exports.toBBoxString = toBBoxString; var addPoints = function addPoints(map, sourceName, features) { if (features && map) { var source = map.getSource(sourceName); var sourceData = features; if (source) { source.setData(sourceData); } else { map.addSource(sourceName, { type: 'geojson', data: sourceData }); var image = new Image(); image.src = _sprite2.default; image.onload = function () { map.style.addSpriteObject(sourceName, image, _sprite.default); map.addLayer({ id: sourceName, type: 'symbol', source: sourceName, layout: { 'icon-image': 'buoy-icon-{serialNum}', 'icon-allow-overlap': true } }); map.addLayer({ id: "".concat(sourceName, "-highlight"), type: 'symbol', source: sourceName, layout: { 'icon-image': 'buoy-icon-active-{serialNum}', 'icon-allow-overlap': true }, filter: ['==', 'hotPointID', ''] }); }; } var bounds = (0, _bbox.default)((0, _transformScale.default)((0, _envelope.default)(features), 1.7)); map.fitBounds([[bounds[0], bounds[1]], [bounds[2], bounds[3]]], { maxZoom: 17 }); } }; // 清空search, route图层 exports.addPoints = addPoints; var resetSearchSourceData = function resetSearchSourceData(map, searchRoutePoints) { if (!map) return; // 清除route if (searchRoutePoints && map.getSource(searchRoutePoints)) { map.getSource(searchRoutePoints).setData({ type: 'FeatureCollection', features: [] }); return; } // 清除search for (var sourceName in sourceNames) { if (map.getSource(sourceName)) { map.getSource(sourceName).setData({ type: 'FeatureCollection', features: [] }); } } }; // 移除search, route图层 exports.resetSearchSourceData = resetSearchSourceData; var clearSearchResultLayer = function clearSearchResultLayer(map, searchRoutePoints) { if (!map) return; for (var sourceName in sourceNames) { if (searchRoutePoints && map.getSource(searchRoutePoints)) { map.getLayer(searchRoutePoints) && map.removeLayer(searchRoutePoints); map.getLayer("".concat(searchRoutePoints, "-highlight")) && map.removeLayer("".concat(searchRoutePoints, "-highlight")); map.removeSource(searchRoutePoints); break; } if (map.getSource(sourceNames[sourceName])) { map.getLayer(sourceNames[sourceName]) && map.removeLayer(sourceNames[sourceName]); switch (sourceNames[sourceName]) { case 'tdt-search-searchResultPoints': map.removeLayer("".concat(sourceNames[sourceName], "-highlight")); break; case 'tdt-search-searchResultPointsOfLine': map.removeLayer("".concat(sourceNames[sourceName], "-fill")); map.removeLayer("".concat(sourceNames[sourceName], "-stroke")); break; case 'tdt-search-searchResultPolygon': map.removeLayer("".concat(sourceNames[sourceName], "-stroke")); break; default: break; } map.removeSource(sourceNames[sourceName]); } } }; // 构造点数据 exports.clearSearchResultLayer = clearSearchResultLayer; var generatePointsFeatures = function generatePointsFeatures(data) { var splitFlag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ' '; var result = []; for (var index = data.length - 1; index >= 0; index--) { var item = data[index]; var feature = { type: 'Feature', geometry: { type: 'Point' }, properties: {} }; var center = (item.lonlat || '').split(splitFlag); feature.geometry.coordinates = [+center[0], +center[1]]; feature.properties = Object.assign(item, { serialNum: index + 1 }); result.push(feature); } var featureList = (0, _helpers.featureCollection)(result); return featureList; }; exports.generatePointsFeatures = generatePointsFeatures; /***/ }), /***/ "0284": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _TdtMapSwitcher_vue_vue_type_template_id_7115d558___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("9482"); /* harmony import */ var _TdtMapSwitcher_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("a440"); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _TdtMapSwitcher_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _TdtMapSwitcher_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("b429"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])( _TdtMapSwitcher_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _TdtMapSwitcher_vue_vue_type_template_id_7115d558___WEBPACK_IMPORTED_MODULE_0__[/* render */ "a"], _TdtMapSwitcher_vue_vue_type_template_id_7115d558___WEBPACK_IMPORTED_MODULE_0__[/* staticRenderFns */ "b"], false, null, null, null ) /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "0318": /***/ (function(module, exports, __webpack_require__) { /* eslint-disable node/no-deprecated-api */ var buffer = __webpack_require__("3be6") var Buffer = buffer.Buffer // alternative to using Object.keys for old browsers function copyProps (src, dst) { for (var key in src) { dst[key] = src[key] } } if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { module.exports = buffer } else { // Copy properties from require('buffer') copyProps(buffer, exports) exports.Buffer = SafeBuffer } function SafeBuffer (arg, encodingOrOffset, length) { return Buffer(arg, encodingOrOffset, length) } // Copy static methods from Buffer copyProps(Buffer, SafeBuffer) SafeBuffer.from = function (arg, encodingOrOffset, length) { if (typeof arg === 'number') { throw new TypeError('Argument must not be a number') } return Buffer(arg, encodingOrOffset, length) } SafeBuffer.alloc = function (size, fill, encoding) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } var buf = Buffer(size) if (fill !== undefined) { if (typeof encoding === 'string') { buf.fill(fill, encoding) } else { buf.fill(fill) } } else { buf.fill(0) } return buf } SafeBuffer.allocUnsafe = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return Buffer(size) } SafeBuffer.allocUnsafeSlow = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return buffer.SlowBuffer(size) } /***/ }), /***/ "035a": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/mapboxgl/text-list/TextList.vue?vue&type=template&id=73b23a1f& var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"sm-component-text-list",style:(_vm.getBackgroundStyle),on:{"mouseleave":function($event){return _vm.handleMouseLeaveFn({}, null, $event)}}},[(_vm.headerStyleData.show)?_c('div',{staticClass:"sm-component-text-list__header",style:([_vm.listStyle.headerHeight, { background: _vm.headerStyleData.background, color: _vm.headerStyleData.color }])},[_c('div',{staticClass:"sm-component-text-list__header-content"},[(_vm.animateContent && _vm.animateContent.length > 0)?[_vm._l(((_vm.getColumns && _vm.getColumns.length > 0 && _vm.getColumns) || Object.keys(_vm.animateContent[0])),function(item,index){return [_c('div',{key:index,staticClass:"sm-component-text-list__header-title",style:([_vm.fontSizeStyle, { flex: _vm.getColumnWidth(index) }]),attrs:{"title":item.header}},[_c('div',{on:{"click":function($event){_vm.sortByField( _vm.getColumns[index].field + '-' + index, index, !Number.isNaN(+_vm.listData[0][_vm.getColumns[index].field + '-' + index]) && _vm.getColumns[index].sort )}}},[_vm._v("\n "+_vm._s(_vm.getColumns[index].header)+"\n "),(!Number.isNaN(+_vm.listData[0][_vm.getColumns[index].field + '-' + index]) && _vm.getColumns[index].sort)?_c('div',{staticClass:"arrow-wrap",style:({ borderColor: _vm.headerStyleData.sortBtnColor })},[_c('i',{class:['up-triangle'],style:([ { borderBottomColor: _vm.headerStyleData.sortBtnColor }, _vm.sortType === 'ascend' && _vm.sortIndex === index && { borderBottomColor: _vm.headerStyleData.sortBtnSelectColor } ])}),_vm._v(" "),_c('i',{class:['down-triangle'],style:([ { borderTopColor: _vm.headerStyleData.sortBtnColor }, _vm.sortType === 'descend' && _vm.sortIndex === index && { borderTopColor: _vm.headerStyleData.sortBtnSelectColor } ])})]):_vm._e()])])]})]:_vm._e()],2)]):_vm._e(),_vm._v(" "),_c('div',{ref:"animate",staticClass:"sm-component-text-list__animate",style:([ _vm.listStyle.contentHeight, _vm.getTextColorStyle, _vm.fontSizeStyle, { 'overflow-y': _vm.autoRolling ? 'hidden' : 'auto' } ])},[_c('div',{ref:"listContent",class:['sm-component-text-list__body-content', _vm.animate && 'sm-component-text-list__body-content--anim']},[(_vm.animateContent && _vm.animateContent.length > 0)?_vm._l((_vm.animateContent),function(rowData,index){return _c('div',{key:index,staticClass:"sm-component-text-list__list",style:(_vm.getRowStyle(rowData['idx'], index)),attrs:{"data-index":rowData['idx']},on:{"click":function($event){return _vm.handleClick(rowData, rowData['idx'], $event)},"mouseenter":function($event){return _vm.handleMouseEnterFn(rowData, rowData['idx'], $event)},"mouseleave":function($event){return _vm.handleMouseLeaveFn(rowData, rowData['idx'], $event)}}},_vm._l((_vm.filterProperty(rowData, 'idx')),function(items,key,itemIndex){return _c('div',{key:key,style:([_vm.listStyle.rowStyle, { flex: _vm.getColumnWidth(itemIndex) }, _vm.getCellStyle(items, itemIndex)]),attrs:{"title":items}},[(_vm.getColumns[itemIndex])?_c('span',[_vm._v(_vm._s(_vm.getColumns[itemIndex].fixInfo.prefix))]):_vm._e(),_vm._v("\n "+_vm._s(items)+"\n "),(_vm.getColumns[itemIndex])?_c('span',[_vm._v(_vm._s(_vm.getColumns[itemIndex].fixInfo.suffix))]):_vm._e()])}),0)}):_vm._e()],2)]),_vm._v(" "),(_vm.spinning)?_c('a-spin',{attrs:{"size":"large","tip":_vm.$t('info.loading'),"spinning":_vm.spinning}}):_vm._e()],1)} var staticRenderFns = [] // CONCATENATED MODULE: ./src/mapboxgl/text-list/TextList.vue?vue&type=template&id=73b23a1f& /* concated harmony reexport render */__webpack_require__.d(__webpack_exports__, "a", function() { return render; }); /* concated harmony reexport staticRenderFns */__webpack_require__.d(__webpack_exports__, "b", function() { return staticRenderFns; }); /***/ }), /***/ "035f": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireWildcard = __webpack_require__("16ed"); var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _toConsumableArray2 = _interopRequireDefault(__webpack_require__("4066")); var _classCallCheck2 = _interopRequireDefault(__webpack_require__("19e1")); var _createClass2 = _interopRequireDefault(__webpack_require__("66f6")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__("8377")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__("c031")); var _inherits2 = _interopRequireDefault(__webpack_require__("6b51")); var THREE = _interopRequireWildcard(__webpack_require__("8b5b")); var _mapboxGlEnhance = _interopRequireDefault(__webpack_require__("3d57")); var _tendrils = _interopRequireDefault(__webpack_require__("dea1")); var FireLayerViewModel = /*#__PURE__*/ function (_mapboxgl$Evented) { (0, _inherits2.default)(FireLayerViewModel, _mapboxgl$Evented); function FireLayerViewModel(features) { var _this; var modelScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5.41843220338983e-6; var layerId = arguments.length > 2 ? arguments[2] : undefined; (0, _classCallCheck2.default)(this, FireLayerViewModel); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(FireLayerViewModel).call(this)); _this.layerId = layerId; _this.features = features; _this.modelScale = modelScale; return _this; } (0, _createClass2.default)(FireLayerViewModel, [{ key: "setMap", value: function setMap(mapInfo) { var map = mapInfo.map; if (!map) { throw new Error('map is requierd'); } this.map = map; this._addFireLayer(); } }, { key: "setFeatures", value: function setFeatures(features) { this.features = features; this._addFireLayer(); } }, { key: "setModelScale", value: function setModelScale(modelScale) { this.modelScale = modelScale; this._addFireLayer(); } }, { key: "_addFireLayer", value: function _addFireLayer() { var _this2 = this; var feature = this.features.features[0]; if (feature.geometry.type !== 'Point') { throw new Error("Feature's type must be point"); } if (this.features.features.length > 50) { throw new Error('The maximum number of features is 50'); } this.features.features.forEach(function (feature, index) { var geometry = feature.geometry; if (geometry.type === 'Point') { _this2._initializeFireLayer(geometry.coordinates, index); } }); } }, { key: "_initializeFireLayer", value: function _initializeFireLayer(originCoordinate, index) { var _this3 = this; var modelTransform = this._getModelTransform(originCoordinate); var layerId = this.layerId && this.layerId + '-' + index || "threeLayerFire-".concat(new Date()); this.map.getLayer(layerId) && this.map.removeLayer(layerId); var customLayer = { id: layerId, type: 'custom', renderingMode: '3d', onAdd: function onAdd(map, gl) { _this3.camera = new THREE.PerspectiveCamera(45, map.getCanvas().width / map.getCanvas().height, 0.1, 2000); _this3.scene = new THREE.Scene(); _this3.renderer = new THREE.WebGLRenderer({ canvas: map.getCanvas(), context: gl, antialias: true }); _this3.renderer.autoClear = false; var rig = new THREE.Group(); rig.add(_this3.camera); _this3.scene.add(rig); _this3._fire(); _this3.scene.add(_this3._object); var light = new THREE.PointLight(0xffffff, 1, 100); light.position.set(10, 10, 20); _this3.scene.add(light); _this3.map = map; }, render: function render(gl, matrix) { var rotationX = new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(1, 0, 0), modelTransform.rotateX); var rotationY = new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(0, 1, 0), modelTransform.rotateY); var rotationZ = new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(0, 0, 1), modelTransform.rotateZ); var m = new THREE.Matrix4().fromArray(matrix); var l = new THREE.Matrix4().makeTranslation(modelTransform.translateX, modelTransform.translateY, modelTransform.translateZ).scale(new THREE.Vector3(modelTransform.scale, -modelTransform.scale, modelTransform.scale)).multiply(rotationX).multiply(rotationY).multiply(rotationZ); _this3.camera.projectionMatrix.elements = matrix; _this3.camera.projectionMatrix = m.multiply(l); _this3.renderer.state.reset(); _this3._update(); _this3.renderer.render(_this3.scene, _this3.camera); _this3.map.triggerRepaint(); } }; this.map.addLayer(customLayer); } }, { key: "_getModelTransform", value: function _getModelTransform(originCoordinate) { var modelOrigin = originCoordinate; var modelAltitude = 0; var modelRotate = [Math.PI / 2, 0, 0]; var modelTransform = { translateX: _mapboxGlEnhance.default.MercatorCoordinate.fromLngLat(modelOrigin, modelAltitude).x, translateY: _mapboxGlEnhance.default.MercatorCoordinate.fromLngLat(modelOrigin, modelAltitude).y, translateZ: _mapboxGlEnhance.default.MercatorCoordinate.fromLngLat(modelOrigin, modelAltitude).z, rotateX: modelRotate[0], rotateY: modelRotate[1], rotateZ: modelRotate[2], scale: this.modelScale }; return modelTransform; } }, { key: "_fire", value: function _fire() { var _this$_object; var density = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 150; var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8; var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.2; this._object = new THREE.Group(); this._fireballs = []; this._height = height; this._radius = r; var texture = new THREE.TextureLoader().load(_tendrils.default, function () { console.log('loaded'); }, undefined, function (e) { console.log('error', e); }); texture.crossOrigin = ''; this._fireMaterial = new THREE.ShaderMaterial({ uniforms: { time: { value: 1.0 }, blend: { value: 1.0 }, blendPattern: { type: 't', value: texture } }, vertexShader: "precision mediump float;\n precision mediump int;\n attribute vec4 color;\n varying vec2 vUv;\n varying float vFade;\n void main()\t{\n vUv = uv;\n vec4 localPosition = vec4( position, 1);\n vFade = clamp((localPosition.y + 3.0) / 6.0, 0.0, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * localPosition;\n }", fragmentShader: "precision mediump float;\n precision mediump int;\n uniform float time;\n uniform float blend;\n uniform sampler2D blendPattern;\n varying float vFade;\n varying vec2 vUv;\n\n\n void main()\t{\n\n vec4 startColor = vec4(1., 0.5, 0.1, 1.0);\n vec4 endColor = vec4(0.2, 0.2, 0.2, 1.0);\n\n float dissolve = texture2D(blendPattern, vUv).r * 0.5;\n\n float spread = 0.4;\n\n float fadeAmount = smoothstep(\n max(0.0, vFade - spread),\n min(1.0, vFade + spread),\n blend + dissolve\n );\n\n vec4 color = mix(\n startColor, endColor,\n smoothstep(0.1,1., fadeAmount)\n );\n\n gl_FragColor = vec4(color.rgb, 1.-fadeAmount);\n }", transparent: true, side: THREE.DoubleSide, blending: THREE.AdditiveBlending }); this._light = new THREE.PointLight(0xff5500, 1, 100); this._light.position.set(0, 0.4, 0); this._lightIntensity = Math.random() * 5; this._object.add(this._light); for (var i = 0; i < density; i++) { var geometry = new THREE.SphereGeometry(1, 32, 32); var mat = this._fireMaterial.clone(); mat.uniforms.blendPattern.value = texture; mat.needsUpdate = true; var sphere = new THREE.Mesh(geometry, mat); sphere.position.y = Math.random() * height; sphere.position.x = (0.5 - Math.random()) * this._radius; sphere.position.z = (0.5 - Math.random()) * this._radius; sphere.rotateX(Math.random() * 5); sphere.rotateZ(Math.random() * 5); sphere.rotateY(Math.random() * 5); sphere.dirX = (0.5 - Math.random()) * 0.006; sphere.dirY = 0.006; sphere.dirZ = (0.5 - Math.random()) * 0.006; this._fireballs.push(sphere); } (_this$_object = this._object).add.apply(_this$_object, (0, _toConsumableArray2.default)(this._fireballs)); } }, { key: "_update", value: function _update() { var _this4 = this; this._fireballs.forEach(function (ball) { ball.position.y += ball.dirY; ball.position.x += Math.sin(ball.position.y) * ball.dirX; ball.position.z += Math.cos(ball.position.y) * ball.dirZ; if (ball.position.y > _this4._height) { ball.position.y = Math.random() * 0.1; ball.position.x = (0.5 - Math.random()) * _this4._radius; ball.position.z = (0.5 - Math.random()) * _this4._radius; } var p = 0.1 + ball.position.y / _this4._height; ball.rotateX((1.2 - p) * 0.01); ball.rotateZ((1.2 - p) * 0.01); ball.rotateY((1.2 - p) * 0.01); ball.scale.set(p, p, p); ball.material.uniforms.blend.value = p; }); this._light.intensity += (this._lightIntensity - this._light.intensity) * 0.006; if (Math.random() > 0.8) { this._lightIntensity = Math.random() * 5; } } }, { key: "removed", value: function removed() { var map = this.map, layerId = this.layerId, features = this.features.features; if (map && layerId && features.length) { features.forEach(function (feature, index) { var geometry = feature.geometry; if (geometry.type === 'Point') { var featureLayerId = "".concat(layerId, "-").concat(index); map.getLayer(featureLayerId) && map.removeLayer(featureLayerId); } }); } } }]); return FireLayerViewModel; }(_mapboxGlEnhance.default.Evented); exports.default = FireLayerViewModel; /***/ }), /***/ "03b3": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__("19e1")); var HeatMapStyle = function HeatMapStyle() { var paint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var layout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; (0, _classCallCheck2.default)(this, HeatMapStyle); this.paint = { 'heatmap-radius': 30, 'heatmap-weight': 1, 'heatmap-intensity': 1, 'heatmap-color': ['interpolate', ['linear'], ['heatmap-density'], 0, 'rgba(0, 0, 255, 0)', 0.1, 'royalblue', 0.3, 'cyan', 0.5, 'lime', 0.7, 'yellow', 1, 'red'], 'heatmap-opacity': 1 }; this.layout = { visibility: 'visible' }; Object.assign(this.paint, paint); Object.assign(this.layout, layout); }; exports.default = HeatMapStyle; /***/ }), /***/ "03e1": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Pagination_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("399a"); /* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Pagination_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Pagination_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Pagination_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Pagination_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Pagination_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); /***/ }), /***/ "0467": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__("19e1")); var _createClass2 = _interopRequireDefault(__webpack_require__("66f6")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__("8377")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__("c031")); var _inherits2 = _interopRequireDefault(__webpack_require__("6b51")); var _colorcolor = _interopRequireDefault(__webpack_require__("4552")); var _Marker2 = _interopRequireDefault(__webpack_require__("4361")); var HaloRingMarker = /*#__PURE__*/ function (_Marker) { (0, _inherits2.default)(HaloRingMarker, _Marker); function HaloRingMarker(features) { var _this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; (0, _classCallCheck2.default)(this, HaloRingMarker); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(HaloRingMarker).call(this, features, options)); _this.features && _this._createMarker(); return _this; } (0, _createClass2.default)(HaloRingMarker, [{ key: "setMarkersWidth", value: function setMarkersWidth(width) { this.options.width = width; var markerContainer = document.getElementsByClassName('sm-component-animate-marker--halo-ring'); for (var i = 0; i < markerContainer.length; i++) { var style = markerContainer[i].style; style.setProperty('--halo-width', this.options.width + 'px'); style.setProperty('--halo-left', -this.options.width / 2 + 'px'); style.setProperty('--box-shadow-width-1', this.options.width / 10 + 'px'); style.setProperty('--box-shadow-width-2', this.options.width / 4 + 'px'); } } }, { key: "setMarkersColors", value: function setMarkersColors(colors) { this.options.colors = colors; if (colors && colors.length && colors.length > 0) { var markerContainer = document.getElementsByClassName('sm-component-animate-marker--halo-ring'); for (var i = 0; i < markerContainer.length; i++) { var style = markerContainer[i].style; style.setProperty('--color-1', this._getColorWithOpacity(this.options.colors[0], 0.3)); style.setProperty('--color-1-transparent', this._getColorWithOpacity(this.options.colors[0], 0.1)); style.setProperty('--color-2', this._getColorWithOpacity(this.options.colors[1], 0.3)); style.setProperty('--color-2-transparent', this._getColorWithOpacity(this.options.colors[1], 0.1)); } } } }, { key: "_createMarker", value: function _createMarker() { var _this2 = this; this.features.features.forEach(function (point) { var markerContainer = document.createElement('div'); markerContainer.className = 'sm-component-animate-marker--halo-ring'; var childElements = _this2._createMakerElement(8, 'div', ['sm-component-animate-marker__ring', 'sm-component-animate-marker__halo']); childElements.forEach(function (element) { markerContainer.appendChild(element); }); var nameContainer = _this2._getTextContainer(point, 'halo-ring-name'); markerContainer.appendChild(nameContainer); if (_this2.options.width) { markerContainer.style.setProperty('--halo-width', _this2.options.width + 'px'); markerContainer.style.setProperty('--halo-left', -_this2.options.width / 2 + 'px'); markerContainer.style.setProperty('--box-shadow-width-1', _this2.options.width / 10 + 'px'); markerContainer.style.setProperty('--box-shadow-width-2', _this2.options.width / 4 + 'px'); } if (_this2.options.colors && _this2.options.colors.length && _this2.options.colors.length > 0) { markerContainer.style.setProperty('--color-1', _this2._getColorWithOpacity((0, _colorcolor.default)(_this2.options.colors[0], 'rgba', true), 0.3)); markerContainer.style.setProperty('--color-1-transparent', _this2._getColorWithOpacity((0, _colorcolor.default)(_this2.options.colors[0], 'rgba', true), 0.1)); markerContainer.style.setProperty('--color-2', _this2._getColorWithOpacity((0, _colorcolor.default)(_this2.options.colors[1], 'rgba', true), 0.3)); markerContainer.style.setProperty('--color-2-transparent', _this2._getColorWithOpacity((0, _colorcolor.default)(_this2.options.colors[1], 'rgba', true), 0.1)); } _this2.markersElement.push(markerContainer); }, this); } }, { key: "_createMakerElement", value: function _createMakerElement(length, type, classNames) { var markerElements = []; for (var i = 1; i < length + 1; i++) { var element = document.createElement(type); element.className = "".concat(classNames[0], "-0").concat(i, " ").concat(classNames[1]); markerElements.push(element); } return markerElements; } }]); return HaloRingMarker; }(_Marker2.default); exports.default = HaloRingMarker; /***/ }), /***/ "05d2": /***/ (function(module, exports) { module.exports = "data:image/png;base64,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QLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX0Cw6NvpJECAAAECBIqAYFFAlAQIECBAgEBfQLDo2+kkQIAAAQIEioBgUUCUBAgQIECAQF9AsOjb6SRAgAABAgSKgGBRQJQECBAgQIBAX2Azt65Wy2X+ZL1er6b9fG273Sx3u+3y6Wm7fH4+jq8+eVq+/3AY8/qnn+6Xi2+fp+P58fYECBAgQIDA4wlMn+m3l52f9XmYn/2ZATIL3L+jOSvc54e8vvnm7dufbzebvz+dztPj1/GI6UKEi81m/b0neYon3u933zv3/sPzeP9CpifxFwECBAgQIPCQAq8+2S8zVOTnff7kZ//9G8lssLkNQMyZIa9HllhkpngZsciTq1uoyBQy/WTzJkYrtuvFKZ74eDyN86hFDRjZbyNAgAABAgQeW2AOFfku8jM/9zliEVlgygTryAZzTshrc3bI49ymNRbLu2mQ1fo6HZIXN+v1chtPsN/vFy/TIXejFhku5qGSfLyNAAECBAgQeFyB+1Axj1bM0yBTFphGK76bzZgzQ06HZJbId/4yYhGnpjUWmTyiOUYnzjHUMUzTIfejFtn04x+9WkWKGQ+H07S2wuhFqtgIECBAgMDjC0yBIkYqcgpkGqm4G62Yp0HWMfCQWSEzwxQqIkPM73wKFhk08kRcflnAudttVpfLJaY+dqvz+TLGE2SIyBGOIR+bW/7S+4BxPetvAgQIECBA4BEFcupjXlMxh4pPXz2t5tGKzAQ5DZIZId9fhorMDtPxLUtMwSKO44l2y8vleUof2+16dTyuhkwkOWrxtN/Nt6VmqFjFtMgYv3DMNRf5i59215GLfGIbAQIECBAg8JgC+Zmerzz30xKIWFeRoeKT/dMqs0Au2sxskCMVmRXmEYvMELllb9w2+uHtcrH+t3/8p3/+m+fnw3A4ns4xDXKJaY7L8/NzhIfzEAFieI6fw/NxOMXoxfl8HuPa4ni6TFMhcUeJ201T00aAAAECBB5YYL6lNBdqZqDIpRC51jJDxX63XUXgiJ9NjmDkjMU6jtcxwrHZR/D4q7/8i78dF5c/ua6xiIwxrbuIBBILNlfDZhyHYYiwsI8Riud5tGJazHk4HIfzeT3GL8uAMfNNKWUu7AkQIECAAIHHFZgDRa6pyOmPHKm4DxU5WhHX4vxt1CJHKzIJRHK4BotxWK7iWjRloFhthvU4bDJY5PZduFjHmot88vNlGM9xfInRi3xErsHIvY0AAQIECBB4XIEMEvnq85bSvDP0OvVxnf6YRyruQ0Xmipw2yQyxiCyRvbcRi9U0YpG5I+ZJxnE8xCjFNq/ftv2wWh3XOYqRUyMZMJ6i9TIFjCEWeM6PsydAgAABAgQeWWAOE/kecj1FBopcS7Hb7eKrJ64jFbs42MTpXFuR2WG6CWQZ0WG83I1YrIbVMC7HTB/xRDeT7fTFF9kSzzGeTpchplzWufYiH5DB4n5/a7IjQIAAAQIEHlAgMsB1xOK2z7UU+TYyUGQWmKc/MlREVsg7RPKmkFjMOXx/xCJO5S0jq01MjpzjjtL90y5Dw+KwPE63n8a1ZQxWxLqKWH8R+wwZw2UcL9M6jAeU85IJECBAgACB3ysw5YX4wswME5kB5n2uqcgwMY1UZNaIn816nB6eWSKSwXXEIoYdsinGMIY4cQ0X+dtilWfeUppf3RnfaRETIREqhvwT+7yeJ677a53HNgIECBAgQOAxBTJE5CvPIHHdR1zIP3E+s0Cen9ZUxGLN+1CRFzJLZM/L4s3tdrs8nU4v4WJYrpeRH8bbYEUmiuXheIy+dSSSvGvkuzBxf5xPaiNAgAABAgQeT2AOFvnK8zi3PJ6+pyLqPJWBYtrH9EccZKaI77eK77+4Ld6cvsci1nt+HVEhxy3GeIaMDdNxPOi2Xyx+/Zvf/XIKFPFX/pIIGtP+9N0tp3naRoAAAQIECDywQP4rpbllish9hojcfvbTn/zqektp3P0xLdQc4mxMf8RDM1Tk8TBePp+CRTb+X9u7d++++thjPnvz5suPnXeOAAECBAgQeDyB/KfPP/aqX79+/cXHztdz/wOOaWdXmTJgygAAAABJRU5ErkJggg==" /***/ }), /***/ "0601": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__("19e1")); var _createClass2 = _interopRequireDefault(__webpack_require__("66f6")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__("8377")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__("c031")); var _inherits2 = _interopRequireDefault(__webpack_require__("6b51")); var _mapboxGlEnhance = _interopRequireDefault(__webpack_require__("3d57")); __webpack_require__("f240"); var UniqueThemeLayerViewModel = /*#__PURE__*/ function (_mapboxgl$Evented) { (0, _inherits2.default)(UniqueThemeLayerViewModel, _mapboxgl$Evented); function UniqueThemeLayerViewModel(themeProps) { var _this; (0, _classCallCheck2.default)(this, UniqueThemeLayerViewModel); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(UniqueThemeLayerViewModel).call(this)); var layerName = themeProps.layerName, options = themeProps.options, layerId = themeProps.layerId, data = themeProps.data; _this.layerName = layerName || layerId; options.id = options.id || layerId; _this.options = options; _this.layerId = layerId; _this.data = data || []; return _this; } (0, _createClass2.default)(UniqueThemeLayerViewModel, [{ key: "setMap", value: function setMap(mapInfo) { var map = mapInfo.map; this.map = map; this._init(); } }, { key: "_init", value: function _init() { this.themeLayer = new _mapboxGlEnhance.default.supermap.UniqueThemeLayer(this.layerName, this.options); this.map.addLayer(this.themeLayer); this.themeLayer.addFeatures(this.data); } }, { key: "setOptions", value: function setOptions(options) { this.options = options; this.removed(); this._init(); } }, { key: "setData", value: function setData(data) { this.data = data; this.removed(); this._init(); } }, { key: "removed", value: function removed() { var map = this.map, options = this.options; var layerId = options.id; if (map && layerId && map.getLayer(layerId)) { map.removeLayer(layerId); } } }]); return UniqueThemeLayerViewModel; }(_mapboxGlEnhance.default.Evented); exports.default = UniqueThemeLayerViewModel; /***/ }), /***/ "0625": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _PanViewModel = _interopRequireDefault(__webpack_require__("3850")); var _mapGetter = _interopRequireDefault(__webpack_require__("b761")); var _control = _interopRequireDefault(__webpack_require__("2c56")); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // var _default = { name: 'SmPan', mixins: [_mapGetter.default, _control.default], props: { panLength: { type: Number, default: 200 } }, data: function data() { return { center: null, panImgClass: 'sm-component-pan--default', mapboxglClass: '' }; }, created: function created() { this.viewModel = new _PanViewModel.default(); }, methods: { panToCenter: function panToCenter() { this.lnglat = this.center; this.panTo(this.lnglat); }, panToLeft: function panToLeft() { // this.lnglat.lng -= this.panLength; // this.panTo(this.lnglat); this.panBy([-this.panLength, 0]); }, panToRight: function panToRight() { // this.lnglat.lng += this.panLength; // this.panTo(this.lnglat); this.panBy([this.panLength, 0]); }, panToTop: function panToTop() { // this.lnglat.lat -= this.panLength; // this.panTo(this.lnglat); this.panBy([0, -this.panLength]); }, panToBottom: function panToBottom() { // this.lnglat.lat += this.panLength; // this.panTo(this.lnglat); this.panBy([0, this.panLength]); }, panTo: function panTo(lnglat) { var mapNotLoaded = this.mapNotLoadedTip(); if (mapNotLoaded) { return; } this.viewModel.panTo(lnglat); }, panBy: function panBy(point) { var mapNotLoaded = this.mapNotLoadedTip(); if (mapNotLoaded) { return; } this.viewModel.panBy(point); }, setPanImg: function setPanImg() { this.panImgClass = 'sm-component-pan--default'; }, setPanWestImg: function setPanWestImg() { this.panImgClass = 'sm-component-pan--west'; }, setPanEastImg: function setPanEastImg() { this.panImgClass = 'sm-component-pan--east'; }, setPanNorthImg: function setPanNorthImg() { this.panImgClass = 'sm-component-pan--north'; }, setPanSouthImg: function setPanSouthImg() { this.panImgClass = 'sm-component-pan--south'; } }, loaded: function loaded() { this.parentIsWebMapOrMap && (this.mapboxglClass = 'mapboxgl-ctrl'); this.center = this.map.getCenter(); this.lnglat = this.center; } }; exports.default = _default; /***/ }), /***/ "0640": /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__("bbe9").PassThrough /***/ }), /***/ "0650": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var meta_1 = __webpack_require__("49c0"); // Note: change RADIUS => earthRadius var RADIUS = 6378137; /** * Takes one or more features and returns their area in square meters. * * @name area * @param {GeoJSON} geojson input GeoJSON feature(s) * @returns {number} area in square meters * @example * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]); * * var area = turf.area(polygon); * * //addToMap * var addToMap = [polygon] * polygon.properties.area = area */ function area(geojson) { return meta_1.geomReduce(geojson, function (value, geom) { return value + calculateArea(geom); }, 0); } exports.default = area; /** * Calculate Area * * @private * @param {Geometry} geom GeoJSON Geometries * @returns {number} area */ function calculateArea(geom) { var total = 0; var i; switch (geom.type) { case "Polygon": return polygonArea(geom.coordinates); case "MultiPolygon": for (i = 0; i < geom.coordinates.length; i++) { total += polygonArea(geom.coordinates[i]); } return total; case "Point": case "MultiPoint": case "LineString": case "MultiLineString": return 0; } return 0; } function polygonArea(coords) { var total = 0; if (coords && coords.length > 0) { total += Math.abs(ringArea(coords[0])); for (var i = 1; i < coords.length; i++) { total -= Math.abs(ringArea(coords[i])); } } return total; } /** * @private * Calculate the approximate area of the polygon were it projected onto the earth. * Note that this area will be positive if ring is oriented clockwise, otherwise it will be negative. * * Reference: * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for Polygons on a Sphere", * JPL Publication 07-03, Jet Propulsion * Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409 * * @param {Array>} coords Ring Coordinates * @returns {number} The approximate signed geodesic area of the polygon in square meters. */ function ringArea(coords) { var p1; var p2; var p3; var lowerIndex; var middleIndex; var upperIndex; var i; var total = 0; var coordsLength = coords.length; if (coordsLength > 2) { for (i = 0; i < coordsLength; i++) { if (i === coordsLength - 2) { lowerIndex = coordsLength - 2; middleIndex = coordsLength - 1; upperIndex = 0; } else if (i === coordsLength - 1) { lowerIndex = coordsLength - 1; middleIndex = 0; upperIndex = 1; } else { lowerIndex = i; middleIndex = i + 1; upperIndex = i + 2; } p1 = coords[lowerIndex]; p2 = coords[middleIndex]; p3 = coords[upperIndex]; total += (rad(p3[0]) - rad(p1[0])) * Math.sin(rad(p2[1])); } total = total * RADIUS * RADIUS / 2; } return total; } function rad(num) { return num * Math.PI / 180; } /***/ }), /***/ "074d": /***/ (function(module, exports) { module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmYAAAFoCAYAAAD9zjdnAAAACXBIWXMAAAsTAAALEwEAmpwYAAA8Y2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMTEgNzkuMTU4MzI1LCAyMDE1LzA5LzEwLTAxOjEwOjIwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTgtMDUtMTdUMTQ6MTQ6NTMrMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMi0wNFQwODo1NTo1MCswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTgtMTItMDRUMDg6NTU6NTArMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+CiAgICAgICAgICAgIDxyZGY6QmFnPgogICAgICAgICAgICAgICA8cmRmOmxpPnhtcC5kaWQ6ZmQ3YzFkY2ItN2ZkNC1kZDQ1LTk2MGItN2QyODdhN2MxNTU2PC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6YTBkOWQ1NDUtY2QwYS05MzQ5LWFkMDUtMmQ2NDNkYTdhMGNkPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjdiOWViZTg5LWQxNWMtZjM0NS1hNmYxLTMwYmEzZDI2OTY5YjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjdiOWViZTg5LWQxNWMtZjM0NS1hNmYxLTMwYmEzZDI2OTY5YjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo3YjllYmU4OS1kMTVjLWYzNDUtYTZmMS0zMGJhM2QyNjk2OWI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTgtMDUtMTdUMTQ6MTQ6NTMrMDg6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzAwOGE1ODAtNzZlMS05YzRlLTk0NjEtN2NkNzNjZDI4YTliPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTEyLTAzVDE3OjI1OjEzKzA4OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmEwZDlkNTQ1LWNkMGEtOTM0OS1hZDA1LTJkNjQzZGE3YTBjZDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0xMi0wNFQwODo1NTo1MCswODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj42MTQ8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MzYwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4lmR0mAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAOPaSURBVHja7P19UBznmfeP6tT5PXvso9Kv6vyOj72ppNb7PIkdx1lLawG2SSJOZLuySQElU07Zxom85cgWsjbZJauSHKNFYGRZTpjHivwHBtkgifJiB5k3wYAiUIIwEggBYuQjDYzACEmgYWhGHvHmiBld5w/me/uapmeme6YHhHRfVXfBzPT03d0z0/3p7/W2jIiWaVnDzpx7SkpKdhQVFX1eVFRE/vF5SUnJjoadOfcsi9LS018g9Yj2NbPMZ/1ehc/6vQqz11tSUrKpqKhIwfEsKSmxLouh5efnF+Tn5w/7R0Es5rBYLIRh9vrYeFNjuTe1lo103tV5oxtX7nIpCTkKJeQoFL/7WkWsPpfkjD3L49527125y6Ws3OVS4t52703O2LPc7HmwLwk5Cpm9Poy4HaPb1cvF7RjdrrVsrI5nVnbWg0VFRUpxcXHU33F2rqOioiIye/lotiWWc6mPZ3FxcYH63F9cXFyQlZ314ELsW6z2Ny7P9QB+c2b/HsxePtrf5kL89uLyXA/Eve3eG79r3CbOnbvGbXFvu/fG5bkeWIh9W8j9XTDTArPCwsJ1HCA0hlJYWLjudgAzn/V7Fd7D33mDPzdb+91nZmu/+wx/znv4O29EA2v+Y0oLCWV6ACdKYNI1opznzRDLvmkGmMXnjq7jP+pYQtmyZcuWxb3t3jsPcKK4UERy4orkBKYHykLBWSyhDL+raOHsTgczP5CFnLe4uLiguqpyxVIDM0CZGb+5Ox3McHMZbl4zbjolmKkAoqSkxHqgrCypuqpyRXVV5YoDZWVJJSUlVrweDZzdKmDmPfydN76qecirBjE1qH1V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" /***/ }), /***/ "089f": /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }), /***/ "08d1": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _Indicator_vue_vue_type_template_id_39b17318___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("022b"); /* harmony import */ var _Indicator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("13f5"); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _Indicator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _Indicator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("b429"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])( _Indicator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _Indicator_vue_vue_type_template_id_39b17318___WEBPACK_IMPORTED_MODULE_0__[/* render */ "a"], _Indicator_vue_vue_type_template_id_39b17318___WEBPACK_IMPORTED_MODULE_0__[/* staticRenderFns */ "b"], false, null, null, null ) /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "090e": /***/ (function(module) { module.exports = JSON.parse("{\"buoy-icon-1\":{\"width\":26,\"height\":30,\"x\":318,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-2\":{\"width\":26,\"height\":30,\"x\":348,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-3\":{\"width\":26,\"height\":30,\"x\":378,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-4\":{\"width\":26,\"height\":30,\"x\":408,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-5\":{\"width\":26,\"height\":30,\"x\":438,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-6\":{\"width\":26,\"height\":30,\"x\":468,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-7\":{\"width\":26,\"height\":30,\"x\":498,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-8\":{\"width\":26,\"height\":30,\"x\":528,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-9\":{\"width\":26,\"height\":30,\"x\":558,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-10\":{\"width\":26,\"height\":30,\"x\":588,\"y\":117,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-1\":{\"width\":26,\"height\":30,\"x\":316,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-2\":{\"width\":26,\"height\":30,\"x\":346,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-3\":{\"width\":26,\"height\":30,\"x\":376,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-4\":{\"width\":26,\"height\":30,\"x\":406,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-5\":{\"width\":26,\"height\":30,\"x\":436,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-6\":{\"width\":26,\"height\":30,\"x\":466,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-7\":{\"width\":26,\"height\":30,\"x\":496,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-8\":{\"width\":26,\"height\":30,\"x\":526,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-9\":{\"width\":26,\"height\":30,\"x\":556,\"y\":77,\"pixelRatio\":1,\"visible\":true},\"buoy-icon-active-10\":{\"width\":26,\"height\":30,\"x\":586,\"y\":77,\"pixelRatio\":1,\"visible\":true}}"); /***/ }), /***/ "0956": /***/ (function(module, exports, __webpack_require__) { "use strict"; // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to permit // persons to whom the Software is furnished to do so, subject to the // following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. var R = typeof Reflect === 'object' ? Reflect : null var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); } var ReflectOwnKeys if (R && typeof R.ownKeys === 'function') { ReflectOwnKeys = R.ownKeys } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys(target) { return Object.getOwnPropertyNames(target) .concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { return value !== value; } function EventEmitter() { EventEmitter.init.call(this); } module.exports = EventEmitter; // Backwards-compat with node 0.10.x EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = undefined; EventEmitter.prototype._eventsCount = 0; EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are // added to it. This is a useful default which helps finding memory leaks. var defaultMaxListeners = 10; Object.defineProperty(EventEmitter, 'defaultMaxListeners', { enumerable: true, get: function() { return defaultMaxListeners; }, set: function(arg) { if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); } defaultMaxListeners = arg; } }); EventEmitter.init = function() { if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) { this._events = Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || undefined; }; // Obviously not all Emitters should be limited to 10. This function allows // that to be increased. Set to zero for unlimited. EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); } this._maxListeners = n; return this; }; function $getMaxListeners(that) { if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; return that._maxListeners; } EventEmitter.prototype.getMaxListeners = function getMaxListeners() { return $getMaxListeners(this); }; EventEmitter.prototype.emit = function emit(type) { var args = []; for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); var doError = (type === 'error'); var events = this._events; if (events !== undefined) doError = (doError && events.error === undefined); else if (!doError) return false; // If there is no 'error' event listener then throw. if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { // Note: The comments on the `throw` lines are intentional, they show // up in Node's output if this results in an unhandled exception. throw er; // Unhandled 'error' event } // At least give some kind of context to the user var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); err.context = er; throw err; // Unhandled 'error' event } var handler = events[type]; if (handler === undefined) return false; if (typeof handler === 'function') { ReflectApply(handler, this, args); } else { var len = handler.length; var listeners = arrayClone(handler, len); for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args); } return true; }; function _addListener(target, type, listener, prepend) { var m; var events; var existing; if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } events = target._events; if (events === undefined) { events = target._events = Object.create(null); target._eventsCount = 0; } else { // To avoid recursion in the case that type === "newListener"! Before // adding it to the listeners, first emit "newListener". if (events.newListener !== undefined) { target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the // this._events to be assigned to a new object events = target._events; } existing = events[type]; } if (existing === undefined) { // Optimize the case of one listener. Don't need the extra array object. existing = events[type] = listener; ++target._eventsCount; } else { if (typeof existing === 'function') { // Adding the second element, need to change to array. existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append. } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } // Check for listener leak m = $getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; // No error code for this since it is a Warning // eslint-disable-next-line no-restricted-syntax var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit'); w.name = 'MaxListenersExceededWarning'; w.emitter = target; w.type = type; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter.prototype.addListener = function addListener(type, listener) { return _addListener(this, type, listener, false); }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.prependListener = function prependListener(type, listener) { return _addListener(this, type, listener, true); }; function onceWrapper() { var args = []; for (var i = 0; i < arguments.length; i++) args.push(arguments[i]); if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; ReflectApply(this.listener, this.target, args); } } function _onceWrap(target, type, listener) { var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; var wrapped = onceWrapper.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter.prototype.once = function once(type, listener) { if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } this.on(type, _onceWrap(this, type, listener)); return this; }; EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } this.prependListener(type, _onceWrap(this, type, listener)); return this; }; // Emits a 'removeListener' event if and only if the listener was removed. EventEmitter.prototype.removeListener = function removeListener(type, listener) { var list, events, position, i, originalListener; if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } events = this._events; if (events === undefined) return this; list = events[type]; if (list === undefined) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = Object.create(null); else { delete events[type]; if (events.removeListener) this.emit('removeListener', type, list.listener || listener); } } else if (typeof list !== 'function') { position = -1; for (i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { originalListener = list[i].listener; position = i; break; } } if (position < 0) return this; if (position === 0) list.shift(); else { spliceOne(list, position); } if (list.length === 1) events[type] = list[0]; if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener); } return this; }; EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { var listeners, events, i; events = this._events; if (events === undefined) return this; // not listening for removeListener, no need to emit if (events.removeListener === undefined) { if (arguments.length === 0) { this._events = Object.create(null); this._eventsCount = 0; } else if (events[type] !== undefined) { if (--this._eventsCount === 0) this._events = Object.create(null); else delete events[type]; } return this; } // emit removeListener for all listeners on all events if (arguments.length === 0) { var keys = Object.keys(events); var key; for (i = 0; i < keys.length; ++i) { key = keys[i]; if (key === 'removeListener') continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = Object.create(null); this._eventsCount = 0; return this; } listeners = events[type]; if (typeof listeners === 'function') { this.removeListener(type, listeners); } else if (listeners !== undefined) { // LIFO order for (i = listeners.length - 1; i >= 0; i--) { this.removeListener(type, listeners[i]); } } return this; }; function _listeners(target, type, unwrap) { var events = target._events; if (events === undefined) return []; var evlistener = events[type]; if (evlistener === undefined) return []; if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter.prototype.listeners = function listeners(type) { return _listeners(this, type, true); }; EventEmitter.prototype.rawListeners = function rawListeners(type) { return _listeners(this, type, false); }; EventEmitter.listenerCount = function(emitter, type) { if (typeof emitter.listenerCount === 'function') { return emitter.listenerCount(type); } else { return listenerCount.call(emitter, type); } }; EventEmitter.prototype.listenerCount = listenerCount; function listenerCount(type) { var events = this._events; if (events !== undefined) { var evlistener = events[type]; if (typeof evlistener === 'function') { return 1; } else if (evlistener !== undefined) { return evlistener.length; } } return 0; } EventEmitter.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) copy[i] = arr[i]; return copy; } function spliceOne(list, index) { for (; index + 1 < list.length; index++) list[index] = list[index + 1]; list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i = 0; i < ret.length; ++i) { ret[i] = arr[i].listener || arr[i]; } return ret; } /***/ }), /***/ "0a75": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // https://en.wikipedia.org/wiki/Rhumb_line var helpers_1 = __webpack_require__("38ce"); var invariant_1 = __webpack_require__("144a"); /** * Takes two {@link Point|points} and finds the bearing angle between them along a Rhumb line * i.e. the angle measured in degrees start the north line (0 degrees) * * @name rhumbBearing * @param {Coord} start starting Point * @param {Coord} end ending Point * @param {Object} [options] Optional parameters * @param {boolean} [options.final=false] calculates the final bearing if true * @returns {number} bearing from north in decimal degrees, between -180 and 180 degrees (positive clockwise) * @example * var point1 = turf.point([-75.343, 39.984], {"marker-color": "#F00"}); * var point2 = turf.point([-75.534, 39.123], {"marker-color": "#00F"}); * * var bearing = turf.rhumbBearing(point1, point2); * * //addToMap * var addToMap = [point1, point2]; * point1.properties.bearing = bearing; * point2.properties.bearing = bearing; */ function rhumbBearing(start, end, options) { if (options === void 0) { options = {}; } var bear360; if (options.final) { bear360 = calculateRhumbBearing(invariant_1.getCoord(end), invariant_1.getCoord(start)); } else { bear360 = calculateRhumbBearing(invariant_1.getCoord(start), invariant_1.getCoord(end)); } var bear180 = (bear360 > 180) ? -(360 - bear360) : bear360; return bear180; } /** * Returns the bearing from ‘this’ point to destination point along a rhumb line. * Adapted from Geodesy: https://github.com/chrisveness/geodesy/blob/master/latlon-spherical.js * * @private * @param {Array} from - origin point. * @param {Array} to - destination point. * @returns {number} Bearing in degrees from north. * @example * var p1 = new LatLon(51.127, 1.338); * var p2 = new LatLon(50.964, 1.853); * var d = p1.rhumbBearingTo(p2); // 116.7 m */ function calculateRhumbBearing(from, to) { // φ => phi // Δλ => deltaLambda // Δψ => deltaPsi // θ => theta var phi1 = helpers_1.degreesToRadians(from[1]); var phi2 = helpers_1.degreesToRadians(to[1]); var deltaLambda = helpers_1.degreesToRadians((to[0] - from[0])); // if deltaLambdaon over 180° take shorter rhumb line across the anti-meridian: if (deltaLambda > Math.PI) { deltaLambda -= 2 * Math.PI; } if (deltaLambda < -Math.PI) { deltaLambda += 2 * Math.PI; } var deltaPsi = Math.log(Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4)); var theta = Math.atan2(deltaLambda, deltaPsi); return (helpers_1.radiansToDegrees(theta) + 360) % 360; } exports.default = rhumbBearing; /***/ }), /***/ "0b0f": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _TimeText_vue_vue_type_template_id_6da009bc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("827d"); /* harmony import */ var _TimeText_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("d5f4"); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _TimeText_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _TimeText_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("b429"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])( _TimeText_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _TimeText_vue_vue_type_template_id_6da009bc___WEBPACK_IMPORTED_MODULE_0__[/* render */ "a"], _TimeText_vue_vue_type_template_id_6da009bc___WEBPACK_IMPORTED_MODULE_0__[/* staticRenderFns */ "b"], false, null, null, null ) /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "0b11": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/common/chart/ChartMixin.vue?vue&type=template&id=1f1efe10& var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('sm-card',{directives:[{name:"show",rawName:"v-show",value:(_vm.isShow),expression:"isShow"}],staticClass:"sm-component-chart",attrs:{"icon-class":_vm.iconClass,"icon-position":_vm.position,"header-name":_vm.headerName,"auto-rotate":_vm.autoRotate,"collapsed":_vm.collapsed}},[_c('v-chart',{ref:_vm.chartId,style:(_vm._chartStyle),attrs:{"id":_vm.chartId,"options":_vm._chartOptions,"initOptions":_vm.initOptions,"group":_vm.group,"manual-update":_vm.manualUpdate,"theme":_vm.theme || _vm.chartTheme},on:{"datazoom":_vm.dataZoomHandler}}),_vm._v(" "),_c('TablePopup',_vm._b({directives:[{name:"show",rawName:"v-show",value:(false),expression:"false"}],ref:"chartTablePopup",attrs:{"text-color":_vm.textColor,"background":_vm.background}},'TablePopup',_vm.tablePopupProps,false))],1)} var staticRenderFns = [] // CONCATENATED MODULE: ./src/common/chart/ChartMixin.vue?vue&type=template&id=1f1efe10& /* concated harmony reexport render */__webpack_require__.d(__webpack_exports__, "a", function() { return render; }); /* concated harmony reexport staticRenderFns */__webpack_require__.d(__webpack_exports__, "b", function() { return staticRenderFns; }); /***/ }), /***/ "0c08": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); // CONCATENATED MODULE: ./node_modules/@turf/envelope/node_modules/@turf/helpers/main.es.js /** * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth. */ var earthRadius = 6371008.8; /** * Unit of measurement factors using a spherical (non-ellipsoid) earth radius. */ var factors = { meters: earthRadius, metres: earthRadius, millimeters: earthRadius * 1000, millimetres: earthRadius * 1000, centimeters: earthRadius * 100, centimetres: earthRadius * 100, kilometers: earthRadius / 1000, kilometres: earthRadius / 1000, miles: earthRadius / 1609.344, nauticalmiles: earthRadius / 1852, inches: earthRadius * 39.370, yards: earthRadius / 1.0936, feet: earthRadius * 3.28084, radians: 1, degrees: earthRadius / 111325, }; /** * Units of measurement factors based on 1 meter. */ var unitsFactors = { meters: 1, metres: 1, millimeters: 1000, millimetres: 1000, centimeters: 100, centimetres: 100, kilometers: 1 / 1000, kilometres: 1 / 1000, miles: 1 / 1609.344, nauticalmiles: 1 / 1852, inches: 39.370, yards: 1 / 1.0936, feet: 3.28084, radians: 1 / earthRadius, degrees: 1 / 111325, }; /** * Area of measurement factors based on 1 square meter. */ var areaFactors = { meters: 1, metres: 1, millimeters: 1000000, millimetres: 1000000, centimeters: 10000, centimetres: 10000, kilometers: 0.000001, kilometres: 0.000001, acres: 0.000247105, miles: 3.86e-7, yards: 1.195990046, feet: 10.763910417, inches: 1550.003100006 }; /** * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}. * * @name feature * @param {Geometry} geometry input geometry * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a GeoJSON Feature * @example * var geometry = { * "type": "Point", * "coordinates": [110, 50] * }; * * var feature = turf.feature(geometry); * * //=feature */ function feature(geometry, properties, options) { // Optional Parameters options = options || {}; if (!isObject(options)) throw new Error('options is invalid'); var bbox = options.bbox; var id = options.id; // Validation if (geometry === undefined) throw new Error('geometry is required'); if (properties && properties.constructor !== Object) throw new Error('properties must be an Object'); if (bbox) validateBBox(bbox); if (id) validateId(id); // Main var feat = {type: 'Feature'}; if (id) feat.id = id; if (bbox) feat.bbox = bbox; feat.properties = properties || {}; feat.geometry = geometry; return feat; } /** * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates. * For GeometryCollection type use `helpers.geometryCollection` * * @name geometry * @param {string} type Geometry Type * @param {Array} coordinates Coordinates * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Geometry * @returns {Geometry} a GeoJSON Geometry * @example * var type = 'Point'; * var coordinates = [110, 50]; * * var geometry = turf.geometry(type, coordinates); * * //=geometry */ function main_es_geometry(type, coordinates, options) { // Optional Parameters options = options || {}; if (!isObject(options)) throw new Error('options is invalid'); var bbox = options.bbox; // Validation if (!type) throw new Error('type is required'); if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); if (bbox) validateBBox(bbox); // Main var geom; switch (type) { case 'Point': geom = point(coordinates).geometry; break; case 'LineString': geom = lineString(coordinates).geometry; break; case 'Polygon': geom = polygon(coordinates).geometry; break; case 'MultiPoint': geom = multiPoint(coordinates).geometry; break; case 'MultiLineString': geom = multiLineString(coordinates).geometry; break; case 'MultiPolygon': geom = multiPolygon(coordinates).geometry; break; default: throw new Error(type + ' is invalid'); } if (bbox) geom.bbox = bbox; return geom; } /** * Creates a {@link Point} {@link Feature} from a Position. * * @name point * @param {Array} coordinates longitude, latitude position (each in decimal degrees) * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a Point feature * @example * var point = turf.point([-75.343, 39.984]); * * //=point */ function point(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); if (coordinates.length < 2) throw new Error('coordinates must be at least 2 numbers long'); if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) throw new Error('coordinates must contain numbers'); return feature({ type: 'Point', coordinates: coordinates }, properties, options); } /** * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates. * * @name points * @param {Array>} coordinates an array of Points * @param {Object} [properties={}] Translate these properties to each Feature * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the FeatureCollection * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} Point Feature * @example * var points = turf.points([ * [-75, 39], * [-80, 45], * [-78, 50] * ]); * * //=points */ function points(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); return featureCollection(coordinates.map(function (coords) { return point(coords, properties); }), options); } /** * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings. * * @name polygon * @param {Array>>} coordinates an array of LinearRings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} Polygon Feature * @example * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' }); * * //=polygon */ function polygon(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); for (var i = 0; i < coordinates.length; i++) { var ring = coordinates[i]; if (ring.length < 4) { throw new Error('Each LinearRing of a Polygon must have 4 or more Positions.'); } for (var j = 0; j < ring[ring.length - 1].length; j++) { // Check if first point of Polygon contains two numbers if (i === 0 && j === 0 && !isNumber(ring[0][0]) || !isNumber(ring[0][1])) throw new Error('coordinates must contain numbers'); if (ring[ring.length - 1][j] !== ring[0][j]) { throw new Error('First and last Position are not equivalent.'); } } } return feature({ type: 'Polygon', coordinates: coordinates }, properties, options); } /** * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates. * * @name polygons * @param {Array>>>} coordinates an array of Polygon coordinates * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} Polygon FeatureCollection * @example * var polygons = turf.polygons([ * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]], * ]); * * //=polygons */ function polygons(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); return featureCollection(coordinates.map(function (coords) { return polygon(coords, properties); }), options); } /** * Creates a {@link LineString} {@link Feature} from an Array of Positions. * * @name lineString * @param {Array>} coordinates an array of Positions * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} LineString Feature * @example * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'}); * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'}); * * //=linestring1 * //=linestring2 */ function lineString(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (coordinates.length < 2) throw new Error('coordinates must be an array of two or more positions'); // Check if first point of LineString contains two numbers if (!isNumber(coordinates[0][1]) || !isNumber(coordinates[0][1])) throw new Error('coordinates must contain numbers'); return feature({ type: 'LineString', coordinates: coordinates }, properties, options); } /** * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates. * * @name lineStrings * @param {Array>} coordinates an array of LinearRings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the FeatureCollection * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} LineString FeatureCollection * @example * var linestrings = turf.lineStrings([ * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]], * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]] * ]); * * //=linestrings */ function lineStrings(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); return featureCollection(coordinates.map(function (coords) { return lineString(coords, properties); }), options); } /** * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}. * * @name featureCollection * @param {Feature[]} features input features * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {FeatureCollection} FeatureCollection of Features * @example * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'}); * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'}); * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'}); * * var collection = turf.featureCollection([ * locationA, * locationB, * locationC * ]); * * //=collection */ function featureCollection(features, options) { // Optional Parameters options = options || {}; if (!isObject(options)) throw new Error('options is invalid'); var bbox = options.bbox; var id = options.id; // Validation if (!features) throw new Error('No features passed'); if (!Array.isArray(features)) throw new Error('features must be an Array'); if (bbox) validateBBox(bbox); if (id) validateId(id); // Main var fc = {type: 'FeatureCollection'}; if (id) fc.id = id; if (bbox) fc.bbox = bbox; fc.features = features; return fc; } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiLineString * @param {Array>>} coordinates an array of LineStrings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a MultiLineString feature * @throws {Error} if no coordinates are passed * @example * var multiLine = turf.multiLineString([[[0,0],[10,10]]]); * * //=multiLine */ function multiLineString(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); return feature({ type: 'MultiLineString', coordinates: coordinates }, properties, options); } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiPoint * @param {Array>} coordinates an array of Positions * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a MultiPoint feature * @throws {Error} if no coordinates are passed * @example * var multiPt = turf.multiPoint([[0,0],[10,10]]); * * //=multiPt */ function multiPoint(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); return feature({ type: 'MultiPoint', coordinates: coordinates }, properties, options); } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiPolygon * @param {Array>>>} coordinates an array of Polygons * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a multipolygon feature * @throws {Error} if no coordinates are passed * @example * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]); * * //=multiPoly * */ function multiPolygon(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); return feature({ type: 'MultiPolygon', coordinates: coordinates }, properties, options); } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name geometryCollection * @param {Array} geometries an array of GeoJSON Geometries * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a GeoJSON GeometryCollection Feature * @example * var pt = { * "type": "Point", * "coordinates": [100, 0] * }; * var line = { * "type": "LineString", * "coordinates": [ [101, 0], [102, 1] ] * }; * var collection = turf.geometryCollection([pt, line]); * * //=collection */ function geometryCollection(geometries, properties, options) { if (!geometries) throw new Error('geometries is required'); if (!Array.isArray(geometries)) throw new Error('geometries must be an Array'); return feature({ type: 'GeometryCollection', geometries: geometries }, properties, options); } /** * Round number to precision * * @param {number} num Number * @param {number} [precision=0] Precision * @returns {number} rounded number * @example * turf.round(120.4321) * //=120 * * turf.round(120.4321, 2) * //=120.43 */ function round(num, precision) { if (num === undefined || num === null || isNaN(num)) throw new Error('num is required'); if (precision && !(precision >= 0)) throw new Error('precision must be a positive number'); var multiplier = Math.pow(10, precision || 0); return Math.round(num * multiplier) / multiplier; } /** * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit. * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @name radiansToLength * @param {number} radians in radians across the sphere * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers. * @returns {number} distance */ function radiansToLength(radians, units) { if (radians === undefined || radians === null) throw new Error('radians is required'); if (units && typeof units !== 'string') throw new Error('units must be a string'); var factor = factors[units || 'kilometers']; if (!factor) throw new Error(units + ' units is invalid'); return radians * factor; } /** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @name lengthToRadians * @param {number} distance in real units * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers. * @returns {number} radians */ function lengthToRadians(distance, units) { if (distance === undefined || distance === null) throw new Error('distance is required'); if (units && typeof units !== 'string') throw new Error('units must be a string'); var factor = factors[units || 'kilometers']; if (!factor) throw new Error(units + ' units is invalid'); return distance / factor; } /** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet * * @name lengthToDegrees * @param {number} distance in real units * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers. * @returns {number} degrees */ function lengthToDegrees(distance, units) { return radiansToDegrees(lengthToRadians(distance, units)); } /** * Converts any bearing angle from the north line direction (positive clockwise) * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line * * @name bearingToAzimuth * @param {number} bearing angle, between -180 and +180 degrees * @returns {number} angle between 0 and 360 degrees */ function bearingToAzimuth(bearing) { if (bearing === null || bearing === undefined) throw new Error('bearing is required'); var angle = bearing % 360; if (angle < 0) angle += 360; return angle; } /** * Converts an angle in radians to degrees * * @name radiansToDegrees * @param {number} radians angle in radians * @returns {number} degrees between 0 and 360 degrees */ function radiansToDegrees(radians) { if (radians === null || radians === undefined) throw new Error('radians is required'); var degrees = radians % (2 * Math.PI); return degrees * 180 / Math.PI; } /** * Converts an angle in degrees to radians * * @name degreesToRadians * @param {number} degrees angle between 0 and 360 degrees * @returns {number} angle in radians */ function degreesToRadians(degrees) { if (degrees === null || degrees === undefined) throw new Error('degrees is required'); var radians = degrees % 360; return radians * Math.PI / 180; } /** * Converts a length to the requested unit. * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @param {number} length to be converted * @param {string} originalUnit of the length * @param {string} [finalUnit='kilometers'] returned unit * @returns {number} the converted length */ function convertLength(length, originalUnit, finalUnit) { if (length === null || length === undefined) throw new Error('length is required'); if (!(length >= 0)) throw new Error('length must be a positive number'); return radiansToLength(lengthToRadians(length, originalUnit), finalUnit || 'kilometers'); } /** * Converts a area to the requested unit. * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches * @param {number} area to be converted * @param {string} [originalUnit='meters'] of the distance * @param {string} [finalUnit='kilometers'] returned unit * @returns {number} the converted distance */ function convertArea(area, originalUnit, finalUnit) { if (area === null || area === undefined) throw new Error('area is required'); if (!(area >= 0)) throw new Error('area must be a positive number'); var startFactor = areaFactors[originalUnit || 'meters']; if (!startFactor) throw new Error('invalid original units'); var finalFactor = areaFactors[finalUnit || 'kilometers']; if (!finalFactor) throw new Error('invalid final units'); return (area / startFactor) * finalFactor; } /** * isNumber * * @param {*} num Number to validate * @returns {boolean} true/false * @example * turf.isNumber(123) * //=true * turf.isNumber('foo') * //=false */ function isNumber(num) { return !isNaN(num) && num !== null && !Array.isArray(num); } /** * isObject * * @param {*} input variable to validate * @returns {boolean} true/false * @example * turf.isObject({elevation: 10}) * //=true * turf.isObject('foo') * //=false */ function isObject(input) { return (!!input) && (input.constructor === Object); } /** * Validate BBox * * @private * @param {Array} bbox BBox to validate * @returns {void} * @throws Error if BBox is not valid * @example * validateBBox([-180, -40, 110, 50]) * //=OK * validateBBox([-180, -40]) * //=Error * validateBBox('Foo') * //=Error * validateBBox(5) * //=Error * validateBBox(null) * //=Error * validateBBox(undefined) * //=Error */ function validateBBox(bbox) { if (!bbox) throw new Error('bbox is required'); if (!Array.isArray(bbox)) throw new Error('bbox must be an Array'); if (bbox.length !== 4 && bbox.length !== 6) throw new Error('bbox must be an Array of 4 or 6 numbers'); bbox.forEach(function (num) { if (!isNumber(num)) throw new Error('bbox must only contain numbers'); }); } /** * Validate Id * * @private * @param {string|number} id Id to validate * @returns {void} * @throws Error if Id is not valid * @example * validateId([-180, -40, 110, 50]) * //=Error * validateId([-180, -40]) * //=Error * validateId('Foo') * //=OK * validateId(5) * //=OK * validateId(null) * //=Error * validateId(undefined) * //=Error */ function validateId(id) { if (!id) throw new Error('id is required'); if (['string', 'number'].indexOf(typeof id) === -1) throw new Error('id must be a number or a string'); } // Deprecated methods function radians2degrees() { throw new Error('method has been renamed to `radiansToDegrees`'); } function degrees2radians() { throw new Error('method has been renamed to `degreesToRadians`'); } function distanceToDegrees() { throw new Error('method has been renamed to `lengthToDegrees`'); } function distanceToRadians() { throw new Error('method has been renamed to `lengthToRadians`'); } function radiansToDistance() { throw new Error('method has been renamed to `radiansToLength`'); } function bearingToAngle() { throw new Error('method has been renamed to `bearingToAzimuth`'); } function convertDistance() { throw new Error('method has been renamed to `convertLength`'); } // CONCATENATED MODULE: ./node_modules/@turf/envelope/node_modules/@turf/meta/main.es.js /** * Callback for coordEach * * @callback coordEachCallback * @param {Array} currentCoord The current coordinate being processed. * @param {number} coordIndex The current index of the coordinate being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. */ /** * Iterate over coordinates in any GeoJSON object, similar to Array.forEach() * * @name coordEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex) * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration. * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {"foo": "bar"}), * turf.point([36, 53], {"hello": "world"}) * ]); * * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { * //=currentCoord * //=coordIndex * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * }); */ function coordEach(geojson, callback, excludeWrapCoord) { // Handles null Geometry -- Skips this GeoJSON if (geojson === null) return; var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === 'FeatureCollection', isFeature = type === 'Feature', stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way // is because it's trying to be fast. GeoJSON supports multiple kinds // of objects at its root: FeatureCollection, Features, Geometries. // This function has the responsibility of handling all of them, and that // means that some of the `for` loops you see below actually just don't apply // to certain inputs. For instance, if you give this just a // Point geometry, then both loops are short-circuited and all we do // is gradually rename the input until it's called 'geometry'. // // This also aims to allocate as few resources as possible: just a // few numbers and booleans, rather than any temporary arrays as would // be required with the normalization approach. for (var featureIndex = 0; featureIndex < stop; featureIndex++) { geometryMaybeCollection = (isFeatureCollection ? geojson.features[featureIndex].geometry : (isFeature ? geojson.geometry : geojson)); isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (var geomIndex = 0; geomIndex < stopG; geomIndex++) { var multiFeatureIndex = 0; var geometryIndex = 0; geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection; // Handles null Geometry -- Skips this geometry if (geometry === null) continue; coords = geometry.coordinates; var geomType = geometry.type; wrapShrink = (excludeWrapCoord && (geomType === 'Polygon' || geomType === 'MultiPolygon')) ? 1 : 0; switch (geomType) { case null: break; case 'Point': if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; multiFeatureIndex++; break; case 'LineString': case 'MultiPoint': for (j = 0; j < coords.length; j++) { if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; if (geomType === 'MultiPoint') multiFeatureIndex++; } if (geomType === 'LineString') multiFeatureIndex++; break; case 'Polygon': case 'MultiLineString': for (j = 0; j < coords.length; j++) { for (k = 0; k < coords[j].length - wrapShrink; k++) { if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; } if (geomType === 'MultiLineString') multiFeatureIndex++; if (geomType === 'Polygon') geometryIndex++; } if (geomType === 'Polygon') multiFeatureIndex++; break; case 'MultiPolygon': for (j = 0; j < coords.length; j++) { if (geomType === 'MultiPolygon') geometryIndex = 0; for (k = 0; k < coords[j].length; k++) { for (l = 0; l < coords[j][k].length - wrapShrink; l++) { if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; } geometryIndex++; } multiFeatureIndex++; } break; case 'GeometryCollection': for (j = 0; j < geometry.geometries.length; j++) if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false; break; default: throw new Error('Unknown Geometry Type'); } } } } /** * Callback for coordReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback coordReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Array} currentCoord The current coordinate being processed. * @param {number} coordIndex The current index of the coordinate being processed. * Starts at index 0, if an initialValue is provided, and at index 1 otherwise. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. */ /** * Reduce coordinates in any GeoJSON object, similar to Array.reduce() * * @name coordReduce * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {"foo": "bar"}), * turf.point([36, 53], {"hello": "world"}) * ]); * * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { * //=previousValue * //=currentCoord * //=coordIndex * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * return currentCoord; * }); */ function coordReduce(geojson, callback, initialValue, excludeWrapCoord) { var previousValue = initialValue; coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord; else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex); }, excludeWrapCoord); return previousValue; } /** * Callback for propEach * * @callback propEachCallback * @param {Object} currentProperties The current Properties being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Iterate over properties in any GeoJSON object, similar to Array.forEach() * * @name propEach * @param {FeatureCollection|Feature} geojson any GeoJSON object * @param {Function} callback a method that takes (currentProperties, featureIndex) * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.propEach(features, function (currentProperties, featureIndex) { * //=currentProperties * //=featureIndex * }); */ function propEach(geojson, callback) { var i; switch (geojson.type) { case 'FeatureCollection': for (i = 0; i < geojson.features.length; i++) { if (callback(geojson.features[i].properties, i) === false) break; } break; case 'Feature': callback(geojson.properties, 0); break; } } /** * Callback for propReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback propReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {*} currentProperties The current Properties being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Reduce properties in any GeoJSON object into a single value, * similar to how Array.reduce works. However, in this case we lazily run * the reduction, so an array of all properties is unnecessary. * * @name propReduce * @param {FeatureCollection|Feature} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) { * //=previousValue * //=currentProperties * //=featureIndex * return currentProperties * }); */ function propReduce(geojson, callback, initialValue) { var previousValue = initialValue; propEach(geojson, function (currentProperties, featureIndex) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties; else previousValue = callback(previousValue, currentProperties, featureIndex); }); return previousValue; } /** * Callback for featureEach * * @callback featureEachCallback * @param {Feature} currentFeature The current Feature being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Iterate over features in any GeoJSON object, similar to * Array.forEach. * * @name featureEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentFeature, featureIndex) * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.featureEach(features, function (currentFeature, featureIndex) { * //=currentFeature * //=featureIndex * }); */ function featureEach(geojson, callback) { if (geojson.type === 'Feature') { callback(geojson, 0); } else if (geojson.type === 'FeatureCollection') { for (var i = 0; i < geojson.features.length; i++) { if (callback(geojson.features[i], i) === false) break; } } } /** * Callback for featureReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback featureReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentFeature The current Feature being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Reduce features in any GeoJSON object, similar to Array.reduce(). * * @name featureReduce * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {"foo": "bar"}), * turf.point([36, 53], {"hello": "world"}) * ]); * * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) { * //=previousValue * //=currentFeature * //=featureIndex * return currentFeature * }); */ function featureReduce(geojson, callback, initialValue) { var previousValue = initialValue; featureEach(geojson, function (currentFeature, featureIndex) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature; else previousValue = callback(previousValue, currentFeature, featureIndex); }); return previousValue; } /** * Get all coordinates from any GeoJSON object. * * @name coordAll * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @returns {Array>} coordinate position array * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * var coords = turf.coordAll(features); * //= [[26, 37], [36, 53]] */ function coordAll(geojson) { var coords = []; coordEach(geojson, function (coord) { coords.push(coord); }); return coords; } /** * Callback for geomEach * * @callback geomEachCallback * @param {Geometry} currentGeometry The current Geometry being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {Object} featureProperties The current Feature Properties being processed. * @param {Array} featureBBox The current Feature BBox being processed. * @param {number|string} featureId The current Feature Id being processed. */ /** * Iterate over each geometry in any GeoJSON object, similar to Array.forEach() * * @name geomEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { * //=currentGeometry * //=featureIndex * //=featureProperties * //=featureBBox * //=featureId * }); */ function geomEach(geojson, callback) { var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === 'FeatureCollection', isFeature = geojson.type === 'Feature', stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way // is because it's trying to be fast. GeoJSON supports multiple kinds // of objects at its root: FeatureCollection, Features, Geometries. // This function has the responsibility of handling all of them, and that // means that some of the `for` loops you see below actually just don't apply // to certain inputs. For instance, if you give this just a // Point geometry, then both loops are short-circuited and all we do // is gradually rename the input until it's called 'geometry'. // // This also aims to allocate as few resources as possible: just a // few numbers and booleans, rather than any temporary arrays as would // be required with the normalization approach. for (i = 0; i < stop; i++) { geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry : (isFeature ? geojson.geometry : geojson)); featureProperties = (isFeatureCollection ? geojson.features[i].properties : (isFeature ? geojson.properties : {})); featureBBox = (isFeatureCollection ? geojson.features[i].bbox : (isFeature ? geojson.bbox : undefined)); featureId = (isFeatureCollection ? geojson.features[i].id : (isFeature ? geojson.id : undefined)); isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (g = 0; g < stopG; g++) { geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection; // Handle null Geometry if (geometry === null) { if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false; continue; } switch (geometry.type) { case 'Point': case 'LineString': case 'MultiPoint': case 'Polygon': case 'MultiLineString': case 'MultiPolygon': { if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false; break; } case 'GeometryCollection': { for (j = 0; j < geometry.geometries.length; j++) { if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false; } break; } default: throw new Error('Unknown Geometry Type'); } } // Only increase `featureIndex` per each feature featureIndex++; } } /** * Callback for geomReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback geomReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Geometry} currentGeometry The current Geometry being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {Object} featureProperties The current Feature Properties being processed. * @param {Array} featureBBox The current Feature BBox being processed. * @param {number|string} featureId The current Feature Id being processed. */ /** * Reduce geometry in any GeoJSON object, similar to Array.reduce(). * * @name geomReduce * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { * //=previousValue * //=currentGeometry * //=featureIndex * //=featureProperties * //=featureBBox * //=featureId * return currentGeometry * }); */ function geomReduce(geojson, callback, initialValue) { var previousValue = initialValue; geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry; else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId); }); return previousValue; } /** * Callback for flattenEach * * @callback flattenEachCallback * @param {Feature} currentFeature The current flattened feature being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. */ /** * Iterate over flattened features in any GeoJSON object, similar to * Array.forEach. * * @name flattenEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex) * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'}) * ]); * * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) { * //=currentFeature * //=featureIndex * //=multiFeatureIndex * }); */ function flattenEach(geojson, callback) { geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) { // Callback for single geometry var type = (geometry === null) ? null : geometry.type; switch (type) { case null: case 'Point': case 'LineString': case 'Polygon': if (callback(feature(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) return false; return; } var geomType; // Callback for multi-geometry switch (type) { case 'MultiPoint': geomType = 'Point'; break; case 'MultiLineString': geomType = 'LineString'; break; case 'MultiPolygon': geomType = 'Polygon'; break; } for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) { var coordinate = geometry.coordinates[multiFeatureIndex]; var geom = { type: geomType, coordinates: coordinate }; if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false; } }); } /** * Callback for flattenReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback flattenReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentFeature The current Feature being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. */ /** * Reduce flattened features in any GeoJSON object, similar to Array.reduce(). * * @name flattenReduce * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'}) * ]); * * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) { * //=previousValue * //=currentFeature * //=featureIndex * //=multiFeatureIndex * return currentFeature * }); */ function flattenReduce(geojson, callback, initialValue) { var previousValue = initialValue; flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) { if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature; else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex); }); return previousValue; } /** * Callback for segmentEach * * @callback segmentEachCallback * @param {Feature} currentSegment The current Segment being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. * @param {number} segmentIndex The current index of the Segment being processed. * @returns {void} */ /** * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach() * (Multi)Point geometries do not contain segments therefore they are ignored during this operation. * * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) * @returns {void} * @example * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); * * // Iterate over GeoJSON by 2-vertex segments * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { * //=currentSegment * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * //=segmentIndex * }); * * // Calculate the total number of segments * var total = 0; * turf.segmentEach(polygon, function () { * total++; * }); */ function segmentEach(geojson, callback) { flattenEach(geojson, function (feature$$1, featureIndex, multiFeatureIndex) { var segmentIndex = 0; // Exclude null Geometries if (!feature$$1.geometry) return; // (Multi)Point geometries do not contain segments therefore they are ignored during this operation. var type = feature$$1.geometry.type; if (type === 'Point' || type === 'MultiPoint') return; // Generate 2-vertex line segments var previousCoords; if (coordEach(feature$$1, function (currentCoord, coordIndex, featureIndexCoord, mutliPartIndexCoord, geometryIndex) { // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false` if (previousCoords === undefined) { previousCoords = currentCoord; return; } var currentSegment = lineString([previousCoords, currentCoord], feature$$1.properties); if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false; segmentIndex++; previousCoords = currentCoord; }) === false) return false; }); } /** * Callback for segmentReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback segmentReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentSegment The current Segment being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. * @param {number} segmentIndex The current index of the Segment being processed. */ /** * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce() * (Multi)Point geometries do not contain segments therefore they are ignored during this operation. * * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {void} * @example * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); * * // Iterate over GeoJSON by 2-vertex segments * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { * //= previousSegment * //= currentSegment * //= featureIndex * //= multiFeatureIndex * //= geometryIndex * //= segmentInex * return currentSegment * }); * * // Calculate the total number of segments * var initialValue = 0 * var total = turf.segmentReduce(polygon, function (previousValue) { * previousValue++; * return previousValue; * }, initialValue); */ function segmentReduce(geojson, callback, initialValue) { var previousValue = initialValue; var started = false; segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { if (started === false && initialValue === undefined) previousValue = currentSegment; else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex); started = true; }); return previousValue; } /** * Callback for lineEach * * @callback lineEachCallback * @param {Feature} currentLine The current LineString|LinearRing being processed * @param {number} featureIndex The current index of the Feature being processed * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed * @param {number} geometryIndex The current index of the Geometry being processed */ /** * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries, * similar to Array.forEach. * * @name lineEach * @param {Geometry|Feature} geojson object * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex) * @example * var multiLine = turf.multiLineString([ * [[26, 37], [35, 45]], * [[36, 53], [38, 50], [41, 55]] * ]); * * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) { * //=currentLine * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * }); */ function lineEach(geojson, callback) { // validation if (!geojson) throw new Error('geojson is required'); flattenEach(geojson, function (feature$$1, featureIndex, multiFeatureIndex) { if (feature$$1.geometry === null) return; var type = feature$$1.geometry.type; var coords = feature$$1.geometry.coordinates; switch (type) { case 'LineString': if (callback(feature$$1, featureIndex, multiFeatureIndex, 0, 0) === false) return false; break; case 'Polygon': for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) { if (callback(lineString(coords[geometryIndex], feature$$1.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false; } break; } }); } /** * Callback for lineReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback lineReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentLine The current LineString|LinearRing being processed. * @param {number} featureIndex The current index of the Feature being processed * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed * @param {number} geometryIndex The current index of the Geometry being processed */ /** * Reduce features in any GeoJSON object, similar to Array.reduce(). * * @name lineReduce * @param {Geometry|Feature} geojson object * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var multiPoly = turf.multiPolygon([ * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]), * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]]) * ]); * * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) { * //=previousValue * //=currentLine * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * return currentLine * }); */ function lineReduce(geojson, callback, initialValue) { var previousValue = initialValue; lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine; else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex); }); return previousValue; } /** * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes. * * Negative indexes are permitted. * Point & MultiPoint will always return null. * * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry * @param {Object} [options={}] Optional parameters * @param {number} [options.featureIndex=0] Feature Index * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index * @param {number} [options.geometryIndex=0] Geometry Index * @param {number} [options.segmentIndex=0] Segment Index * @param {Object} [options.properties={}] Translate Properties to output LineString * @param {BBox} [options.bbox={}] Translate BBox to output LineString * @param {number|string} [options.id={}] Translate Id to output LineString * @returns {Feature} 2-vertex GeoJSON Feature LineString * @example * var multiLine = turf.multiLineString([ * [[10, 10], [50, 30], [30, 40]], * [[-10, -10], [-50, -30], [-30, -40]] * ]); * * // First Segment (defaults are 0) * turf.findSegment(multiLine); * // => Feature> * * // First Segment of 2nd Multi Feature * turf.findSegment(multiLine, {multiFeatureIndex: 1}); * // => Feature> * * // Last Segment of Last Multi Feature * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1}); * // => Feature> */ function findSegment(geojson, options) { // Optional Parameters options = options || {}; if (!isObject(options)) throw new Error('options is invalid'); var featureIndex = options.featureIndex || 0; var multiFeatureIndex = options.multiFeatureIndex || 0; var geometryIndex = options.geometryIndex || 0; var segmentIndex = options.segmentIndex || 0; // Find FeatureIndex var properties = options.properties; var geometry; switch (geojson.type) { case 'FeatureCollection': if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; properties = properties || geojson.features[featureIndex].properties; geometry = geojson.features[featureIndex].geometry; break; case 'Feature': properties = properties || geojson.properties; geometry = geojson.geometry; break; case 'Point': case 'MultiPoint': return null; case 'LineString': case 'Polygon': case 'MultiLineString': case 'MultiPolygon': geometry = geojson; break; default: throw new Error('geojson is invalid'); } // Find SegmentIndex if (geometry === null) return null; var coords = geometry.coordinates; switch (geometry.type) { case 'Point': case 'MultiPoint': return null; case 'LineString': if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1; return lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options); case 'Polygon': if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1; return lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options); case 'MultiLineString': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1; return lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options); case 'MultiPolygon': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1; return lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options); } throw new Error('geojson is invalid'); } /** * Finds a particular Point from a GeoJSON using `@turf/meta` indexes. * * Negative indexes are permitted. * * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry * @param {Object} [options={}] Optional parameters * @param {number} [options.featureIndex=0] Feature Index * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index * @param {number} [options.geometryIndex=0] Geometry Index * @param {number} [options.coordIndex=0] Coord Index * @param {Object} [options.properties={}] Translate Properties to output Point * @param {BBox} [options.bbox={}] Translate BBox to output Point * @param {number|string} [options.id={}] Translate Id to output Point * @returns {Feature} 2-vertex GeoJSON Feature Point * @example * var multiLine = turf.multiLineString([ * [[10, 10], [50, 30], [30, 40]], * [[-10, -10], [-50, -30], [-30, -40]] * ]); * * // First Segment (defaults are 0) * turf.findPoint(multiLine); * // => Feature> * * // First Segment of the 2nd Multi-Feature * turf.findPoint(multiLine, {multiFeatureIndex: 1}); * // => Feature> * * // Last Segment of last Multi-Feature * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1}); * // => Feature> */ function findPoint(geojson, options) { // Optional Parameters options = options || {}; if (!isObject(options)) throw new Error('options is invalid'); var featureIndex = options.featureIndex || 0; var multiFeatureIndex = options.multiFeatureIndex || 0; var geometryIndex = options.geometryIndex || 0; var coordIndex = options.coordIndex || 0; // Find FeatureIndex var properties = options.properties; var geometry; switch (geojson.type) { case 'FeatureCollection': if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; properties = properties || geojson.features[featureIndex].properties; geometry = geojson.features[featureIndex].geometry; break; case 'Feature': properties = properties || geojson.properties; geometry = geojson.geometry; break; case 'Point': case 'MultiPoint': return null; case 'LineString': case 'Polygon': case 'MultiLineString': case 'MultiPolygon': geometry = geojson; break; default: throw new Error('geojson is invalid'); } // Find Coord Index if (geometry === null) return null; var coords = geometry.coordinates; switch (geometry.type) { case 'Point': return point(coords, properties, options); case 'MultiPoint': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; return point(coords[multiFeatureIndex], properties, options); case 'LineString': if (coordIndex < 0) coordIndex = coords.length + coordIndex; return point(coords[coordIndex], properties, options); case 'Polygon': if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex; return point(coords[geometryIndex][coordIndex], properties, options); case 'MultiLineString': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex; return point(coords[multiFeatureIndex][coordIndex], properties, options); case 'MultiPolygon': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex; return point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options); } throw new Error('geojson is invalid'); } // CONCATENATED MODULE: ./node_modules/@turf/envelope/node_modules/@turf/bbox/main.es.js /** * Takes a set of features, calculates the bbox of all input features, and returns a bounding box. * * @name bbox * @param {GeoJSON} geojson any GeoJSON object * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order * @example * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]); * var bbox = turf.bbox(line); * var bboxPolygon = turf.bboxPolygon(bbox); * * //addToMap * var addToMap = [line, bboxPolygon] */ function main_es_bbox(geojson) { var BBox = [Infinity, Infinity, -Infinity, -Infinity]; coordEach(geojson, function (coord) { if (BBox[0] > coord[0]) BBox[0] = coord[0]; if (BBox[1] > coord[1]) BBox[1] = coord[1]; if (BBox[2] < coord[0]) BBox[2] = coord[0]; if (BBox[3] < coord[1]) BBox[3] = coord[1]; }); return BBox; } /* harmony default export */ var main_es = (main_es_bbox); // CONCATENATED MODULE: ./node_modules/@turf/bbox-polygon/node_modules/@turf/helpers/main.es.js /** * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth. */ var main_es_earthRadius = 6371008.8; /** * Unit of measurement factors using a spherical (non-ellipsoid) earth radius. */ var main_es_factors = { meters: main_es_earthRadius, metres: main_es_earthRadius, millimeters: main_es_earthRadius * 1000, millimetres: main_es_earthRadius * 1000, centimeters: main_es_earthRadius * 100, centimetres: main_es_earthRadius * 100, kilometers: main_es_earthRadius / 1000, kilometres: main_es_earthRadius / 1000, miles: main_es_earthRadius / 1609.344, nauticalmiles: main_es_earthRadius / 1852, inches: main_es_earthRadius * 39.370, yards: main_es_earthRadius / 1.0936, feet: main_es_earthRadius * 3.28084, radians: 1, degrees: main_es_earthRadius / 111325, }; /** * Units of measurement factors based on 1 meter. */ var main_es_unitsFactors = { meters: 1, metres: 1, millimeters: 1000, millimetres: 1000, centimeters: 100, centimetres: 100, kilometers: 1 / 1000, kilometres: 1 / 1000, miles: 1 / 1609.344, nauticalmiles: 1 / 1852, inches: 39.370, yards: 1 / 1.0936, feet: 3.28084, radians: 1 / main_es_earthRadius, degrees: 1 / 111325, }; /** * Area of measurement factors based on 1 square meter. */ var main_es_areaFactors = { meters: 1, metres: 1, millimeters: 1000000, millimetres: 1000000, centimeters: 10000, centimetres: 10000, kilometers: 0.000001, kilometres: 0.000001, acres: 0.000247105, miles: 3.86e-7, yards: 1.195990046, feet: 10.763910417, inches: 1550.003100006 }; /** * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}. * * @name feature * @param {Geometry} geometry input geometry * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a GeoJSON Feature * @example * var geometry = { * "type": "Point", * "coordinates": [110, 50] * }; * * var feature = turf.feature(geometry); * * //=feature */ function main_es_feature(geometry, properties, options) { // Optional Parameters options = options || {}; if (!main_es_isObject(options)) throw new Error('options is invalid'); var bbox = options.bbox; var id = options.id; // Validation if (geometry === undefined) throw new Error('geometry is required'); if (properties && properties.constructor !== Object) throw new Error('properties must be an Object'); if (bbox) main_es_validateBBox(bbox); if (id) main_es_validateId(id); // Main var feat = {type: 'Feature'}; if (id) feat.id = id; if (bbox) feat.bbox = bbox; feat.properties = properties || {}; feat.geometry = geometry; return feat; } /** * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates. * For GeometryCollection type use `helpers.geometryCollection` * * @name geometry * @param {string} type Geometry Type * @param {Array} coordinates Coordinates * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Geometry * @returns {Geometry} a GeoJSON Geometry * @example * var type = 'Point'; * var coordinates = [110, 50]; * * var geometry = turf.geometry(type, coordinates); * * //=geometry */ function helpers_main_es_geometry(type, coordinates, options) { // Optional Parameters options = options || {}; if (!main_es_isObject(options)) throw new Error('options is invalid'); var bbox = options.bbox; // Validation if (!type) throw new Error('type is required'); if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); if (bbox) main_es_validateBBox(bbox); // Main var geom; switch (type) { case 'Point': geom = main_es_point(coordinates).geometry; break; case 'LineString': geom = main_es_lineString(coordinates).geometry; break; case 'Polygon': geom = main_es_polygon(coordinates).geometry; break; case 'MultiPoint': geom = main_es_multiPoint(coordinates).geometry; break; case 'MultiLineString': geom = main_es_multiLineString(coordinates).geometry; break; case 'MultiPolygon': geom = main_es_multiPolygon(coordinates).geometry; break; default: throw new Error(type + ' is invalid'); } if (bbox) geom.bbox = bbox; return geom; } /** * Creates a {@link Point} {@link Feature} from a Position. * * @name point * @param {Array} coordinates longitude, latitude position (each in decimal degrees) * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a Point feature * @example * var point = turf.point([-75.343, 39.984]); * * //=point */ function main_es_point(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); if (coordinates.length < 2) throw new Error('coordinates must be at least 2 numbers long'); if (!main_es_isNumber(coordinates[0]) || !main_es_isNumber(coordinates[1])) throw new Error('coordinates must contain numbers'); return main_es_feature({ type: 'Point', coordinates: coordinates }, properties, options); } /** * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates. * * @name points * @param {Array>} coordinates an array of Points * @param {Object} [properties={}] Translate these properties to each Feature * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the FeatureCollection * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} Point Feature * @example * var points = turf.points([ * [-75, 39], * [-80, 45], * [-78, 50] * ]); * * //=points */ function main_es_points(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); return main_es_featureCollection(coordinates.map(function (coords) { return main_es_point(coords, properties); }), options); } /** * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings. * * @name polygon * @param {Array>>} coordinates an array of LinearRings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} Polygon Feature * @example * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' }); * * //=polygon */ function main_es_polygon(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); for (var i = 0; i < coordinates.length; i++) { var ring = coordinates[i]; if (ring.length < 4) { throw new Error('Each LinearRing of a Polygon must have 4 or more Positions.'); } for (var j = 0; j < ring[ring.length - 1].length; j++) { // Check if first point of Polygon contains two numbers if (i === 0 && j === 0 && !main_es_isNumber(ring[0][0]) || !main_es_isNumber(ring[0][1])) throw new Error('coordinates must contain numbers'); if (ring[ring.length - 1][j] !== ring[0][j]) { throw new Error('First and last Position are not equivalent.'); } } } return main_es_feature({ type: 'Polygon', coordinates: coordinates }, properties, options); } /** * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates. * * @name polygons * @param {Array>>>} coordinates an array of Polygon coordinates * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} Polygon FeatureCollection * @example * var polygons = turf.polygons([ * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]], * ]); * * //=polygons */ function main_es_polygons(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); return main_es_featureCollection(coordinates.map(function (coords) { return main_es_polygon(coords, properties); }), options); } /** * Creates a {@link LineString} {@link Feature} from an Array of Positions. * * @name lineString * @param {Array>} coordinates an array of Positions * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} LineString Feature * @example * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'}); * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'}); * * //=linestring1 * //=linestring2 */ function main_es_lineString(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (coordinates.length < 2) throw new Error('coordinates must be an array of two or more positions'); // Check if first point of LineString contains two numbers if (!main_es_isNumber(coordinates[0][1]) || !main_es_isNumber(coordinates[0][1])) throw new Error('coordinates must contain numbers'); return main_es_feature({ type: 'LineString', coordinates: coordinates }, properties, options); } /** * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates. * * @name lineStrings * @param {Array>} coordinates an array of LinearRings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the FeatureCollection * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} LineString FeatureCollection * @example * var linestrings = turf.lineStrings([ * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]], * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]] * ]); * * //=linestrings */ function main_es_lineStrings(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array'); return main_es_featureCollection(coordinates.map(function (coords) { return main_es_lineString(coords, properties); }), options); } /** * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}. * * @name featureCollection * @param {Feature[]} features input features * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {FeatureCollection} FeatureCollection of Features * @example * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'}); * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'}); * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'}); * * var collection = turf.featureCollection([ * locationA, * locationB, * locationC * ]); * * //=collection */ function main_es_featureCollection(features, options) { // Optional Parameters options = options || {}; if (!main_es_isObject(options)) throw new Error('options is invalid'); var bbox = options.bbox; var id = options.id; // Validation if (!features) throw new Error('No features passed'); if (!Array.isArray(features)) throw new Error('features must be an Array'); if (bbox) main_es_validateBBox(bbox); if (id) main_es_validateId(id); // Main var fc = {type: 'FeatureCollection'}; if (id) fc.id = id; if (bbox) fc.bbox = bbox; fc.features = features; return fc; } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiLineString * @param {Array>>} coordinates an array of LineStrings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a MultiLineString feature * @throws {Error} if no coordinates are passed * @example * var multiLine = turf.multiLineString([[[0,0],[10,10]]]); * * //=multiLine */ function main_es_multiLineString(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); return main_es_feature({ type: 'MultiLineString', coordinates: coordinates }, properties, options); } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiPoint * @param {Array>} coordinates an array of Positions * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a MultiPoint feature * @throws {Error} if no coordinates are passed * @example * var multiPt = turf.multiPoint([[0,0],[10,10]]); * * //=multiPt */ function main_es_multiPoint(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); return main_es_feature({ type: 'MultiPoint', coordinates: coordinates }, properties, options); } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiPolygon * @param {Array>>>} coordinates an array of Polygons * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a multipolygon feature * @throws {Error} if no coordinates are passed * @example * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]); * * //=multiPoly * */ function main_es_multiPolygon(coordinates, properties, options) { if (!coordinates) throw new Error('coordinates is required'); return main_es_feature({ type: 'MultiPolygon', coordinates: coordinates }, properties, options); } /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name geometryCollection * @param {Array} geometries an array of GeoJSON Geometries * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a GeoJSON GeometryCollection Feature * @example * var pt = { * "type": "Point", * "coordinates": [100, 0] * }; * var line = { * "type": "LineString", * "coordinates": [ [101, 0], [102, 1] ] * }; * var collection = turf.geometryCollection([pt, line]); * * //=collection */ function main_es_geometryCollection(geometries, properties, options) { if (!geometries) throw new Error('geometries is required'); if (!Array.isArray(geometries)) throw new Error('geometries must be an Array'); return main_es_feature({ type: 'GeometryCollection', geometries: geometries }, properties, options); } /** * Round number to precision * * @param {number} num Number * @param {number} [precision=0] Precision * @returns {number} rounded number * @example * turf.round(120.4321) * //=120 * * turf.round(120.4321, 2) * //=120.43 */ function main_es_round(num, precision) { if (num === undefined || num === null || isNaN(num)) throw new Error('num is required'); if (precision && !(precision >= 0)) throw new Error('precision must be a positive number'); var multiplier = Math.pow(10, precision || 0); return Math.round(num * multiplier) / multiplier; } /** * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit. * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @name radiansToLength * @param {number} radians in radians across the sphere * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers. * @returns {number} distance */ function main_es_radiansToLength(radians, units) { if (radians === undefined || radians === null) throw new Error('radians is required'); if (units && typeof units !== 'string') throw new Error('units must be a string'); var factor = main_es_factors[units || 'kilometers']; if (!factor) throw new Error(units + ' units is invalid'); return radians * factor; } /** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @name lengthToRadians * @param {number} distance in real units * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers. * @returns {number} radians */ function main_es_lengthToRadians(distance, units) { if (distance === undefined || distance === null) throw new Error('distance is required'); if (units && typeof units !== 'string') throw new Error('units must be a string'); var factor = main_es_factors[units || 'kilometers']; if (!factor) throw new Error(units + ' units is invalid'); return distance / factor; } /** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet * * @name lengthToDegrees * @param {number} distance in real units * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers. * @returns {number} degrees */ function main_es_lengthToDegrees(distance, units) { return main_es_radiansToDegrees(main_es_lengthToRadians(distance, units)); } /** * Converts any bearing angle from the north line direction (positive clockwise) * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line * * @name bearingToAzimuth * @param {number} bearing angle, between -180 and +180 degrees * @returns {number} angle between 0 and 360 degrees */ function main_es_bearingToAzimuth(bearing) { if (bearing === null || bearing === undefined) throw new Error('bearing is required'); var angle = bearing % 360; if (angle < 0) angle += 360; return angle; } /** * Converts an angle in radians to degrees * * @name radiansToDegrees * @param {number} radians angle in radians * @returns {number} degrees between 0 and 360 degrees */ function main_es_radiansToDegrees(radians) { if (radians === null || radians === undefined) throw new Error('radians is required'); var degrees = radians % (2 * Math.PI); return degrees * 180 / Math.PI; } /** * Converts an angle in degrees to radians * * @name degreesToRadians * @param {number} degrees angle between 0 and 360 degrees * @returns {number} angle in radians */ function main_es_degreesToRadians(degrees) { if (degrees === null || degrees === undefined) throw new Error('degrees is required'); var radians = degrees % 360; return radians * Math.PI / 180; } /** * Converts a length to the requested unit. * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @param {number} length to be converted * @param {string} originalUnit of the length * @param {string} [finalUnit='kilometers'] returned unit * @returns {number} the converted length */ function main_es_convertLength(length, originalUnit, finalUnit) { if (length === null || length === undefined) throw new Error('length is required'); if (!(length >= 0)) throw new Error('length must be a positive number'); return main_es_radiansToLength(main_es_lengthToRadians(length, originalUnit), finalUnit || 'kilometers'); } /** * Converts a area to the requested unit. * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches * @param {number} area to be converted * @param {string} [originalUnit='meters'] of the distance * @param {string} [finalUnit='kilometers'] returned unit * @returns {number} the converted distance */ function main_es_convertArea(area, originalUnit, finalUnit) { if (area === null || area === undefined) throw new Error('area is required'); if (!(area >= 0)) throw new Error('area must be a positive number'); var startFactor = main_es_areaFactors[originalUnit || 'meters']; if (!startFactor) throw new Error('invalid original units'); var finalFactor = main_es_areaFactors[finalUnit || 'kilometers']; if (!finalFactor) throw new Error('invalid final units'); return (area / startFactor) * finalFactor; } /** * isNumber * * @param {*} num Number to validate * @returns {boolean} true/false * @example * turf.isNumber(123) * //=true * turf.isNumber('foo') * //=false */ function main_es_isNumber(num) { return !isNaN(num) && num !== null && !Array.isArray(num); } /** * isObject * * @param {*} input variable to validate * @returns {boolean} true/false * @example * turf.isObject({elevation: 10}) * //=true * turf.isObject('foo') * //=false */ function main_es_isObject(input) { return (!!input) && (input.constructor === Object); } /** * Validate BBox * * @private * @param {Array} bbox BBox to validate * @returns {void} * @throws Error if BBox is not valid * @example * validateBBox([-180, -40, 110, 50]) * //=OK * validateBBox([-180, -40]) * //=Error * validateBBox('Foo') * //=Error * validateBBox(5) * //=Error * validateBBox(null) * //=Error * validateBBox(undefined) * //=Error */ function main_es_validateBBox(bbox) { if (!bbox) throw new Error('bbox is required'); if (!Array.isArray(bbox)) throw new Error('bbox must be an Array'); if (bbox.length !== 4 && bbox.length !== 6) throw new Error('bbox must be an Array of 4 or 6 numbers'); bbox.forEach(function (num) { if (!main_es_isNumber(num)) throw new Error('bbox must only contain numbers'); }); } /** * Validate Id * * @private * @param {string|number} id Id to validate * @returns {void} * @throws Error if Id is not valid * @example * validateId([-180, -40, 110, 50]) * //=Error * validateId([-180, -40]) * //=Error * validateId('Foo') * //=OK * validateId(5) * //=OK * validateId(null) * //=Error * validateId(undefined) * //=Error */ function main_es_validateId(id) { if (!id) throw new Error('id is required'); if (['string', 'number'].indexOf(typeof id) === -1) throw new Error('id must be a number or a string'); } // Deprecated methods function main_es_radians2degrees() { throw new Error('method has been renamed to `radiansToDegrees`'); } function main_es_degrees2radians() { throw new Error('method has been renamed to `degreesToRadians`'); } function main_es_distanceToDegrees() { throw new Error('method has been renamed to `lengthToDegrees`'); } function main_es_distanceToRadians() { throw new Error('method has been renamed to `lengthToRadians`'); } function main_es_radiansToDistance() { throw new Error('method has been renamed to `radiansToLength`'); } function main_es_bearingToAngle() { throw new Error('method has been renamed to `bearingToAzimuth`'); } function main_es_convertDistance() { throw new Error('method has been renamed to `convertLength`'); } // CONCATENATED MODULE: ./node_modules/@turf/bbox-polygon/main.es.js /** * Takes a bbox and returns an equivalent {@link Polygon|polygon}. * * @name bboxPolygon * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order * @returns {Feature} a Polygon representation of the bounding box * @example * var bbox = [0, 0, 10, 10]; * * var poly = turf.bboxPolygon(bbox); * * //addToMap * var addToMap = [poly] */ function bboxPolygon(bbox) { main_es_validateBBox(bbox); // Convert BBox positions to Numbers // No performance loss for including Number() // https://github.com/Turfjs/turf/issues/1119 var west = Number(bbox[0]); var south = Number(bbox[1]); var east = Number(bbox[2]); var north = Number(bbox[3]); if (bbox.length === 6) throw new Error('@turf/bbox-polygon does not support BBox with 6 positions'); var lowLeft = [west, south]; var topLeft = [west, north]; var topRight = [east, north]; var lowRight = [east, south]; return main_es_polygon([[ lowLeft, lowRight, topRight, topLeft, lowLeft ]]); } /* harmony default export */ var bbox_polygon_main_es = (bboxPolygon); // CONCATENATED MODULE: ./node_modules/@turf/envelope/main.es.js /** * Takes any number of features and returns a rectangular {@link Polygon} that encompasses all vertices. * * @name envelope * @param {GeoJSON} geojson input features * @returns {Feature} a rectangular Polygon feature that encompasses all vertices * @example * var features = turf.featureCollection([ * turf.point([-75.343, 39.984], {"name": "Location A"}), * turf.point([-75.833, 39.284], {"name": "Location B"}), * turf.point([-75.534, 39.123], {"name": "Location C"}) * ]); * * var enveloped = turf.envelope(features); * * //addToMap * var addToMap = [features, enveloped]; */ function envelope(geojson) { return bbox_polygon_main_es(main_es(geojson)); } /* harmony default export */ var envelope_main_es = __webpack_exports__["default"] = (envelope); /***/ }), /***/ "0c17": /***/ (function(module, exports, __webpack_require__) { "use strict"; var utils = __webpack_require__("d691"); /** * Transform the data for a request or a response * * @param {Object|String} data The data to be transformed * @param {Array} headers The headers for the request or response * @param {Array|Function} fns A single function or Array of functions * @returns {*} The resulting transformed data */ module.exports = function transformData(data, headers, fns) { /*eslint no-param-reassign:0*/ utils.forEach(fns, function transform(fn) { data = fn(data, headers); }); return data; }; /***/ }), /***/ "0c2c": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _theme = _interopRequireDefault(__webpack_require__("9259")); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // var _default2 = { name: 'LinedataResult', mixins: [_theme.default], props: { keyWord: { type: String }, count: { type: Number, default: 0 }, data: { type: Array }, busData: { type: Object, default: function _default() { return {}; } }, prompt: { type: Object } }, data: function data() { return { detailVisibles: [true] }; }, methods: { generatePopup: function generatePopup(pointInfo) { var coordinate = pointInfo.lonlat.split(','); this.$emit('show-point-popup', { coordinates: [+coordinate[0], +coordinate[1]], data: pointInfo, from: 'LineString' }); }, searchPointsResult: function searchPointsResult() { var params = { queryType: '7', queryTerminal: 10000, specifyAdminCode: this.prompt.adminCode }; this.$emit('search-points-result', this.keyWord, params, true); }, showLineDetail: function showLineDetail(uuid, groupIndex) { var detailVisibles = new Array(this.data.length).fill(false); detailVisibles[groupIndex] = !this.detailVisibles[groupIndex]; this.detailVisibles = detailVisibles; detailVisibles[groupIndex] ? this.$emit('show-line-detail', uuid) : this.$emit('reset-line-source'); } } }; exports.default = _default2; /***/ }), /***/ "0f59": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _theme = _interopRequireDefault(__webpack_require__("9259")); var _control = _interopRequireDefault(__webpack_require__("2c56")); var _mapGetter = _interopRequireDefault(__webpack_require__("b761")); var _card = _interopRequireDefault(__webpack_require__("333c")); var _MeasureViewModel = _interopRequireDefault(__webpack_require__("4c06")); var _drawEvent = _interopRequireDefault(__webpack_require__("9104")); var _lodash = _interopRequireDefault(__webpack_require__("f344")); __webpack_require__("fc22"); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // var _default = { name: 'SmMeasure', mixins: [_mapGetter.default, _control.default, _theme.default, _card.default], props: { collapsed: { type: Boolean, // 是否折叠 default: true }, iconClass: { type: String, default: 'sm-components-icons-measure' }, headerName: { type: String // default: geti18n().t('commontypes.iportalData') // '量算' }, showUnitSelect: { // 配置单位选择框是否显示,若不显示,则显示对应的默认单位 type: Boolean, default: true }, distanceDefaultUnit: { // 距离默认单位 type: String, default: 'kilometers' }, areaDefaultUnit: { // 面积默认单位 type: String, default: 'kilometers' }, continueDraw: { // 是否开启多绘制 type: Boolean, default: true } }, data: function data() { var unitOptions = { draw_line_string: { kilometers: this.$t('unit.kilometers'), miles: this.$t('unit.miles'), meters: this.$t('unit.meters'), feet: this.$t('unit.feet'), yards: this.$t('unit.yards') }, draw_polygon: { kilometers: this.$t('unit.squarekilometers'), miles: this.$t('unit.squaremiles'), meters: this.$t('unit.squaremeters'), feet: this.$t('unit.squarefeet'), yards: this.$t('unit.squareyards') } }; return { unitOptions: unitOptions, modeGroups: [{ mode: 'draw_line_string', title: this.$t('measure.distance'), iconClass: 'sm-components-icons-line-layer' }, { mode: 'draw_polygon', title: this.$t('measure.area'), iconClass: 'sm-components-icons-polygon-layer' }, { mode: 'delete', title: this.$t('measure.delete'), iconClass: 'sm-components-icons-delete' }], activeMode: '', result: '', activeDistanceUnit: this.distanceDefaultUnit, activeAreaUnit: this.areaDefaultUnit, modeUnitMap: { draw_line_string: 'activeDistanceUnit', draw_polygon: 'activeAreaUnit' }, layerId: '' }; }, computed: { getUnitOptions: function getUnitOptions() { return this.unitOptions[this.activeMode] || []; }, getResult: function getResult() { if (this.result && this.measureFinished) { var result = "".concat(this.result, " ").concat(this.getUnitLabel); this.resetActiveMode(); return result; } return ''; }, getUnitLabel: function getUnitLabel() { var units = this.getUnitOptions; var modeUnitKey = this.modeUnitMap[this.activeMode]; var label = units[this[modeUnitKey]]; return label; }, getAreaSelect: function getAreaSelect() { return this.activeMode === 'draw_polygon' && this.showUnitSelect; }, getDistanceSelect: function getDistanceSelect() { return this.activeMode === 'draw_line_string' && this.showUnitSelect; } }, watch: { distanceDefaultUnit: function distanceDefaultUnit(newVal) { this.activeDistanceUnit = newVal; this.updateUnit(newVal); }, areaDefaultUnit: function areaDefaultUnit(newVal) { this.activeAreaUnit = newVal; this.updateUnit(newVal); }, textColorsData: { handler: function handler() { this.changeSelectInputStyle(); } }, backgroundData: { handler: function handler() { this.changeSelectInputStyle(); } } }, created: function created() { this.componentName = (0, _lodash.default)(this.$options.name); this.viewModel = new _MeasureViewModel.default({ continueDraw: this.continueDraw, componentName: this.componentName }); this.viewModel.on('measure-finished', this.measureFinishedFn); this.viewModel.on('measure-start', this.measureStartFn); this.viewModel.on('update-unit', this.updateUnitFn); }, mounted: function mounted() { this.changeSelectInputStyle(); _drawEvent.default.$on('draw-reset', this.drawResetFn); }, beforeDestroy: function beforeDestroy() { this.viewModel.off('measure-finished', this.measureFinishedFn); this.viewModel.off('measure-start', this.measureStartFn); this.viewModel.off('update-unit', this.updateUnitFn); _drawEvent.default.$off('draw-reset', this.drawResetFn); }, removed: function removed(map, target) { _drawEvent.default.$options.deleteDrawingState(target, this.componentName); this.resetData(target); }, methods: { measureFinishedFn: function measureFinishedFn(e) { this.result = e.result; this.measureFinished = true; }, measureStartFn: function measureStartFn(e) { this.result = ''; this.measureFinished = false; }, updateUnitFn: function updateUnitFn(e) { this.result = e.result; }, drawResetFn: function drawResetFn(_ref) { var componentName = _ref.componentName; if (componentName !== this.componentName) { this.activeMode = null; this.result = ''; } }, changeSelectInputStyle: function changeSelectInputStyle() { var selectDoms = this.$el.querySelectorAll('.ant-select-selection'); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = selectDoms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var selectDom = _step.value; if (selectDom) { selectDom.style.borderColor = this.getTextColor; selectDom.style.color = this.getTextColor; selectDom.style.backgroundColor = this.getBackground; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }, changeChosenStyle: function changeChosenStyle(visible) { var _this = this; setTimeout(function () { var optionList = _this.$el.querySelectorAll('.ant-select-dropdown-menu-item'); var dropdownDoms = _this.$el.querySelectorAll('.ant-select-dropdown'); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = optionList[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var item = _step2.value; if (item.classList.contains('ant-select-dropdown-menu-item-selected')) { item.style.color = _this.getColorStyle(0).color; item.style.backgroundColor = _this.getBackground; } else { item.style.color = _this.getTextColor; item.style.backgroundColor = 'transparent'; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = dropdownDoms[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var dropdownDom = _step3.value; if (dropdownDom) { dropdownDom.style.backgroundColor = _this.getBackground; } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return != null) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } }, 0); }, // 切换量算模式 changeMeasureMode: function changeMeasureMode(mode) { var _this2 = this; setTimeout(function () { var mapNotLoaded = _this2.mapNotLoadedTip(); if (mapNotLoaded) { return; } if (!_this2.map.loaded()) { _this2.$message.destroy(); _this2.$message.warning(_this2.$t('warning.mapNotLoaded')); } else { var modeUnitKey = _this2.modeUnitMap[mode]; var activeUnit = _this2[modeUnitKey]; if (mode === 'delete') { _this2.viewModel.trash(); _this2.activeMode = null; _this2.result = ''; return; } if (_this2.activeMode !== mode || !_this2.continueDraw) { _this2.viewModel.openDraw(mode, activeUnit); _this2.activeMode = mode; _this2.continueDraw && _drawEvent.default.$emit('draw-reset', { componentName: _this2.componentName }); } else { _this2.viewModel.removeDraw(_this2.continueDraw); _this2.activeMode = null; } } }, 0); }, updateUnit: function updateUnit(unit) { this.viewModel && this.viewModel.updateUnit(unit); }, getPopupContainer: function getPopupContainer() { return this.$el.querySelector('.sm-component-measure__panelContent'); }, resetActiveMode: function resetActiveMode() { !this.activeModeCache && (this.activeModeCache = this.activeMode); this.measureFinished && !this.continueDraw && (this.activeMode = null); if (!this.measureFinished && this.continueDraw) { this.activeMode = this.activeModeCache; } }, resetData: function resetData(mapTarget) { this.activeMode = null; this.result = ''; this.continueDraw && _drawEvent.default.$emit('draw-reset', { componentName: this.componentName }); }, // 提供对外方法:清空features clear: function clear() { this.activeMode = null; this.result = ''; this.viewModel && this.viewModel.clearAllFeatures(); } } }; exports.default = _default; /***/ }), /***/ "0f9e": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _typeof2 = _interopRequireDefault(__webpack_require__("7ae5")); var _toConsumableArray2 = _interopRequireDefault(__webpack_require__("4066")); var _defineProperty2 = _interopRequireDefault(__webpack_require__("279f")); __webpack_require__("f840"); var _vueEcharts = _interopRequireDefault(__webpack_require__("8275")); var _lodash = _interopRequireDefault(__webpack_require__("f344")); var _lodash2 = _interopRequireDefault(__webpack_require__("6e63")); var _lodash3 = _interopRequireDefault(__webpack_require__("5f9f")); var _debounce = _interopRequireDefault(__webpack_require__("331f")); var _lodash4 = _interopRequireDefault(__webpack_require__("25a2")); var _card = _interopRequireDefault(__webpack_require__("333c")); var _theme = _interopRequireDefault(__webpack_require__("9259")); var _timer = _interopRequireDefault(__webpack_require__("8156")); var _chart = __webpack_require__("33aa"); var _EchartsDataService = _interopRequireDefault(__webpack_require__("50c6")); var _TablePopup = _interopRequireDefault(__webpack_require__("b397")); var _util = __webpack_require__("1448"); var _resizeDetector = __webpack_require__("e0f2"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } // 枚举事件类型 var EVENTS = ['legendselectchanged', 'legendselected', 'legendunselected', 'legendscroll', 'datazoom', 'datarangeselected', 'timelinechanged', 'timelineplaychanged', 'restore', 'dataviewchanged', 'magictypechanged', 'geoselectchanged', 'geoselected', 'geounselected', 'pieselectchanged', 'pieselected', 'pieunselected', 'mapselectchanged', 'mapselected', 'mapunselected', 'axisareaselected', 'focusnodeadjacency', 'unfocusnodeadjacency', 'brush', 'brushselected', 'rendered', 'finished', 'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'mouseup', 'globalout', 'contextmenu']; var _default2 = { components: { 'v-chart': _vueEcharts.default, TablePopup: _TablePopup.default }, mixins: [_theme.default, _card.default, _timer.default], props: { iconClass: { type: String, default: 'sm-components-icons-attribute' }, dataset: { type: Object, default: function _default() { return null; } }, datasetOptions: { type: Array, default: function _default() { return null; } }, colorGroup: { type: Array }, options: { type: Object, default: function _default() { return {}; } }, autoresize: { type: Boolean, default: true }, theme: { type: [Object, String] }, initOptions: { type: Object }, group: { type: String }, manualUpdate: { type: Boolean, default: false }, autoPlay: { type: Boolean, default: false }, associatedMap: { type: Boolean, default: false }, highlightOptions: { type: Array, default: function _default() { return []; } }, highlightColor: { type: String, default: '#01ffff' } }, data: function data() { return { chartId: (0, _lodash.default)("".concat(this.$options.name.toLowerCase(), "-")), chartTheme: {}, // 图表的主题 echartOptions: {}, // 最后生成的echart数据 datasetChange: false, // dataset是否改变 dataSeriesCache: {}, tablePopupProps: {}, startSpin: null, customSeries: [], dataZoomHandler: function dataZoomHandler() {} }; }, computed: { width: function width() { return this.smChart && this.smChart.width; }, height: function height() { return this.smChart && this.smChart.height; }, computedOptions: function computedOptions() { return this.smChart && this.smChart.computedOptions; }, _chartStyle: function _chartStyle() { return { width: '100%', height: this.headerName ? 'calc(100% - 30px)' : '100%' }; }, parseOptions: function parseOptions() { var _this2 = this; if (!this.options.series) { return this.options; } if (this.options.series.find(function (item) { return item.type === '2.5Bar'; })) { return _objectSpread({}, this.options, { series: [] }); } if (this.options.series[0] && this.options.series[0].customType === 'customRingsSeries') { return _objectSpread({}, this.options, { series: [].concat((0, _toConsumableArray2.default)(this.options.series), (0, _toConsumableArray2.default)(this.customSeries)) }); } var series = this.options.series.map(function (serie, index) { if (serie.label) { var cloneSerie = (0, _lodash4.default)(serie); cloneSerie.label.normal = _this2._controlLabel(cloneSerie.label.normal, cloneSerie.maxLabels); return cloneSerie; } return serie; }); return _objectSpread({}, this.options, { series: series }); }, _chartOptions: function _chartOptions() { return this._isRequestData && this.echartOptions || this.parseOptions; }, // 是否传入dataset和datasetOptions _isRequestData: function _isRequestData() { return this.dataset && Object.keys(this.dataset).length > 0 && (this.dataset.url || this.dataset.geoJSON) && this.datasetOptions && this.datasetOptions.length > 0; }, xBar: function xBar() { return this.options && this.options.yAxis && this.options.yAxis.type === 'category'; }, popupBackground: function popupBackground() { return this.backgroundData ? (0, _util.getColorWithOpacity)(this.backgroundData, 0.5) : this.backgroundData; }, colorNumber: function colorNumber() { var length = this.datasetOptions && this.datasetOptions.length || this.echartOptions.series && this.echartOptions.series.length; var colorNumber = this.colorGroupsData.length; if (length && length > colorNumber) { colorNumber = length; } return colorNumber; } }, watch: { theme: function theme() { this.chartTheme = null; }, colorGroupsData: function colorGroupsData(newVal, oldVal) { if (!(0, _lodash3.default)(newVal, oldVal)) { this._setChartTheme(); } }, textColorsData: function textColorsData(newVal, oldVal) { if (!(0, _lodash3.default)(newVal, oldVal)) { this._setChartTheme(); } }, backgroundData: function backgroundData(newVal, oldVal) { if (!(0, _lodash3.default)(newVal, oldVal)) { this._setChartTheme(); this.changePopupArrowStyle(); } }, dataset: { handler: function handler(newVal, oldVal) { this._isRequestData && this._setEchartOptions(this.dataset, this.datasetOptions, this.options); this.datasetChange = true; }, deep: true }, datasetOptions: { handler: function handler(newVal, oldVal) { if (!(0, _lodash3.default)(newVal, oldVal)) { this._setChartTheme(); this.registerShape(); } !this.echartsDataService && this._isRequestData && this._setEchartOptions(this.dataset, this.datasetOptions, this.options); this.echartsDataService && this.echartsDataService.setDatasetOptions(this.datasetOptions); this.echartsDataService && this.dataSeriesCache && this._changeChartData(this.echartsDataService, this.datasetOptions, this.options); } }, options: { handler: function handler(newVal, oldVal) { if (this.datasetChange && !this.dataSeriesCache) { return; } if (this.dataSeriesCache && JSON.stringify(this.dataSeriesCache) !== '{}') { this.echartOptions = this._optionsHandler(this.options, this.dataSeriesCache); } else { this.echartOptions = Object.assign({}, this.options); } }, deep: true }, autoresize: function autoresize() { if (this.autoresize) { (0, _resizeDetector.addListener)(this.$el, this.__resizeHandler); } else { (0, _resizeDetector.removeListener)(this.$el, this.__resizeHandler); } }, // 以下为echart的配置参数 width: function width() { return this.smChart && this.smChart.width; }, height: function height() { return this.smChart && this.smChart.height; }, computedOptions: function computedOptions() { return this.smChart && this.smChart.computedOptions; }, autoPlay: function autoPlay() { this._handlePieAutoPlay(); }, associatedMap: function associatedMap() { if (!this.associatedMap) { this.clearPopup && this.clearPopup(); } }, highlightOptions: { handler: function handler(newVal, oldVal) { this.setItemStyleColor(); }, deep: true } }, created: function created() { this._setChartTheme(); // // 切换主题 // this.$on('theme-style-changed', () => { // this._setChartTheme(); // }); this.registerShape(); }, mounted: function mounted() { // 设置echarts实例 this.smChart = this.$refs[this.chartId]; // 派发echart所有事件 var smChart = this._getEchart(); var self = this; EVENTS.forEach(function (event) { smChart.$on(event, function (params) { if (event === 'click') { self.handleChartClick(params); } self.$emit(event, params); }); }); this._initAutoResize(); this._initDataZoom(); if (this.options.series && this.options.series[0] && this.options.series[0].customType === 'customRingsSeries') { this.startEffect(); } !this._isRequestData && this.autoPlay && this._handlePieAutoPlay(); // 请求数据, 合并echartopiton, 设置echartOptions this._isRequestData && this._setEchartOptions(this.dataset, this.datasetOptions, this.options); }, updated: function updated() { this._handlePieAutoPlay(); // 更新自动播放 }, beforeDestroy: function beforeDestroy() { clearInterval(this.pieAutoPlay); // clear 自动播放 clearInterval(this.startAngle); if (this.autoresize) { (0, _resizeDetector.removeListener)(this.$el, this.__resizeHandler); } }, methods: { _initAutoResize: function _initAutoResize() { var _this3 = this; this.__resizeHandler = (0, _debounce.default)(function () { _this3.resize(); }, 100, { leading: true }); if (this.autoresize) { // @ts-ignore (0, _resizeDetector.addListener)(this.$el, this.__resizeHandler); } }, _initDataZoom: function _initDataZoom() { var _this4 = this; this.dataZoomHandler = (0, _debounce.default)(function () { _this4._dataZoomChanged(); }, 500, { leading: true }); }, getStringColor: function getStringColor(color) { if (color instanceof Object) { return ((color.colorStops || [])[0] || {}).color; } return color; }, setGradientColor: function setGradientColor(color, nextColor) { if (typeof color === 'string') { return new this.$options.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: color }, { offset: 1, color: nextColor || color }]); } return color; }, _initAxisLabel: function _initAxisLabel(axisLabel, data, visualMap, series) { if (!this.xBar) { return; } var sortSeriesIndex = this.datasetOptions.findIndex(function (item) { return item.sort !== 'unsort' && item.rankLabel; }); if (sortSeriesIndex > -1 && axisLabel && data) { for (var index = 0, len = data.length, rankIndex = len - 1; index < len; index++, rankIndex--) { data[index] = rankIndex < 10 ? "0".concat(rankIndex).concat(data[index]) : "".concat(rankIndex).concat(data[index]); } var firstVisualMap = visualMap && visualMap.find(function (item) { return item.seriesIndex === sortSeriesIndex; }); axisLabel.rich = axisLabel.rich || {}; axisLabel.rich.default = { backgroundColor: this.getStringColor(this.colorGroup[sortSeriesIndex]), width: 20, height: 20, align: 'center', borderRadius: 2 }; firstVisualMap && firstVisualMap.pieces.map(function (item) { axisLabel.rich["".concat(parseInt(item.min), "_").concat(parseInt(item.max))] = { backgroundColor: item.color, width: 20, height: 20, align: 'center', borderRadius: 2 }; }); var serieData = series && series[sortSeriesIndex].data; axisLabel.formatter = function (label, index) { var orderNum = parseInt(label.slice(0, 2)) + 1; var leftLabel = label.slice(2); var labelValue = serieData && +serieData[index]; if (firstVisualMap) { var matchItem = firstVisualMap.pieces.find(function (item) { return labelValue >= item.min && labelValue <= item.max; }); if (matchItem) { return ["{".concat(parseInt(matchItem.min), "_").concat(parseInt(matchItem.max), "|").concat(orderNum, "} ").concat(leftLabel)].join('\n'); } } return ["{default|".concat(orderNum, "} ").concat(leftLabel)].join('\n'); }; } }, setItemStyleColor: function setItemStyleColor() { var _this5 = this; var isSet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; var series = arguments.length > 1 ? arguments[1] : undefined; var highlightOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.highlightOptions; var color = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.highlightColor; series = series || (0, _lodash4.default)(this.echartOptions && this.echartOptions.series) || []; series.forEach(function (serie, seriesIndex) { var dataIndexs = highlightOptions.map(function (item) { if (item.seriesIndex.includes(seriesIndex)) { return item.dataIndex; } }); var colors = highlightOptions.map(function (item) { if (item.seriesIndex.includes(seriesIndex)) { return item.color || color; } }); var serieColor = _this5.options.series && _this5.options.series[seriesIndex] && _this5.options.series[seriesIndex].itemStyle && _this5.options.series[seriesIndex].itemStyle.color; serie.itemStyle = serie.itemStyle || { color: '' }; serie.itemStyle.color = function (_ref) { var dataIndex = _ref.dataIndex; var index = dataIndexs.indexOf(dataIndex); if (index > -1) { return colors[index]; } else if (serie.type === 'pie') { var colorGroup = _this5._handlerColorGroup(serie.data.length); return colorGroup[dataIndex]; } else { return serieColor; } }; }); isSet && this.$set(this.echartOptions, 'series', series); }, _handlePieAutoPlay: function _handlePieAutoPlay() { var seriesType = this._chartOptions.series && this._chartOptions.series[0] && this._chartOptions.series[0].type; var echartsNode = this.smChart.chart; if (this._chartOptions.legend && this._chartOptions.legend.data && this._chartOptions.legend.data.length && echartsNode && seriesType === 'pie') { this.clearPieAutoPlay(echartsNode); if (this.autoPlay) { this.setPieAutoPlay(echartsNode); } } }, setPieAutoPlay: function setPieAutoPlay(echartsNode) { var _this6 = this; var i = -1; this.pieAutoPlay = setInterval(function () { echartsNode.dispatchAction({ type: 'downplay', seriesIndex: 0, dataIndex: i }); i++; if (i >= _this6._chartOptions.legend.data.length) { i = 0; } echartsNode.dispatchAction({ type: 'highlight', seriesIndex: 0, dataIndex: i }); }, 2000); }, clearPieAutoPlay: function clearPieAutoPlay(echartsNode) { clearInterval(this.pieAutoPlay); for (var i = 0; i < this._chartOptions.legend.data.length; i++) { echartsNode.dispatchAction({ type: 'downplay', seriesIndex: 0, dataIndex: i }); } }, timing: function timing() { var _this7 = this; this.echartsDataService && this.echartsDataService.getDataOption(this.dataset, this.xBar).then(function (options) { _this7.hideLoading(); // 缓存dataSeriesCache,请求后格式化成echart的数据 _this7.dataSeriesCache = Object.assign({}, options); _this7.datasetChange = false; // 设置echartOptions _this7.echartOptions = _this7._optionsHandler(_this7.options, options); }); }, // 请求数据,设置echartOptions _setEchartOptions: function _setEchartOptions(dataset, datasetOptions, echartOptions) { var _this8 = this; this.echartsDataService = null; this.dataSeriesCache = null; if (this.dataset.type !== 'geoJSON') { this.showLoading('default', { text: this.$t('info.loading'), color: this.colorGroupsData[0], textColor: this.textColorsData, maskColor: 'rgba(0,0,0,0.8)', zlevel: 0 }); } this.echartsDataService = new _EchartsDataService.default(dataset, datasetOptions); this.echartsDataService.getDataOption(dataset, this.xBar).then(function (options) { _this8.hideLoading(); // 缓存dataSeriesCache,请求后格式化成echart的数据 _this8.dataSeriesCache = Object.assign({}, options); _this8.datasetChange = false; // 设置echartOptions _this8.echartOptions = _this8._optionsHandler(echartOptions, options); }); }, _optionsHandler: function _optionsHandler(options, dataOptions, dataZoomChanged) { var _this9 = this; dataOptions = dataOptions && (0, _lodash4.default)(dataOptions); // clone 避免引起重复刷新 options = options && (0, _lodash4.default)(options); // clone 避免引起重复刷新 var extraSeries = []; if (options && options.legend && !options.legend.type) { options.legend.type = 'scroll'; } var yAxis = options.yAxis; var xAxis = options.xAxis; if (xAxis && dataOptions.xAxis) { var axis = xAxis; var axisData = dataOptions.xAxis[0]; var type = 'xAxis'; if (yAxis && yAxis.type === 'category') { // 处理条形图 type = 'yAxis'; axis = yAxis; dataOptions.yAxis = dataOptions.xAxis; delete dataOptions.xAxis; this._initAxisLabel(yAxis.axisLabel, dataOptions.yAxis[0].data, options.visualMap, dataOptions.series); } if (dataOptions.series.length === 0) { axis = [{}]; } else if (!Array.isArray(axis)) { if (axisData.data && axisData.data.length) { axis.data = []; } axis = [Object.assign({}, axisData, axis)]; } options[type] = axis; } if (options && options.series && dataOptions.series) { if (dataOptions.series.length === 0) { options.series = []; } else { options.series = options.series.map(function (element, index) { return Object.assign({}, element, dataOptions.series[index] || {}); }); var dataZoom = options.dataZoom && options.dataZoom[0]; options.series = options.series.map(function (serie, index) { var label = serie.label && serie.label.normal; if (serie.label) { serie.label.normal = _this9._controlLabel(label, serie.maxLabels); } if (label && label.show && label.smart) { label.position = label.position || 'top'; var data = serie.data; var startDataIndex = 0; var endDataIndex = data.length - 1; if (dataZoom && dataZoom.show !== false) { if (dataZoom.start > dataZoom.end) { var oldStart = dataZoom.start; dataZoom.start = dataZoom.end; dataZoom.end = oldStart; } if (dataZoomChanged) { var _ref2 = _this9.smChart.chart.getOption().dataZoom[0] || {}, startValue = _ref2.startValue, endValue = _ref2.endValue; startDataIndex = startValue; endDataIndex = endValue; options.dataZoom = options.dataZoom.map(function (val) { if (startValue >= 0 && endValue >= 0) { val.startValue = startValue; val.endValue = endValue; delete val.start; delete val.end; return val; } return val; }); } else { startDataIndex = Math.floor(dataZoom.start / 100 * data.length); endDataIndex = Math.ceil(dataZoom.end / 100 * data.length); } data = serie.data.slice(startDataIndex, endDataIndex + 1); } label.formatter = function (_ref3) { var dataIndex = _ref3.dataIndex, value = _ref3.value; var result = ''; if (dataIndex === startDataIndex || dataIndex === endDataIndex || Math.max.apply(null, data) + '' === value + '') { result = value; } return result; }; } else if (serie && serie.type !== 'pie' && serie.type !== 'radar') { var colorGroup = (0, _chart.getMultiColorGroup)(_this9.colorGroupsData, _this9.colorNumber); if (serie.type === '2.5Bar') { var shape = serie.shape; var defaultColor = serie.itemStyle && serie.itemStyle.color; if (['square', 'rectangle'].includes(shape)) { var cubeType = shape; serie.type = 'custom'; dataOptions.series[index] && (dataOptions.series[index].type = 'custom'); var _this = _this9; serie.renderItem = function (params, api) { var location = api.coord([api.value(0), api.value(1)]); var fillColor = defaultColor || colorGroup[params.seriesIndex]; if (_this.highlightOptions) { var matchData = _this.highlightOptions.find(function (item) { return item.seriesIndex.includes(params.seriesIndex) && item.dataIndex === params.dataIndex; }); if (matchData && (matchData.color || _this.highlightColor)) { fillColor = matchData.color || _this.highlightColor; } } var leftColor, rightColor, topColor; if ((0, _typeof2.default)(fillColor) === 'object') { var copyLeftColor = (0, _lodash4.default)(fillColor); var copyRightColor = (0, _lodash4.default)(fillColor); var copyTopColor = (0, _lodash4.default)(fillColor); copyLeftColor.colorStops[0].color = (0, _util.getColorWithOpacity)(copyLeftColor.colorStops[0].color, 0.4); copyLeftColor.colorStops[1].color = (0, _util.getColorWithOpacity)(copyLeftColor.colorStops[1].color, 0.4); copyRightColor.colorStops[0].color = (0, _util.getColorWithOpacity)(copyRightColor.colorStops[0].color, 0.7); copyRightColor.colorStops[1].color = (0, _util.getColorWithOpacity)(copyRightColor.colorStops[1].color, 0.7); copyTopColor.colorStops[0].color = (0, _util.getColorWithOpacity)(copyTopColor.colorStops[0].color, 0.85); copyTopColor.colorStops[1].color = (0, _util.getColorWithOpacity)(copyTopColor.colorStops[1].color, 0.85); leftColor = copyLeftColor; rightColor = copyRightColor; topColor = copyTopColor; } else { leftColor = (0, _util.getColorWithOpacity)(fillColor, 0.4); rightColor = (0, _util.getColorWithOpacity)(fillColor, 0.7); topColor = (0, _util.getColorWithOpacity)(fillColor, 0.85); } return { type: 'group', children: [{ type: "Cube".concat(cubeType, "Left"), shape: { api: api, xValue: api.value(0), yValue: api.value(1), x: location[0], y: location[1], xAxisPoint: api.coord([api.value(0), 0]) }, style: { fill: leftColor } }, { type: "Cube".concat(cubeType, "Right"), shape: { api: api, xValue: api.value(0), yValue: api.value(1), x: location[0], y: location[1], xAxisPoint: api.coord([api.value(0), 0]) }, style: { fill: rightColor } }, { type: "Cube".concat(cubeType, "Top"), shape: { api: api, xValue: api.value(0), yValue: api.value(1), x: location[0], y: location[1], xAxisPoint: api.coord([api.value(0), 0]) }, style: { fill: topColor } }] }; }; } else if (shape === 'cylinder') { var baseWidth = '100%'; var nextSerieDatas = dataOptions.series[index + 1] && dataOptions.series[index + 1].data; serie.type = 'bar'; serie.barGap = '-100%'; options.tooltip.trigger === 'axis' && (options.tooltip.trigger = 'item'); dataOptions.series[index] && (dataOptions.series[index].type = 'bar'); var cirCleColor = defaultColor || colorGroup[index]; if (typeof cirCleColor === 'string') { cirCleColor = _this9.setGradientColor(cirCleColor, '#fff'); } extraSeries.push( // 头部的圆片 { name: '', type: 'pictorialBar', symbolOffset: [0, -8], symbolPosition: 'end', z: 12, itemStyle: { normal: { color: cirCleColor } }, data: dataOptions.series[index].data.map(function (item, dataIndex) { return { value: item, symbolSize: !nextSerieDatas || nextSerieDatas[dataIndex] && +item >= +nextSerieDatas[dataIndex] ? [baseWidth, 15] : [0, 15] }; }) }, { // 底部的圆片 name: '', type: 'pictorialBar', symbolSize: [baseWidth, 10], symbolOffset: [0, 5], z: 12, itemStyle: { normal: { color: cirCleColor } }, data: dataOptions.series[index].data }); } delete serie.shape; } } return serie; }); // 玫瑰图多个选中 if (options.series[0].type === 'pie' && options.series[0].roseType) { options.series = options.series.map(function (serie) { if (!serie.roseType) { serie.roseType = options.series[0].roseType; } return serie; }); } // pie的图例需要一个扇形是一个图例 if (options.legend && options.series.length > 0 && options.series[0].type === 'pie') { options.legend.data = []; options.series.forEach(function (element) { if (element.data) { var _options$legend$data; (_options$legend$data = options.legend.data).push.apply(_options$legend$data, (0, _toConsumableArray2.default)(element.data.map(function (item) { return item.name; }))); } }); } } } if (options && options.radar && dataOptions.radar) { options.radar.indicator = Object.assign({}, dataOptions.radar.indicator || {}); } var series = dataOptions.series; if (series && series.length && series[0].type === 'pie') { this.setItemStyleColor(false, series); } if (this.highlightOptions && this.highlightOptions.length > 0) { this.setItemStyleColor(true, series); } dataOptions.series = this._createRingShineSeries(series, options.series); var mergeOptions = (0, _lodash2.default)(options, dataOptions); if (extraSeries.length > 0) { var _mergeOptions$series; (_mergeOptions$series = mergeOptions.series).push.apply(_mergeOptions$series, extraSeries); } return mergeOptions; }, _createRingShineSeries: function _createRingShineSeries(series, optionsSeries) { var _this10 = this; if (optionsSeries) { this.datasetOptions.forEach(function (datasetOption, index) { var _ref4 = optionsSeries[index] || {}, type = _ref4.type, outerGap = _ref4.outerGap, isShine = _ref4.isShine; if (type === 'pie' && outerGap >= 0) { var data = series[index].data.map(function (val) { return val.value; }); outerGap = outerGap || Math.min.apply(null, data) / 5; series[index].data = _this10._createRingShineDataOption(series[index].data, outerGap, isShine); delete optionsSeries[index].outerGap; delete optionsSeries[index].isShine; } }); } return series; }, _createRingShineDataOption: function _createRingShineDataOption(data, outerGap, isShine) { if (!data) { return; } var colors = this._handlerColorGroup(data.length); var gapItem = { value: outerGap, name: '', itemStyle: { normal: { label: { show: false }, labelLine: { show: false }, color: 'rgba(0, 0, 0, 0)', borderColor: 'rgba(0, 0, 0, 0)', borderWidth: 0 } } }; var result = []; for (var i = 0; i < data.length; i++) { var dataItem = { value: data[i].value, name: data[i].name }; if (isShine) { dataItem.itemStyle = { normal: { borderWidth: 5, shadowBlur: 10, color: colors[i], borderColor: colors[i], shadowColor: colors[i] } }; } result.push(dataItem); if (data.length > 1) { result.push(gapItem); } } return result; }, _handlerColorGroup: function _handlerColorGroup(serielDataLength) { if ((0, _typeof2.default)(this.colorGroupsData[0]) === 'object') { return (0, _chart.handleMultiGradient)(this.colorGroupsData, serielDataLength); } else { return SuperMap.ColorsPickerUtil.getGradientColors(this.colorGroupsData, serielDataLength, 'RANGE'); } }, // 控制label显示条数 _controlLabel: function _controlLabel(normalLabel, maxLabels) { if (normalLabel && normalLabel.show && maxLabels) { var endNormalLabel = (0, _lodash4.default)(normalLabel); var formatMode; if (endNormalLabel.formatter && typeof endNormalLabel.formatter === 'string') { formatMode = endNormalLabel.formatter; } endNormalLabel.formatter = function (_ref5) { var dataIndex = _ref5.dataIndex, value = _ref5.value, name = _ref5.name, percent = _ref5.percent; var FORMATTER_MAP = { '{b}: {c}': "".concat(name, ": ").concat(value), '{b}': "".concat(name), '{c}': "".concat(value), '{d}%': "".concat(percent, "%") }; var result = ''; if (dataIndex < maxLabels) { result = FORMATTER_MAP[formatMode || '{c}']; } return result; }; return endNormalLabel; } return normalLabel; }, // 当datasetUrl不变,datasetOptions改变时 _changeChartData: function _changeChartData(echartsDataService, datasetOptions, echartOptions) { var options; options = echartsDataService.formatChartData(datasetOptions, this.xBar); // 缓存dataSeriesCache,格式化成echart的数据 this.dataSeriesCache = Object.assign({}, options); // 设置echartOptions this.echartOptions = this._optionsHandler(echartOptions, options); }, _setChartTheme: function _setChartTheme() { if (!this.theme) { var colorNumber = this.colorNumber; this.chartTheme = (0, _chart.chartThemeUtil)(this.backgroundData, this.textColorsData, this.colorGroupsData, colorNumber); } }, // 获取echart实例 _getEchart: function _getEchart() { return this.smChart; }, // 以下全是同名调用echart的方法 /** * 提供了一个更贴切的名称来描述 setOption 方法的实际行为。 * @param {Object} options - 图表的配置项和数据 * @param {Boolean} [notMerge = false] - 可选,是否不跟之前设置的 option 进行合并,默认为 false,即合并 * @param {Boolean} [lazyUpdate = false] - 可选,阻止调用 setOption 时抛出事件,默认为 false,即抛出事件 */ mergeOptions: function mergeOptions(options, notMerge, lazyUpdate) { this._delegateMethod('mergeOptions', options, notMerge, lazyUpdate); }, /** * 此接口用于,在大数据量(百万以上)的渲染场景,分片加载数据和增量渲染。 * @param {Object} params - 数据配置 */ appendData: function appendData(params) { this._delegateMethod('appendData', params); }, /** * 此接口用于,改变图表尺寸,在容器大小发生改变时需要手动调用。 * @param {Object} [options] - options可缺省。有下面几个可选项:width, height, silent */ resize: function resize(options) { this._delegateMethod('resize', options); }, /** * 此接口用于,触发图表行为。 * @param {Object} payload - 参数可以通过batch属性同时触发多个行为。 */ dispatchAction: function dispatchAction(payload) { this._delegateMethod('dispatchAction', payload); }, /** * 此接口用于,转换坐标系上的点到像素坐标值。 * @param {Object} finder - 用于指示『在哪个坐标系或者系列上判断』。 * @param {Array|string} value - 要被转换的值。 */ convertToPixel: function convertToPixel(finder, value) { return this._delegateMethod('convertToPixel', finder, value); }, /** * 此接口用于,转换像素坐标值到逻辑坐标系上的点。是 convertToPixel 的逆运算。 * @param {Object} finder - 用于指示『在哪个坐标系或者系列上判断』。 * @param {Array|string} value - 要被转换的值。 */ convertFromPixel: function convertFromPixel(finder, value) { return this._delegateMethod('convertFromPixel', finder, value); }, /** * 此接口用于,判断给定的点是否在指定的坐标系或者系列上。 * @param {Object} finder - 用于指示『在哪个坐标系或者系列上判断』。 * @param {Array} value - 要被判断的点。 */ containPixel: function containPixel(finder, value) { return this._delegateMethod('containPixel', finder, value); }, /** * 此接口用于,显示加载动画效果。可以在加载数据前手动调用该接口显示加载动画,在数据加载完成后调用 hideLoading 隐藏加载动画。 * @param {Object} [type] - 可选,加载动画类型,目前只有一种'default'。 * @param {Object} [options] - 可选,加载动画配置项,跟type有关。 */ showLoading: function showLoading(type, options) { this._delegateMethod('showLoading', type, options); }, /** * 此接口用于,隐藏动画加载效果。 */ hideLoading: function hideLoading() { this._delegateMethod('hideLoading'); }, /** * 此接口用于,导出图表图片,返回一个 base64 的 URL,可以设置为Image的src。 * @param {Object} options - 导出配置 */ getDataURL: function getDataURL(options) { return this._delegateMethod('getDataURL', options); }, /** * 此接口用于,导出联动的图表图片,返回一个 base64 的 url,可以设置为Image的src。导出图片中每个图表的相对位置跟容器的相对位置有关。 * @param {Object} options - 导出配置 */ getConnectedDataURL: function getConnectedDataURL(options) { return this._delegateMethod('getConnectedDataURL', options); }, /** * 此接口用于,清空当前实例,会移除实例中所有的组件和图表。清空后调用 getOption 方法返回一个{}空对象。 */ clear: function clear() { this._delegateMethod('clear'); }, /** * 此接口用于,销毁实例,销毁后实例无法再被使用。 */ dispose: function dispose() { this._delegateMethod('dispose'); }, // 内部调用的方法 _delegateMethod: function _delegateMethod(name) { var _this$smChart; for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return (_this$smChart = this.smChart)[name].apply(_this$smChart, args); }, unSupportedFeatureTip: function unSupportedFeatureTip() { this.$message.destroy(); this.$message.warning(this.$t('chart.unSupportedData')); }, handleChartClick: function handleChartClick(params) { if (this.associatedMap) { var dataIndex = params.dataIndex; var features = []; if (this.echartsDataService && this.echartsDataService.sortDataCache) { features = this.echartsDataService.sortDataCache.features || features; } var selectedFeature = features[dataIndex]; this.showDetailInfo(selectedFeature); } }, showDetailInfo: function showDetailInfo(feature) { var _this11 = this; var coordinates = ((feature || {}).geometry || {}).coordinates; var hasCoordinates = coordinates && !!coordinates.length; if (hasCoordinates && this.viewModel) { var properties = feature.properties || {}; var _coordinates = (0, _util.getFeatureCenter)(feature); var propsData = this.generateTableData(properties); this.tablePopupProps = _objectSpread({}, propsData); this.$nextTick(function () { _this11.viewModel.setPopupContent(_coordinates, _this11.$refs.chartTablePopup.$el, _this11.changePopupArrowStyle); }); } else { var mapNotLoaded = this.mapNotLoadedTip(); if (mapNotLoaded) { return; } if (!hasCoordinates) { this.unSupportedFeatureTip(); } } }, generateTableData: function generateTableData(properties) { var propsData = { columns: [{ title: this.$t('search.attribute'), dataIndex: 'attribute', width: 120 }, { title: this.$t('search.attributeValue'), dataIndex: 'attributeValue', width: 150 }], data: [] }; for (var key in properties) { if (key && properties[key]) { var dataItem = {}; dataItem.attribute = key; dataItem.attributeValue = properties[key]; propsData.data.push(dataItem); } } return propsData; }, changePopupArrowStyle: function changePopupArrowStyle() {}, mapNotLoadedTip: function mapNotLoadedTip() {}, _dataZoomChanged: function _dataZoomChanged() { var flag = false; this.options.series && this.options.series.forEach(function (serie, index) { var labelConfig = serie.label && serie.label.normal; flag = labelConfig.show && labelConfig.smart; }); if (flag) { this.echartOptions = this._optionsHandler(this.options, this.dataSeriesCache, true); } }, registerShape: function registerShape() { var _this12 = this; this.datasetOptions && this.options.series && this.datasetOptions.forEach(function (item, index) { var graphicIntance = _this12.$options.graphic; if (item.seriesType === '2.5Bar') { var cubeType = _this12.options.series[index].shape; if (graphicIntance.getShapeClass("Cube".concat(cubeType, "Left"))) { return; } var CubeLeft, CubeRight, CubeTop; switch (cubeType) { case 'square': // 绘制左侧面 CubeLeft = graphicIntance.extendShape({ shape: { x: 0, y: 0 }, buildPath: function buildPath(ctx, shape) { // 会canvas的应该都能看得懂,shape是从custom传入的 var xAxisPoint = shape.xAxisPoint; var c0 = [shape.x, shape.y]; var c1 = [shape.x - 13, shape.y - 13]; var c2 = [xAxisPoint[0] - 13, xAxisPoint[1] - 13]; var c3 = [xAxisPoint[0], xAxisPoint[1]]; ctx.moveTo(c0[0], c0[1]).lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath(); } }); // 绘制右侧面 CubeRight = graphicIntance.extendShape({ shape: { x: 0, y: 0 }, buildPath: function buildPath(ctx, shape) { var xAxisPoint = shape.xAxisPoint; var c1 = [shape.x, shape.y]; var c2 = [xAxisPoint[0], xAxisPoint[1]]; var c3 = [xAxisPoint[0] + 18, xAxisPoint[1] - 9]; var c4 = [shape.x + 18, shape.y - 9]; ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath(); } }); // 绘制顶面 CubeTop = graphicIntance.extendShape({ shape: { x: 0, y: 0 }, buildPath: function buildPath(ctx, shape) { var c1 = [shape.x, shape.y]; var c2 = [shape.x + 18, shape.y - 9]; var c3 = [shape.x + 5, shape.y - 22]; var c4 = [shape.x - 13, shape.y - 13]; ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath(); } }); break; case 'rectangle': // 绘制左侧面 CubeLeft = graphicIntance.extendShape({ shape: { x: 0, y: 0 }, buildPath: function buildPath(ctx, shape) { var xAxisPoint = shape.xAxisPoint; var c0 = [shape.x, shape.y]; var c1 = [shape.x - 9, shape.y - 9]; var c2 = [xAxisPoint[0] - 9, xAxisPoint[1] - 9]; var c3 = [xAxisPoint[0], xAxisPoint[1]]; ctx.moveTo(c0[0], c0[1]).lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath(); } }); CubeRight = graphicIntance.extendShape({ shape: { x: 0, y: 0 }, buildPath: function buildPath(ctx, shape) { var xAxisPoint = shape.xAxisPoint; var c1 = [shape.x, shape.y]; var c2 = [xAxisPoint[0], xAxisPoint[1]]; var c3 = [xAxisPoint[0] + 18, xAxisPoint[1] - 9]; var c4 = [shape.x + 18, shape.y - 9]; ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath(); } }); CubeTop = graphicIntance.extendShape({ shape: { x: 0, y: 0 }, buildPath: function buildPath(ctx, shape) { var c1 = [shape.x, shape.y]; var c2 = [shape.x + 18, shape.y - 9]; var c3 = [shape.x + 9, shape.y - 18]; var c4 = [shape.x - 9, shape.y - 9]; ctx.moveTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath(); } }); break; } CubeLeft && graphicIntance.registerShape("Cube".concat(cubeType, "Left"), CubeLeft); CubeRight && graphicIntance.registerShape("Cube".concat(cubeType, "Right"), CubeRight); CubeTop && graphicIntance.registerShape("Cube".concat(cubeType, "Top"), CubeTop); } }); }, getCirlPoint: function getCirlPoint(x0, y0, r, angle) { var x1 = x0 + r * Math.cos(angle * Math.PI / 180); var y1 = y0 + r * Math.sin(angle * Math.PI / 180); return { x: x1, y: y1 }; }, spinLine: function spinLine(startAngle, endAngle, angle, effectColor, radius) { return function (params, api) { return { type: 'arc', shape: { cx: api.getWidth() / 2, cy: api.getHeight() / 2, r: Math.min(api.getWidth(), api.getHeight()) / 2 * radius, startAngle: (startAngle + angle) * Math.PI / 180, endAngle: (endAngle + angle) * Math.PI / 180 }, style: { stroke: effectColor, fill: 'transparent', lineWidth: 1.5 }, silent: true }; }; }, spinPoint: function spinPoint(angle, spinAngle, effectColor, radius) { var _this13 = this; return function (params, api) { var x0 = api.getWidth() / 2; var y0 = api.getHeight() / 2; var r = Math.min(api.getWidth(), api.getHeight()) / 2 * radius; var point = _this13.getCirlPoint(x0, y0, r, angle + spinAngle); return { type: 'circle', shape: { cx: point.x, cy: point.y, r: 4 }, style: { stroke: effectColor, fill: effectColor }, silent: true }; }; }, customRingsLine: function customRingsLine(startAngle, endAngle, angle, effectColor, effectRadius) { var series = { name: 'ring0', type: 'custom', coordinateSystem: 'none', renderItem: null, data: [0] }; series.renderItem = this.spinLine(startAngle, endAngle, angle, effectColor, effectRadius); return series; }, customRingsPoint: function customRingsPoint(startAngle, angle, effectColor, outEffectRadius) { var series = { name: 'ring4', type: 'custom', coordinateSystem: 'none', renderItem: null, data: [0] }; series.renderItem = this.spinPoint(startAngle, angle, effectColor, outEffectRadius); return series; }, addEffect: function addEffect(angle) { angle = angle || 0; var effectColor = this.options.series[0].customOptions.color; var effectRadius = this.options.series[0].customOptions.radius; var outEffectRadius = effectRadius + 0.1; // customRightBottomLine this.customSeries.push(this.customRingsLine(0, 90, angle, effectColor, effectRadius)); // customRightTopLine this.customSeries.push(this.customRingsLine(270, 40, -angle, effectColor, outEffectRadius)); // customLeftTopLine this.customSeries.push(this.customRingsLine(180, 270, angle, effectColor, effectRadius)); // customLeftBottomLine this.customSeries.push(this.customRingsLine(90, 220, -angle, effectColor, outEffectRadius)); if (this.options.series[0].customOptions.pointState === 'startPoint') { this.customSeries.push(this.customRingsPoint(270, -angle, effectColor, outEffectRadius)); this.customSeries.push(this.customRingsPoint(90, -angle, effectColor, outEffectRadius)); } }, startEffect: function startEffect() { var _this14 = this; var angle = 0; this.startSpin = setInterval(function () { if (!_this14.options.series) { return; } if (_this14.options.series[0].customType === 'customRingsSeries') { _this14.customSeries = []; angle += 3; _this14.addEffect(angle); } }, 100); }, customRenderItem: function customRenderItem() {} }, // echarts所有静态方法 /** * @function connect * 多个图表实例实现联动。 * @param {string|Array} group - group的id,或者图表实例的数组。 */ connect: function connect(group) { _vueEcharts.default && _vueEcharts.default.connect(group); }, /** * 解除图表实例的联动,如果只需要移除单个实例,可以将通过将该图表实例 group 设为空。 * @param {string} group - group的id。 */ disconnect: function disconnect(group) { _vueEcharts.default && _vueEcharts.default.disConnect(group); }, /** * 注册可用的地图,必须在包括 geo 组件或者 map 图表类型的时候才能使用。 * @param {string} mapName - 地图名称,在 geo 组件或者 map 图表类型中设置的 map 对应的就是该值。 * @param {Object} geoJSON - GeoJson 格式的数据,具体格式见 http://geojson.org/。 * @param {Object} [specialAreas] - 可选。将地图中的部分区域缩放到合适的位置,可以使得整个地图的显示更加好看。 */ registerMap: function registerMap(mapName, geoJSON, specialAreas) { _vueEcharts.default && _vueEcharts.default.registerMap(mapName, geoJSON, specialAreas); }, /** * 注册主题,用于初始化实例的时候指定。 * @param {string} name - 主题命名。 * @param {Object} theme - 主题配置。 */ registerTheme: function registerTheme(name, theme) { _vueEcharts.default && _vueEcharts.default.registerTheme(name, theme); }, /** * @desc 图形相关帮助方法。 */ graphic: _vueEcharts.default && _vueEcharts.default.graphic }; exports.default = _default2; /***/ }), /***/ "0fd2": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__("19e1")); var _createClass2 = _interopRequireDefault(__webpack_require__("66f6")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__("8377")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__("c031")); var _inherits2 = _interopRequireDefault(__webpack_require__("6b51")); var _typeof2 = _interopRequireDefault(__webpack_require__("7ae5")); var _WebMapViewModel = _interopRequireDefault(__webpack_require__("6e42")); var _mapEvent = _interopRequireDefault(__webpack_require__("d3e9")); var _vmUpdater = _interopRequireDefault(__webpack_require__("3a49")); var _mapEvents = _interopRequireDefault(__webpack_require__("9f21")); var _vuePropertyDecorator = __webpack_require__("e22c"); var _resizeDetector = __webpack_require__("e0f2"); var _debounce = _interopRequireDefault(__webpack_require__("331f")); var __decorate = void 0 && (void 0).__decorate || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if ((typeof Reflect === "undefined" ? "undefined" : (0, _typeof2.default)(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; } return c > 3 && r && Object.defineProperty(target, key, r), r; }; var SmWebMap = /*#__PURE__*/ function (_Mixins) { (0, _inherits2.default)(SmWebMap, _Mixins); function SmWebMap() { var _this; (0, _classCallCheck2.default)(this, SmWebMap); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(SmWebMap).apply(this, arguments)); _this.spinning = true; return _this; } (0, _createClass2.default)(SmWebMap, [{ key: "mapIdChanged", value: function mapIdChanged() { if (this.defaultLoading) { this.spinning = true; } } }, { key: "loadingChanged", value: function loadingChanged(newVal) { this.spinning = newVal; } }, { key: "created", value: function created() { if (!this.defaultLoading) { this.spinning = false; } } }, { key: "mounted", value: function mounted() { this.initializeWebMap(); this.registerEvents(); } }, { key: "beforeDestroy", value: function beforeDestroy() { this.destory(); } }, { key: "destroyed", value: function destroyed() { _mapEvent.default.$options.deleteMap(this.target); _mapEvent.default.$options.deleteWebMap(this.target); this.viewModel.cleanWebMap(); } }, { key: "load", value: function load(value) { return value; } }, { key: "getMapFailed", value: function getMapFailed(value) { return value; } }, { key: "getLayerDatasourceFailed", value: function getLayerDatasourceFailed(value) { return value; } }, { key: "initializeWebMap", value: function initializeWebMap() { var _this2 = this; var _this$$props = this.$props, target = _this$$props.target, serverUrl = _this$$props.serverUrl, accessToken = _this$$props.accessToken, accessKey = _this$$props.accessKey, tiandituKey = _this$$props.tiandituKey, withCredentials = _this$$props.withCredentials, excludePortalProxyUrl = _this$$props.excludePortalProxyUrl, isSuperMapOnline = _this$$props.isSuperMapOnline, proxy = _this$$props.proxy, mapOptions = _this$$props.mapOptions, iportalServiceProxyUrlPrefix = _this$$props.iportalServiceProxyUrlPrefix; this.viewModel = new _WebMapViewModel.default(this.mapId, { target: target, serverUrl: serverUrl, accessToken: accessToken, accessKey: accessKey, tiandituKey: tiandituKey, withCredentials: withCredentials, excludePortalProxyUrl: excludePortalProxyUrl, isSuperMapOnline: isSuperMapOnline, proxy: proxy, iportalServiceProxyUrlPrefix: iportalServiceProxyUrlPrefix }, mapOptions); if (this.autoresize) { this.__resizeHandler = (0, _debounce.default)(function () { _this2.resize(); }, 100, { leading: true }); (0, _resizeDetector.addListener)(this.$el, this.__resizeHandler); } } }, { key: "resize", value: function resize() { if (this.viewModel && this.viewModel.resize) { this.viewModel.resize(this.keepBounds); } } }, { key: "registerEvents", value: function registerEvents() { var _this3 = this; this.viewModel.on({ addlayerssucceeded: function addlayerssucceeded(e) { _this3.spinning = false; _mapEvent.default.$options.setMap(_this3.target, e.map); _this3.viewModel && _mapEvent.default.$options.setWebMap(_this3.target, _this3.viewModel); _mapEvent.default.$emit('load-map', e.map, _this3.target); e.map.resize(); _this3.map = e.map; _this3.bindMapEvents(); _this3.load({ map: e.map }); }, getmapinfofailed: function getmapinfofailed(e) { _this3.getMapFailed({ error: e.error }); _this3.$message.error(e.error.message); _this3.spinning = false; }, getlayerdatasourcefailed: function getlayerdatasourcefailed(e) { _this3.getLayerDatasourceFailed({ error: e.error, layer: e.layer, map: e.map }); if (e.error === 'SAMPLE DATA is not supported') { _this3.$message.error(_this3.$t('webmap.sampleDataNotSupport')); } else { _this3.$message.error(_this3.$t('webmap.getLayerInfoFailed')); } }, notsupportbaidumap: function notsupportbaidumap() { _this3.$message.error(_this3.$t('webmap.baiduMapNotSupport')); }, beforeremovemap: function beforeremovemap() { _mapEvent.default.$options.deleteMap(_this3.target); _mapEvent.default.$options.deleteWebMap(_this3.target); } }); } }, { key: "destory", value: function destory() { if (this.autoresize) { (0, _resizeDetector.removeListener)(this.$el, this.__resizeHandler); } } }, { key: "getMapTarget", get: function get() { return this.target; } }, { key: "controlComponents", get: function get() { var controls = {}; for (var key in this.$props) { if (key.includes('Control') && this.$props[key].show) { var controlName = key.replace('Control', ''); var firstLetter = controlName[0]; controls["Sm".concat(controlName.replace(firstLetter, firstLetter.toUpperCase()))] = this.$props[key]; } } return controls; } }]); return SmWebMap; }((0, _vuePropertyDecorator.Mixins)(_vmUpdater.default, _mapEvents.default)); __decorate([(0, _vuePropertyDecorator.Provide)()], SmWebMap.prototype, "__resizeHandler", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "mapId", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: 'map' })], SmWebMap.prototype, "target", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: 'https://www.supermapol.com' })], SmWebMap.prototype, "serverUrl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "accessToken", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "accessKey", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "tiandituKey", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: false })], SmWebMap.prototype, "withCredentials", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "excludePortalProxyUrl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "isSuperMapOnline", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "proxy", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: true })], SmWebMap.prototype, "defaultLoading", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: false })], SmWebMap.prototype, "loading", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "background", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "iportalServiceProxyUrlPrefix", void 0); __decorate([(0, _vuePropertyDecorator.Prop)()], SmWebMap.prototype, "mapOptions", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: true })], SmWebMap.prototype, "autoresize", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: false })], SmWebMap.prototype, "keepBounds", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'top-left' }; } })], SmWebMap.prototype, "panControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'bottom-left' }; } })], SmWebMap.prototype, "scaleControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'top-left' }; } })], SmWebMap.prototype, "zoomControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'bottom-right' }; } })], SmWebMap.prototype, "miniMapControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'top-right' }; } })], SmWebMap.prototype, "layerListControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'top-right', showUnitSelect: true, distanceDefaultUnit: 'kilometers', areaDefaultUnit: 'kilometers' }; } })], SmWebMap.prototype, "measureControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'bottom-left', layerNames: [], isShowTitle: false, isShowField: false, mode: 'simple' }; } })], SmWebMap.prototype, "legendControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'top-right' }; } })], SmWebMap.prototype, "queryControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, position: 'top-right' }; } })], SmWebMap.prototype, "searchControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, layers: [], fields: [], layerStyle: {}, clickAreaAround: 5 }; } })], SmWebMap.prototype, "identifyControl", void 0); __decorate([(0, _vuePropertyDecorator.Prop)({ default: function _default() { return { show: false, layers: [] }; } })], SmWebMap.prototype, "layerManagerControl", void 0); __decorate([(0, _vuePropertyDecorator.Watch)('mapId')], SmWebMap.prototype, "mapIdChanged", null); __decorate([(0, _vuePropertyDecorator.Watch)('loading')], SmWebMap.prototype, "loadingChanged", null); __decorate([(0, _vuePropertyDecorator.Emit)()], SmWebMap.prototype, "load", null); __decorate([(0, _vuePropertyDecorator.Emit)()], SmWebMap.prototype, "getMapFailed", null); __decorate([(0, _vuePropertyDecorator.Emit)()], SmWebMap.prototype, "getLayerDatasourceFailed", null); SmWebMap = __decorate([(0, _vuePropertyDecorator.Component)({ name: 'SmWebMap', viewModelProps: ['mapId', 'serverUrl', 'mapOptions.center', 'mapOptions.zoom', 'mapOptions.style', 'mapOptions.crs', 'mapOptions.minZoom', 'mapOptions.maxZoom', 'mapOptions.maxBounds', 'mapOptions.renderWorldCopies', 'mapOptions.bearing', 'mapOptions.pitch', 'mapOptions.rasterTileSize', 'withCredentials', 'proxy'] })], SmWebMap); var _default2 = SmWebMap; exports.default = _default2; /***/ }), /***/ 1: /***/ (function(module, exports) { /* (ignored) */ /***/ }), /***/ "10ba": /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__("8e6d"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _theme = _interopRequireDefault(__webpack_require__("9259")); var _util = __webpack_require__("1448"); // // // // // // // // // // // // // var _default2 = { name: 'SmTablePopup', mixins: [_theme.default], props: { data: { type: Array, default: function _default() { return []; } }, columns: { type: Array, default: function _default() { return []; } } }, computed: { styleObject: function styleObject() { return { '--table-popup-active-color--text': this.colorGroupsData[0] }; }, backgroundStyle: function backgroundStyle() { return { background: this.backgroundData ? (0, _util.getColorWithOpacity)(this.backgroundData, 0.5) : this.backgroundData }; } } }; exports.default = _default2; /***/ }), /***/ "10d6": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VectorTileLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ac9e"); /* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VectorTileLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VectorTileLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VectorTileLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VectorTileLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VectorTileLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0___default.a); /***/ }), /***/ "10d7": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _RangeThemeLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ba96"); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _RangeThemeLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _RangeThemeLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("b429"); var render, staticRenderFns /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])( _RangeThemeLayer_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"], render, staticRenderFns, false, null, null, null ) /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "1164": /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var meta_1 = __webpack_require__("49c0"); /** * Takes a set of features, calculates the bbox of all input features, and returns a bounding box. * * @name bbox * @param {GeoJSON} geojson any GeoJSON object * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order * @example * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]); * var bbox = turf.bbox(line); * var bboxPolygon = turf.bboxPolygon(bbox); * * //addToMap * var addToMap = [line, bboxPolygon] */ function bbox(geojson) { var result = [Infinity, Infinity, -Infinity, -Infinity]; meta_1.coordEach(geojson, function (coord) { if (result[0] > coord[0]) { result[0] = coord[0]; } if (result[1] > coord[1]) { result[1] = coord[1]; } if (result[2] < coord[0]) { result[2] = coord[0]; } if (result[3] < coord[1]) { result[3] = coord[1]; } }); return result; } exports.default = bbox; /***/ }), /***/ "1171": /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_ts_loader_index_js_ref_1_1_node_modules_vue_loader_lib_index_js_vue_loader_options_TrackLayer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ab53"); /* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_ts_loader_index_js_ref_1_1_node_modules_vue_loader_lib_index_js_vue_loader_options_TrackLayer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_babel_loader_lib_index_js_node_modules_ts_loader_index_js_ref_1_1_node_modules_vue_loader_lib_index_js_vue_loader_options_TrackLayer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__); /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_babel_loader_lib_index_js_node_modules_ts_loader_index_js_ref_1_1_node_modules_vue_loader_lib_index_js_vue_loader_options_TrackLayer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_babel_loader_lib_index_js_node_modules_ts_loader_index_js_ref_1_1_node_modules_vue_loader_lib_index_js_vue_loader_options_TrackLayer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_ts_loader_index_js_ref_1_1_node_modules_vue_loader_lib_index_js_vue_loader_options_TrackLayer_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default.a); /***/ }), /***/ "11f8": /***/ (function(module, exports, __webpack_require__) { "use strict"; var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; /** * Copyright Marc J. Schmidt. See the LICENSE file at the top-level * directory of this distribution and at * https://github.com/marcj/css-element-queries/blob/master/LICENSE. */ (function (root, factory) { if (true) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__("76b8")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else {} }(typeof window !== 'undefined' ? window : this, function (ResizeSensor) { /** * * @type {Function} * @constructor */ var ElementQueries = function () { //