map-data.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. const geoCoordMap = {
  2. '甘肃': [103.73, 36.03],
  3. '青海': [101.74, 36.56],
  4. '四川': [104.06, 30.67],
  5. '河北': [114.48, 38.03],
  6. '云南': [102.73, 25.04],
  7. '贵州': [106.71, 26.57],
  8. '湖北': [114.31, 30.52],
  9. '河南': [113.65, 34.76],
  10. '山东': [117, 36.65],
  11. '江苏': [118.78, 32.04],
  12. '安徽': [117.27, 31.86],
  13. '浙江': [120.19, 30.26],
  14. '江西': [115.89, 28.68],
  15. '福建': [119.3, 26.08],
  16. '广东': [113.23, 23.16],
  17. '湖南': [113, 28.21],
  18. '海南': [110.35, 20.02],
  19. '辽宁': [123.38, 41.8],
  20. '吉林': [125.35, 43.88],
  21. '黑龙江': [126.63, 45.75],
  22. '山西': [112.53, 37.87],
  23. '陕西': [108.95, 34.27],
  24. '台湾': [121.30, 25.03],
  25. '北京': [116.46, 39.92],
  26. '上海': [121.48, 31.22],
  27. '重庆': [106.54, 29.59],
  28. '天津': [117.2, 39.13],
  29. '内蒙古': [111.65, 40.82],
  30. '广西': [108.33, 22.84],
  31. '西藏': [91.11, 29.97],
  32. '宁夏': [106.27, 38.47],
  33. '新疆': [87.68, 43.77],
  34. '香港': [114.17, 22.28],
  35. '澳门': [113.54, 22.19]
  36. }
  37. function convertData(data) {
  38. const res = []
  39. for (let i = 0; i < data.length; i++) {
  40. const geoCoord = geoCoordMap[data[i].name]
  41. if (geoCoord) {
  42. res.push({
  43. name: data[i].name,
  44. value: geoCoord.concat(data[i].value)
  45. })
  46. }
  47. }
  48. return res
  49. }
  50. let convert = (data) => {
  51. let res = [];
  52. for (var i = 0; i < data.length; i++) {
  53. var dataItem = data[i];
  54. var from = geoCoordMap[dataItem[0].name];
  55. var to = geoCoordMap[dataItem[1].name];
  56. if (from && to) {
  57. res.push({
  58. fromName: dataItem[0].name,
  59. toName: dataItem[1].name,
  60. coords: [from, to]
  61. });
  62. }
  63. }
  64. return res;
  65. }
  66. const randomData = () => {
  67. return Math.round(Math.random() * 1000)
  68. }
  69. const getItemStyle = (opacity) => {
  70. return {
  71. normal: {
  72. areaColor: '#96CFC6',
  73. borderColor: '#fff',
  74. borderWidth: 1,
  75. show: false,
  76. opacity,
  77. },
  78. emphasis: {
  79. areaColor: '#96CFC6',
  80. opacity: 1,
  81. }
  82. }
  83. }
  84. const areas = [
  85. { name: '北京', value: randomData(), itemStyle: getItemStyle(.5) },
  86. { name: '天津', value: randomData(), itemStyle: getItemStyle(.8) },
  87. { name: '上海', value: randomData(), itemStyle: getItemStyle(.4) },
  88. { name: '重庆', value: randomData(), itemStyle: getItemStyle(.3) },
  89. { name: '河北', value: randomData(), itemStyle: getItemStyle(.3) },
  90. { name: '河南', value: randomData(), itemStyle: getItemStyle(.2) },
  91. { name: '云南', value: randomData(), itemStyle: getItemStyle(.37) },
  92. { name: '辽宁', value: randomData(), itemStyle: getItemStyle(.85) },
  93. { name: '黑龙江', value: randomData(), itemStyle: getItemStyle(.8) },
  94. { name: '湖南', value: randomData(), itemStyle: getItemStyle(.71) },
  95. { name: '安徽', value: randomData(), itemStyle: getItemStyle(.21) },
  96. { name: '山东', value: randomData(), itemStyle: getItemStyle(.4) },
  97. { name: '新疆', value: randomData(), itemStyle: getItemStyle(.37) },
  98. { name: '江苏', value: randomData(), itemStyle: getItemStyle(.6) },
  99. { name: '浙江', value: randomData(), itemStyle: getItemStyle(.8) },
  100. { name: '江西', value: randomData(), itemStyle: getItemStyle(.5) },
  101. { name: '湖北', value: randomData(), itemStyle: getItemStyle(.47) },
  102. { name: '广西', value: randomData(), itemStyle: getItemStyle(.8) },
  103. { name: '甘肃', value: randomData(), itemStyle: getItemStyle(.73) },
  104. { name: '山西', value: randomData(), itemStyle: getItemStyle(.3) },
  105. { name: '内蒙古', value: randomData(), itemStyle: getItemStyle(.56) },
  106. { name: '陕西', value: randomData(), itemStyle: getItemStyle(.4) },
  107. { name: '吉林', value: randomData(), itemStyle: getItemStyle(.54) },
  108. { name: '福建', value: randomData(), itemStyle: getItemStyle(.7) },
  109. { name: '贵州', value: randomData(), itemStyle: getItemStyle(.56) },
  110. { name: '广东', value: randomData, itemStyle: getItemStyle(.3) },
  111. { name: '青海', value: randomData, itemStyle: getItemStyle(.37) },
  112. { name: '西藏', value: randomData, itemStyle: getItemStyle(.57) },
  113. { name: '四川', value: randomData, itemStyle: getItemStyle(.58) },
  114. { name: '宁夏', value: randomData, itemStyle: getItemStyle(.5) },
  115. { name: '海南', value: randomData, itemStyle: getItemStyle(.5) },
  116. { name: '台湾', value: randomData, itemStyle: getItemStyle(.4) },
  117. { name: '香港', value: randomData, itemStyle: getItemStyle(.2) },
  118. { name: '澳门', value: randomData, itemStyle: getItemStyle(.6) },
  119. { name: '南海诸岛', value: randomData, itemStyle: getItemStyle(1) },
  120. ]
  121. const formatLines = (name = '北京') => {
  122. return areas.map(item => ([{ name }, { name: item.name, value: 100 }]))
  123. }
  124. export default activeName => ({
  125. tooltip: {
  126. show: false,
  127. },
  128. geo: {
  129. map: 'china',
  130. label: {
  131. normal: {
  132. show: false
  133. },
  134. emphasis: {
  135. show: false
  136. }
  137. },
  138. itemStyle: {
  139. normal: {
  140. areaColor: '#96CFC6',
  141. borderColor: '#fff',
  142. opacity: 0,
  143. },
  144. emphasis: {
  145. areaColor: '#96CFC6',
  146. opacity: 0,
  147. }
  148. },
  149. regions: [{
  150. value: 0,
  151. itemStyle: {
  152. normal: {
  153. opacity: 0,
  154. }
  155. },
  156. emphasis: {
  157. itemStyle: {
  158. areaColor: '#96CFC6',
  159. opacity: 0,
  160. }
  161. }
  162. }],
  163. },
  164. series: [
  165. {
  166. type: 'lines',
  167. zlevel: 1,
  168. symbol: ['none'],
  169. symbolSize: 10,
  170. animationDuration: 2500,
  171. animationDurationUpdate: 1000,
  172. lineStyle: {
  173. normal: {
  174. color: '#93C8BE',
  175. width: 2,
  176. opacity: 1,
  177. curveness: 0.05
  178. }
  179. },
  180. data: convert(formatLines(activeName))
  181. },
  182. {
  183. type: 'map',
  184. coordinateSystem: 'geo',
  185. geoIndex: 1,
  186. mapType: 'china',
  187. showLegendSymbol: false,
  188. showEffectOn: 'render',
  189. rippleEffect: {
  190. brushType: 'stroke'
  191. },
  192. roam: false,
  193. label: {
  194. normal: {
  195. show: false,
  196. areaColor: '#96CFC6',
  197. color: '#808080',
  198. },
  199. emphasis: {
  200. areaColor: '#96CFC6',
  201. opacity: 1,
  202. show: false
  203. }
  204. },
  205. regions: [{
  206. value: 0,
  207. itemStyle: {
  208. normal: {
  209. opacity: 0,
  210. }
  211. },
  212. }],
  213. data: areas.map(item => {
  214. item.selected = item.name === activeName
  215. return item
  216. }),
  217. },
  218. {
  219. type: 'effectScatter',
  220. coordinateSystem: 'geo',
  221. data: convertData(areas),
  222. symbolSize: 5,
  223. showEffectOn: 'render',
  224. rippleEffect: {
  225. brushType: 'stroke',
  226. scale: 6,
  227. period: 6,
  228. },
  229. hoverAnimation: true,
  230. label: {
  231. show: true,
  232. normal: {
  233. formatter: '{b}',
  234. position: 'left',
  235. show: true,
  236. color: '#808080',
  237. opacity: 1,
  238. }
  239. },
  240. itemStyle: {
  241. show: true,
  242. normal: {
  243. color: '#52C88D',
  244. }
  245. },
  246. zlevel: 9
  247. }
  248. ]
  249. })