400 lines
12 KiB
JavaScript
400 lines
12 KiB
JavaScript
/*!
|
|
* Copyright (c) 2016 @thinkinggis
|
|
* Copyright© 2000-2017 SuperMap Software Co. Ltd
|
|
* echartsLayer.
|
|
* github: https://github.com/SuperMap/echartsLayer
|
|
* license: MIT
|
|
*/
|
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
module.exports = factory(require("echarts"));
|
|
else if(typeof define === 'function' && define.amd)
|
|
define(["echarts"], factory);
|
|
else if(typeof exports === 'object')
|
|
exports["EchartsLayer"] = factory(require("echarts"));
|
|
else
|
|
root["EchartsLayer"] = factory(root["echarts"]);
|
|
})(this, function(__WEBPACK_EXTERNAL_MODULE_0__) {
|
|
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, {
|
|
/******/ configurable: false,
|
|
/******/ enumerable: true,
|
|
/******/ get: getter
|
|
/******/ });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // 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 = 1);
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ([
|
|
/* 0 */
|
|
/***/ (function(module, exports) {
|
|
|
|
module.exports = __WEBPACK_EXTERNAL_MODULE_0__;
|
|
|
|
/***/ }),
|
|
/* 1 */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
__webpack_require__(2)
|
|
var EchartsLayer=__webpack_require__(6)
|
|
module.exports=EchartsLayer;
|
|
|
|
/***/ }),
|
|
/* 2 */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_AMD_DEFINE_RESULT__;/**
|
|
* GLMap component extension
|
|
*/
|
|
!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
|
|
__webpack_require__(0).registerCoordinateSystem(
|
|
'GLMap', __webpack_require__(3)
|
|
)
|
|
__webpack_require__(4)
|
|
__webpack_require__(5)
|
|
|
|
// Action
|
|
__webpack_require__(0).registerAction({
|
|
type: 'GLMapRoam',
|
|
event: 'GLMapRoam',
|
|
update: 'updateLayout'
|
|
}, function (payload, ecModel) {})
|
|
|
|
return {
|
|
version: '1.0.0'
|
|
}
|
|
}.call(exports, __webpack_require__, exports, module),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 3 */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
|
|
var echarts = __webpack_require__(0)
|
|
|
|
function GLMapCoordSys(GLMap, api) {
|
|
this._GLMap = GLMap
|
|
this.dimensions = ['lng', 'lat']
|
|
this._mapOffset = [0, 0]
|
|
|
|
this._api = api
|
|
}
|
|
|
|
GLMapCoordSys.prototype.dimensions = ['lng', 'lat']
|
|
|
|
GLMapCoordSys.prototype.setMapOffset = function (mapOffset) {
|
|
this._mapOffset = mapOffset
|
|
}
|
|
|
|
GLMapCoordSys.prototype.getBMap = function () {
|
|
return this._GLMap
|
|
}
|
|
|
|
GLMapCoordSys.prototype.fixLat=function(lat) {
|
|
if(lat>=90){
|
|
return 89.99999999999999;
|
|
}
|
|
if(lat<=-90){
|
|
return -89.99999999999999;
|
|
}
|
|
return lat;
|
|
}
|
|
|
|
GLMapCoordSys.prototype.dataToPoint = function (data) {
|
|
data[1]= this.fixLat(data[1]);
|
|
var px = this._GLMap.project(data)
|
|
|
|
var mapOffset = this._mapOffset
|
|
|
|
return [px.x - mapOffset[0], px.y - mapOffset[1]]
|
|
}
|
|
|
|
GLMapCoordSys.prototype.pointToData = function (pt) {
|
|
var mapOffset = this._mapOffset
|
|
var pt = this._bmap.project(
|
|
[pt[0] + mapOffset[0],
|
|
pt[1] + mapOffset[1]]
|
|
)
|
|
return [pt.lng, pt.lat]
|
|
}
|
|
|
|
GLMapCoordSys.prototype.getViewRect = function () {
|
|
var api = this._api
|
|
return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight())
|
|
}
|
|
|
|
GLMapCoordSys.prototype.getRoamTransform = function () {
|
|
return echarts.matrix.create()
|
|
}
|
|
|
|
GLMapCoordSys.prototype.prepareCustoms = function (data) {
|
|
var zrUtil = echarts.util;
|
|
|
|
var rect = this.getViewRect();
|
|
return {
|
|
coordSys: {
|
|
// The name exposed to user is always 'cartesian2d' but not 'grid'.
|
|
type: 'GLMap',
|
|
x: rect.x,
|
|
y: rect.y,
|
|
width: rect.width,
|
|
height: rect.height
|
|
},
|
|
api: {
|
|
coord: zrUtil.bind(this.dataToPoint, this),
|
|
size: zrUtil.bind(dataToCoordSize, this)
|
|
}
|
|
};
|
|
|
|
function dataToCoordSize(dataSize, dataItem) {
|
|
dataItem = dataItem || [0, 0];
|
|
return zrUtil.map([0, 1], function (dimIdx) {
|
|
var val = dataItem[dimIdx];
|
|
var halfSize = dataSize[dimIdx] / 2;
|
|
var p1 = [];
|
|
var p2 = [];
|
|
p1[dimIdx] = val - halfSize;
|
|
p2[dimIdx] = val + halfSize;
|
|
p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
|
|
return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
|
|
}, this);
|
|
}
|
|
}
|
|
|
|
// For deciding which dimensions to use when creating list data
|
|
GLMapCoordSys.dimensions = GLMapCoordSys.prototype.dimensions
|
|
|
|
GLMapCoordSys.create = function (ecModel, api) {
|
|
var coordSys;
|
|
|
|
ecModel.eachComponent('GLMap', function (GLMapModel) {
|
|
var viewportRoot = api.getZr().painter.getViewportRoot()
|
|
var GLMap = echarts.glMap;
|
|
coordSys = new GLMapCoordSys(GLMap, api)
|
|
coordSys.setMapOffset(GLMapModel.__mapOffset || [0, 0])
|
|
GLMapModel.coordinateSystem = coordSys
|
|
})
|
|
|
|
ecModel.eachSeries(function (seriesModel) {
|
|
if (seriesModel.get('coordinateSystem') === 'GLMap') {
|
|
seriesModel.coordinateSystem = coordSys
|
|
}
|
|
})
|
|
}
|
|
|
|
return GLMapCoordSys
|
|
}.call(exports, __webpack_require__, exports, module),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
|
|
|
|
|
|
/***/ }),
|
|
/* 4 */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
|
|
|
|
return __webpack_require__(0).extendComponentModel({
|
|
type: 'GLMap',
|
|
|
|
getBMap: function () {
|
|
// __bmap is injected when creating BMapCoordSys
|
|
return this.__GLMap;
|
|
},
|
|
|
|
defaultOption: {
|
|
roam: false
|
|
}
|
|
});
|
|
}.call(exports, __webpack_require__, exports, module),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
|
|
|
/***/ }),
|
|
/* 5 */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
var __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {
|
|
return __webpack_require__(0).extendComponentView({
|
|
type: 'GLMap',
|
|
|
|
render: function (GLMapModel, ecModel, api) {
|
|
var rendering = true
|
|
|
|
var glMap = echarts.glMap
|
|
|
|
|
|
var viewportRoot = api.getZr().painter.getViewportRoot()
|
|
var coordSys = GLMapModel.coordinateSystem
|
|
var moveHandler = function (type, target) {
|
|
if (rendering) {
|
|
return
|
|
}
|
|
// var offsetEl = viewportRoot.parentNode.parentNode.parentNode
|
|
var offsetEl = document.getElementsByClassName('mapboxgl-map')[0];
|
|
|
|
var mapOffset = [
|
|
-parseInt(offsetEl.style.left, 10) || 0,
|
|
-parseInt(offsetEl.style.top, 10) || 0
|
|
]
|
|
viewportRoot.style.left = mapOffset[0] + 'px'
|
|
viewportRoot.style.top = mapOffset[1] + 'px'
|
|
|
|
coordSys.setMapOffset(mapOffset)
|
|
GLMapModel.__mapOffset = mapOffset
|
|
|
|
api.dispatchAction({
|
|
type: 'GLMapRoam'
|
|
})
|
|
}
|
|
|
|
function zoomEndHandler () {
|
|
if (rendering) {
|
|
return
|
|
}
|
|
api.dispatchAction({
|
|
type: 'GLMapRoam'
|
|
})
|
|
}
|
|
|
|
glMap.off('move', this._oldMoveHandler)
|
|
// FIXME
|
|
// Moveend may be triggered by centerAndZoom method when creating coordSys next time
|
|
// glMap.removeEventListener('moveend', this._oldMoveHandler)
|
|
glMap.off('zoomend', this._oldZoomEndHandler)
|
|
glMap.on('move', moveHandler)
|
|
// glMap.addEventListener('moveend', moveHandler)
|
|
glMap.on('zoomend', zoomEndHandler)
|
|
|
|
this._oldMoveHandler = moveHandler
|
|
this._oldZoomEndHandler = zoomEndHandler
|
|
|
|
var roam = GLMapModel.get('roam')
|
|
if (roam && roam !== 'scale') {
|
|
// todo 允许拖拽
|
|
}else {
|
|
// todo 不允许拖拽
|
|
}
|
|
if (roam && roam !== 'move') {
|
|
// todo 允许移动
|
|
}else {
|
|
// todo 不允许允许移动
|
|
}
|
|
|
|
|
|
|
|
rendering = false
|
|
}
|
|
})
|
|
}.call(exports, __webpack_require__, exports, module),
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
|
|
|
|
|
|
/***/ }),
|
|
/* 6 */
|
|
/***/ (function(module, exports) {
|
|
|
|
function EchartsLayer(map) {
|
|
const mapContainer = map.getCanvasContainer();
|
|
this._container = document.createElement('div');
|
|
this._container.style.width = map.getCanvas().style.width;
|
|
this._container.style.height = map.getCanvas().style.height;
|
|
this._container.setAttribute('id', 'echarts');
|
|
this._container.setAttribute('class', 'echartMap');
|
|
this._map = map;
|
|
mapContainer.appendChild(this._container);
|
|
this.chart = echarts.init(this._container);
|
|
echarts.glMap = map;
|
|
this.resize();
|
|
}
|
|
EchartsLayer.prototype.remove = function() {
|
|
var _this = this;
|
|
this._map._listeners.move.forEach(function(element) {
|
|
if (element.name === 'moveHandler') {
|
|
_this._map.off('move', element);
|
|
}
|
|
});
|
|
this._map._listeners.move.forEach(function(element) {
|
|
if (element.name === 'zoomEndHandler') {
|
|
_this._map.off('zoomend', element);
|
|
}
|
|
});
|
|
|
|
// this._map.off('move', this._map._listeners.move[1]);
|
|
// this._map.off('zoomend', this._map._listeners.moveend[1]);
|
|
this.chart.clear();
|
|
if(this._container.parentNode)
|
|
this._container.parentNode.removeChild(this._container);
|
|
this._map = undefined;
|
|
};
|
|
EchartsLayer.prototype.resize = function() {
|
|
const me = this;
|
|
window.onresize = function() {
|
|
me._container.style.width = me._map.getCanvas().style.width;
|
|
me._container.style.height = me._map.getCanvas().style.height;
|
|
me.chart.resize();
|
|
};
|
|
};
|
|
module.exports = EchartsLayer;
|
|
|
|
|
|
/***/ })
|
|
/******/ ]);
|
|
}); |