123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- define([
- "dojo/_base/declare",
- "dojo/_base/lang",
- "esri/geometry/Point",
- "esri/geometry/SpatialReference"
- ], function (declare, lang, n, SpatialReference) {
- return declare("EchartsglLayer", null, {
- name: "EchartsglLayer",
- view: null,
- box: null,
- chart: null,
- chartOption: null,
- visible: true,
- constructor: function (view, option) {
- //如果在服务器上使用该代码 可以将echart对象传入到option中
- echarts.registerCoordinateSystem('arcgis', this.getE3CoordinateSystem(view));
- this.init(view, option);
- },
- init: function (view, option) {
- this.setBaseMap(view);
- this.createLayer();
- //this.setChartOption(option);
- },
- setBaseMap: function (view) {
- this.view = view;
- },
- setChartOption: function (option) {
- this.chartOption = option;
- this.setCharts();
- },
- setVisible: function (bool) {
- if (!this.box || this.visible === bool) return;
- this.box.hidden = !bool;
- this.visible = bool;
- bool === true && setCharts();
- },
- refreshBegin: function () {
- this.box.hidden = true;
- },
- refreshing: function () {
- setCharts();
- },
- refreshEnd: function () {
- this.box.hidden = false;
- },
- on: function (eventName, handler, context) {
- this.chart.on(eventName, handler, context);
- },
- off: function (eventName, handler, context) {
- this.chart.off(eventName, handler, context);
- },
- map_DragStart_Listener: null,
- map_DragEnd_Listener: null,
- map_ZoomStart_Listener: null,
- map_ZoomEnd_Listener: null,
- map_ExtentChange_Listener: null,
- map_click_Listener: null,
- setCharts: function () {
- if (!this.visible) return;
- if (this.chartOption == null || this.chartOption == 'undefined') return;
- let baseExtent = this.view.extent;
- //判断是否使用了mark类型标签,每次重绘要重新转换地理坐标到屏幕坐标
- //根据地图extent,重绘echarts
- this.chartOption.xAxis = { show: false, min: baseExtent.xmin, max: baseExtent.xmax };
- this.chartOption.yAxis = { show: false, min: baseExtent.ymin, max: baseExtent.ymax };
- this.chart.setOption(this.chartOption);
- this.chartOption.animation = false;
- },
- /*创建layer的容器,添加到map的layers下面*/
- createLayer: function () {
- let box = this.box = document.createElement("div");
- box.setAttribute("id", "echartsData")
- box.setAttribute("name", "echartsData")
- box.style.width = this.view.width + 'px';
- box.style.height = this.view.height + 'px';
- box.style.position = "absolute";
- box.style.top = 0;
- box.style.left = 0;
- let parent = document.getElementsByClassName("esri-view-surface")[0];
- parent.appendChild(box);
- this.chart = echarts.init(box);
- //this.setCharts();
- this.startMapEventListeners();
- },
- /*销毁实例*/
- removeLayer: function () {
- this.box.outerHTML = "";
- this.view = null;
- this.box = null;
- this.originLyr = null;
- this.features = null;
- this.screenData = [];
- this.chart = null;
- this.chartOption = null;
- if(this.map_DragStart_Listener)
- this.map_DragStart_Listener.remove();
- if(this.map_DragEnd_Listener)
- this.map_DragEnd_Listener.remove();
- if(this.map_ZoomStart_Listener)
- this.map_ZoomStart_Listener.remove();
- if(this.map_ZoomEnd_Listener)
- this.map_ZoomEnd_Listener.remove();
- if(this.map_ExtentChange_Listener)
- this.map_ExtentChange_Listener.remove();
- },
- /*监听地图事件,根据图层是否显示,判断是否重绘echarts*/
- startMapEventListeners: function () {
- let view = this.view;
- view.watch("extent", lang.hitch(this, function () {
- if (!this.visible) return;
- if(!this.chart) return;
- this.setCharts();
- this.chart.resize();
- this.box.hidden = false;
- }));
- view.watch("rotation", lang.hitch(this, function () {
- if (!this.visible) return;
- if(!this.chart) return;
- this.setCharts();
- this.chart.resize();
- this.box.hidden = false;
- }));
- },
- getE3CoordinateSystem: function (map) {
- var CoordSystem = function CoordSystem(map) {
- this.map = map;
- this._mapOffset = [0, 0];
- };
- CoordSystem.create = function (ecModel) {
- ecModel.eachSeries(function (seriesModel) {
- if (seriesModel.get('coordinateSystem') === 'arcgis') {
- seriesModel.coordinateSystem = new CoordSystem(map);
- }
- });
- };
- CoordSystem.getDimensionsInfo = function () {
- return ['x', 'y'];
- };
- CoordSystem.dimensions = ['x', 'y'];
- CoordSystem.prototype.dimensions = ['x', 'y'];
- CoordSystem.prototype.setMapOffset = function setMapOffset(mapOffset) {
- this._mapOffset = mapOffset;
- }
- CoordSystem.prototype.dataToPoint = function dataToPoint(data) {
- var point = {
- type: "point",
- x: data[0],
- y: data[1],
- spatialReference: new SpatialReference(3857)
- };
- var px = map.toScreen(point);
- var mapOffset = this._mapOffset;
- return [px.x - mapOffset[0], px.y - mapOffset[1]];
- }
- CoordSystem.prototype.pointToData = function pointToData(pt) {
- var mapOffset = this._mapOffset;
- var screentPoint = {
- x: pt[0] + mapOffset[0],
- y: pt[1] + mapOffset[1]
- };
- var data = map.toMap(screentPoint);
- return [data.x, data.y];
- };
- CoordSystem.prototype.getViewRect = function getViewRect() {
- return new graphic.BoundingRect(0, 0, this.map.width, this.map.height);
- };
- CoordSystem.prototype.getRoamTransform = function getRoamTransform() {
- return matrix.create();
- };
- return CoordSystem
- }
- });
- })
|