echarts 4.5.0-rc.2 → 4.8.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 (256) hide show
  1. package/.github/pull_request_template.md +66 -0
  2. package/.github/workflows/nodejs.yml +12 -2
  3. package/CONTRIBUTING.md +16 -160
  4. package/NOTICE +1 -1
  5. package/README.md +2 -2
  6. package/dist/echarts-en.common.js +2808 -1188
  7. package/dist/echarts-en.common.min.js +1 -1
  8. package/dist/echarts-en.js +3559 -1437
  9. package/dist/echarts-en.js.map +1 -1
  10. package/dist/echarts-en.min.js +1 -1
  11. package/dist/echarts-en.simple.js +2453 -1002
  12. package/dist/echarts-en.simple.min.js +1 -1
  13. package/dist/echarts.common.js +2782 -1188
  14. package/dist/echarts.common.min.js +1 -1
  15. package/dist/echarts.js +3533 -1437
  16. package/dist/echarts.js.map +1 -1
  17. package/dist/echarts.min.js +1 -1
  18. package/dist/echarts.simple.js +2427 -1002
  19. package/dist/echarts.simple.min.js +1 -1
  20. package/dist/extension/bmap.js +336 -2
  21. package/dist/extension/bmap.js.map +1 -1
  22. package/dist/extension/bmap.min.js +1 -1
  23. package/extension/bmap/BMapView.js +6 -2
  24. package/extension-src/bmap/BMapView.js +3 -2
  25. package/lib/chart/bar/BarSeries.js +14 -1
  26. package/lib/chart/bar/BarView.js +161 -16
  27. package/lib/chart/bar/BaseBarSeries.js +3 -1
  28. package/lib/chart/candlestick/candlestickVisual.js +1 -1
  29. package/lib/chart/effectScatter/EffectScatterSeries.js +3 -1
  30. package/lib/chart/funnel/FunnelSeries.js +13 -5
  31. package/lib/chart/gauge/GaugeSeries.js +0 -2
  32. package/lib/chart/graph/GraphSeries.js +11 -5
  33. package/lib/chart/graph/GraphView.js +30 -12
  34. package/lib/chart/heatmap/HeatmapView.js +4 -4
  35. package/lib/chart/helper/EffectLine.js +23 -1
  36. package/lib/chart/helper/EffectSymbol.js +2 -1
  37. package/lib/chart/helper/Line.js +94 -33
  38. package/lib/chart/helper/LineDraw.js +5 -1
  39. package/lib/chart/helper/Symbol.js +1 -2
  40. package/lib/chart/helper/createClipPathFromCoordSys.js +4 -1
  41. package/lib/chart/helper/createListFromArray.js +14 -8
  42. package/lib/chart/helper/createRenderPlanner.js +6 -3
  43. package/lib/chart/helper/whiskerBoxCommon.js +22 -16
  44. package/lib/chart/line/LineSeries.js +3 -1
  45. package/lib/chart/line/LineView.js +41 -2
  46. package/lib/chart/map/MapSeries.js +11 -3
  47. package/lib/chart/pie/PieSeries.js +27 -6
  48. package/lib/chart/pie/PieView.js +22 -15
  49. package/lib/chart/pie/labelLayout.js +102 -19
  50. package/lib/chart/pie/pieLayout.js +19 -7
  51. package/lib/chart/radar/RadarSeries.js +23 -3
  52. package/lib/chart/sankey/SankeySeries.js +13 -1
  53. package/lib/chart/sankey/SankeyView.js +70 -32
  54. package/lib/chart/sankey/sankeyLayout.js +22 -3
  55. package/lib/chart/scatter/ScatterSeries.js +3 -1
  56. package/lib/chart/sunburst/SunburstPiece.js +1 -0
  57. package/lib/chart/sunburst/SunburstSeries.js +12 -7
  58. package/lib/chart/sunburst/SunburstView.js +5 -1
  59. package/lib/chart/themeRiver/ThemeRiverSeries.js +3 -3
  60. package/lib/chart/tree/TreeSeries.js +20 -3
  61. package/lib/chart/tree/TreeView.js +151 -25
  62. package/lib/chart/treemap/TreemapSeries.js +15 -3
  63. package/lib/chart/treemap/TreemapView.js +80 -38
  64. package/lib/component/axis/AngleAxisView.js +64 -7
  65. package/lib/component/axis/AxisBuilder.js +62 -24
  66. package/lib/component/axis/CartesianAxisView.js +52 -85
  67. package/lib/component/axis/RadiusAxisView.js +36 -4
  68. package/lib/component/axis/SingleAxisView.js +21 -6
  69. package/lib/component/axis/axisSplitHelper.js +132 -0
  70. package/lib/component/brush/BrushView.js +11 -1
  71. package/lib/component/brush/visualEncoding.js +13 -2
  72. package/lib/component/dataZoom/SliderZoomView.js +4 -10
  73. package/lib/component/helper/BrushController.js +33 -43
  74. package/lib/component/helper/MapDraw.js +30 -4
  75. package/lib/component/legend/LegendModel.js +3 -3
  76. package/lib/component/legend/LegendView.js +17 -13
  77. package/lib/component/legend/ScrollableLegendView.js +18 -18
  78. package/lib/component/marker/MarkLineModel.js +2 -1
  79. package/lib/component/marker/markerHelper.js +7 -4
  80. package/lib/component/title.js +6 -2
  81. package/lib/component/toolbox/ToolboxView.js +5 -1
  82. package/lib/component/toolbox/feature/MagicType.js +20 -14
  83. package/lib/component/toolbox/feature/SaveAsImage.js +2 -1
  84. package/lib/component/tooltip/TooltipContent.js +60 -23
  85. package/lib/component/tooltip/TooltipView.js +7 -8
  86. package/lib/component/visualMap/PiecewiseModel.js +3 -6
  87. package/lib/coord/Axis.js +30 -2
  88. package/lib/coord/View.js +9 -0
  89. package/lib/coord/axisDefault.js +21 -2
  90. package/lib/coord/axisHelper.js +22 -16
  91. package/lib/coord/calendar/Calendar.js +8 -4
  92. package/lib/coord/geo/geoJSONLoader.js +3 -2
  93. package/lib/coord/geo/geoSourceManager.js +3 -2
  94. package/lib/coord/geo/parseGeoJson.js +3 -2
  95. package/lib/coord/radar/Radar.js +5 -5
  96. package/lib/data/DataDimensionInfo.js +157 -0
  97. package/lib/data/List.js +25 -19
  98. package/lib/data/Tree.js +9 -19
  99. package/lib/data/helper/completeDimensions.js +43 -32
  100. package/lib/data/helper/createDimensions.js +2 -0
  101. package/lib/data/helper/sourceHelper.js +214 -114
  102. package/lib/echarts.js +57 -34
  103. package/lib/langEN.js +26 -0
  104. package/lib/layout/barGrid.js +19 -13
  105. package/lib/layout/barPolar.js +0 -5
  106. package/lib/loading/default.js +43 -27
  107. package/lib/model/Series.js +4 -4
  108. package/lib/model/referHelper.js +40 -12
  109. package/lib/scale/Interval.js +87 -2
  110. package/lib/scale/Log.js +9 -2
  111. package/lib/scale/helper.js +1 -43
  112. package/lib/stream/Scheduler.js +9 -1
  113. package/lib/theme/dark.js +3 -0
  114. package/lib/util/format.js +19 -2
  115. package/lib/util/graphic.js +14 -12
  116. package/lib/visual/LegendVisualProvider.js +75 -0
  117. package/lib/visual/dataColor.js +2 -12
  118. package/lib/visual/seriesColor.js +15 -7
  119. package/lib/visual/symbol.js +12 -2
  120. package/map/js/china.js +1 -1
  121. package/map/js/province/chongqing.js +1 -1
  122. package/map/js/province/gansu.js +2 -2
  123. package/map/js/province/tianjin.js +1 -28
  124. package/map/json/china.json +1 -1
  125. package/map/json/province/chongqing.json +1 -1
  126. package/map/json/province/tianjin.json +1 -1
  127. package/package.json +11 -6
  128. package/src/chart/bar/BarSeries.js +15 -1
  129. package/src/chart/bar/BarView.js +162 -15
  130. package/src/chart/bar/BaseBarSeries.js +1 -1
  131. package/src/chart/candlestick/candlestickVisual.js +1 -1
  132. package/src/chart/effectScatter/EffectScatterSeries.js +1 -1
  133. package/src/chart/funnel/FunnelSeries.js +10 -4
  134. package/src/chart/gauge/GaugeSeries.js +0 -1
  135. package/src/chart/graph/GraphSeries.js +10 -4
  136. package/src/chart/graph/GraphView.js +28 -10
  137. package/src/chart/heatmap/HeatmapView.js +4 -4
  138. package/src/chart/helper/EffectLine.js +23 -1
  139. package/src/chart/helper/EffectSymbol.js +2 -1
  140. package/src/chart/helper/Line.js +84 -26
  141. package/src/chart/helper/LineDraw.js +5 -1
  142. package/src/chart/helper/Symbol.js +2 -2
  143. package/src/chart/helper/createClipPathFromCoordSys.js +4 -0
  144. package/src/chart/helper/createListFromArray.js +13 -8
  145. package/src/chart/helper/createRenderPlanner.js +5 -2
  146. package/src/chart/helper/whiskerBoxCommon.js +21 -16
  147. package/src/chart/line/LineSeries.js +1 -1
  148. package/src/chart/line/LineView.js +45 -1
  149. package/src/chart/map/MapSeries.js +8 -3
  150. package/src/chart/pie/PieSeries.js +26 -5
  151. package/src/chart/pie/PieView.js +20 -15
  152. package/src/chart/pie/labelLayout.js +114 -22
  153. package/src/chart/pie/pieLayout.js +20 -7
  154. package/src/chart/radar/RadarSeries.js +27 -3
  155. package/src/chart/sankey/SankeySeries.js +12 -1
  156. package/src/chart/sankey/SankeyView.js +75 -30
  157. package/src/chart/sankey/sankeyLayout.js +25 -5
  158. package/src/chart/scatter/ScatterSeries.js +1 -1
  159. package/src/chart/sunburst/SunburstPiece.js +2 -0
  160. package/src/chart/sunburst/SunburstSeries.js +12 -7
  161. package/src/chart/sunburst/SunburstView.js +2 -1
  162. package/src/chart/themeRiver/ThemeRiverSeries.js +4 -3
  163. package/src/chart/tree/TreeSeries.js +19 -6
  164. package/src/chart/tree/TreeView.js +155 -22
  165. package/src/chart/treemap/TreemapSeries.js +15 -5
  166. package/src/chart/treemap/TreemapView.js +77 -41
  167. package/src/component/axis/AngleAxisView.js +75 -7
  168. package/src/component/axis/AxisBuilder.js +77 -32
  169. package/src/component/axis/CartesianAxisView.js +47 -83
  170. package/src/component/axis/RadiusAxisView.js +37 -4
  171. package/src/component/axis/SingleAxisView.js +21 -4
  172. package/src/component/axis/axisSplitHelper.js +114 -0
  173. package/src/component/brush/BrushView.js +8 -1
  174. package/src/component/brush/visualEncoding.js +6 -3
  175. package/src/component/dataZoom/SliderZoomView.js +4 -9
  176. package/src/component/helper/BrushController.js +40 -47
  177. package/src/component/helper/MapDraw.js +27 -4
  178. package/src/component/legend/LegendModel.js +3 -3
  179. package/src/component/legend/LegendView.js +18 -12
  180. package/src/component/legend/ScrollableLegendView.js +18 -16
  181. package/src/component/marker/MarkLineModel.js +2 -1
  182. package/src/component/marker/markerHelper.js +8 -5
  183. package/src/component/title.js +3 -2
  184. package/src/component/toolbox/ToolboxView.js +5 -0
  185. package/src/component/toolbox/feature/MagicType.js +19 -13
  186. package/src/component/toolbox/feature/SaveAsImage.js +2 -1
  187. package/src/component/tooltip/TooltipContent.js +59 -22
  188. package/src/component/tooltip/TooltipView.js +10 -8
  189. package/src/component/visualMap/PiecewiseModel.js +5 -9
  190. package/src/coord/Axis.js +29 -2
  191. package/src/coord/View.js +10 -1
  192. package/src/coord/axisDefault.js +25 -1
  193. package/src/coord/axisHelper.js +26 -19
  194. package/src/coord/calendar/Calendar.js +12 -5
  195. package/src/coord/geo/geoJSONLoader.js +3 -2
  196. package/src/coord/geo/geoSourceManager.js +3 -2
  197. package/src/coord/geo/parseGeoJson.js +3 -2
  198. package/src/coord/radar/Radar.js +6 -8
  199. package/src/data/DataDimensionInfo.js +135 -0
  200. package/src/data/List.js +29 -16
  201. package/src/data/Tree.js +12 -17
  202. package/src/data/helper/completeDimensions.js +49 -30
  203. package/src/data/helper/createDimensions.js +2 -0
  204. package/src/data/helper/sourceHelper.js +216 -124
  205. package/src/echarts.js +60 -36
  206. package/src/langEN.js +26 -0
  207. package/src/layout/barGrid.js +22 -10
  208. package/src/layout/barPolar.js +0 -4
  209. package/src/loading/default.js +46 -34
  210. package/src/model/Series.js +4 -4
  211. package/src/model/referHelper.js +34 -11
  212. package/src/scale/Interval.js +84 -4
  213. package/src/scale/Log.js +9 -2
  214. package/src/scale/helper.js +1 -39
  215. package/src/stream/Scheduler.js +8 -0
  216. package/src/theme/dark.js +3 -0
  217. package/src/util/format.js +17 -1
  218. package/src/util/graphic.js +13 -11
  219. package/src/visual/LegendVisualProvider.js +55 -0
  220. package/src/visual/dataColor.js +0 -13
  221. package/src/visual/seriesColor.js +13 -7
  222. package/src/visual/symbol.js +11 -2
  223. package/theme/azul.js +163 -0
  224. package/theme/bee-inspired.js +178 -0
  225. package/theme/blue.js +178 -0
  226. package/theme/caravan.js +178 -0
  227. package/theme/carp.js +163 -0
  228. package/theme/cool.js +180 -0
  229. package/theme/dark-blue.js +168 -0
  230. package/theme/dark-bold.js +168 -0
  231. package/theme/dark-digerati.js +168 -0
  232. package/theme/dark-fresh-cut.js +168 -0
  233. package/theme/dark-mushroom.js +168 -0
  234. package/theme/dark.js +69 -62
  235. package/theme/eduardo.js +178 -0
  236. package/theme/forest.js +163 -0
  237. package/theme/fresh-cut.js +163 -0
  238. package/theme/fruit.js +178 -0
  239. package/theme/gray.js +220 -0
  240. package/theme/green.js +222 -0
  241. package/theme/helianthus.js +263 -0
  242. package/theme/infographic.js +72 -57
  243. package/theme/inspired.js +163 -0
  244. package/theme/jazz.js +163 -0
  245. package/theme/london.js +163 -0
  246. package/theme/macarons.js +80 -57
  247. package/theme/macarons2.js +251 -0
  248. package/theme/mint.js +155 -0
  249. package/theme/red-velvet.js +163 -0
  250. package/theme/red.js +225 -0
  251. package/theme/roma.js +55 -22
  252. package/theme/royal.js +163 -0
  253. package/theme/sakura.js +140 -0
  254. package/theme/shine.js +52 -45
  255. package/theme/tech-blue.js +180 -0
  256. package/theme/vintage.js +37 -23
