echarts添加地图散点


DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>地图下钻title>
    <style>
        body {
            margin: 0 auto;
        }

        #main {
            position: fixed;
            left: 0;
            right: 0;
            top: 0;
            bottom: 0;
        }
    style>
head>

<body>
    <div id="main">div>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js">script>
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.7.0/echarts.min.js">script>
    <script>
        let publicUrl = 'https://geo.datav.aliyun.com/areas_v2/bound/';
        async function initChart() {
            let chart = echarts.init(document.getElementById('main'));
            let alladcode = await getGeoJson('all.json')
            let chinaGeoJson = await getGeoJson('100000_full.json')
            initEcharts(chinaGeoJson, '中国', chart, alladcode)
        }
        initChart();

        // 每个地区的数据
        let mapData = [{
                name: "河南省",
                value: 1000
            },
            {
                name: "山东省",
                value: 500
            },
            {
                name: "安徽省",
                value: 700
            },
            {
                name: "山西省",
                value: 200
            },
            {
                name: "湖南省",
                value: 600
            },
            {
                name: "四川省",
                value: 1600
            }
        ]

        //echarts绘图
        function initEcharts(geoJson, name, chart, alladcode) {
            //获取当前显示地图下方地市的坐标点数据; 用于气泡显示
            let geoCoordMap = {};
            // 获取地区详细信息
            let mapFeatures = geoJson.features;
            // 遍历获取每个地区的经纬度
            mapFeatures.forEach(function (v, i) {
                // 获取当前地区名
                let name = v.properties.name;
                if (name) {
                    // 获取当前地区的经纬度
                    geoCoordMap[name] = v.properties.center;
                }
            });
            //将data数据进入方法,取需要的参数; 用于气泡显示
            let convertData = function (data) {
                var res = [];
                data.forEach(item => {
                    // 获取当前省份的经纬度坐标
                    let geoCoord = geoCoordMap[item.name];
                    if (geoCoord) {
                        res.push({
                            // name 表示地区名称
                            name: item.name,
                            // value数据格式为:[113.665412, 34.757975, '200']
                            value: geoCoord.concat(item.value)
                        });
                    }
                })
                return res;
            };

            echarts.registerMap(name, geoJson);
            var option = {
                title: {
                    text: name,
                    left: 'center',
                },
                //鼠标经过展示数据方法
                tooltip: {
                    triggerOn: "mousemove",
                    formatter: function (params) {
                        if (isNaN(params.value)) {
                            params.value = 0
                        }
                        if (params.seriesName === '散点') {
                            params.value = params.data.value[2]
                        }
                        var html = '' + params.name + '
' html += '值:' + params.value + '
' return html }, backgroundColor: 'rgba(29, 38, 71)', // 额外附加的阴影 extraCssText: 'box-shadow:0 0 4px rgba(11, 19, 43,0.8)', }, geo: { show: true, top: '15%', map: name, label: { normal: { show: false }, emphasis: { show: false, color: "#fff", } }, roam: true, itemStyle: { normal: { areaColor: '#116bda', borderColor: '#fff', }, emphasis: { areaColor: '#113cda', } } }, //进行气泡标点 series: [{ type: 'map', map: mapData, geoIndex: 0, aspectScale: 0.75, //长宽比 showLegendSymbol: false, // 存在legend时显示 label: { normal: { show: true }, emphasis: { show: false, textStyle: { color: '#fff' } } }, roam: true, itemStyle: { normal: { areaColor: '#031525', borderColor: '#3B5077', }, emphasis: { areaColor: '#2B91B7' } }, animation: true, data: mapData }, { name: '散点', // 自定义名称 type: 'effectScatter', // scatter effectScatter coordinateSystem: 'geo', // 设置坐标系类型 data: convertData(mapData), // 设置散点位置和数据 symbolSize: function (val) { // 设置散点大小 return 15 }, showEffectOn: 'render', rippleEffect: { brushType: 'stroke' }, hoverAnimation: true, // 是否显示鼠标悬浮动画 label: { // 静态显示时的样式 normal: { show: true, // 显示地区名称 formatter: function (data) { // 显示模板 return data.value[2] }, position: 'bottom', // 显示位置 }, // 鼠标悬浮上去的样式 emphasis: { show: true, // 显示地区名称 color: "red", }, }, itemStyle: { normal: { color: function (res) { let value = res.value[2] //根据value值对标点进行不同颜色显示 if (value < 500) { return '#ff3859' } else if (value < 1000) { return '#4ed7fa' } else if (value < 1500) { return '#fac531' } else { return '#01ff5b' } }, shadowBlur: 10, }, // 鼠标悬浮上去的样式 emphasis: { color: "red", }, }, zlevel: 3 } ] }; chart.setOption(option); // 解绑click事件 chart.off("click"); //给地图添加监听事件 chart.on('click', async params => { // 获取当前点击的地图code let clickRegion = alladcode.find(areaJson => areaJson.name === params.name); // 获取要获取地图的json名称 let regionJsonName = clickRegion.adcode + '_full.json' // 获取点击的区域名称 let cityName = params.name // 判断当前点击的地图等级,如果是区级,则再次点击时重新回到全国的数据 if (clickRegion.level === 'district') { regionJsonName = '100000_full.json' cityName = '山东省' } // 根据地图code获取 getGeoJson(regionJsonName).then((result) => { initEcharts(result, cityName, chart, alladcode) }) }) } //获取地图json数据 async function getGeoJson(jsonName) { return await $.get(publicUrl + jsonName) } script> body> html>

 效果