echarts地图

效果图
在这里插入图片描述

源码(所需js文件可在资源中下载:《echarts地图所需文件》)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <!-- 引入组件库 -->
    <script src="..\script\echarts.min.js"></script>
    <script src="..\script\jquery-1.11.0.min.js"></script>
    <script src="..\script\china.js"></script>
    <title></title>
</head>
<body>
    <div style="width: 100%;height:900px;background: radial-gradient(#2e5290,#061125);">
        <div id="chartMap" style="width: 100%; height: 100%; "></div>
    </div>
</body>
</html>
<script>
    $(function () {
        var getMap = echarts.init($('#chartMap')[0]);
        var geoCoordMap = {
            '北京市': [116.39737, 39.939502, '北京'],
            '天津市': [117.133262, 39.256321, '天津市'],
            '上海市': [121.36464, 31.303465, '上海市'],
            '重庆市': [106.32485, 29.895013, '重庆市'],
            '河北省': [114.336873, 38.21885, '石家庄市'],
            '山西省': [112.349964, 38.044464, '太原市'],
            '辽宁省': [123.241164, 41.948112, '沈阳市'],
            '吉林省': [125.228072, 43.894927, '长春市'],
            '黑龙江省': [126.479088, 45.985284, '哈尔滨市'],
            '江苏省': [118.715429, 32.246466, '南京市'],
            '浙江省': [120.040035, 30.350837, '杭州市'],
            '安徽省': [117.170056, 31.99595, '合肥市'],
            '福建省': [119.156964, 26.182279, '福州市'],
            '江西省': [115.808656, 28.774611, '南昌市'],
            '山东省': [116.912494, 36.812038, '济南市'],
            '河南省': [113.453802, 34.895028, '郑州市'],
            '湖北省': [114.116105, 30.764814, '武汉市'],
            '湖南省': [112.800698, 28.474291, '长沙市'],
            '广东省': [113.233035, 23.224606, '广州市'],
            '海南省': [110.179083, 19.921006, '海口市'],
            '四川省': [103.924003, 30.796585, '成都市'],
            '贵州省': [106.499624, 26.844365, '贵阳市'],
            '云南省': [102.599397, 25.248948, '昆明市'],
            '陕西省': [108.780889, 34.408508, '西安市'],
            '甘肃省': [103.66644, 36.218003, '兰州市'],
            '青海省': [101.605943, 36.752842, '西宁市'],
            '西藏自治区': [90.972306, 29.838888, '拉萨市'],
            '广西壮族自治区': [108.265765, 23.020403, '南宁市'],
            '内蒙古自治区': [111.614073, 40.951504, '呼和浩特市'],
            '宁夏回族自治区': [106.094884, 38.624116, '银川市'],
            '新疆维吾尔自治区': [87.476819, 43.894927, '乌鲁木齐市'],
            '香港': [114.1529, 22.542716, '香港'],
            '澳门': [113.417008, 22.337477, '澳门'],
            '台湾省': [121.36464, 25.248948, '台北市']
        };
        var list = [
            [{ name: '上海市' }, { name: '安徽省', value: 90 }],
            [{ name: '上海市' }, { name: '广东省', value: 90 }],
            [{ name: '上海市' }, { name: '河北省', value: 90 }],
            [{ name: '上海市' }, { name: '湖南省', value: 90 }],
            [{ name: '上海市' }, { name: '重庆市', value: 90 }],
            [{ name: '上海市' }, { name: '上海市', value: 90 }],
            [{ name: '上海市' }, { name: '青海省', value: 90 }],
            [{ name: '上海市' }, { name: '内蒙古自治区', value: 90 }],
            [{ name: '上海市' }, { name: '新疆维吾尔自治区', value: 90 }],
            [{ name: '上海市' }, { name: '河南省', value: 90 }],
            [{ name: '上海市' }, { name: '黑龙江省', value: 90 }],
            [{ name: '上海市' }, { name: '西藏自治区', value: 90 }],
            [{ name: '上海市' }, { name: '广西壮族自治区', value: 90 }],
            [{ name: '上海市' }, { name: '辽宁省', value: 90 }],
            [{ name: '上海市' }, { name: '云南省', value: 90 }],
            [{ name: '上海市' }, { name: '海南省', value: 90 }]
        ];

        // 获取地图中起点和终点的坐标,以数组形式保存下来
        var convertData = function (data) {
            var res = [];
            for (var i = 0; i < data.length; i++) {
                var dataItem = data[i];
                var fromCoord = geoCoordMap[dataItem[1].name];
                var toCoord = geoCoordMap[dataItem[0].name];
                if (fromCoord && toCoord) {
                    res.push([{
                        coord: toCoord // 终点坐标
                    }, {
                        coord: fromCoord // 起点坐标
                    }])
                }
            }
            return res;
        }

        var color = ['#9ae5fc', '#dcbf71'];    // 自定义图中要用到的颜色
        var series = [];
        /*
            图中一共用到三种效果,分别为航线特效图、飞机航线图以及城市图标涟漪图。
            要用到setOption中的series属性,并且对每个城市都要进行三次设置。
        */
        [['上海市', list]].forEach(function (item, i) {
            series.push({
                // 白色航线特效图
                type: 'lines',
                zlevel: 1,                    // 用于分层,z-index的效果
                effect: {
                    show: true,               // 动效是否显示
                    period: 6,                // 特效动画时间
                    trailLength: 0.7,         // 特效尾迹的长度
                    color: '#fff',            // 特效颜色
                    symbolSize: 3             // 特效大小
                },
                lineStyle: {
                    normal: {                 // 正常情况下的线条样式
                        color: color[0],
                        width: 0,             // 因为是叠加效果,要是有宽度,线条会变粗,白色航线特效不明显
                        curveness: -0.2       // 线条曲度
                    }
                },
                data: convertData(item[1])    // 特效的起始、终点位置
            }, {  // 小飞机航线效果
                type: 'lines',
                zlevel: 2,
                //symbol: ['none', 'arrow'],   // 用于设置箭头
                symbolSize: 10,
                effect: {
                    show: true,
                    period: 6,
                    trailLength: 0,
                    symbol: 'none',         // 特效形状,可以用其他svg pathdata路径代替
                    symbolSize: 15
                },
                lineStyle: {
                    normal: {
                        color: color[0],
                        width: 1,
                        opacity: 0.6,
                        curveness: -0.2
                    }
                },
                data: convertData(item[1])     // 特效的起始、终点位置,一个二维数组,相当于coords: convertData(item[1])
            }, { // 散点效果
                type: 'effectScatter',
                coordinateSystem: 'geo',       // 表示使用的坐标系为地理坐标系
                zlevel: 3,
                rippleEffect: {
                    brushType: 'stroke'        // 波纹绘制效果
                },
                label: {
                    normal: {                  // 默认的文本标签显示样式
                        show: true,
                        position: 'left',      // 标签显示的位置
                        formatter: '{b}'       // 标签内容格式器
                    }
                },
                itemStyle: {
                    normal: {
                        color: color[0]
                    }
                },
                data: item[1].map(function (dataItem) {
                    return {
                        name: dataItem[1].name,
                        value: geoCoordMap[dataItem[1].name],  // 起点的位置
                        symbolSize: dataItem[1].value / 7,  // 散点的大小,通过之前设置的权重来计算,val的值来自data返回的value
                        count: dataItem[1].count,
                    };
                })
            });
        });
        series.push({
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 2,
            rippleEffect: { brushType: 'stroke', scale: 2 },
            label: {
                normal: {
                    show: true,
                    position: 'left',
                    formatter: '{b}'
                }
            },
            symbolSize: function (val) {
                return val[2] / 8;
            },
            itemStyle: {
                normal: { color: '#F4BE13' }
            },
        });
        // 最后初始化地图中的相关数据
        getMap.setOption({
            tooltip: {
                trigger: 'item',
                formatter: function (params) {//自定义鼠标悬停时展现内容
                    if (params.name) {
                        var relVal = params.name + ":" + geoCoordMap[params.name][2];
                        return relVal;
                    }
                }
            },
            geo: {
                map: 'china',
                zoom: 1.25,
                aspectScale: 0.7,
                label: {
                    normal: {
                        show: false,
                        fontSize: 10,
                        color: 'white'
                    },
                    emphasis: {
                        show: true,
                        color: '#77fbfa'
                    }
                },
                roam: true,
                itemStyle: {
                    normal: {
                        areaColor: '#1956a5',
                        borderColor: '#089abe'
                    },
                    emphasis: {
                        areaColor: '#459bfd'
                    }
                },
                regions: [
                    {
                        name: '南海诸岛',
                        itemStyle: {
                            normal: { opacity: 0 }
                        },
                        label: {
                            normal: { show: false }
                        }
                    }
                ]
            },
            series: series,   // 将之前处理的数据放到这里
            textStyle: {
                fontSize: 12
            }
        });

        //地图点击事件
        getMap.on('click', function (params) {
            alert(params.name);
        });
    })
</script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值