@@ -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-rc.2",
3
+ "version": "4.8.0",
4
4
  "description": "A powerful charting and visualization library for browser",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -19,14 +19,15 @@
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": "node build/build.js",
22
+ "test:visual:report": "node test/runTest/genReport.js",
23
+ "test": "node build/build.js --prepublish && jest --config test/ut/jest.config.js",
23
24
  "mktest": "node test/build/mktest.js",
24
25
  "mktest:help": "node test/build/mktest.js -h",
25
26
  "lint": "./node_modules/.bin/eslint src extension-src",
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.3.1"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@babel/core": "7.3.4",
@@ -35,13 +36,19 @@
35
36
  "@babel/template": "7.0.0-beta.31",
36
37
  "@babel/types": "7.0.0-beta.31",
37
38
  "assert": "1.4.1",
39
+ "canvas": "^2.6.0",
38
40
  "commander": "2.11.0",
39
41
  "coordtransform": "2.0.2",
40
42
  "escodegen": "1.8.0",
43
+ "eslint": "6.3.0",
41
44
  "esprima": "2.7.2",
42
45
  "estraverse": "4.1.1",
43
46
  "fs-extra": "0.26.7",
44
47
  "glob": "7.0.0",
48
+ "jest": "^24.9.0",
49
+ "jest-canvas-mock": "^2.2.0",
50
+ "jsdom": "^15.2.1",
51
+ "jshint": "2.10.2",
45
52
  "open": "6.4.0",
