AMapCoordSys.js
3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
var echarts = require('echarts');
function AMapCoordSys(amap, api) {
this._amap = amap;
this.dimensions = ['lng', 'lat'];
this._mapOffset = [0, 0];
this._api = api;
}
AMapCoordSys.prototype.dimensions = ['lng', 'lat'];
AMapCoordSys.prototype.setZoom = function (zoom) {
this._zoom = zoom;
};
AMapCoordSys.prototype.setCenter = function (center) {
this._center = this._amap.lnglatToPixel(center);//, 10)
};
AMapCoordSys.prototype.setMapOffset = function (mapOffset) {
this._mapOffset = mapOffset;
};
AMapCoordSys.prototype.getAMap = function () {
return this._amap;
};
AMapCoordSys.prototype.dataToPoint = function (data) {
var point = new AMap.LngLat(data[0], data[1]);
var px = this._amap.lngLatToContainer(point);//, this._zoom);
var mapOffset = this._mapOffset;
return [px.x - mapOffset[0], px.y - mapOffset[1]];
};
AMapCoordSys.prototype.pointToData = function (pt) {
var mapOffset = this._mapOffset;
var pt = this._amap.containerToLngLat({
x: pt[0] + mapOffset[0],
y: pt[1] + mapOffset[1]
});
return [pt.lng, pt.lat];
};
AMapCoordSys.prototype.getViewRect = function () {
var api = this._api;
return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
};
AMapCoordSys.prototype.getRoamTransform = function () {
return echarts.matrix.create();
};
var Overlay;
// For deciding which dimensions to use when creating list data
AMapCoordSys.dimensions = AMapCoordSys.prototype.dimensions;
AMapCoordSys.create = function (ecModel, api) {
var amapCoordSys;
var root = api.getDom();
// TODO Dispose
ecModel.eachComponent('amap', function (amapModel) {
var viewportRoot = api.getZr().painter.getViewportRoot();
if (typeof AMap === 'undefined') {
throw new Error('AMap api is not loaded');
}
if (amapCoordSys) {
throw new Error('Only one amap component can exist');
}
if (!amapModel.__amap) {
// Not support IE8
var amapRoot = root.querySelector('.ec-extension-amap');
if (amapRoot) {
// Reset viewport left and top, which will be changed
// in moving handler in AMapView
viewportRoot.style.left = '0px';
viewportRoot.style.top = '0px';
root.removeChild(amapRoot);
}
amapRoot = document.createElement('div');
amapRoot.style.cssText = 'width:100%;height:100%';
// Not support IE8
amapRoot.classList.add('ec-extension-amap');
root.appendChild(amapRoot);
var options = amapModel.get() || {};
options = amapModel.__options = echarts.util.clone(options);
var amap = amapModel.__amap = new AMap.Map(amapRoot, options);
var layer = amapModel.__layer = new AMap.CustomLayer(viewportRoot);
layer.setMap(amap);
}
var amap = amapModel.getAMap();
var layer = amapModel.getLayer();
layer.hide();
var zoom = amap.getZoom();
var center = amap.getCenter();
amapCoordSys = new AMapCoordSys(amap, api);
amapCoordSys.setMapOffset(amapModel.__mapOffset || [0, 0]);
amapCoordSys.setZoom(zoom);
amapCoordSys.setCenter([center.lng, center.lat]);
amapModel.coordinateSystem = amapCoordSys;
layer.show();
});
ecModel.eachSeries(function (seriesModel) {
if (seriesModel.get('coordinateSystem') === 'amap') {
seriesModel.coordinateSystem = amapCoordSys;
}
});
};
module.exports = AMapCoordSys;