当前位置:   article > 正文

echarts 自定义3D城市地图_echarts3d地图

echarts3d地图

环境依赖

        "echarts": "^5.4.3",

        "echarts-gl": "^2.0.9"

城市边界信息

        DataV.GeoAtlas地理小工具系列

 这个需求第一方案想到的是使用高德地图JS API中”区域掩模“加上”立面体“实现,最后没有采用高德地图实现的原因是,高德地图无法实现透明天空,角度变换时,天空颜色无法去掉,不纠结天空的可以采用,省时省力并且自定义空间很大,最终采用echarts来实现。

echarts方案中遇到两个问题
        1、geo3D配合scatter3D,geo3D的regionHeight过高,会盖住scatter3D,解决方案是降低regionHeight值,5以内貌似没有问题,另一个是降低itemStyle的透明度,opacity设置低透明度

        2、geo3D配合scatter3D,scatter3D的坐标标注位置有偏差,感觉位置不准,幸亏项目需求是根据每个区域进行标注,并不需要根据坐标标注。

最后采用的两个map3D叠加实现,底层map3D用于展示城市面板,上层map3D用于展示标注。

  1. import * as echarts from "echarts";
  2. // 引入城市边界信息
  3. import Linyi from '@/api/linyi.json'
  4. // 引入echarts-gl,用于实现echarts 3D功能
  5. import 'echarts-gl'
  6. // 注册自定义城市边界信息
  7. echarts.registerMap('Linyi', Linyi);
  8. // 标注点背景图
  9. import scatter3dPoint from "@/assets/images/point.png"
  10. // 图表实例
  11. let chart = echarts.init(document.querySelector('.chart'));
  12. // map3D视角控制参数
  13. let viewControl = {
  14. beta: 35,
  15. alpha: 45,
  16. distance: 120,
  17. // zoomSensitivity: 0, // 是否允许放大
  18. // rotateSensitivity: 0,// 是否允许旋转
  19. };
  20. // 标注点数据
  21. // 这里的name需要和城市边界信息中的name对应才能显示出来,因为没有坐标信息,name是唯一可以对应起来的
  22. let pointData = [
  23. {name: '兰山区', value: 10},
  24. {name: '河东区', value: 20}
  25. ]
  26. let label = {
  27. show: true,
  28. formatter(params) {
  29. if (params.value) {
  30. return `{radiusBg|${params.value}}`
  31. } else {
  32. return null;
  33. }
  34. },
  35. rich: {
  36. radiusBg: {
  37. color: "#fff",
  38. align: 'center',
  39. width: 50,
  40. height: 50,
  41. fontSize: 22,
  42. },
  43. },
  44. textStyle: {
  45. width: 50,
  46. height: 64,
  47. backgroundColor: {
  48. image: scatter3dPoint
  49. }
  50. }
  51. };
  52. chart.setOption({
  53. series: [
  54. {
  55. zlevel: 10,
  56. viewControl,
  57. map: 'Linyi',
  58. type: "map3D",
  59. regionHeight: 10,
  60. label: {
  61. show: true,
  62. color: '#fff',
  63. fontWeight: 'bold',
  64. fontSize: 14,
  65. textShadowBlur: 2,
  66. textShadowOffsetY: 2,
  67. textShadowColor: 'rgba(0, 0, 0, 0.5)'
  68. },
  69. itemStyle: {
  70. opacity: 1,
  71. borderWidth: 2,
  72. color: '#428BF4',
  73. borderColor: '#61CFF8',
  74. },
  75. emphasis: {
  76. label: {
  77. show: true,
  78. textStyle: {
  79. color: '#fff'
  80. }
  81. },
  82. itemStyle: {
  83. color: '#007EE8',
  84. borderWidth: 10,
  85. borderColor: '#6BECF5'
  86. }
  87. },
  88. light: {
  89. ambient: {
  90. color: '#fff',
  91. intensity: 0.4
  92. }
  93. },
  94. },
  95. {
  96. zlevel: 20,
  97. viewControl,
  98. map: 'Linyi',
  99. type: "map3D",
  100. regionHeight: 10,
  101. itemStyle: {
  102. color: 'transparent'
  103. },
  104. emphasis: {
  105. itemStyle: {
  106. color: 'transparent'
  107. }
  108. },
  109. data: pointData.map(v => {
  110. v.label = label;
  111. v.emphasis = {
  112. label
  113. }
  114. return v
  115. })
  116. }
  117. ]
  118. });

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号