当前位置:   article > 正文

echarts地图3D效果_echarts地图立体效果

echarts地图立体效果


 

  1. <template>
  2.     <div class="app-container">
  3.         <div class="chart-wrapper">
  4.             <div id="chinaMap" style="width: 100%;height: 80vh;"></div>
  5.         </div>
  6.     </div>
  7. </template>
  8. <script>
  9.     import * as echarts from 'echarts'
  10.     import chinaJson from './china.json' // 这个是中国地图json 
  11.     import 'echarts-gl'
  12.     export default {
  13.         name: '',
  14.         data() {
  15.             return {
  16.                 chinaMapData: [{
  17.                         name: '东北',
  18.                         value: this.randomValue(),
  19.                     },
  20.                     {
  21.                         name: '华北',
  22.                         value: this.randomValue()
  23.                     },
  24.                     {
  25.                         name: '西北',
  26.                         value: this.randomValue()
  27.                     },
  28.                     {
  29.                         name: '西南',
  30.                         value: this.randomValue()
  31.                     },
  32.                     {
  33.                         name: '华中',
  34.                         value: this.randomValue()
  35.                     },
  36.                     {
  37.                         name: '华南',
  38.                         value: this.randomValue()
  39.                     },
  40.                     {
  41.                         name: '华东',
  42.                         value: this.randomValue()
  43.                     }
  44.                 ],
  45.                 chinaDaquGeo: {}
  46.             }
  47.         },
  48.         methods: {
  49.             progressFormat(percentage) {
  50.                 return ""
  51.             },
  52.             randomValue() {
  53.                 return Math.round(Math.random() * 1000);
  54.             },
  55.             drawChinaMap(id) {
  56.                 this.mapCharts = echarts.init(document.getElementById(id));
  57.                 var option = {
  58.                     tooltip: {
  59.                         // show:false
  60.                         // formatter: function(params, ticket, callback) {
  61.                         //     return params.seriesName + '<br />' + params.name + ':' + params.value
  62.                         // } //数据格式化
  63.                     },
  64.                     // visualMap使用了不能单独对板块设置颜色 (geo-> regions -> itemStyle -> areaColor )
  65.                     visualMap: {
  66.                         min: 0,
  67.                         max: 1500,
  68.                         left: 'left',
  69.                         top: 'bottom',
  70.                         type: "piecewise",
  71.                         //text: ['高','低'],//取值范围的文字
  72.                         inRange: {
  73.                             color: ['#e0ffff', '#006edd'] //取值范围的颜色
  74.                         },
  75.                         show: true //图注
  76.                     },
  77.                     // geo: {
  78.                     //     map: 'china',
  79.                     //     roam: true, //不开启缩放和平移
  80.                     //     zoom: 1, //视角缩放比例
  81.                     //     center: [108.5525, 34.3227],
  82.                     //     label: {
  83.                     //         normal: {
  84.                     //             show: true,
  85.                     //             fontSize: '18',
  86.                     //             color: 'rgba(0,0,0,0.7)'
  87.                     //         }
  88.                     //     },
  89.                     //     regions: [{ // 可对单个地图区域进行设置
  90.                     //         name: '华北', // 所对应的地图区域的名称
  91.                     //         //regionHeight: '',            // 区域的高度,可以设置不同的高度用来表达数据的大小。当 GeoJSON 为建筑的数据时,也可以通过这个值表示简直的高度。
  92.                     //         itemStyle: { // 单个区域的样式设置
  93.                     //             color: '#00FF00',
  94.                     //             opacity: 1,
  95.                     //             borderWidth: 0.4,
  96.                     //             areaColor: '#5F9EA0'
  97.                     //         },
  98.                     //         emphasis: { // 鼠标 hover 高亮时图形和标签的样式 (当鼠标放上去时  label和itemStyle 的样式) 
  99.                     //             label: { // label高亮时的配置
  100.                     //                 show: true,
  101.                     //                 textStyle: {
  102.                     //                     color: '#fff   ', // 高亮时标签颜色变为 白色
  103.                     //                     fontSize: 15, // 高亮时标签字体 变大
  104.                     //                 }
  105.                     //             },
  106.                     //             itemStyle: { // itemStyle高亮时的配置
  107.                     //                 areaColor: '#5F9EA0', // 高亮时地图板块颜色改变
  108.                     //             }
  109.                     //         },
  110.                     //     }, {
  111.                     //         name: '西南',
  112.                     //         itemStyle: {
  113.                     //                 areaColor: 'red',
  114.                     //                 color: 'red',
  115.                     //                  borderColor:'red'
  116.                     //             },
  117.                     //         emphasis: { // 鼠标 hover 高亮时图形和标签的样式 (当鼠标放上去时  label和itemStyle 的样式) 
  118.                     //             label: { // label高亮时的配置
  119.                     //                 show: true,
  120.                     //                 textStyle: {
  121.                     //                     color: '#fff   ', // 高亮时标签颜色变为 白色
  122.                     //                     fontSize: 15, // 高亮时标签字体 变大
  123.                     //                 }
  124.                     //             },
  125.                     //             itemStyle: { // itemStyle高亮时的配置
  126.                     //                 areaColor: '#F3B329', // 高亮时地图板块颜色改变
  127.                     //             }
  128.                     //         },
  129.                     //     }],
  130.                     //     itemStyle: {
  131.                     //         normal: {
  132.                     //             borderColor: 'rgba(0, 0, 0, 0.2)'
  133.                     //         },
  134.                     //         emphasis: {
  135.                     //             areaColor: '#F3B329', //鼠标选择区域颜色
  136.                     //             shadowOffsetX: 0,
  137.                     //             shadowOffsetY: 0,
  138.                     //             shadowBlur: 20,
  139.                     //             borderWidth: 0,
  140.                     //             shadowColor: 'rgba(0, 0, 0, 0.5)'
  141.                     //         }
  142.                     //     }
  143.                     // },
  144.                     geo: [{
  145.                                                 map: 'china',
  146.                                                 zlevel:5,
  147.                                                 label: {
  148.                                                     show: true,
  149.                                                     color: '#eee'
  150.                                                 },
  151.                                                 itemStyle: {
  152.                                                     color: '#2075B8', // 背景
  153.                                                     borderWidth: '1', // 边框宽度
  154.                                                     borderColor: '#fff', // 边框颜色
  155.                                                 }
  156.                                             },
  157.                                             {
  158.                                                 map: 'china',
  159.                                                 top:'11%',
  160.                                                 zlevel:4,
  161.                                                 itemStyle: {
  162.                                                     color: '#3C5FA1', // 背景
  163.                                                     borderWidth: '1', // 边框宽度
  164.                                                     borderColor: '#3C5FA1', // 边框颜色
  165.                                                 }
  166.                                             },
  167.                                             {
  168.                                                 map: 'china',
  169.                                                 top:'12%',
  170.                                                 zlevel:3,
  171.                                                 itemStyle: {
  172.                                                     color: '#163F6C', // 背景
  173.                                                     borderWidth: '1', // 边框宽度
  174.                                                     borderColor: '#163F6C', // 边框颜色
  175.                                                 }
  176.                                             },
  177.                                             {
  178.                                                 map: 'china',
  179.                                                 top:'13%',
  180.                                                 zlevel:2,
  181.                                                 itemStyle: {
  182.                                                     color: '#31A0E6', // 背景
  183.                                                     borderWidth: '1', // 边框宽度
  184.                                                     borderColor: '#31A0E6', // 边框颜色
  185.                                                     shadowColor: '#fff',  // 外部阴影 
  186.                                                     shadowBlur:'10'
  187.                                                 }
  188.                                             }
  189.                                         ],
  190.                     
  191.                 
  192.                     series: [
  193.                         // {
  194.                         //            type: "scatter",
  195.                         //            roam: false,
  196.                         //            zoom: 1,
  197.                         //            coordinateSystem: "geo",
  198.                         //            data: [[121.221, 23.43, 12]], //散点的数据
  199.                         //            symbol: function (params) {
  200.                         //               return "image://http://47.96.130.88:9000/liughhxcdmsg/temp/xiangmu_1676884761006.png" ;
  201.                         //              // if (params[2] === "0") {
  202.                         //              //   return "image://" + process.env.BASE_URL + "map/1.svg";
  203.                         //              // } else if (params[2] === "1") {
  204.                         //              //   return "image://http://47.96.130.88:9000/liughhxcdmsg/temp/xiangmu_1676884761006.png" ;
  205.                         //              // }
  206.                         //            }, // svg图标
  207.                         //            z: 2,
  208.                         //            symbolSize: [48.63, 40], // symbols图标大小
  209.                         //          },
  210.                         {
  211.                             name: '事业部',
  212.                             type: 'map',
  213.                                 // type: 'map3D',
  214.                             geoIndex: 0,
  215.                             data: this.chinaMapData,
  216.                             markPoint: { //图表标注。
  217.                                 label: {
  218.                                     normal: {
  219.                                         show: true,
  220.                                     },
  221.                                     emphasis: {
  222.                                         show: true,
  223.                                     }
  224.                                 },
  225.                                 itemStyle: {
  226.                                     normal: {
  227.                                         color: 'rgba(72,150,128,1)'
  228.                                     }
  229.                                 },
  230.                                 data: [{
  231.                                     name: "四川移动",
  232.                                     coord: [
  233.                                         123.97, 47.33 //坐标,通过百度地图提取
  234.                                     ],
  235.                                     symbol: 'http://47.96.130.88:9000/liughhxcdmsg/temp/xiangmu_1676884761006.png', // 标注图片地址路径
  236.                                     symbolSize: 32,
  237.                                     service: '这个是自定义的字段,不是echarts的配置',
  238.                                     url: '这个也是自定义的字段,不是echarts的配置'
  239.                                 }, {
  240.                                     name: "河南电信",
  241.                                     coord: [
  242.                                         105.97, 36.33
  243.                                     ],
  244.                                     symbol: 'http://47.96.130.88:9000/liughhxcdmsg/temp/xiangmu_1676884761006.png', // 标注图片地址路径
  245.                                     symbolSize: 32,
  246.                                     service: '自定义',
  247.                                     url: 'http://www.idcd.com'
  248.                                 }, ]
  249.                             }
  250.                         },
  251.                         // 散点图
  252.                         { // 涟漪效果
  253.                             name: 'Top 6',
  254.                             type: 'effectScatter',
  255.                             coordinateSystem: 'geo',
  256.                             data: [{
  257.                                     name: "苏尼特左旗",
  258.                                     value: [113.653412, 43.854108, 4500]
  259.                                 },
  260.                                 {
  261.                                     name: "二连浩特市",
  262.                                     value: [111.97981, 43.652895, 3560]
  263.                                 },
  264.                                 {
  265.                                     name: "阿巴嘎旗",
  266.                                     value: [114.970618, 44.022728, 3300]
  267.                                 },
  268.                                 {
  269.                                     name: "苏尼特右旗",
  270.                                     value: [112.65539, 42.746662, 2800]
  271.                                 },
  272.                                 {
  273.                                     name: "正镶白旗",
  274.                                     value: [115.031423, 42.286807, 2100]
  275.                                 },
  276.                                 {
  277.                                     name: "太仆寺旗",
  278.                                     value: [115.28728, 41.895199, 1900]
  279.                                 }
  280.                             ],
  281.                             symbolSize: function(val) {
  282.                                 return val[2] / 200;
  283.                             },
  284.                             encode: {
  285.                                 value: 2
  286.                             },
  287.                             showEffectOn: 'render',
  288.                             rippleEffect: {
  289.                                 brushType: 'stroke', //fill 、stroke
  290.                                 color: 'red'
  291.                             },
  292.                             emphasis: {
  293.                                 scale: false
  294.                             },
  295.                             label: {
  296.                                 position: 'left',
  297.                                 // formatter: '{b}',
  298.                                 position: 'right',
  299.                                 show: true,
  300.                                 // formatter:'{b}'
  301.                                 formatter: '{b}: {@score}'
  302.                                 // formatter: function(params) {
  303.                                 //     // console.log(params)
  304.                                 //     return `${params.data.name}:${params.data.value[2]}个`
  305.                                 // } //数据格式化
  306.                             },
  307.                             hoverAnimation: true, //是否开启鼠标 hover 的提示动画效果
  308.                             itemStyle: {
  309.                                 shadowBlur: 10,
  310.                                 shadowColor: 'rgba(230, 10, 10, 1)',
  311.                                 color: 'red'
  312.                             },
  313.                             zlevel: 8
  314.                         }
  315.                     ]
  316.                 };
  317.                 this.mapCharts.setOption(option);
  318.                 this.mapCharts.on('click', params => {
  319.                     console.log(params)
  320.                     let clickRegionCode = params.data.cityCode;
  321.                     // this.getGeoJson(clickRegionCode)
  322.                     //     .then(regionGeoJson => this.initEcharts(regionGeoJson.data, params.data.cityCode))
  323.                     //     .catch(err => {
  324.                     //         this.getGeoJson('440000').then(GdGeoJson => this.initEcharts(GdGeoJson.data,
  325.                     //             '440000'))
  326.                     //     })
  327.                 })
  328.                 // },
  329.                 /*this.mapCharts.on('click', function (params) {
  330.                   alert(params.name);
  331.                 });*/
  332.             },
  333.             //划分大区
  334.             mergeProvinces(chinaJson, names, properties) { //合并大区里省份的coordinates
  335.                 var features = chinaJson.features;
  336.                 var polygons = [];
  337.                 for (var i = 0; i < names.length; i++) {
  338.                     var polygonsCoordinates = [];
  339.                     for (var z = 0; z < names[i].length; z++) {
  340.                         for (var j = 0; j < features.length; j++) {
  341.                             if (features[j].properties.name == names[i][z]) {
  342.                                 // polygonsCoordinates.push(features[j].geometry.coordinates[k][d]);
  343.                                 // if (features[j].geometry.coordinates[0].constructor == String) { //合并coordinates
  344.                                 //     for (var l = 0; l < features[j].geometry.coordinates.length; l++) {
  345.                                 //         polygonsCoordinates.push(features[j].geometry.coordinates[l]);
  346.                                 //     }
  347.                                 // } else if (features[j].geometry.coordinates[0].constructor == Array) {
  348.                                 for (var k = 0; k < features[j].geometry.coordinates.length; k++) {
  349.                                     if (features[j].properties.name == '内蒙古自治区') {
  350.                                         polygonsCoordinates.push(features[j].geometry.coordinates[k]);
  351.                                     } else {
  352.                                         for (var d = 0; d < features[j].geometry.coordinates[k].length; d++) {
  353.                                             polygonsCoordinates.push(features[j].geometry.coordinates[k][d]);
  354.                                         }
  355.                                     }
  356.                                     //         for (var d = 0; d < features[j].geometry.coordinates[k].length; d++) {
  357.                                     //                 polygonsCoordinates.push(features[j].geometry.coordinates[k][d]);
  358.                                     //         }
  359.                                 }
  360.                                 // }
  361.                                 break;
  362.                             }
  363.                         }
  364.                     }
  365.                     polygons.push(polygonsCoordinates);
  366.                 }
  367.                 // 构建新的合并区域
  368.                 var features = [];
  369.                 for (var a = 0; a < names.length; a++) {
  370.                     var feature = {
  371.                         id: features.length.toString(),
  372.                         type: "FeatureCollection",
  373.                         geometry: {
  374.                             type: "Polygon",
  375.                             coordinates: polygons[a]
  376.                         },
  377.                         properties: {
  378.                             name: properties.name[a] || "",
  379.                             childNum: polygons[a].length
  380.                         }
  381.                     };
  382.                     if (properties.cp[a]) {
  383.                         feature.properties.cp = properties.cp[a];
  384.                     }
  385.                     // 将新的合并区域添加到地图中
  386.                     features.push(feature);
  387.                 }
  388.                 console.log(polygons)
  389.                 this.chinaDaquGeo.type = "FeatureCollection";
  390.                 this.chinaDaquGeo.features = features;
  391.             },
  392.             repRegionStrategy() {
  393.                 var params = {
  394.                     names: [ //把各个大区的省份用二维数组分开
  395.                         ['北京市', '天津市', '河北省', '山西省', '内蒙古自治区'],
  396.                         ["黑龙江省", "吉林省", "辽宁省"],
  397.                         ['山东省', '江苏省', '安徽省', '江西省', '浙江省', '福建省', '上海市', '台湾省'],
  398.                         ['河南省', '湖北省', '湖南省'],
  399.                         ['广东省', '广西壮族自治区', '海南省', '香港特别行政区', '澳门特别行政区'],
  400.                         ['重庆市', '四川省', '云南省', '西藏自治区', '贵州省'],
  401.                         ['陕西省', '甘肃省', '青海省', '宁夏回族自治区', '新疆维吾尔自治区']
  402.                     ],
  403.                     properties: { //自定义大区的名字,要和上面的大区省份一一对应
  404.                         name: ['华北', '东北', '华东', '华中', '华南', '西南', '西北'],
  405.                         cp: [ //经纬度可以自己随意定义
  406.                             [116.24, 40.54],
  407.                             [126.32, 43.50],
  408.                             [121.28, 31.13],
  409.                             [114.20, 30.32],
  410.                             [113.15, 23.08],
  411.                             [104.04, 30.39],
  412.                             [103.49, 36.03]
  413.                         ]
  414.                     }
  415.                 };
  416.                 this.mergeProvinces(chinaJson, params.names, params.properties);
  417.             }
  418.         },
  419.         //调用
  420.         created() {
  421.             this.repRegionStrategy()
  422.             // 注册地图 
  423.             echarts.registerMap('china', this.chinaDaquGeo) // 如果是js引入就不需要这一行了
  424.             
  425.         },
  426.         mounted() {
  427.             // this.repRegionStrategy()
  428.             // // 注册地图
  429.             // this.echarts.registerMap('china', this.chinaDaquGeo) // 如果是js引入就不需要这一行了
  430.             this.$nextTick(function() {
  431.                 this.drawChinaMap('chinaMap')
  432.                 // this.repRegionStrategy()
  433.                 // 注册地图
  434.                 // this.echarts.registerMap('china', this.chinaDaquGeo) // 如果是js引入就不需要这一行了
  435.             })
  436.         }
  437.     }
  438. </script>
  439. <style scoped>
  440.     #chinaMap {
  441.         background-color: beige;
  442.     }
  443. </style>

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

闽ICP备14008679号