echarts地图下钻效果

5 篇文章 0 订阅

先看效果图,第二张是因为数据差距过大导致。可调
在这里插入图片描述
在这里插入图片描述
再看代码

import * as echarts from 'echarts';
import mapJson from '../utils/福州市.json';
import mapJson1 from '../utils/三明市.json';
import mapJson2 from '../utils/福建省.json';
let selected='福建省'
export default {
    init (id, res, city=selected) {
        // var chartDom = document.getElementById(id);
        let  myChart = echarts.init(document.getElementById(id)); 
        let f = (id, res, selected) => {
            var data;
            var geoJson;
            if (selected === '三明市') {
                geoJson = mapJson1;
                data = [
                    { name: '梅列区', value: 0 },
                    { name: '三元区', value: 0 },
                    { name: '明溪县', value: 0 },
                    { name: '清流县', value: 0 },
                    { name: '宁化县', value: 0 },
                    { name: '大田县', value: 0 },
                    { name: '尤溪县', value: 0 },
                    { name: '沙县', value: 0 },
                    { name: '将乐县', value: 0 },
                    { name: '泰宁县', value: 0 },
                    { name: '建宁县', value: 0 },
                    { name: '永安市', value: 0 }
                ];
            } else if (selected === '福州市') {
                geoJson = mapJson;
                data = [
                    { name: '鼓楼区', value: 0 },
                    { name: '台江区', value: 0 },
                    { name: '仓山区', value: 0 },
                    { name: '马尾区', value: 0 },
                    { name: '晋安区', value: 0 },
                    { name: '长乐区', value: 0 },
                    { name: '闽侯县', value: 0 },
                    { name: '连江县', value: 0 },
                    { name: '罗源县', value: 0 },
                    { name: '闽清县', value: 0 },
                    { name: '永泰县', value: 0 },
                    { name: '平潭县', value: 0 },
                    { name: '福清市', value: 0 },
                ];
            } else if (selected === '福建省') {
                geoJson = mapJson2;
                data = [
                    { name: '福州市', value: 1550 },
                    { name: '三明市', value: 650 },
                    { name: '莆田市', value: 0 },
                    { name: '南平市', value: 0 },
                    { name: '宁德市', value: 0 },
                    { name: '龙岩市', value: 0 },
                    { name: '泉州市', value: 0 },
                    { name: '漳州市', value: 0 },
                    { name: '厦门市', value: 0 }
                ];
            }
            //获取当前显示地图下方地市的坐标点数据; 用于气泡显示
            var geoCoordMap = {};
            var mapFeatures = geoJson.features;
            mapFeatures.forEach(function (v, i) {
                var name = v.properties.name;
                geoCoordMap[name] = v.properties.centroid;
            });
            //将data数据进入方法,取需要的参数; 用于气泡显示
            var convertData = function (data) {
                let val = [];
                for (var i = 0; i < data.length; i++) {
                    var geoCoord = geoCoordMap[data[i].name];//这个是坐标
                    if (geoCoord) {
                        val.push({
                            name: data[i].name,
                            value:  geoCoord.concat(data[i].value),//value是要显示的数值
                        });
                    }
                    //name和value/cityCode参数根据实际项目中后台返回的参数名走;
                }
                return val;
            };
            // echarts.dispose(document.getElementById(id)); //先去掉原来的地图
            // myChart = echarts.init(document.getElementById(id));
            console.log(res)
            var option;
            myChart.showLoading();
            myChart.hideLoading();
            echarts.registerMap('SM', geoJson);
            for (let index = 0; index < res.length; index++) {
                const element = res[index];
                data.push({ "name": element.name, "value": element.value });
            }
            myChart.setOption(option = {
                title: {
                    // text: '泊位分布情况',
                },
                tooltip: {
                    trigger: 'item',
                    formatter: function(params) {
                      if (typeof (params.value)[2] == "undefined") {
                        if(isNaN(parseInt(params.value))){
                          return params.name + ' : ' + '-';
                        }else {
                          return params.name + ' : ' + params.value;
                        }
                      } else {
                        return params.name + ' : ' + params.value[2];
                      }
                     
                    }
                  },
                geo: {
                    show: true,
                    map: 'SM',
                    label: {
                      normal: {
                        show: false
                      },
                      emphasis: {
                        show: false,
                      }
                    },
                    // left:'45%', //调整地图初始化位置
                    roam: true,
                    itemStyle: {
                      normal: {
                        areaColor: 'transparent',
                        borderColor: '#3fdaff',
                        borderWidth: 2,
                        shadowColor: 'rgba(63, 218, 255, 0.5)',
                        shadowBlur: 30
                      },
                      emphasis: {
                        areaColor: '#2B91B7',
                      }
                    }
                  },
                toolbox: {
                    show: true,
                    orient: 'vertical',
                    left: 'right',
                    top: 'center',
                },
                visualMap: {
                    min: 0,
                    max: 100,
                    text: ['拥挤', '空闲'],
                    realtime: true,
                    calculable: false,
                    inRange: {
                        // color: ['#7ea4e0', '#6597e3', '#4a88e7', '#377de9', '#2472e8', '#1267ea']
                    },
                    //图列字体颜色
                    textStyle: {
                        color: '#fff',
                        fontSize:14
                    }

                },
                series: [{
                    name: '散点',
                    type: 'scatter',
                    coordinateSystem: 'geo',
                    data: convertData(data),
                    symbolSize:10,
                    label: {
                        normal: {
                            formatter: '{b}',
                            position: 'right',
                            show: true,
                            color: '#fff'
                        },
                        emphasis: {
                            show: true
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: '#fff'
                        }
                    }
                },
                {
                    type: 'map',
                    map: 'SM',
                    zoom: 12,
                    geoIndex: 0,
                    aspectScale: 0.75, //长宽比
                    showLegendSymbol: false, // 存在legend时显示
                    label: {
                      normal: {
                        show: false
                      },
                      emphasis: {
                        show: false,
                        textStyle: {
                          color: '#fff'
                        }
                      }
                    },
                    roam: true,
                    itemStyle: {
                      normal: {
                        areaColor: '#031525',
                        borderColor: '#FFFFFF',
                      },
                      emphasis: {
                        areaColor: '#2B91B7'
                      }
                    },
                    animation: false,
                    data: data
                  },{
                    name: '点',
                    type: 'scatter',
                    coordinateSystem: 'geo',
                    symbol: 'pin',
                    symbolSize: function (val) {
                        // var a = (maxSize4Pin - minSize4Pin) / (max - min);
                        // var b = minSize4Pin - a*min;
                        // b = maxSize4Pin - a*max;
                        // return a*val[2]+b;
                        return val[2]/30
                    },
                    label: {
                        normal: {
                            position: 'top',
                            formatter: function(res){
                                return res.value[2]
                            },
                            show: true,
                            textStyle: {
                                color: '#fff',
                                fontSize: 11,
                            }
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: '#F62157', //标志颜色
                        }
                    },
                    zlevel: 6,
                    data: convertData(data)
                },  {
                    name: 'Top 5',
                    type: 'effectScatter',
                    coordinateSystem: 'geo',
                    data: convertData(data.sort(function(a, b) {
                      return b.value - a.value;
                    })),
                    symbolSize: function(val) {
                      return 10;
                    },
                    showEffectOn: 'render',
                    rippleEffect: {
                      brushType: 'stroke'
                    },
                    hoverAnimation: true,
                    label: {
                      normal: {
                        formatter: '{b}',
                        position: 'right',
                        show: true
                      }
                    },
                    itemStyle: {
                      normal: {
                        color: '#F4E925',
                        shadowBlur: 10,
                        shadowColor: '#05C3F9'
                      }
                    },
                    zlevel: 1
                  },]
            });
            option && myChart.setOption(option);
        }
        //定义福建省的数组
        // let cities = ['福州市', '三明市', '莆田市', '南平市', '宁德市', '龙岩市', '洛阳市', '泉州市', '漳州市', '厦门市'];
        let citiesText = ['福州市', '三明市'];
        // // 定义初始加载的地图区域,福建省地图
        selected = city;
        f(id, res, selected)
        // 判断当前要加载的地图是不是范围内的市
        let isCity = (name) => {
            return citiesText.some((city) => {
                return city === name;
            })
        }
        // 监听地图点击事件
        myChart.on('click', (ev) => {
            // 如果点击的是一个市,那就切换到这个市的地图
            if (isCity(ev.name)) {
                selected = ev.name;
                // 从外部加载这个市的地图文件
                f(id, res, selected)
                return
            } else {
                // 否则切换福建省的地图
                selected = '福建省';
                f(id, res, selected)
                return
            }
        })
        window.addEventListener("resize", function() { //浏览器大小调整echarts随之改变
            myChart.resize();
        });

    }


}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值