当前位置:   article > 正文

ECharts3D地图_echarts 3d 地球实现选中各大洲

echarts 3d 地球实现选中各大洲

1.小节概述

    上小节中,使用ECharts绘制出了地图数据展示,那么本小节将通过ECharts-GL进一步实现3D效果呈现。ECharts-GL为ECharts补充了丰富的三维可视化组件,ECharts-GL的配置项完全是按照ECharts的标准和上手难度来设计的,使得在不需要了解WebGL和三维动画原理的情况下也能绘制出想要的3D图表。在本小节中,主要记录ECharts3D地图的基础设置,结合实际业务场景实现地图标记、地图飞线、地图凸起等图表展现。

2.操作步骤

2.1.基础设置

1.安装配置echarts-gl:(1)在VSCode中,新建终端,运行指令下载Echarts-GL依赖(npm install echarts-gl),下载完成后可以看到package.json中相关依赖信息。(2)在main.js中引入echarts-gl即可。

注意事项:留意echarts-gl和echarts的版本兼容性问题,官方提供的版本兼容性说明如下:ECharts GL 2.x is compatible with ECharts 5.x. ECharts GL 1.x is compatible with ECharts 4.x.

2.在主页HomeView.vue中,存放文字链接(3D地图),点击跳转对应的路由页面,路由配置(router下的index.js)。

3.复制出一个的图表组件ChartMapSeven.vue放在ChartMapStereo页图表1的位置上进行地图数据展示。此处数据展示使用上节最后一个地图数据(河南省区域销售金额展示),参考代码:

  1. <template>
  2. <div class="mainDiv">
  3. <div class="titleDiv">区域销售金额</div>
  4. <div class="chartDiv" id="chartMapSeven"></div>
  5. </div>
  6. </template>
  7. <script>
  8. import HenanAreaMap from '@/assets/maps/HenanArea.json'
  9. export default {
  10. data() {
  11. return {
  12. chartData: {},
  13. }
  14. },
  15. name: 'ChartMapSeven',
  16. mounted() {
  17. this.getChartData().then(() => {
  18. // 数据请求到后渲染图表
  19. this.renderChart()
  20. })
  21. },
  22. methods: {
  23. // 请求数据回来
  24. async getChartData() {
  25. this.chartData = await this.$axios({ url: 'sales/area' })
  26. },
  27. // 渲染图表
  28. renderChart() {
  29. // 使用registerMap注册地图json数据
  30. this.$echarts.registerMap('HenanArea', HenanAreaMap)
  31. let myChart = this.$echarts.init(document.getElementById('chartMapSeven'))
  32. let chartData = this.chartData
  33. var option = {
  34. tooltip: {},
  35. series: [
  36. {
  37. name: '销售额',
  38. type: 'map3D',
  39. // registerMap注册的地图名称
  40. map: 'HenanArea',
  41. boxWidth: 70,
  42. viewControl: {
  43. distance: 90,
  44. },
  45. label: {
  46. show: true,
  47. textStyle: {
  48. fontSize: 12,
  49. color: '#1d1d1d',
  50. },
  51. },
  52. itemStyle: {
  53. areaColor: '#10786c',
  54. borderWidth: 1,
  55. borderColor: 'rgb(54,192,118)',
  56. },
  57. data: chartData.data.areaData,
  58. },
  59. ],
  60. }
  61. // 使用刚指定的配置项和数据显示图表
  62. myChart.setOption(option)
  63. },
  64. },
  65. }
  66. </script>
  67. <style scoped>
  68. </style>

2.2.地图标记

