UNPKG

@mapgis/webclient-es6-mapboxgl

Version:

106 lines (86 loc) 3.06 kB
import mapboxgl from '@mapgis/mapbox-gl'; import echarts from 'echarts'; export function MapCoordSys (MapboxGLMap, api) { this._MapboxGLMap = MapboxGLMap this.dimensions = ['lng', 'lat'] this._mapOffset = [0, 0] this._api = api } MapCoordSys.prototype.dimensions = ['lng', 'lat'] MapCoordSys.prototype.setMapOffset = function (mapOffset) { this._mapOffset = mapOffset } MapCoordSys.prototype.getBMap = function () { return this._MapboxGLMap } MapCoordSys.prototype.dataToPoint = function (data) { var px = this._MapboxGLMap.project(data) var mapOffset = this._mapOffset return [px.x - mapOffset[0], px.y - mapOffset[1]] } MapCoordSys.prototype.pointToData = function (pt) { var mapOffset = this._mapOffset var pt = this._MapboxGLMap.project( [ pt[0] + mapOffset[0], pt[1] + mapOffset[1]] ) return [pt.lng, pt.lat] } MapCoordSys.prototype.getViewRect = function () { var api = this._api return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight()) } MapCoordSys.prototype.getRoamTransform = function () { return echarts.matrix.create() } //https://github.com/apache/incubator-echarts/issues/6953 //https://github.com/apache/incubator-echarts/issues/7789 MapCoordSys.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: 'mapboxgl', 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 MapCoordSys.dimensions = MapCoordSys.prototype.dimensions MapCoordSys.create = function (ecModel, api) { var coordSys; ecModel.eachComponent('mapboxgl', function (GLMapModel) { var viewportRoot = api.getZr().painter.getViewportRoot() var MapboxGLMap = echarts.mapboxglMap; coordSys = new MapCoordSys(MapboxGLMap, api) coordSys.setMapOffset(GLMapModel.__mapOffset || [0, 0]) GLMapModel.coordinateSystem = coordSys }) ecModel.eachSeries(function (seriesModel) { if (seriesModel.get('coordinateSystem') === 'mapboxgl') { seriesModel.coordinateSystem = coordSys } }) } export default MapCoordSys;