46
53
  "pixelmatch": "5.0.2",
47
54
  "pngjs": "3.4.0",
@@ -53,8 +60,6 @@
53
60
  "semver": "6.3.0",
54
61
  "serve-handler": "6.1.1",
55
62
  "slugify": "1.3.4",
56
- "socket.io": "2.2.0",
57
- "jshint": "2.10.2",
58
- "eslint": "6.3.0"
63
+ "socket.io": "2.2.0"
59
64
  }
60
65
  }
@@ -57,6 +57,20 @@ export default BaseBarSeries.extend({
57
57
 
58
58
  // If use caps on two sides of bars
59
59
  // Only available on tangential polar bar
60
- roundCap: false
60
+ roundCap: false,
61
+
62
+ showBackground: false,
63
+ backgroundStyle: {
64
+ color: 'rgba(180, 180, 180, 0.2)',
65
+ borderColor: null,
66
+ borderWidth: 0,
67
+ borderType: 'solid',
68
+ borderRadius: 0,
69
+ shadowBlur: 0,
70
+ shadowColor: null,
71
+ shadowOffsetX: 0,
72
+ shadowOffsetY: 0,
73
+ opacity: 1
74
+ }
61
75
  }
62
76
  });
@@ -25,6 +25,7 @@ import {setLabel} from './helper';
25
25
  import Model from '../../model/Model';
