echarts 4.5.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/echarts-en.common.js +1790 -774
  2. package/dist/echarts-en.common.min.js +1 -1
  3. package/dist/echarts-en.js +2029 -849
  4. package/dist/echarts-en.js.map +1 -1
  5. package/dist/echarts-en.min.js +1 -1
  6. package/dist/echarts-en.simple.js +1676 -691
  7. package/dist/echarts-en.simple.min.js +1 -1
  8. package/dist/echarts.common.js +1790 -774
  9. package/dist/echarts.common.min.js +1 -1
  10. package/dist/echarts.js +2029 -849
  11. package/dist/echarts.js.map +1 -1
  12. package/dist/echarts.min.js +1 -1
  13. package/dist/echarts.simple.js +1676 -691
  14. package/dist/echarts.simple.min.js +1 -1
  15. package/lib/chart/bar/BarView.js +11 -1
  16. package/lib/chart/bar/BaseBarSeries.js +3 -1
  17. package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
  18. package/lib/chart/funnel/FunnelSeries.js +15 -5
  19. package/lib/chart/gauge/GaugeSeries.js +0 -2
  20. package/lib/chart/graph/GraphSeries.js +9 -4
  21. package/lib/chart/graph/GraphView.js +28 -8
  22. package/lib/chart/heatmap/HeatmapView.js +4 -4
  23. package/lib/chart/helper/createListFromArray.js +14 -8
  24. package/lib/chart/helper/whiskerBoxCommon.js +22 -16
  25. package/lib/chart/line/LineSeries.js +3 -1
  26. package/lib/chart/line/LineView.js +8 -2
  27. package/lib/chart/map/MapSeries.js +8 -1
  28. package/lib/chart/pie/PieSeries.js +27 -6
  29. package/lib/chart/pie/PieView.js +1 -1
  30. package/lib/chart/pie/labelLayout.js +102 -19
  31. package/lib/chart/pie/pieLayout.js +19 -7
  32. package/lib/chart/radar/RadarSeries.js +3 -3
  33. package/lib/chart/sankey/SankeyView.js +28 -9
  34. package/lib/chart/scatter/ScatterSeries.js +3 -1
  35. package/lib/chart/themeRiver/ThemeRiverSeries.js +3 -3
  36. package/lib/chart/tree/TreeSeries.js +15 -1
  37. package/lib/component/axis/AngleAxisView.js +64 -7
  38. package/lib/component/axis/AxisBuilder.js +63 -24
  39. package/lib/component/axis/CartesianAxisView.js +55 -11
  40. package/lib/component/axis/RadiusAxisView.js +36 -4
  41. package/lib/component/dataZoom/SliderZoomView.js +4 -10
  42. package/lib/component/helper/BrushController.js +33 -43
  43. package/lib/component/legend/LegendModel.js +3 -3
  44. package/lib/component/legend/LegendView.js +17 -13
  45. package/lib/component/toolbox/ToolboxView.js +5 -1
  46. package/lib/component/toolbox/feature/MagicType.js +19 -14
  47. package/lib/coord/Axis.js +30 -2
  48. package/lib/coord/axisDefault.js +21 -2
  49. package/lib/data/DataDimensionInfo.js +157 -0
  50. package/lib/data/List.js +25 -19
  51. package/lib/data/Tree.js +2 -1
  52. package/lib/data/helper/completeDimensions.js +43 -32
  53. package/lib/data/helper/createDimensions.js +2 -0
  54. package/lib/data/helper/sourceHelper.js +214 -114
  55. package/lib/echarts.js +2 -2
  56. package/lib/layout/barGrid.js +2 -3
  57. package/lib/model/Series.js +3 -3
  58. package/lib/model/referHelper.js +40 -12
  59. package/lib/scale/Interval.js +87 -2
  60. package/lib/scale/Log.js +9 -2
  61. package/lib/scale/helper.js +1 -43
  62. package/lib/theme/dark.js +3 -0
  63. package/lib/util/graphic.js +1 -2
  64. package/lib/visual/LegendVisualProvider.js +75 -0
  65. package/lib/visual/dataColor.js +2 -12
  66. package/lib/visual/seriesColor.js +15 -7
  67. package/map/json/province/tianjin.json +1 -1
  68. package/package.json +3 -2
  69. package/src/chart/bar/BarView.js +12 -2
  70. package/src/chart/bar/BaseBarSeries.js +1 -1
  71. package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
  72. package/src/chart/funnel/FunnelSeries.js +11 -4
  73. package/src/chart/gauge/GaugeSeries.js +0 -1
  74. package/src/chart/graph/GraphSeries.js +8 -3
  75. package/src/chart/graph/GraphView.js +26 -8
  76. package/src/chart/heatmap/HeatmapView.js +4 -4
  77. package/src/chart/helper/createListFromArray.js +13 -8
  78. package/src/chart/helper/whiskerBoxCommon.js +21 -16
  79. package/src/chart/line/LineSeries.js +1 -1
  80. package/src/chart/line/LineView.js +6 -1
  81. package/src/chart/map/MapSeries.js +5 -1
  82. package/src/chart/pie/PieSeries.js +26 -5
  83. package/src/chart/pie/PieView.js +1 -1
  84. package/src/chart/pie/labelLayout.js +114 -22
  85. package/src/chart/pie/pieLayout.js +20 -7
  86. package/src/chart/radar/RadarSeries.js +5 -3
  87. package/src/chart/sankey/SankeyView.js +26 -9
  88. package/src/chart/scatter/ScatterSeries.js +1 -1
  89. package/src/chart/themeRiver/ThemeRiverSeries.js +4 -3
  90. package/src/chart/tree/TreeSeries.js +12 -1
  91. package/src/component/axis/AngleAxisView.js +75 -7
  92. package/src/component/axis/AxisBuilder.js +78 -33
  93. package/src/component/axis/CartesianAxisView.js +58 -11
  94. package/src/component/axis/RadiusAxisView.js +37 -4
  95. package/src/component/dataZoom/SliderZoomView.js +4 -9
  96. package/src/component/helper/BrushController.js +40 -47
  97. package/src/component/legend/LegendModel.js +3 -3
  98. package/src/component/legend/LegendView.js +18 -12
  99. package/src/component/toolbox/ToolboxView.js +5 -0
  100. package/src/component/toolbox/feature/MagicType.js +18 -13
  101. package/src/coord/Axis.js +29 -2
  102. package/src/coord/axisDefault.js +25 -1
  103. package/src/data/DataDimensionInfo.js +135 -0
  104. package/src/data/List.js +29 -16
  105. package/src/data/Tree.js +3 -1
  106. package/src/data/helper/completeDimensions.js +49 -30
  107. package/src/data/helper/createDimensions.js +2 -0
  108. package/src/data/helper/sourceHelper.js +216 -124
  109. package/src/echarts.js +2 -2
  110. package/src/layout/barGrid.js +6 -3
  111. package/src/model/Series.js +3 -3
  112. package/src/model/referHelper.js +34 -11
  113. package/src/scale/Interval.js +84 -4
  114. package/src/scale/Log.js +9 -2
  115. package/src/scale/helper.js +1 -39
  116. package/src/theme/dark.js +3 -0
  117. package/src/util/graphic.js +1 -2
  118. package/src/visual/LegendVisualProvider.js +55 -0
  119. package/src/visual/dataColor.js +0 -13
  120. package/src/visual/seriesColor.js +13 -7
  121. package/theme/azul.js +163 -0
  122. package/theme/bee-inspired.js +178 -0
  123. package/theme/blue.js +178 -0
  124. package/theme/caravan.js +178 -0
  125. package/theme/carp.js +163 -0
  126. package/theme/cool.js +180 -0
  127. package/theme/dark-blue.js +168 -0
  128. package/theme/dark-bold.js +168 -0
  129. package/theme/dark-digerati.js +168 -0
  130. package/theme/dark-fresh-cut.js +168 -0
  131. package/theme/dark-mushroom.js +168 -0
  132. package/theme/dark.js +69 -62
  133. package/theme/eduardo.js +178 -0
  134. package/theme/forest.js +163 -0
  135. package/theme/fresh-cut.js +163 -0
  136. package/theme/fruit.js +178 -0
  137. package/theme/gray.js +220 -0
  138. package/theme/green.js +222 -0
  139. package/theme/helianthus.js +263 -0
  140. package/theme/infographic.js +72 -57
  141. package/theme/inspired.js +163 -0
  142. package/theme/jazz.js +163 -0
  143. package/theme/london.js +163 -0
  144. package/theme/macarons.js +80 -57
  145. package/theme/macarons2.js +251 -0
  146. package/theme/mint.js +155 -0
  147. package/theme/red-velvet.js +163 -0
  148. package/theme/red.js +225 -0
  149. package/theme/roma.js +55 -22
  150. package/theme/royal.js +163 -0
  151. package/theme/sakura.js +140 -0
  152. package/theme/shine.js +52 -45
  153. package/theme/tech-blue.js +180 -0
  154. package/theme/vintage.js +37 -23