1.有时需要对地图上某个区域做下标记,和上节的设置类似,可以考虑配合3D散点(气泡图)来实现。复制出一个的图表组件ChartMapEight.vue放在ChartMapStereo页图表2的位置上进行展示,参考代码:

  1. <template>
  2. <div class="mainDiv">
  3. <div class="titleDiv">区域销售金额</div>
  4. <div class="chartDiv" id="chartMapEight"></div>
  5. </div>
  6. </template>
  7. <script>
  8. import HenanAreaMap from '@/assets/maps/HenanArea.json'
  9. export default {
  10. data() {
  11. return {
  12. chartData: {},
  13. }
  14. },
  15. name: 'ChartMapEight',
  16. mounted() {
  17. this.getChartData().then(() => {
  18. // 数据请求到后渲染图表
  19. this.renderChart()
  20. })
  21. },
  22. methods: {
  23. // 请求数据回来
  24. async getChartData() {
  25. this.chartData = await this.$axios({ url: 'sales/area' })
  26. },
  27. // 渲染图表
  28. renderChart() {
  29. // 使用registerMap注册地图json数据
  30. this.$echarts.registerMap('HenanArea', HenanAreaMap)
  31. let myChart = this.$echarts.init(document.getElementById('chartMapEight'))
  32. let chartData = this.chartData
  33. var option = {
  34. tooltip: {},
  35. geo3D: {
  36. show: false,
  37. map: 'HenanArea',
  38. boxWidth: 70,
  39. viewControl: {
  40. distance: 90,
  41. },
  42. },
  43. series: [
  44. {
  45. name: '销售额',
  46. type: 'map3D',
  47. // registerMap注册的地图名称
  48. map: 'HenanArea',
  49. boxWidth: 70,
  50. viewControl: {
  51. distance: 90,
  52. },
  53. label: {
  54. show: true,
  55. textStyle: {
  56. fontSize: 12,
  57. color: '#1d1d1d',
  58. },
  59. },
  60. itemStyle: {
  61. areaColor: '#10786c',
  62. borderWidth: 1,
  63. borderColor: 'rgb(54,192,118)',
  64. },
  65. data: chartData.data.areaData,
  66. },
  67. {
  68. type: 'scatter3D',
  69. coordinateSystem: 'geo3D',
  70. zlevel: 15,
  71. symbol: 'pin',
  72. symbolSize: 45,
  73. data: [
  74. {
  75. name: '豫中',
  76. value: [113.7395, 34.254862],
  77. },
  78. ],
  79. },
  80. {
  81. type: 'scatter3D',
  82. coordinateSystem: 'geo3D',
  83. zlevel: 15,
  84. symbol: 'pin',
  85. symbolSize: 45,
  86. data: [
  87. {
  88. name: '豫南',
  89. value: [114.000296,33.005005],
  90. },
  91. ],
  92. },
  93. ],
  94. }
  95. // 使用刚指定的配置项和数据显示图表
  96. myChart.setOption(option)
  97. },
  98. },
  99. }
  100. </script>
  101. <style scoped>
  102. </style>

2.至此,地图标记相关介绍告一段落,启动项目,预览ChartMapStereo页如下图:

2.3.地图飞线

1.在3D地图上添加飞线效果,可以考虑配合3D路径图来实现。复制出一个的图表组件ChartMapNine.vue放在ChartMapStereo页图表3的位置上进行展示,参考代码:

  1. <template>
  2. <div class="mainDiv">
  3. <div class="titleDiv">区域销售金额</div>
  4. <div class="chartDiv" id="chartMapNine"></div>
  5. </div>
  6. </template>
  7. <script>
  8. import HenanAreaMap from '@/assets/maps/HenanArea.json'
  9. export default {
  10. data() {
  11. return {
  12. chartData: {},
  13. }
  14. },
  15. name: 'ChartMapNine',
  16. mounted() {
  17. this.getChartData().then(() => {
  18. // 数据请求到后渲染图表
  19. this.renderChart()
  20. })
  21. },
  22. methods: {
  23. // 请求数据回来
  24. async getChartData() {
  25. this.chartData = await this.$axios({ url: 'sales/area' })
  26. },
  27. // 渲染图表
  28. renderChart() {
  29. // 使用registerMap注册地图json数据
  30. this.$echarts.registerMap('HenanArea', HenanAreaMap)
  31. let myChart = this.$echarts.init(document.getElementById('chartMapNine'))
  32. let chartData = this.chartData
  33. var option = {
  34. tooltip: {},
  35. geo3D: {
  36. show: false,
  37. map: 'HenanArea',
  38. boxWidth: 70,
  39. viewControl: {
  40. distance: 90,
  41. },
  42. },
  43. series: [
  44. {
  45. name: '销售额',
  46. type: 'map3D',
  47. // registerMap注册的地图名称
  48. map: 'HenanArea',
  49. boxWidth: 70,
  50. viewControl: {
  51. distance: 90,
  52. },
  53. label: {
  54. show: true,
  55. textStyle: {
  56. fontSize: 12,
  57. color: '#1d1d1d',
  58. },
  59. },
  60. itemStyle: {
  61. areaColor: '#10786c',
  62. borderWidth: 1,
  63. borderColor: 'rgb(54,192,118)',
  64. },
  65. data: chartData.data.areaData,
  66. },
  67. {
  68. type: 'lines3D',
  69. coordinateSystem: 'geo3D',
  70. zlevel: 10,
  71. effect: {
  72. show: true,
  73. period: 5,
  74. },
  75. lineStyle: {
  76. color: 'blue',
  77. width: 3,
  78. opacity: 0.5,
  79. },
  80. data: [
  81. {
  82. coords: [
  83. [113.417547, 34.18131],
  84. [113.620852, 32.944428],
  85. ],
  86. },
  87. ],
  88. },
  89. {
  90. type: 'lines3D',
  91. coordinateSystem: 'geo3D',
  92. zlevel: 10,
  93. effect: {
  94. show: true,
  95. period: 5,
  96. },
  97. lineStyle: {
  98. color: 'blue',
  99. width: 3,
  100. opacity: 0.5,
  101. },
  102. data: [
  103. {
  104. coords: [
  105. [113.417547, 34.18131],
  106. [114.946679, 34.461881],
  107. ],
  108. },
  109. ],
  110. },
  111. {
  112. type: 'lines3D',
  113. coordinateSystem: 'geo3D',
  114. zlevel: 10,
  115. effect: {
  116. show: true,
  117. period: 5,
  118. },
  119. lineStyle: {
  120. color: 'blue',
  121. width: 3,
  122. opacity: 0.5,
  123. },
  124. data: [
  125. {
  126. coords: [
  127. [113.417547, 34.18131],
  128. [114.015235, 35.729155],
  129. ],
  130. },
  131. ],
  132. },
  133. {
  134. type: 'lines3D',
  135. coordinateSystem: 'geo3D',
  136. zlevel: 10,
  137. effect: {
  138. show: true,
  139. period: 5,
  140. },
  141. lineStyle: {
  142. color: 'blue',
  143. width: 3,
  144. opacity: 0.5,
  145. },
  146. data: [
  147. {
  148. coords: [
  149. [113.417547, 34.18131],
  150. [111.894857, 34.638283],
  151. ],
  152. },
  153. ],
  154. },
  155. ],
  156. }
  157. // 使用刚指定的配置项和数据显示图表
  158. myChart.setOption(option)
  159. },
  160. },
  161. }
  162. </script>
  163. <style scoped>
  164. </style>

2.至此,地图飞线相关介绍告一段落,启动项目,预览ChartMapStereo页如下图:

2.4.地图凸起

1.有时想让地图上某些区域进行凸起显示,代表数据比较醒目。复制出一个的图表组件ChartMapTen.vue放在ChartMapStereo页图表4的位置上进行展示,参考代码:

  1. <template>
  2. <div class="mainDiv">
  3. <div class="titleDiv">区域销售金额</div>
  4. <div class="chartDiv" id="chartMapTen"></div>
  5. </div>
  6. </template>
  7. <script>
  8. import HenanAreaMap from '@/assets/maps/HenanArea.json'
  9. export default {
  10. data() {
  11. return {
  12. chartData: {},
  13. }
  14. },
  15. name: 'ChartMapTen',
  16. mounted() {
  17. this.getChartData().then(() => {
  18. // 数据请求到后渲染图表
  19. this.renderChart()
  20. })
  21. },
  22. methods: {
  23. // 请求数据回来
  24. async getChartData() {
  25. this.chartData = await this.$axios({ url: 'sales/area' })
  26. },
  27. // 渲染图表
  28. renderChart() {
  29. // 使用registerMap注册地图json数据
  30. this.$echarts.registerMap('HenanArea', HenanAreaMap)
  31. let myChart = this.$echarts.init(document.getElementById('chartMapTen'))
  32. let chartData = this.chartData
  33. var option = {
  34. tooltip: {},
  35. geo3D: {
  36. map: 'HenanArea',
  37. boxWidth: 70,
  38. viewControl: {
  39. distance: 90,
  40. },
  41. regions: [
  42. { name: '豫北', height: 15 },
  43. { name: '豫西', height: 8 },
  44. ],
  45. itemStyle: {
  46. areaColor: '#10786c',
  47. borderWidth: 1,
  48. borderColor: 'rgb(54,192,118)',
  49. },
  50. },
  51. series: [
  52. {
  53. name: '销售额',
  54. type: 'map3D',
  55. // registerMap注册的地图名称
  56. map: 'HenanArea',
  57. boxWidth: 70,
  58. viewControl: {
  59. distance: 90,
  60. },
  61. label: {
  62. show: true,
  63. textStyle: {
  64. fontSize: 12,
  65. color: '#1d1d1d',
  66. },
  67. },
  68. itemStyle: {
  69. areaColor: '#10786c',
  70. borderWidth: 1,
  71. borderColor: 'rgb(54,192,118)',
  72. },
  73. },
  74. ],
  75. }
  76. // 使用刚指定的配置项和数据显示图表
  77. myChart.setOption(option)
  78. },
  79. },
  80. }
  81. </script>
  82. <style scoped>
  83. </style>

2.至此,地图凸起相关介绍告一段落,启动项目,预览ChartMapStereo页如下图:

3.小节总结

    ECharts-GL以扩展包的形式为ECharts补充了丰富的三维可视化组件。在本小节中,主要记录了基于ECharts-GL实现ECharts3D地图,包括基础设置以及如何实现地图标记、地图飞线、地图凸起等可视化图表。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/82963
推荐阅读
相关标签
  

闽ICP备14008679号