26
26
  import barItemStyle from './barItemStyle';
27
27
  import Path from 'zrender/src/graphic/Path';
28
+ import Group from 'zrender/src/container/Group';
28
29
  import {throttle} from '../../util/throttle';
29
30
  import {createClipPath} from '../helper/createClipPathFromCoordSys';
30
31
  import Sausage from '../../util/shape/sausage';
@@ -127,15 +128,34 @@ export default echarts.extendChartView({
127
128
 
128
129
  var roundCap = seriesModel.get('roundCap', true);
129
130
 
131
+ var drawBackground = seriesModel.get('showBackground', true);
132
+ var backgroundModel = seriesModel.getModel('backgroundStyle');
133
+ var barBorderRadius = backgroundModel.get('barBorderRadius') || 0;
134
+
135
+ var bgEls = [];
136
+ var oldBgEls = this._backgroundEls || [];
137
+
130
138
  data.diff(oldData)
131
139
  .add(function (dataIndex) {
140
+ var itemModel = data.getItemModel(dataIndex);
141
+ var layout = getLayout[coord.type](data, dataIndex, itemModel);
142
+
143
+ if (drawBackground) {
144
+ var bgLayout = getLayout[coord.type](data, dataIndex);
145
+ var bgEl = createBackgroundEl(coord, isHorizontalOrRadial, bgLayout);
146
+ bgEl.useStyle(backgroundModel.getBarItemStyle());
147
+ // Only cartesian2d support borderRadius.
148
+ if (coord.type === 'cartesian2d') {
149
+ bgEl.setShape('r', barBorderRadius);
150
+ }
151
+ bgEls[dataIndex] = bgEl;
152
+ }
153
+
154
+ // If dataZoom in filteMode: 'empty', the baseValue can be set as NaN in "axisProxy".
132
155
  if (!data.hasValue(dataIndex)) {
133
156
  return;
134
157
  }
135
158
 
136
- var itemModel = data.getItemModel(dataIndex);
137
- var layout = getLayout[coord.type](data, dataIndex, itemModel);
138
-
139
159
  if (needsClip) {
140
160
  // Clip will modify the layout params.
141
161
  // And return a boolean to determine if the shape are fully clipped.
@@ -158,16 +178,29 @@ export default echarts.extendChartView({
158
178
  );
159
179
  })
160
180
  .update(function (newIndex, oldIndex) {
161
- var el = oldData.getItemGraphicEl(oldIndex);
181
+ var itemModel = data.getItemModel(newIndex);
182
+ var layout = getLayout[coord.type](data, newIndex, itemModel);
162
183
 
184
+ if (drawBackground) {
185
+ var bgEl = oldBgEls[oldIndex];
186
+ bgEl.useStyle(backgroundModel.getBarItemStyle());
187
+ // Only cartesian2d support borderRadius.
188
+ if (coord.type === 'cartesian2d') {
189
+ bgEl.setShape('r', barBorderRadius);
190
+ }
191
+ bgEls[newIndex] = bgEl;
192
+
193
+ var bgLayout = getLayout[coord.type](data, newIndex);
194
+ var shape = createBackgroundShape(isHorizontalOrRadial, bgLayout, coord);
195
+ graphic.updateProps(bgEl, { shape: shape }, animationModel, newIndex);
196
+ }
197
+
198
+ var el = oldData.getItemGraphicEl(oldIndex);
163
199
  if (!data.hasValue(newIndex)) {
164
200
  group.remove(el);
165
201
  return;
166
202
  }
167
203
 
168
- var itemModel = data.getItemModel(newIndex);
169
- var layout = getLayout[coord.type](data, newIndex, itemModel);
170
-
171
204
  if (needsClip) {
172
205
  var isClipped = clip[coord.type](coordSysClipArea, layout);
173
206
  if (isClipped) {
@@ -205,6 +238,15 @@ export default echarts.extendChartView({
205
238
  })
206
239
  .execute();
207
240
 
241
+ var bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group());
242
+ bgGroup.removeAll();
243
+
244
+ for (var i = 0; i < bgEls.length; ++i) {
245
+ bgGroup.add(bgEls[i]);
246
+ }
247
+ group.add(bgGroup);
248
+ this._backgroundEls = bgEls;
249
+
208
250
  this._data = data;
209
251
  },
210
252
 
@@ -225,6 +267,7 @@ export default echarts.extendChartView({
225
267
  },
226
268
 
227
269
  _incrementalRenderLarge: function (params, seriesModel) {
270
+ this._removeBackground();
228
271
  createLarge(seriesModel, this.group, true);
229
272
  },
230
273
 
@@ -238,6 +281,9 @@ export default echarts.extendChartView({
238
281
  var group = this.group;
239
282
  var data = this._data;
240
283
  if (ecModel && ecModel.get('animation') && data && !this._isLargeDraw) {
284
+ this._removeBackground();
285
+ this._backgroundEls = [];
286
+
241
287
  data.eachItemGraphicEl(function (el) {
242
288
  if (el.type === 'sector') {
243
289
  removeSector(el.dataIndex, ecModel, el);
@@ -251,6 +297,11 @@ export default echarts.extendChartView({
251
297
  group.removeAll();
252
298
  }
253
299
  this._data = null;
300
+ },
301
+
302
+ _removeBackground: function () {
303
+ this.group.remove(this._backgroundGroup);
304
+ this._backgroundGroup = null;
254
305
  }
255
306
 
256
307
  });
@@ -308,7 +359,12 @@ var elementCreator = {
308
359
  dataIndex, layout, isHorizontal,
309
360
  animationModel, isUpdate
310
361
  ) {
311
- var rect = new graphic.Rect({shape: zrUtil.extend({}, layout)});
362
+ var rect = new graphic.Rect({
363
+ shape: zrUtil.extend({}, layout),
364
+ z2: 1
365
+ });
366
+
367
+ rect.name = 'item';
312
368
 
313
369
  // Animation
314
370
  if (animationModel) {
@@ -338,9 +394,12 @@ var elementCreator = {
338
394
  var ShapeClass = (!isRadial && roundCap) ? Sausage : graphic.Sector;
339
395
 
340
396
  var sector = new ShapeClass({
341
- shape: zrUtil.defaults({clockwise: clockwise}, layout)
397
+ shape: zrUtil.defaults({clockwise: clockwise}, layout),
398
+ z2: 1
342
399
  });
343
400
 
401
+ sector.name = 'item';
402
+
344
403
  // Animation
345
404
  if (animationModel) {
346
405
  var sectorShape = sector.shape;
@@ -382,9 +441,11 @@ function removeSector(dataIndex, animationModel, el) {
382
441
  }
383
442
 
384
443
  var getLayout = {
444
+ // itemModel is only used to get borderWidth, which is not needed
445
+ // when calculating bar background layout.
385
446
  cartesian2d: function (data, dataIndex, itemModel) {
386
447
  var layout = data.getItemLayout(dataIndex);
387
- var fixedLineWidth = getLineWidth(itemModel, layout);
448
+ var fixedLineWidth = itemModel ? getLineWidth(itemModel, layout) : 0;
388
449
 
389
450
  // fix layout with lineWidth
390
451
  var signX = layout.width > 0 ? 1 : -1;
@@ -410,11 +471,18 @@ var getLayout = {
410
471
  }
411
472
  };
412
473
 
474
+ function isZeroOnPolar(layout) {
475
+ return layout.startAngle != null
476
+ && layout.endAngle != null
477
+ && layout.startAngle === layout.endAngle;
478
+ }
479
+
413
480
  function updateStyle(
414
481
  el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar
415
482
  ) {
416
483
  var color = data.getItemVisual(dataIndex, 'color');
417
484
  var opacity = data.getItemVisual(dataIndex, 'opacity');
485
+ var stroke = data.getVisual('borderColor');
418
486
  var itemStyleModel = itemModel.getModel('itemStyle');
419
487
  var hoverStyle = itemModel.getModel('emphasis.itemStyle').getBarItemStyle();
420
488
 
@@ -424,7 +492,8 @@ function updateStyle(
424
492
 
425
493
  el.useStyle(zrUtil.defaults(
426
494
  {
427
- fill: color,
495
+ stroke: isZeroOnPolar(layout) ? 'none' : stroke,
496
+ fill: isZeroOnPolar(layout) ? 'none' : color,
428
497
  opacity: opacity
429
498
  },
430
499
  itemStyleModel.getBarItemStyle()
@@ -443,14 +512,19 @@ function updateStyle(
443
512
  seriesModel, dataIndex, labelPositionOutside
444
513
  );
445
514
  }
446
-
515
+ if (isZeroOnPolar(layout)) {
516
+ hoverStyle.fill = hoverStyle.stroke = 'none';
517
+ }
447
518
  graphic.setHoverStyle(el, hoverStyle);
448
519
  }
449
520
 
450
521
  // In case width or height are too small.
451
522
  function getLineWidth(itemModel, rawLayout) {
452
523
  var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
453
- return Math.min(lineWidth, Math.abs(rawLayout.width), Math.abs(rawLayout.height));
524
+ // width or height may be NaN for empty data
525
+ var width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width);
526
+ var height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height);
527
+ return Math.min(lineWidth, width, height);
454
528
  }
455
529
 
456
530
 
@@ -482,13 +556,38 @@ function createLarge(seriesModel, group, incremental) {
482
556
  var baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;
483
557
  startPoint[1 - baseDimIdx] = data.getLayout('valueAxisStart');
484
558
 
559
+ var largeDataIndices = data.getLayout('largeDataIndices');
560
+ var barWidth = data.getLayout('barWidth');
561
+
562
+ var backgroundModel = seriesModel.getModel('backgroundStyle');
563
+ var drawBackground = seriesModel.get('showBackground', true);
564
+
565
+ if (drawBackground) {
566
+ var points = data.getLayout('largeBackgroundPoints');
567
+ var backgroundStartPoint = [];
568
+ backgroundStartPoint[1 - baseDimIdx] = data.getLayout('backgroundStart');
569
+
570
+ var bgEl = new LargePath({
571
+ shape: {points: points},
572
+ incremental: !!incremental,
573
+ __startPoint: backgroundStartPoint,
574
+ __baseDimIdx: baseDimIdx,
575
+ __largeDataIndices: largeDataIndices,
576
+ __barWidth: barWidth,
577
+ silent: true,
578
+ z2: 0
579
+ });
580
+ setLargeBackgroundStyle(bgEl, backgroundModel, data);
581
+ group.add(bgEl);
582
+ }
583
+
485
584
  var el = new LargePath({
486
585
  shape: {points: data.getLayout('largePoints')},
487
586
  incremental: !!incremental,
488
587
  __startPoint: startPoint,
489
588
  __baseDimIdx: baseDimIdx,
490
- __largeDataIndices: data.getLayout('largeDataIndices'),
491
- __barWidth: data.getLayout('barWidth')
589
+ __largeDataIndices: largeDataIndices,
590
+ __barWidth: barWidth
492
591
  });
493
592
  group.add(el);
494
593
  setLargeStyle(el, seriesModel, data);
@@ -553,3 +652,51 @@ function setLargeStyle(el, seriesModel, data) {
553
652
  el.style.lineWidth = data.getLayout('barWidth');
554
653
  }
555
654
 
655
+ function setLargeBackgroundStyle(el, backgroundModel, data) {
656
+ var borderColor = backgroundModel.get('borderColor') || backgroundModel.get('color');
657
+ var itemStyle = backgroundModel.getItemStyle(['color', 'borderColor']);
658
+
659
+ el.useStyle(itemStyle);
660
+ el.style.fill = null;
661
+ el.style.stroke = borderColor;
662
+ el.style.lineWidth = data.getLayout('barWidth');
663
+ }
664
+
665
+ function createBackgroundShape(isHorizontalOrRadial, layout, coord) {
666
+ var coordLayout;
667
+ var isPolar = coord.type === 'polar';
668
+ if (isPolar) {
669
+ coordLayout = coord.getArea();
670
+ }
671
+ else {
672
+ coordLayout = coord.grid.getRect();
673
+ }
674
+
675
+ if (isPolar) {
676
+ return {
677
+ cx: coordLayout.cx,
678
+ cy: coordLayout.cy,
679
+ r0: isHorizontalOrRadial ? coordLayout.r0 : layout.r0,
680
+ r: isHorizontalOrRadial ? coordLayout.r : layout.r,
681
+ startAngle: isHorizontalOrRadial ? layout.startAngle : 0,
682
+ endAngle: isHorizontalOrRadial ? layout.endAngle : Math.PI * 2
683
+ };
684
+ }
685
+ else {
686
+ return {
687
+ x: isHorizontalOrRadial ? layout.x : coordLayout.x,
688
+ y: isHorizontalOrRadial ? coordLayout.y : layout.y,
689
+ width: isHorizontalOrRadial ? layout.width : coordLayout.width,
690
+ height: isHorizontalOrRadial ? coordLayout.height : layout.height
691
+ };
692
+ }
693
+ }
694
+
695
+ function createBackgroundEl(coord, isHorizontalOrRadial, layout) {
696
+ var ElementClz = coord.type === 'polar' ? graphic.Sector : graphic.Rect;
697
+ return new ElementClz({
698
+ shape: createBackgroundShape(isHorizontalOrRadial, layout, coord),
699
+ silent: true,
700
+ z2: 0
701
+ });
702
+ }
@@ -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) {
@@ -36,7 +36,6 @@ export default {
36
36
  reset: function (seriesModel, ecModel) {
37
37
 
38
38
  var data = seriesModel.getData();
39
- var isLargeRender = seriesModel.pipelineContext.large;
40
39
 
41
40
  data.setVisual({
42
41
  legendSymbol: 'roundRect',
@@ -51,6 +50,7 @@ export default {
51
50
  return;
52
51
  }
53
52
 
53
+ var isLargeRender = seriesModel.pipelineContext.large;
54
54
  return !isLargeRender && {progress: progress};
55
55
 
56
56
 
@@ -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,11 @@
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';
23
26
 
24
27
  var FunnelSeries = echarts.extendSeriesModel({
25
28
 
@@ -30,15 +33,18 @@ var FunnelSeries = echarts.extendSeriesModel({
30
33
 
31
34
  // Enable legend selection for each data item
32
35
  // Use a function instead of direct access because data reference may changed
33
- this.legendDataProvider = function () {
34
- return this.getRawData();
35
- };
36
+ this.legendVisualProvider = new LegendVisualProvider(
37
+ zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this)
38
+ );
36
39
  // Extend labelLine emphasis
37
40
  this._defaultLabelLine(option);
38
41
  },
39
42
 
40
43
  getInitialData: function (option, ecModel) {
41
- return createListSimply(this, ['value']);
44
+ return createListSimply(this, {
45
+ coordDimensions: ['value'],
46
+ encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)
47
+ });
42
48
  },
43
49
 
44
50
  _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
 
@@ -237,7 +242,8 @@ var GraphSeries = echarts.extendSeriesModel({
237
242
  edgeSymbol: ['none', 'none'],
238
243
  edgeSymbolSize: 10,
239
244
  edgeLabel: {
240
- position: 'middle'
245
+ position: 'middle',
246
+ distance: 5
241
247
  },
242
248
 
243
249
  draggable: false,
@@ -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,10 +246,31 @@ 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) {
255
- var data = this._model.getData();
273
+ var data = seriesModel.getData();
256
274
  var graph = data.graph;
257
275
  var dataIndex = payload.dataIndex;
258
276
  var edgeDataIndex = payload.edgeDataIndex;
@@ -290,7 +308,7 @@ export default echarts.extendChartView({
290
308
  },
291
309
 
292
310
  unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {
293
- var graph = this._model.getData().graph;
311
+ var graph = seriesModel.getData().graph;
294
312
 
295
313
  graph.eachNode(function (node) {
296
314
  fadeOutItem(node, nodeOpacityPath);
@@ -185,10 +185,10 @@ export default echarts.extendChartView({
185
185
 
186
186
  rect = new graphic.Rect({
187
187
  shape: {
188
- x: point[0] - width / 2,
189
- y: point[1] - height / 2,
190
- width: width,
191
- height: height
188
+ x: Math.floor(Math.round(point[0]) - width / 2),
189
+ y: Math.floor(Math.round(point[1]) - height / 2),
190
+ width: Math.ceil(width),
191
+ height: Math.ceil(height)
192
192
  },
193
193
  style: {
194
194
  fill: data.getItemVisual(idx, 'color'),