@@ -97,10 +97,95 @@ var IntervalScale = Scale.extend({
97
97
  },
98
98
 
99
99
  /**
100
+ * @param {boolean} [expandToNicedExtent=false] If expand the ticks to niced extent.
100
101
  * @return {Array.<number>}
101
102
  */
102
- getTicks: function () {
103
- return helper.intervalScaleGetTicks(this._interval, this._extent, this._niceExtent, this._intervalPrecision);
103
+ getTicks: function (expandToNicedExtent) {
104
+ var interval = this._interval;
105
+ var extent = this._extent;
106
+ var niceTickExtent = this._niceExtent;
107
+ var intervalPrecision = this._intervalPrecision;
108
+ var ticks = []; // If interval is 0, return [];
109
+
110
+ if (!interval) {
111
+ return ticks;
112
+ } // Consider this case: using dataZoom toolbox, zoom and zoom.
113
+
114
+
115
+ var safeLimit = 10000;
116
+
117
+ if (extent[0] < niceTickExtent[0]) {
118
+ if (expandToNicedExtent) {
119
+ ticks.push(roundNumber(niceTickExtent[0] - interval));
120
+ } else {
121
+ ticks.push(extent[0]);
122
+ }
123
+ }
124
+
125
+ var tick = niceTickExtent[0];
126
+
127
+ while (tick <= niceTickExtent[1]) {
128
+ ticks.push(tick); // Avoid rounding error
129
+
130
+ tick = roundNumber(tick + interval, intervalPrecision);
131
+
132
+ if (tick === ticks[ticks.length - 1]) {
133
+ // Consider out of safe float point, e.g.,
134
+ // -3711126.9907707 + 2e-10 === -3711126.9907707
135
+ break;
136
+ }
137
+
138
+ if (ticks.length > safeLimit) {
139
+ return [];
140
+ }
141
+ } // Consider this case: the last item of ticks is smaller
142
+ // than niceTickExtent[1] and niceTickExtent[1] === extent[1].
143
+
144
+
145
+ var lastNiceTick = ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1];
146
+
147
+ if (extent[1] > lastNiceTick) {
148
+ if (expandToNicedExtent) {
149
+ ticks.push(lastNiceTick + interval);
150
+ } else {
151
+ ticks.push(extent[1]);
152
+ }
153
+ }
154
+
155
+ return ticks;
156
+ },
157
+
158
+ /**
159
+ * @param {number} [splitNumber=5]
160
+ * @return {Array.<Array.<number>>}
161
+ */
162
+ getMinorTicks: function (splitNumber) {
163
+ var ticks = this.getTicks(true);
164
+ var minorTicks = [];
165
+ var extent = this.getExtent();
166
+
167
+ for (var i = 1; i < ticks.length; i++) {
168
+ var nextTick = ticks[i];
169
+ var prevTick = ticks[i - 1];
170
+ var count = 0;
171
+ var minorTicksGroup = [];
172
+ var interval = nextTick - prevTick;
173
+ var minorInterval = interval / splitNumber;
174
+
175
+ while (count < splitNumber - 1) {
176
+ var minorTick = numberUtil.round(prevTick + (count + 1) * minorInterval); // For the first and last interval. The count may be less than splitNumber.
177
+
178
+ if (minorTick > extent[0] && minorTick < extent[1]) {
179
+ minorTicksGroup.push(minorTick);
180
+ }
181
+
182
+ count++;
183
+ }
184
+
185
+ minorTicks.push(minorTicksGroup);
186
+ }
187
+
188
+ return minorTicks;
104
189
  },
105
190
 
106
191
  /**
package/lib/scale/Log.js CHANGED
@@ -67,13 +67,14 @@ var LogScale = Scale.extend({
67
67
  },
68
68
 
69
69
  /**
70
+ * @param {boolean} [expandToNicedExtent=false] If expand the ticks to niced extent.
70
71
  * @return {Array.<number>}
71
72
  */
72
- getTicks: function () {
73
+ getTicks: function (expandToNicedExtent) {
73
74
  var originalScale = this._originalScale;
74
75
  var extent = this._extent;
75
76
  var originalExtent = originalScale.getExtent();
76
- return zrUtil.map(intervalScaleProto.getTicks.call(this), function (val) {
77
+ return zrUtil.map(intervalScaleProto.getTicks.call(this, expandToNicedExtent), function (val) {
77
78
  var powVal = numberUtil.round(mathPow(this.base, val)); // Fix #4158
78
79
 
79
80
  powVal = val === extent[0] && originalScale.__fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal;
@@ -82,6 +83,12 @@ var LogScale = Scale.extend({
82
83
  }, this);
83
84
  },
84
85
 
86
+ /**
87
+ * @param {number} splitNumber
88
+ * @return {Array.<Array.<number>>}
89
+ */
90
+ getMinorTicks: intervalScaleProto.getMinorTicks,
91
+
85
92
  /**
86
93
  * @param {number} val
87
94
  * @return {string}
@@ -99,48 +99,6 @@ function fixExtent(niceTickExtent, extent) {
99
99
  }
100
100
  }
101
101
 
102
- function intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision) {
103
- var ticks = []; // If interval is 0, return [];
104
-
105
- if (!interval) {
106
- return ticks;
107
- } // Consider this case: using dataZoom toolbox, zoom and zoom.
108
-
109
-
110
- var safeLimit = 10000;
111
-
112
- if (extent[0] < niceTickExtent[0]) {
113
- ticks.push(extent[0]);
114
- }
115
-
116
- var tick = niceTickExtent[0];
117
-
118
- while (tick <= niceTickExtent[1]) {
119
- ticks.push(tick); // Avoid rounding error
120
-
121
- tick = roundNumber(tick + interval, intervalPrecision);
122
-
123
- if (tick === ticks[ticks.length - 1]) {
124
- // Consider out of safe float point, e.g.,
125
- // -3711126.9907707 + 2e-10 === -3711126.9907707
126
- break;
127
- }
128
-
129
- if (ticks.length > safeLimit) {
130
- return [];
131
- }
132
- } // Consider this case: the last item of ticks is smaller
133
- // than niceTickExtent[1] and niceTickExtent[1] === extent[1].
134
-
135
-
136
- if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) {
137
- ticks.push(extent[1]);
138
- }
139
-
140
- return ticks;
141
- }
142
-
143
102
  exports.intervalScaleNiceTicks = intervalScaleNiceTicks;
144
103
  exports.getIntervalPrecision = getIntervalPrecision;
145
- exports.fixExtent = fixExtent;
146
- exports.intervalScaleGetTicks = intervalScaleGetTicks;
104
+ exports.fixExtent = fixExtent;
package/lib/theme/dark.js CHANGED
@@ -80,6 +80,9 @@ var theme = {
80
80
  },
81
81
  crossStyle: {
82
82
  color: contrastColor
83
+ },
84
+ label: {
85
+ color: '#000'
83
86
  }
84
87
  }
85
88
  },
@@ -1125,8 +1125,7 @@ function rollbackDefaultTextStyle(style) {
1125
1125
  }
1126
1126
 
1127
1127
  function getFont(opt, ecModel) {
1128
- // ecModel or default text style model.
1129
- var gTextStyleModel = ecModel || ecModel.getModel('textStyle');
1128
+ var gTextStyleModel = ecModel && ecModel.getModel('textStyle');
1130
1129
  return zrUtil.trim([// FIXME in node-canvas fontWeight is before fontStyle
1131
1130
  opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' '));
1132
1131
  }
@@ -0,0 +1,75 @@
1
+
2
+ /*
3
+ * Licensed to the Apache Software Foundation (ASF) under one
4
+ * or more contributor license agreements. See the NOTICE file
5
+ * distributed with this work for additional information
6
+ * regarding copyright ownership. The ASF licenses this file
7
+ * to you under the Apache License, Version 2.0 (the
8
+ * "License"); you may not use this file except in compliance
9
+ * with the License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing,
14
+ * software distributed under the License is distributed on an
15
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ * KIND, either express or implied. See the License for the
17
+ * specific language governing permissions and limitations
18
+ * under the License.
19
+ */
20
+
21
+ /*
22
+ * Licensed to the Apache Software Foundation (ASF) under one
23
+ * or more contributor license agreements. See the NOTICE file
24
+ * distributed with this work for additional information
25
+ * regarding copyright ownership. The ASF licenses this file
26
+ * to you under the Apache License, Version 2.0 (the
27
+ * "License"); you may not use this file except in compliance
28
+ * with the License. You may obtain a copy of the License at
29
+ *
30
+ * http://www.apache.org/licenses/LICENSE-2.0
31
+ *
32
+ * Unless required by applicable law or agreed to in writing,
33
+ * software distributed under the License is distributed on an
34
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
35
+ * KIND, either express or implied. See the License for the
36
+ * specific language governing permissions and limitations
37
+ * under the License.
38
+ */
39
+
40
+ /**
41
+ * LegendVisualProvider is an bridge that pick encoded color from data and
42
+ * provide to the legend component.
43
+ * @param {Function} getDataWithEncodedVisual Function to get data after filtered. It stores all the encoding info
44
+ * @param {Function} getRawData Function to get raw data before filtered.
45
+ */
46
+ function LegendVisualProvider(getDataWithEncodedVisual, getRawData) {
47
+ this.getAllNames = function () {
48
+ var rawData = getRawData(); // We find the name from the raw data. In case it's filtered by the legend component.
49
+ // Normally, the name can be found in rawData, but can't be found in filtered data will display as gray.
50
+
51
+ return rawData.mapArray(rawData.getName);
52
+ };
53
+
54
+ this.containName = function (name) {
55
+ var rawData = getRawData();
56
+ return rawData.indexOfName(name) >= 0;
57
+ };
58
+
59
+ this.indexOfName = function (name) {
60
+ // Only get data when necessary.
61
+ // Because LegendVisualProvider constructor may be new in the stage that data is not prepared yet.
62
+ // Invoking Series#getData immediately will throw an error.
63
+ var dataWithEncodedVisual = getDataWithEncodedVisual();
64
+ return dataWithEncodedVisual.indexOfName(name);
65
+ };
66
+
67
+ this.getItemVisual = function (dataIndex, key) {
68
+ // Get encoded visual properties from final filtered data.
69
+ var dataWithEncodedVisual = getDataWithEncodedVisual();
70
+ return dataWithEncodedVisual.getItemVisual(dataIndex, key);
71
+ };
72
+ }
73
+
74
+ var _default = LegendVisualProvider;
75
+ module.exports = _default;
@@ -76,29 +76,19 @@ function _default(seriesType) {
76
76
  }
77
77
 
78
78
  if (!singleDataColor) {
79
- var color = itemModel.get('itemStyle.color') || seriesModel.getColorFromPalette(dataAll.getName(rawIdx) || rawIdx + '', seriesModel.__paletteScope, dataAll.count()); // Legend may use the visual info in data before processed
80
-
81
- dataAll.setItemVisual(rawIdx, 'color', color); // Data is not filtered
79
+ var color = itemModel.get('itemStyle.color') || seriesModel.getColorFromPalette(dataAll.getName(rawIdx) || rawIdx + '', seriesModel.__paletteScope, dataAll.count()); // Data is not filtered
82
80
 
83
81
  if (filteredIdx != null) {
84
82
  data.setItemVisual(filteredIdx, 'color', color);
85
83
  }
86
- } else {
87
- // Set data all color for legend
88
- dataAll.setItemVisual(rawIdx, 'color', singleDataColor);
89
84
  }
90
85
 
91
86
  if (!singleDataBorderColor) {
92
- var borderColor = itemModel.get('itemStyle.borderColor'); // Legend may use the visual info in data before processed
93
-
94
- dataAll.setItemVisual(rawIdx, 'borderColor', borderColor); // Data is not filtered
87
+ var borderColor = itemModel.get('itemStyle.borderColor'); // Data is not filtered
95
88
 
96
89
  if (filteredIdx != null) {
97
90
  data.setItemVisual(filteredIdx, 'borderColor', borderColor);
98
91
  }
99
- } else {
100
- // Set data all borderColor for legend
101
- dataAll.setItemVisual(rawIdx, 'borderColor', singleDataBorderColor);
102
92
  }
103
93
  });
104
94
  }
@@ -20,6 +20,10 @@
20
20
 
21
21
  var Gradient = require("zrender/lib/graphic/Gradient");
22
22
 
23
+ var _util = require("zrender/lib/core/util");
24
+
25
+ var isFunction = _util.isFunction;
26
+
23
27
  /*
24
28
  * Licensed to the Apache Software Foundation (ASF) under one
25
29
  * or more contributor license agreements. See the NOTICE file
@@ -43,11 +47,15 @@ var _default = {
43
47
  performRawSeries: true,
44
48
  reset: function (seriesModel, ecModel) {
45
49
  var data = seriesModel.getData();
46
- var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.color').split('.');
47
- var color = seriesModel.get(colorAccessPath) // Set in itemStyle
48
- || seriesModel.getColorFromPalette( // TODO series count changed.
49
- seriesModel.name, null, ecModel.getSeriesCount()); // Default color
50
- // FIXME Set color function or use the platte color
50
+ var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.color').split('.'); // Set in itemStyle
51
+
52
+ var color = seriesModel.get(colorAccessPath);
53
+ var colorCallback = isFunction(color) && !(color instanceof Gradient) ? color : null; // Default color
54
+
55
+ if (!color || colorCallback) {
56
+ color = seriesModel.getColorFromPalette( // TODO series count changed.
57
+ seriesModel.name, null, ecModel.getSeriesCount());
58
+ }
51
59
 
52
60
  data.setVisual('color', color);
53
61
  var borderColorAccessPath = (seriesModel.visualBorderColorAccessPath || 'itemStyle.borderColor').split('.');
@@ -55,9 +63,9 @@ var _default = {
55
63
  data.setVisual('borderColor', borderColor); // Only visible series has each data be visual encoded
56
64
 
57
65
  if (!ecModel.isSeriesFiltered(seriesModel)) {
58
- if (typeof color === 'function' && !(color instanceof Gradient)) {
66
+ if (colorCallback) {
59
67
  data.each(function (idx) {
60
- data.setItemVisual(idx, 'color', color(seriesModel.getDataParams(idx)));
68
+ data.setItemVisual(idx, 'color', colorCallback(seriesModel.getDataParams(idx)));
61
69
  });
62
70
  } // itemStyle in each data item
63
71
 
@@ -1 +1 @@
1
- {"type":"FeatureCollection","features":[{"id":"120101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BhB`R@DA@CD@DCFCHBLDF@DABKFIJGQG@COEQM@@OASB"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.195907,39.118327],"name":"和平区","childNum":1}},{"id":"120102","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@XFFIE@BGGA@KVBN_]CCCLg†MGE@CD@AGB@AEGMEACB@BA@BFWFACKA@DA@@DA@C@CCCDGIAKMBWLGFERWT]bADCNE@DDIDEFBHTHBD@DLMPJj@ARX@"],"encodeOffsets":[[120075,40099]]},"properties":{"cp":[117.226568,39.122125],"name":"河东区","childNum":1}},{"id":"120103","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@TAPB@@RNPF@DRHPSXSFQHEXK‚E@CMIFUQA@DC@CCA@CDE@CEE@FOc@@D{@ch]IGFCFE`A\\"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.217536,39.101897],"name":"河西区","childNum":1}},{"id":"120104","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@C@@DCBQ@AcAmBOFaDEHEgKID]ZQTINCJEdkhHDRNCB@FD@BAFDFHB@JIDANFDECCZCBA\\B@Hd@LB@CAU"],"encodeOffsets":[[120007,40074]]},"properties":{"cp":[117.164143,39.120474],"name":"南开区","childNum":1}},{"id":"120105","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FBBAJBFDJK\\NFEFBLKBBBATP`]QOLB@AHBBEJ@DDDE@QW@BQi@OIKN@CACQECG@CFCJCCCMCGAEDCFBT@DSTQN@BFDBDCJBJAHKAIFDDXDAB"],"encodeOffsets":[[119993,40130]]},"properties":{"cp":[117.201569,39.156632],"name":"河北区","childNum":1}},{"id":"120106","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@JELBBGAIDIACEC@ARMTSKAc@@G[AABYDDDCFMECBIJC@CPHZ@LHNFFNHBCDAZBB@DEJE"],"encodeOffsets":[[119980,40125]]},"properties":{"cp":[117.163301,39.175066],"name":"红桥区","childNum":1}},{"id":"120110","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CK@QOCEAEK@KAAKAKEoRECIYK{\\Af@BMb@@WAGBC@GV@KYBUkB@@OD@AEUE@IQDAGSJEDFD@CIDAAKDE@KECOKKEABMVMRGBSGE@KDCDADDN@FCHCBGAIGUKUEcB]JULINIZGD[AU@QDMDGFQR_NODiBcDBLHJDCDDF@@CB@@CLBBDXEAEB@@ADAFBHNBFA@BHC@@DHF…NKhDD^DM`UA@LHBAHF@EJWE@RCFCCI@AFGA@BKARP_^ZXZL\\JfHNHEdEAAFBBQCAFPHRGtMBEB@NB^Cb@lECFHDPD@DNBJCFE@CEG@GTCPHBF`@JFBCHJJKRCP@JGTIAQGIDAPAVH@GCEKEEBAAVEBDADPFBBCFBBHE@WHClQPCFBTARE"],"encodeOffsets":[[120391,40118]]},"properties":{"cp":[117.313967,39.087764],"name":"东丽区","childNum":1}},{"id":"120111","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CGECABC@@EDAQMGClgD]DM^c^YHCF@‚VrwJBBINBHAFAHBDAN@LDDGCCA@AC@AACBAAEFKA@KDCCJCJDFGF@DCBGDQJERFHGMCLEAAGAFGMMAWE@BHQLKIBAJECCCAAGQW[DAAjS@AIYXKGGƒT@NBFEBABOJBDMFADGG@BGH@@AACFKGCG@FMWMDABCBAACLCIGCAE@[P¥\\]N¯˜MNORU^Ž]XKF`_XIIAIkDDZF@@FMDJLmTSDaHgDBJE@@DOBDH[HFJCBCGCBIMKH[L@AAAADUBACECGHWKCHTHBHaJDLF@JNF@FNLAH\\FABPD@EF@@HELCHVF@GXBB@DJBI\\PB@BN@BHK@GBAJ\\F@AACLABBAB@DFHB@FFJCDL@BA@@DF@JEBKHB@CjHBENDH@HSFBDKEAFG\\H@DE@AF@HHBANH@BQ@CBGNFT@`LFABIN@ALDBCFRHFB`D`ANANCG[DM"],"encodeOffsets":[[119940,40092]]},"properties":{"cp":[117.012247,39.139446],"name":"西青区","childNum":1}},{"id":"120112","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ZAZEVKXSPGVEnDHCJYJMVKNEPCdAZHRJJHHBDADG@ECMBCDCLCF@THHANQPWD@DBXRJ@HAJERSJAJBDCEOCAKYBQCA@GBCDSGAGBIHSNA@KCQMCF]IN‡aCuOSGU{zm_yENH@HDELBD@BG@AHH@CHEBCNIAAPABEFMAS@„HHWLJZ@BiTBB\\CRXBHDBDDIFABLJRKAGF@BXNNEHHBBBKFNDGHQEIFCRAHCDE@EHICIDDDLCB@ELBFABBD@BBDB@DDCHKCM@CBGAEBGBMAAJIAMP|@@Cd@EPF@DFF@DCB@DDD@@CRBEVNJ@D"],"encodeOffsets":[[120108,40016]]},"properties":{"cp":[117.382549,38.989577],"name":"津南区","childNum":1}},{"id":"120113","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@PQFFJICABACCDAKGJGLHRMVMMERKHH`WBFFCRFJHHIBOK_MC@QLCDIBAMA@COCGCDEkFa@]DMAA@AFsNQHOGBERDAABEFBFcMGeG[IQGGCmgABAAKLEAEF[MILECKA@BA@CABAWCCCIFEFYACBADICIIGM@KMDgDO@UCWIDECABKM@AJEB_KS@MEAH@DARG@BMGA@GBEF@@C[GEHFBCLEAGTG@MCAFgGA@@DGAALIFE@@CB@@ACKIDIGQJ@DHD@@GAAH@FDPbB@BDEJ@BBAFBNBHDBCDBDHBEJFBBDCFANA@AFTFFARPBNLABARA@DD@BB@HFA@PXBBLDACRKEAJF@GPD@AN@BjHCGZFJUN@BA^F@FIAAFNDCF@B\\LONADtJTAFBDCPBDGPETBADNDFFDFCD@LHBBKJFALIA@DB@@BNFBGHBBEN@@DHD@FFBDAH@AHBBCLDBF@@HFBBGJ@BBAFfLLABCH@ADLFJENAHKLAFBDEH@AHBDJB@DB@B@AADEFCLBNCDMDER@BKGA@ADEZDBELH"],"encodeOffsets":[[120140,40274]]},"properties":{"cp":[117.13482,39.225555],"name":"北辰区","childNum":1}},{"id":"120114","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DKEC^QZS^QwVMAAB@CCI@@CB@H@JCBCFEDBCFF@D@H@FALIXMBIECM@ADE@OABEPA@CBCD@HEDIGEC@AC@KJ@DCH@@DFADEDAFBFALGBMFABKGAAA@CAALEJOFAFIFEB@JKDEJBDCCAEAFI@IDIDINECABGBQBCFC@AOKIHED@EKG@JDFOH@EIEDEFOC@BCEACAACAEI@AAHUXC@GD@AMDED@BEF@BBHAKADID@BGCIBEIIGCAFOAGAEF@BHBALQ@CFCNMDKAEDCFBBC@@CIAACBGG@CFEAKBGLMBIFKEBCG@ADKBeKBEAAI@AHEA@GE@CADKAABGG@CBEA@EGC@CM@AFGAAHME@AA@@CJBBKIEALGA@KDCCEEEMCBCSAOFCHOACDEASBsIBCPM[K@ADEMCBEJB@E]EABM@IVYEDHiG@ABMC@HOE@BILFDQCBAKWA@OEB@GAAC@@CQBABKBAMQOEBSEBEB@BMDEACEAFIGAACDCCAAGAMBEAAI@CF@AaACO@EBGHB@@GC@CRICE@CBAAAKBBD@B[EBIHAL@AGM@@AOAJ[IA@CAAHWM@AHJ@G^G@AF@DA@@FEBBFcJqAEDECFFABBRCHBFEDDNAHA@@`@@CHG@AT`D@AH@@PBBCJDBFABGB@@BBAB@BIFBBDJ@@FE@DHKD@JA@@FGCCDE@AZFDM\\JBCZCRKA@FGA@JHB@FBBXFBCFB@BB@CRJ@DJ@HCTF@ADB@AHEAIFKACH@CA@CLA@FBAFB@@DH@CFE@ADIEKA@FAABIB@BCG@@CC@BAOMCJGG[C@BABG\\AAAD@FL@@DJBADHB@BA@ABOCCDC@@BC@ADB@ADA@AFL@@A\\D@FFBBEB@CLB@ELB@@BAB@DBB@DEA@DD@AFCACDBHJDALF@AFFBBCPB@DB@ABBBBBD@@DDBFB@DHBCHDBLEJNMF@DKCIFCFQCBAA@@AEBAA@@EA@DOICDGD@BB@ALDA@BYLKA@BBGGA@AMHEABCC@GNLE@NC@@DAAAFEAAJKBBBF@CB@BF@AFH@@BN@ADZF@DD@@DF@DCFBEBF@@JB@EDCPA@@FI@@BF@@DDCCTH@C@TD@BB@G^FAGPECBGG@@BSAEDALG@AJA@AHC@ABC@@FEAAHB@@DB@BDF@AHHFA@DBABD@D@CBBBCBXH@DB@AFH@EHCACFCBCFA@CFDACL@BB@AFB@BCDBBA@BBBBCFBADE@B@@BCBBBD@ABE@ABAA@BLD@BHDBEGA@AD@CABEL@CJHBEHDBEJBBPDFCBEJDDBH@@FADHBMNIHFDEFFD@AJFADBBBAF@D@AHDBRDBD@RCBBJV@@BD@BDPBFEBBCDTHL@DAHBBCDBABTDCJJBGJNBAND@ADFBHE@DED@H@@@FH@X@BCBBBCB@DFZ@DMA@CFA@GMCADGAGBCNMAAIA@KXGCODOJMD@LJJC@C@KC@BCFAFDRDBAD@CD^F@DF@BFFA@FJB@DbEPEbElMTIZGAAFA@CJ@BE@@@FHA@EJA@CHBADBGPA@BG@AFBBVGHFL@BBABD@"],"encodeOffsets":[[119960,40574]]},"properties":{"cp":[117.057959,39.376925],"name":"武清区","childNum":1}},{"id":"120115","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@GBAAE@AFC@CFBNC@@HWDGVBBJ@BFBDDBFBADD@EPCFJF@FPGCE@ILH@FFCJGPL@BEDADARAHDBMFCJCJ@JEJFBDBCDIACFILA@EFEJEBIPKFBB@DBBHBALEBANKHEBEACBCFEB@CG@CDI@@LBDD@HFCJGFC@AD@DOBAFPBF@BCN@FDAJWNKJEBG@C@E@DECAEFADIDG@ADJ@DDA@BBUNx]RYT]RFDCLJBADDBGDBDHBFJJ@TBBHB@@DH@AFKBCB@HE@@BEA@D@@ADBHC@@AA@@DCB@DB@@FJ@@FD@@HH@E\\F@ADB@ARBBBFED@BD@@BCA@HD@AJE@@ACAAHDB@BH@AHCB@EAAADGB@BE@BBK@FLEBDDADA@BDNB@DJCBBIR@DBBDBFALDX@DHL@DJFA@BH@HHKJAB@DC@GFOHED@BCBAZE@ADE@AFGACEEDA@@AGAAVJ@IVB@@DB@@DHGJB@JpFBCFBEPPBBCNFBGHBPC@EHBFFRDRA^GD@JCFDJGHBLGFECCBGHBBCFBDCFB@EFGD@@BF@@DPALEDCECDEDABED@HCHJH@FDDEFDHENCLBDDDA@ERABEN@JEDDBACEJ@AINMRBJGAIDCZEJCLAFRTJHAHJHFD@@AEKBAFBRJGF@BPAFBHEDBFHBAFO@@NFH@BEFGHAD@BFBBJID@BFDBDEB@J@AGDCL@FBNIBBFJD@HKDCNDF@DAFGFCdE@A@AICBCJC@C@AGAEFC@@MIBAABC@CKA@CBANACAGC@ARBJG@GLGHCX@LENBNE@EDAFBHHD@DCDIIMLCBGN@@AIEBANEGKLEJDDAAGIKHKCIBECIECSF@GBKGCIDC@FKAAGCBOC@OB@MKGC@CHCAAEFUB@HDLPJDBCAIFGDARDHGBC@EIKDGB@N@PHJHBLHBNARQXGFG@GIGK@IDEFEAAC@EHILCP@JCDGCEOFCBGABCKCBSEEK@ADIGO@AEOCEDDBqNAAH]MKiIAW@@CA@GA@DIMA@CGAAD_EEH@FIA@HIAAHUEDOHAFIOSKGSEcDAEI@@CBCOEC@CDCFEBKEFIMEGEA@@BIA@ERFBDQCABADQDCCAHMJBDEMEADGAUCCC@CDA@CCCICGO@BDJG@CADGK@CCGFICCBKEEDGBCAAEKDAABGFE@ACABCAAeA@HM@GBYD@BE@@NABGB@CCAW@@ACAEF_BYECII@CG"],"encodeOffsets":[[120145,40295]]},"properties":{"cp":[117.308094,39.716965],"name":"宝坻区","childNum":1}},{"id":"120116","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@LCFBLCBDJC@CEIFHTCBJRF@FXPC@@lAAVLZU@@HADBH@Xa@ANe@[BL|J\\FBpQLFLBBB@LFLFBPD@RDLpMpGBPNREHE@@dVF@BJB@BD@@DFDLBDGHGDA^c\\@@cFDŠ@@jEBJZFLhrePFBEJGAENE@IVC@@RBLV@DPT@zJLHPFVDNECC@SACjQJBJCACIDMQhQD@tŽCD]LBHDBH@GLHNB@DQHBAFDHE@@DEBDFFAD@@BF@BBAB@BNFBEHCXDT@JGAGVEBEDCDB@BF@@DRC@BZ@PAP@BCFAJ@@B@BTC@DB@JEAAB@FB@ACAB@@CC@BCHOF@BADAAADCHBH@HECEB@BCHBDBBCFDBAACBAD@BBPGJF@@ABDB@BD@ABBDDAFCBC@CB@CCAKNECG@EF@@EzQBiAC@Ey@BUI@±]GaQaý¥Y_YeK]EaDqPmHcD{DK˜QBMMaKEUC_BOASY_YAYD—XSIaa¹JgCeOQ[@‘RUbK¶MPGJMA¯CUSQÓgOKMWEa³OqIGFG@EBEACIGCFK]EE@@DFD@B@BG@BHCFC@@EEAIHEACBC@BFCBQCaDFKACEBECADE@SSKMIKHQKHEJ@[UGCoO@d[CFSMIAIE@AH[A@DOA@AQKOEEBARGNI@G@BSgE@AOACJSKMVC@IXF@hJAFmKCHB@PVVFAHHB@JC@CH@BABD@ABMFC@@BSB@BAAAHG@JL@BBBWABHHB@N@BMBMAEEESMA@EA@@CCE@FC@AEQ@@GCAA@AJC@BEK@AAABSGA@@FEA@BCBC@@EC@@DK@LHBD@HCDBFCBABB@F@@FB@@DFJ@HB@BLADK@HBDBCBG@@DH@@F@DCJIB@JK@AJFBCLBHH@DCBJFF@PATBHB@ABDTbB@DaCAAE@@CAACAOF@HADE@@BICAFBHEBhTBPDBJCFCªvEFeVTROJVT`O„€FH®_\\OF@DBJHKDBDABADCB¶ˆn`|yHVPTŽvbDMˆ^JDERNLDB@TMJGHAHBCTAD@HDBARLZDBFPCDIAGBUVOFGB"],"encodeOffsets":[[120348,39943]]},"properties":{"cp":[117.654173,39.032846],"name":"滨海新区","childNum":1}},{"id":"120117","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ABCJKD@RNDL`APGJIGQEEDAE_XGGQLNFUNQNKGIHLHCBDDABDBIJEEORFFAFDJAHC@CJLBDHJ@DJZF`AFEDB@BX@DB@DHABA@MF@@AZCHAN@@GfBBBADDB@BEFAHBBLCBFDBHAFCLFDAJDHEDDL@CHDBH@CI@AHPJDDD@DCB@DDDVDHBBCNFCFIAGNDBCDCRABDBCREAQ‚@FJB@AB@HFNFEJLFFADEDCD@PFAD@DJ@BFdCTFLHPTEJGBCPVFBGJB@GJB@EFG`FBCHB@DNBCJB@@HDB@@BXjJNLGZ@DBBrMACFANDBFP@JHBCL@FFATLDADHBDAPEAC@EBIFIJGNJJ@JBJJHJHFSZA@BND@@LVB@BJ@AFDBBDEDILjTABlEHHTBvWVAPDHCDFL@LHHB`MFALDNC^M^GJIEKABEGACC@IMA@AOB@EACIGAAEBAECCBDAAAAADAAEFCBDB@ACB@AAAABEBAD@AG@ADFAEB@A@GKSCCgG@AEJA@AFO@ECCQEEEOBGYG@B—qGBKXBFKCYJKOIKNEASCeA_ECSBGFENEF@HDZ@FCBE`TEFB@EFHFFEECBCFDFADBDEUWCOGBAIECLG@CEIFA@CF@CGBEGACRA@GMHKG@CAAG^KDCsC@gRNRJCBDIDIAiRBD@TDDMFUCOEKGyIS@COU@AK@QD@JUF@FMHBFIEAfOgqEKIYFA@i‰@EC@d[@]dCBGHCHKAEC@CC@@AIA@AUE@cF@FGMQAOgF‰VSBEAODkRGD@XGFAADEAAOEBCACUFBBFALFDF@HUGOBCBHJBRSJIHO@QDILGIADIE_@AEOGSD@HFH@DEFID"],"encodeOffsets":[[120221,40183]]},"properties":{"cp":[117.82828,39.328886],"name":"宁河区","childNum":1}},{"id":"120118","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AHC@@FCA@DHB@JS@@DA@@H]BCTKfG@BHK@@FEAADJD@RJhNNI@@FQBBDCBQA@BBLMIBNFJADHHEBuK@IA@AKU@UDDH—KI@HAGAAC]@CDCA@MSAHPGBOEMEIA@EC@@DA@MBAASB@BCB@TE@@BBBBDAHCBDFABFNGBBFKBBFC@BDB@FPC@BPCPMACEoBE@AAC@@DcB_D@ECB@A@BA@B@@DC@@CA@@IE@AAG@BDK@EBABQA@JE@@HC@ABA@@BB@ADOA@DIAACA@NxQB@FIBHXHABFKBFLIDLPDTF@DNC@CAGB@FA@BJDXmBAœ[@@ˆD@@NL@BHB@H\\BTD@HRB@JF@FL@FHDNDABJDCDTD@DTA@@LF@BB@XGBADE@@B@B@DJXJ@XEDFHAFHCBBDBDJBBHTCAIGBAAGBEA@EC@BCB@@BBAC@@AB@@CD@@DB@@DJ@DDF@DAF@@CLABBF@@AB@BBJ@@IBBDBB@ACJBJDR@@HD@@GfBAFXBCLH@GTPFjKAGSGDGXLHGFDBDVABCBB@B\\KLGJNDADHDAEI\\GCGPA@CF@AIhCbGTCnSIKNC@EE@CYlCBJJJ`W~W\\M^W€V]^_°—VIEGƒ_PUSPISQfUFE©uEDIDCAAOgSFAAGBEJD@AF@BC@GPEDBBB@DF@BBbD@CaACSBAA@AGBS@OEEAICDG@AGDKEABIL@@IJADI@C@EG@@CH@DACAGAL@@OA@@GEI@CA@@EE@A@BADAAEDC@GACOKB@BMEB@ESEAABECAWBAECBBCC@CIBCS@@IWD"],"encodeOffsets":[[119909,39513]]},"properties":{"cp":[116.925304,38.935671],"name":"静海区","childNum":1}},{"id":"120119","type":"Feature","geometry":{"type":"Polygon","coordinates":[],"encodeOffsets":[]},"properties":{"cp":[117.407449,40.045342],"name":"蓟州区","childNum":0}}],"UTF8Encoding":true}
1
+ {"type":"FeatureCollection","features":[{"id":"120101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BhB`R@DA@CD@DCFCHBLDF@DABKFIJGQG@COEQM@@OASB"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.195907,39.118327],"name":"和平区","childNum":1}},{"id":"120102","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@XFFIE@BGGA@KVBN_]CCCLg†MGE@CD@AGB@AEGMEACB@BA@BFWFACKA@DA@@DA@C@CCCDGIAKMBWLGFERWT]bADCNE@DDIDEFBHTHBD@DLMPJj@ARX@"],"encodeOffsets":[[120075,40099]]},"properties":{"cp":[117.226568,39.122125],"name":"河东区","childNum":1}},{"id":"120103","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@TAPB@@RNPF@DRHPSXSFQHEXK‚E@CMIFUQA@DC@CCA@CDE@CEE@FOc@@D{@ch]IGFCFE`A\\"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.217536,39.101897],"name":"河西区","childNum":1}},{"id":"120104","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@C@@DCBQ@AcAmBOFaDEHEgKID]ZQTINCJEdkhHDRNCB@FD@BAFDFHB@JIDANFDECCZCBA\\B@Hd@LB@CAU"],"encodeOffsets":[[120007,40074]]},"properties":{"cp":[117.164143,39.120474],"name":"南开区","childNum":1}},{"id":"120105","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FBBAJBFDJK\\NFEFBLKBBBATP`]QOLB@AHBBEJ@DDDE@QW@BQi@OIKN@CACQECG@CFCJCCCMCGAEDCFBT@DSTQN@BFDBDCJBJAHKAIFDDXDAB"],"encodeOffsets":[[119993,40130]]},"properties":{"cp":[117.201569,39.156632],"name":"河北区","childNum":1}},{"id":"120106","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@JELBBGAIDIACEC@ARMTSKAc@@G[AABYDDDCFMECBIJC@CPHZ@LHNFFNHBCDAZBB@DEJE"],"encodeOffsets":[[119980,40125]]},"properties":{"cp":[117.163301,39.175066],"name":"红桥区","childNum":1}},{"id":"120110","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CK@QOCEAEK@KAAKAKEoRECIYK{\\Af@BMb@@WAGBC@GV@KYBUkB@@OD@AEUE@IQDAGSJEDFD@CIDAAKDE@KECOKKEABMVMRGBSGE@KDCDADDN@FCHCBGAIGUKUEcB]JULINIZGD[AU@QDMDGFQR_NODiBcDBLHJDCDDF@@CB@@CLBBDXEAEB@@ADAFBHNBFA@BHC@@DHF…NKhDD^DM`UA@LHBAHF@EJWE@RCFCCI@AFGA@BKARP_^ZXZL\\JfHNHEdEAAFBBQCAFPHRGtMBEB@NB^Cb@lECFHDPD@DNBJCFE@CEG@GTCPHBF`@JFBCHJJKRCP@JGTIAQGIDAPAVH@GCEKEEBAAVEBDADPFBBCFBBHE@WHClQPCFBTARE"],"encodeOffsets":[[120391,40118]]},"properties":{"cp":[117.313967,39.087764],"name":"东丽区","childNum":1}},{"id":"120111","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CGECABC@@EDAQMGClgD]DM^c^YHCF@‚VrwJBBINBHAFAHBDAN@LDDGCCA@AC@AACBAAEFKA@KDCCJCJDFGF@DCBGDQJERFHGMCLEAAGAFGMMAWE@BHQLKIBAJECCCAAGQW[DAAjS@AIYXKGGƒT@NBFEBABOJBDMFADGG@BGH@@AACFKGCG@FMWMDABCBAACLCIGCAE@[P¥\\]N¯˜MNORU^Ž]XKF`_XIIAIkDDZF@@FMDJLmTSDaHgDBJE@@DOBDH[HFJCBCGCBIMKH[L@AAAADUBACECGHWKCHTHBHaJDLF@JNF@FNLAH\\FABPD@EF@@HELCHVF@GXBB@DJBI\\PB@BN@BHK@GBAJ\\F@AACLABBAB@DFHB@FFJCDL@BA@@DF@JEBKHB@CjHBENDH@HSFBDKEAFG\\H@DE@AF@HHBANH@BQ@CBGNFT@`LFABIN@ALDBCFRHFB`D`ANANCG[DM"],"encodeOffsets":[[119940,40092]]},"properties":{"cp":[117.122247,39.029446],"name":"西青区","childNum":1}},{"id":"120112","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ZAZEVKXSPGVEnDHCJYJMVKNEPCdAZHRJJHHBDADG@ECMBCDCLCF@THHANQPWD@DBXRJ@HAJERSJAJBDCEOCAKYBQCA@GBCDSGAGBIHSNA@KCQMCF]IN‡aCuOSGU{zm_yENH@HDELBD@BG@AHH@CHEBCNIAAPABEFMAS@„HHWLJZ@BiTBB\\CRXBHDBDDIFABLJRKAGF@BXNNEHHBBBKFNDGHQEIFCRAHCDE@EHICIDDDLCB@ELBFABBD@BBDB@DDCHKCM@CBGAEBGBMAAJIAMP|@@Cd@EPF@DFF@DCB@DDD@@CRBEVNJ@D"],"encodeOffsets":[[120108,40016]]},"properties":{"cp":[117.382549,38.989577],"name":"津南区","childNum":1}},{"id":"120113","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@PQFFJICABACCDAKGJGLHRMVMMERKHH`WBFFCRFJHHIBOK_MC@QLCDIBAMA@COCGCDEkFa@]DMAA@AFsNQHOGBERDAABEFBFcMGeG[IQGGCmgABAAKLEAEF[MILECKA@BA@CABAWCCCIFEFYACBADICIIGM@KMDgDO@UCWIDECABKM@AJEB_KS@MEAH@DARG@BMGA@GBEF@@C[GEHFBCLEAGTG@MCAFgGA@@DGAALIFE@@CB@@ACKIDIGQJ@DHD@@GAAH@FDPbB@BDEJ@BBAFBNBHDBCDBDHBEJFBBDCFANA@AFTFFARPBNLABARA@DD@BB@HFA@PXBBLDACRKEAJF@GPD@AN@BjHCGZFJUN@BA^F@FIAAFNDCF@B\\LONADtJTAFBDCPBDGPETBADNDFFDFCD@LHBBKJFALIA@DB@@BNFBGHBBEN@@DHD@FFBDAH@AHBBCLDBF@@HFBBGJ@BBAFfLLABCH@ADLFJENAHKLAFBDEH@AHBDJB@DB@B@AADEFCLBNCDMDER@BKGA@ADEZDBELH"],"encodeOffsets":[[120140,40274]]},"properties":{"cp":[117.17482,39.255555],"name":"北辰区","childNum":1}},{"id":"120114","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DKEC^QZS^QwVMAAB@CCI@@CB@H@JCBCFEDBCFF@D@H@FALIXMBIECM@ADE@OABEPA@CBCD@HEDIGEC@AC@KJ@DCH@@DFADEDAFBFALGBMFABKGAAA@CAALEJOFAFIFEB@JKDEJBDCCAEAFI@IDIDINECABGBQBCFC@AOKIHED@EKG@JDFOH@EIEDEFOC@BCEACAACAEI@AAHUXC@GD@AMDED@BEF@BBHAKADID@BGCIBEIIGCAFOAGAEF@BHBALQ@CFCNMDKAEDCFBBC@@CIAACBGG@CFEAKBGLMBIFKEBCG@ADKBeKBEAAI@AHEA@GE@CADKAABGG@CBEA@EGC@CM@AFGAAHME@AA@@CJBBKIEALGA@KDCCEEEMCBCSAOFCHOACDEASBsIBCPM[K@ADEMCBEJB@E]EABM@IVYEDHiG@ABMC@HOE@BILFDQCBAKWA@OEB@GAAC@@CQBABKBAMQOEBSEBEB@BMDEACEAFIGAACDCCAAGAMBEAAI@CF@AaACO@EBGHB@@GC@CRICE@CBAAAKBBD@B[EBIHAL@AGM@@AOAJ[IA@CAAHWM@AHJ@G^G@AF@DA@@FEBBFcJqAEDECFFABBRCHBFEDDNAHA@@`@@CHG@AT`D@AH@@PBBCJDBFABGB@@BBAB@BIFBBDJ@@FE@DHKD@JA@@FGCCDE@AZFDM\\JBCZCRKA@FGA@JHB@FBBXFBCFB@BB@CRJ@DJ@HCTF@ADB@AHEAIFKACH@CA@CLA@FBAFB@@DH@CFE@ADIEKA@FAABIB@BCG@@CC@BAOMCJGG[C@BABG\\AAAD@FL@@DJBADHB@BA@ABOCCDC@@BC@ADB@ADA@AFL@@A\\D@FFBBEB@CLB@ELB@@BAB@DBB@DEA@DD@AFCACDBHJDALF@AFFBBCPB@DB@ABBBBBD@@DDBFB@DHBCHDBLEJNMF@DKCIFCFQCBAA@@AEBAA@@EA@DOICDGD@BB@ALDA@BYLKA@BBGGA@AMHEABCC@GNLE@NC@@DAAAFEAAJKBBBF@CB@BF@AFH@@BN@ADZF@DD@@DF@DCFBEBF@@JB@EDCPA@@FI@@BF@@DDCCTH@C@TD@BB@G^FAGPECBGG@@BSAEDALG@AJA@AHC@ABC@@FEAAHB@@DB@BDF@AHHFA@DBABD@D@CBBBCBXH@DB@AFH@EHCACFCBCFA@CFDACL@BB@AFB@BCDBBA@BBBBCFBADE@B@@BCBBBD@ABE@ABAA@BLD@BHDBEGA@AD@CABEL@CJHBEHDBEJBBPDFCBEJDDBH@@FADHBMNIHFDEFFD@AJFADBBBAF@D@AHDBRDBD@RCBBJV@@BD@BDPBFEBBCDTHL@DAHBBCDBABTDCJJBGJNBAND@ADFBHE@DED@H@@@FH@X@BCBBBCB@DFZ@DMA@CFA@GMCADGAGBCNMAAIA@KXGCODOJMD@LJJC@C@KC@BCFAFDRDBAD@CD^F@DF@BFFA@FJB@DbEPEbElMTIZGAAFA@CJ@BE@@@FHA@EJA@CHBADBGPA@BG@AFBBVGHFL@BBABD@"],"encodeOffsets":[[119960,40574]]},"properties":{"cp":[117.057959,39.466925],"name":"武清区","childNum":1}},{"id":"120115","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@GBAAE@AFC@CFBNC@@HWDGVBBJ@BFBDDBFBADD@EPCFJF@FPGCE@ILH@FFCJGPL@BEDADARAHDBMFCJCJ@JEJFBDBCDIACFILA@EFEJEBIPKFBB@DBBHBALEBANKHEBEACBCFEB@CG@CDI@@LBDD@HFCJGFC@AD@DOBAFPBF@BCN@FDAJWNKJEBG@C@E@DECAEFADIDG@ADJ@DDA@BBUNx]RYT]RFDCLJBADDBGDBDHBFJJ@TBBHB@@DH@AFKBCB@HE@@BEA@D@@ADBHC@@AA@@DCB@DB@@FJ@@FD@@HH@E\\F@ADB@ARBBBFED@BD@@BCA@HD@AJE@@ACAAHDB@BH@AHCB@EAAADGB@BE@BBK@FLEBDDADA@BDNB@DJCBBIR@DBBDBFALDX@DHL@DJFA@BH@HHKJAB@DC@GFOHED@BCBAZE@ADE@AFGACEEDA@@AGAAVJ@IVB@@DB@@DHGJB@JpFBCFBEPPBBCNFBGHBPC@EHBFFRDRA^GD@JCFDJGHBLGFECCBGHBBCFBDCFB@EFGD@@BF@@DPALEDCECDEDABED@HCHJH@FDDEFDHENCLBDDDA@ERABEN@JEDDBACEJ@AINMRBJGAIDCZEJCLAFRTJHAHJHFD@@AEKBAFBRJGF@BPAFBHEDBFHBAFO@@NFH@BEFGHAD@BFBBJID@BFDBDEB@J@AGDCL@FBNIBBFJD@HKDCNDF@DAFGFCdE@A@AICBCJC@C@AGAEFC@@MIBAABC@CKA@CBANACAGC@ARBJG@GLGHCX@LENBNE@EDAFBHHD@DCDIIMLCBGN@@AIEBANEGKLEJDDAAGIKHKCIBECIECSF@GBKGCIDC@FKAAGCBOC@OB@MKGC@CHCAAEFUB@HDLPJDBCAIFGDARDHGBC@EIKDGB@N@PHJHBLHBNARQXGFG@GIGK@IDEFEAAC@EHILCP@JCDGCEOFCBGABCKCBSEEK@ADIGO@AEOCEDDBqNAAH]MKiIAW@@CA@GA@DIMA@CGAAD_EEH@FIA@HIAAHUEDOHAFIOSKGSEcDAEI@@CBCOEC@CDCFEBKEFIMEGEA@@BIA@ERFBDQCABADQDCCAHMJBDEMEADGAUCCC@CDA@CCCICGO@BDJG@CADGK@CCGFICCBKEEDGBCAAEKDAABGFE@ACABCAAeA@HM@GBYD@BE@@NABGB@CCAW@@ACAEF_BYECII@CG"],"encodeOffsets":[[120145,40295]]},"properties":{"cp":[117.428094,39.596965],"name":"宝坻区","childNum":1}},{"id":"120116","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@LCFBLCBDJC@CEIFHTCBJRF@FXPC@@lAAVLZU@@HADBH@Xa@ANe@[BL|J\\FBpQLFLBBB@LFLFBPD@RDLpMpGBPNREHE@@dVF@BJB@BD@@DFDLBDGHGDA^c\\@@cFDŠ@@jEBJZFLhrePFBEJGAENE@IVC@@RBLV@DPT@zJLHPFVDNECC@SACjQJBJCACIDMQhQD@tŽCD]LBHDBH@GLHNB@DQHBAFDHE@@DEBDFFAD@@BF@BBAB@BNFBEHCXDT@JGAGVEBEDCDB@BF@@DRC@BZ@PAP@BCFAJ@@B@BTC@DB@JEAAB@FB@ACAB@@CC@BCHOF@BADAAADCHBH@HECEB@BCHBDBBCFDBAACBAD@BBPGJF@@ABDB@BD@ABBDDAFCBC@CB@CCAKNECG@EF@@EzQBiAC@Ey@BUI@±]GaQaý¥Y_YeK]EaDqPmHcD{DK˜QBMMaKEUC_BOASY_YAYD—XSIaa¹JgCeOQ[@‘RUbK¶MPGJMA¯CUSQÓgOKMWEa³OqIGFG@EBEACIGCFK]EE@@DFD@B@BG@BHCFC@@EEAIHEACBC@BFCBQCaDFKACEBECADE@SSKMIKHQKHEJ@[UGCoO@d[CFSMIAIE@AH[A@DOA@AQKOEEBARGNI@G@BSgE@AOACJSKMVC@IXF@hJAFmKCHB@PVVFAHHB@JC@CH@BABD@ABMFC@@BSB@BAAAHG@JL@BBBWABHHB@N@BMBMAEEESMA@EA@@CCE@FC@AEQ@@GCAA@AJC@BEK@AAABSGA@@FEA@BCBC@@EC@@DK@LHBD@HCDBFCBABB@F@@FB@@DFJ@HB@BLADK@HBDBCBG@@DH@@F@DCJIB@JK@AJFBCLBHH@DCBJFF@PATBHB@ABDTbB@DaCAAE@@CAACAOF@HADE@@BICAFBHEBhTBPDBJCFCªvEFeVTROJVT`O„€FH®_\\OF@DBJHKDBDABADCB¶ˆn`|yHVPTŽvbDMˆ^JDERNLDB@TMJGHAHBCTAD@HDBARLZDBFPCDIAGBUVOFGB"],"encodeOffsets":[[120348,39943]]},"properties":{"cp":[117.654173,39.032846],"name":"滨海新区","childNum":1}},{"id":"120117","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ABCJKD@RNDL`APGJIGQEEDAE_XGGQLNFUNQNKGIHLHCBDDABDBIJEEORFFAFDJAHC@CJLBDHJ@DJZF`AFEDB@BX@DB@DHABA@MF@@AZCHAN@@GfBBBADDB@BEFAHBBLCBFDBHAFCLFDAJDHEDDL@CHDBH@CI@AHPJDDD@DCB@DDDVDHBBCNFCFIAGNDBCDCRABDBCREAQ‚@FJB@AB@HFNFEJLFFADEDCD@PFAD@DJ@BFdCTFLHPTEJGBCPVFBGJB@GJB@EFG`FBCHB@DNBCJB@@HDB@@BXjJNLGZ@DBBrMACFANDBFP@JHBCL@FFATLDADHBDAPEAC@EBIFIJGNJJ@JBJJHJHFSZA@BND@@LVB@BJ@AFDBBDEDILjTABlEHHTBvWVAPDHCDFL@LHHB`MFALDNC^M^GJIEKABEGACC@IMA@AOB@EACIGAAEBAECCBDAAAAADAAEFCBDB@ACB@AAAABEBAD@AG@ADFAEB@A@GKSCCgG@AEJA@AFO@ECCQEEEOBGYG@B—qGBKXBFKCYJKOIKNEASCeA_ECSBGFENEF@HDZ@FCBE`TEFB@EFHFFEECBCFDFADBDEUWCOGBAIECLG@CEIFA@CF@CGBEGACRA@GMHKG@CAAG^KDCsC@gRNRJCBDIDIAiRBD@TDDMFUCOEKGyIS@COU@AK@QD@JUF@FMHBFIEAfOgqEKIYFA@i‰@EC@d[@]dCBGHCHKAEC@CC@@AIA@AUE@cF@FGMQAOgF‰VSBEAODkRGD@XGFAADEAAOEBCACUFBBFALFDF@HUGOBCBHJBRSJIHO@QDILGIADIE_@AEOGSD@HFH@DEFID"],"encodeOffsets":[[120221,40183]]},"properties":{"cp":[117.63828,39.358886],"name":"宁河区","childNum":1}},{"id":"120118","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AHC@@FCA@DHB@JS@@DA@@H]BCTKfG@BHK@@FEAADJD@RJhNNI@@FQBBDCBQA@BBLMIBNFJADHHEBuK@IA@AKU@UDDH—KI@HAGAAC]@CDCA@MSAHPGBOEMEIA@EC@@DA@MBAASB@BCB@TE@@BBBBDAHCBDFABFNGBBFKBBFC@BDB@FPC@BPCPMACEoBE@AAC@@DcB_D@ECB@A@BA@B@@DC@@CA@@IE@AAG@BDK@EBABQA@JE@@HC@ABA@@BB@ADOA@DIAACA@NxQB@FIBHXHABFKBFLIDLPDTF@DNC@CAGB@FA@BJDXmBAœ[@@ˆD@@NL@BHB@H\\BTD@HRB@JF@FL@FHDNDABJDCDTD@DTA@@LF@BB@XGBADE@@B@B@DJXJ@XEDFHAFHCBBDBDJBBHTCAIGBAAGBEA@EC@BCB@@BBAC@@AB@@CD@@DB@@DJ@DDF@DAF@@CLABBF@@AB@BBJ@@IBBDBB@ACJBJDR@@HD@@GfBAFXBCLH@GTPFjKAGSGDGXLHGFDBDVABCBB@B\\KLGJNDADHDAEI\\GCGPA@CF@AIhCbGTCnSIKNC@EE@CYlCBJJJ`W~W\\M^W€V]^_°—VIEGƒ_PUSPISQfUFE©uEDIDCAAOgSFAAGBEJD@AF@BC@GPEDBBB@DF@BBbD@CaACSBAA@AGBS@OEEAICDG@AGDKEABIL@@IJADI@C@EG@@CH@DACAGAL@@OA@@GEI@CA@@EE@A@BADAAEDC@GACOKB@BMEB@ESEAABECAWBAECBBCC@CIBCS@@IWD"],"encodeOffsets":[[119909,39513]]},"properties":{"cp":[116.925304,38.935671],"name":"静海区","childNum":1}},{"id":"120119","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@AECDAACDA@AACDE@CF@JMJEHB@BPBJKBEBED@@DB@DC@CFBBAD@@GDCCAFGD@BABBBADBDBDGAEJCBCCE@C^GACDCDBAE@BA@BAC@BABMF@EAFC@@C@@AH@AAD@C@DACA@AMEAC@GECJID@@BBABA@BDB@AB@@BBB@DBBDBFADBBHD@BGD@@ABGD@@EF@CCBAA@@GF@BL@@@EFABB@@B@ACJADHEBF@ABBJDBH@BBFCHAD@BDB@DIBIBCDBCDFB@ED@@AH@AAFCH@JBFEXBBB@DB@H@DADA@ABADGI@BID@DET@BGD@BCD@BBBCACAIMGICGCKB@FA@@EAB@BCA@DAA@MB@AEAEEEBG@SZOBDAJHHFCDBBABFD@@MB@ARZ@@GB@@IDFFAFABAAEDAHA@CE@@CCAFCAEDA@EA@@@CCCA@CCA@CCEAGBAAEACDCKK@CGFKBA@CAKHIICEGBEFOHE@ICKBAFEF@DI@OJIBIAABI@@DA@@CKCEGG@OIMAIBACIAC@EBCAQ@ABCAACCAEAQDE@EDE@EFB@A@ABBDB@BC@DDB@HEAGDGFCB@DCDADI@@BE@@BABC@EAA@@AAACBGAAB@BI@EADCE@ECGDBFEDCAIBE@ABE@CICDCACFEA@ABABIFCDCBEB@DABIQMAIA@@GC@AKB@@ACCCCGDEKGDCEEBGKBM\\IGIB@AGCBCC@BABCEAFE@@AOADAAEF@@BF@FHAEBA@KBA@ECBBBCBACEB@CC@ACFAFSL@BBDEDiRUC@@ADAFEBGHBNQBHFCCEDGIABICCADE@ADAAC@@AD@@CF@@EB@@MBBD@@AB@@BD@FBRWFQ@ENAACC@ICK@@EBGACACIGCILC@CFAIOG@CCEBCCK@CDBHI@A@CFCAAEC@IJAAAEG@CBEHAFG@ME@@EPABEGCAGFEAOB@AHEQIEAABFL@BC@GEGIGBSIEQMBGDWDEFBJIHE@IAOLBLI@DFABCCIFM@AFQB@FCBCCKAMDGFECCFECG@GIGDC@AFCBCFFDCDKFOB@CE@@AC@EH@FEACDEAADGAAHDDQNGAGFC@CAIDC@CBCFE@ADHDCDDD@DH@BDOVAFGFO@AAAGA@KBCGA@OHE@IAAHG@ODEAE@MLA@CEE@ADBFEDCA@CAAM@CDPJ@DGDA@@ECCE@CHIDGEA@@FDFBHFHSNAFBDDBNFBD@FEBO@E@EPKB@DNBNDCDCJ@DHFD@FCFDADEHEDE@CDBDHEFFJFLBDFAF@HAB@BGDBBJED@F@B@DGD@FLBHCBBBALTD@BD@@DB@@JF@AFHB@DB@@PCHB@@HBDABCABDEJBJCDE@AD@NAD@DBRABDBEHEDBDCHDHDADABBFA@FBFTCBAF@FDDCFBJAHD@BEF@BIFCLGFDDHBCBBB@BED@LN@LCBDADHDBHNHDHHDHAHHHA@AD@@CJBNCDEBCHAFFAJFBBFD@DFDBH@FCD@DAB@@FLHDFBFBB@JJDDBBAHAJFFGD@DA@ENBDBJAJDFJD@BCBDBHK@@BDBDDA@G@DDJHBBD@BBEH@FIJ@DCB@DF@H@B@FCBB@BA@@BDB@DDAAADAC@ACF@@DBA@ABB@BDBBBF@D@FEDABBCHDCDBBAP@BBEDJDJHHA@DDBBBEBEFC@CDIG@BCBCAACG@@DA@BFBB@BA@E@AD@BAB@FFFBCAAJDFAFBKHC@AAC@AD@DE@BJCDBBA@F@DDL@LBAD@DABCDFDDF@BFBJA@EDABDDBB@AADBFHDABBAHCFFJD@DBDAF@D@DCD@HDBBFDBDLADBBAF@NGJ@FCDCLABEDBJ@DCBIHABAD@NCD@JGFBN@NDF@BAJBJ@DBF@NDD@@EB@DCD@BDTALGC@D@ACDCBCEIEAACAECCDAF@JGBAAIFC"],"encodeOffsets":[[120398,41158]]},"properties":{"cp":[117.407449,40.045342],"name":"蓟州区","childNum":1}}],"UTF8Encoding":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "echarts",
3
- "version": "4.5.0",
3
+ "version": "4.6.0",
4
4
  "description": "A powerful charting and visualization library for browser",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -19,6 +19,7 @@
19
19
  "help": "node build/build.js --help",
20
20
  "prepublish": "node build/build.js --prepublish",
21
21
  "test:visual": "node test/runTest/server.js",
22
+ "test:visual:report": "node test/runTest/genReport.js",
22
23
  "test": "node build/build.js",
23
24
  "mktest": "node test/build/mktest.js",
24
25
  "mktest:help": "node test/build/mktest.js -h",
@@ -26,7 +27,7 @@
26
27
  "lint:dist": "echo 'It might take a while. Please wait ...' && ./node_modules/.bin/jshint --config .jshintrc-dist dist/echarts.js"
27
28
  },
28
29
  "dependencies": {
29
- "zrender": "4.1.2"
30
+ "zrender": "4.2.0"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@babel/core": "7.3.4",
@@ -410,11 +410,18 @@ var getLayout = {
410
410
  }
411
411
  };
412
412
 
413
+ function isZeroOnPolar(layout) {
414
+ return layout.startAngle != null
415
+ && layout.endAngle != null
416
+ && layout.startAngle === layout.endAngle;
417
+ }
418
+
413
419
  function updateStyle(
414
420
  el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar
415
421
  ) {
416
422
  var color = data.getItemVisual(dataIndex, 'color');
417
423
  var opacity = data.getItemVisual(dataIndex, 'opacity');
424
+ var stroke = data.getVisual('borderColor');
418
425
  var itemStyleModel = itemModel.getModel('itemStyle');
419
426
  var hoverStyle = itemModel.getModel('emphasis.itemStyle').getBarItemStyle();
420
427
 
@@ -424,7 +431,8 @@ function updateStyle(
424
431
 
425
432
  el.useStyle(zrUtil.defaults(
426
433
  {
427
- fill: color,
434
+ stroke: isZeroOnPolar(layout) ? 'none' : stroke,
435
+ fill: isZeroOnPolar(layout) ? 'none' : color,
428
436
  opacity: opacity
429
437
  },
430
438
  itemStyleModel.getBarItemStyle()
@@ -443,7 +451,9 @@ function updateStyle(
443
451
  seriesModel, dataIndex, labelPositionOutside
444
452
  );
445
453
  }
446
-
454
+ if (isZeroOnPolar(layout)) {
455
+ hoverStyle.fill = hoverStyle.stroke = 'none';
456
+ }
447
457
  graphic.setHoverStyle(el, hoverStyle);
448
458
  }
449
459
 
@@ -25,7 +25,7 @@ export default SeriesModel.extend({
25
25
  type: 'series.__base_bar__',
26
26
 
27
27
  getInitialData: function (option, ecModel) {
28
- return createListFromArray(this.getSource(), this);
28
+ return createListFromArray(this.getSource(), this, {useEncodeDefaulter: true});
29
29
  },
30
30
 
31
31
  getMarkerPosition: function (value) {
@@ -27,7 +27,7 @@ export default SeriesModel.extend({
27
27
  dependencies: ['grid', 'polar'],
28
28
 
29
29
  getInitialData: function (option, ecModel) {
30
- return createListFromArray(this.getSource(), this);
30
+ return createListFromArray(this.getSource(), this, {useEncodeDefaulter: true});
31
31
  },
32
32
 
33
33
  brushSelector: 'point',
@@ -18,8 +18,12 @@
18
18
  */
19
19
 
20
20
  import * as echarts from '../../echarts';
21
+ import * as zrUtil from 'zrender/src/core/util';
21
22
  import createListSimply from '../helper/createListSimply';
22
23
  import {defaultEmphasis} from '../../util/model';
24
+ import {makeSeriesEncodeForNameBased} from '../../data/helper/sourceHelper';
25
+ import LegendVisualProvider from '../../visual/LegendVisualProvider';
26
+ import {bind} from 'zrender/src/core/util';
23
27
 
24
28
  var FunnelSeries = echarts.extendSeriesModel({
25
29
 
@@ -30,15 +34,18 @@ var FunnelSeries = echarts.extendSeriesModel({
30
34
 
31
35
  // Enable legend selection for each data item
32
36
  // Use a function instead of direct access because data reference may changed
33
- this.legendDataProvider = function () {
34
- return this.getRawData();
35
- };
37
+ this.legendVisualProvider = new LegendVisualProvider(
38
+ bind(this.getData, this), bind(this.getRawData, this)
39
+ );
36
40
  // Extend labelLine emphasis
37
41
  this._defaultLabelLine(option);
38
42
  },
39
43
 
40
44
  getInitialData: function (option, ecModel) {
41
- return createListSimply(this, ['value']);
45
+ return createListSimply(this, {
46
+ coordDimensions: ['value'],
47
+ encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)
48
+ });
42
49
  },
43
50
 
44
51
  _defaultLabelLine: function (option) {
@@ -19,7 +19,6 @@
19
19
 
20
20
  import createListSimply from '../helper/createListSimply';
21
21
  import SeriesModel from '../../model/Series';
22
- import * as zrUtil from 'zrender/src/core/util';
23
22
 
24
23
  var GaugeSeries = SeriesModel.extend({
25
24
 
@@ -24,6 +24,7 @@ import {defaultEmphasis} from '../../util/model';
24
24
  import Model from '../../model/Model';
25
25
  import {encodeHTML} from '../../util/format';
26
26
  import createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge';
27
+ import LegendVisualProvider from '../../visual/LegendVisualProvider';
27
28
 
28
29
  var GraphSeries = echarts.extendSeriesModel({
29
30
 
@@ -32,10 +33,14 @@ var GraphSeries = echarts.extendSeriesModel({
32
33
  init: function (option) {
33
34
  GraphSeries.superApply(this, 'init', arguments);
34
35
 
36
+ var self = this;
37
+ function getCategoriesData() {
38
+ return self._categoriesData;
39
+ }
35
40
  // Provide data for legend select
36
- this.legendDataProvider = function () {
37
- return this._categoriesData;
38
- };
41
+ this.legendVisualProvider = new LegendVisualProvider(
42
+ getCategoriesData, getCategoriesData
43
+ );
39
44
 
40
45
  this.fillDataTextStyle(option.edges || option.links);
41
46
 
@@ -94,6 +94,7 @@ export default echarts.extendChartView({
94
94
  },
95
95
 
96
96
  render: function (seriesModel, ecModel, api) {
97
+ var graphView = this;
97
98
  var coordSys = seriesModel.coordinateSystem;
98
99
 
99
100
  this._model = seriesModel;
@@ -163,6 +164,7 @@ export default echarts.extendChartView({
163
164
 
164
165
  if (itemModel.get('focusNodeAdjacency')) {
165
166
  el.on('mouseover', el[FOCUS_ADJACENCY] = function () {
167
+ graphView._clearTimer();
166
168
  api.dispatchAction({
167
169
  type: 'focusNodeAdjacency',
168
170
  seriesId: seriesModel.id,
@@ -170,10 +172,7 @@ export default echarts.extendChartView({
170
172
  });
171
173
  });
172
174
  el.on('mouseout', el[UNFOCUS_ADJACENCY] = function () {
173
- api.dispatchAction({
174
- type: 'unfocusNodeAdjacency',
175
- seriesId: seriesModel.id
176
- });
175
+ graphView._dispatchUnfocus(api);
177
176
  });
178
177
  }
179
178
 
@@ -187,6 +186,7 @@ export default echarts.extendChartView({
187
186
 
188
187
  if (edge.getModel().get('focusNodeAdjacency')) {
189
188
  el.on('mouseover', el[FOCUS_ADJACENCY] = function () {
189
+ graphView._clearTimer();
190
190
  api.dispatchAction({
191
191
  type: 'focusNodeAdjacency',
192
192
  seriesId: seriesModel.id,
@@ -194,10 +194,7 @@ export default echarts.extendChartView({
194
194
  });
195
195
  });
196
196
  el.on('mouseout', el[UNFOCUS_ADJACENCY] = function () {
197
- api.dispatchAction({
198
- type: 'unfocusNodeAdjacency',
199
- seriesId: seriesModel.id
200
- });
197
+ graphView._dispatchUnfocus(api);
201
198
  });
202
199
  }
203
200
  });
@@ -249,6 +246,27 @@ export default echarts.extendChartView({
249
246
  dispose: function () {
250
247
  this._controller && this._controller.dispose();
251
248
  this._controllerHost = {};
249
+ this._clearTimer();
250
+ },
251
+
252
+ _dispatchUnfocus: function (api, opt) {
253
+ var self = this;
254
+ this._clearTimer();
255
+ this._unfocusDelayTimer = setTimeout(function () {
256
+ self._unfocusDelayTimer = null;
257
+ api.dispatchAction({
258
+ type: 'unfocusNodeAdjacency',
259
+ seriesId: self._model.id
260
+ });
261
+ }, 500);
262
+
263
+ },
264
+
265
+ _clearTimer: function () {
266
+ if (this._unfocusDelayTimer) {
267
+ clearTimeout(this._unfocusDelayTimer);
268
+ this._unfocusDelayTimer = null;
269
+ }
252
270
  },
253
271
 
254
272
  focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {