Echarts:map地图渲染及省市区下钻

最近项目有省市各个区域设备心跳检测的一个需求,所以就接触到echarts的地图map相关知识点,对最近了解的一些知识点做一下总结,希望对有需要了解的小伙伴有些帮助,正文开始:

开发过程中需要注意的地方:

1、读取json文件数据的话需要在项目中跑,因为是ajax请求,在静态页面中单独这样引入是会报错的

2、地图数据data里面的名称,也就是区域名称字段值必须与json文件里面的各个区域名称保持一致,不然鼠标悬浮区域名称会不显示

代码片段,需要注意的地方注释的很清楚,请各位仔细阅读代码:

jsp:

<div id="main-map" style="width: 100%;height:400px;"></div>

//引入需要的js文件
<script type="text/javascript" src="<%=basePath%>plugins/echarts.min.js"></script>
<%--<script type="text/javascript" src="<%=basePath%>plugins/jquery-1.8.3.js"></script>--%>
<%--可以引入js文件,也可以读取json文件,我是读的json文件--%>
<%--<script type="text/javascript" src="<%=basePath%>js/echarts3.2.2/map/anhui.js"> </script>--%>
<script type="text/javascript" src="你自己的js"></script>
<script>
    context = '${pageContext.request.contextPath}';
</script>
<script>
    menuChart.init();
</script>

JS:

var context;
var menuChart = function ($) {
    //area即是对应区域的json文件名,如:anhui.json等
    function initMap(geoCoordMap, moveLine, data, area) {
        var myChart = echarts.init(document.getElementById('main-map'));
        myChart.showLoading();
        //注意:读取json文件的数据话需要在项目中跑,因为是ajax请求,在静态页面中单独这样引入是会报错的
        $.getJSON(context + "/static/json/" + area + ".json", function (geoJson) {
            echarts.registerMap(area, geoJson);
            myChart.hideLoading();
            var max = 480, min = 9; // todo
            var maxSize4Pin = 100, minSize4Pin = 20;
            var convertData = function (data) {
                var res = [];
                for (var i = 0; i < data.length; i++) {
                    var geoCoord = geoCoordMap[data[i].name];
                    if (geoCoord) {
                        res.push({
                            name: data[i].name,
                            value: geoCoord.concat(data[i].value)
                        });
                    }
                }
                return res;
            };

            option = {
                backgroundColor: '#091c3d',
                title: {
                    top: 20,
                    text: '',
                    subtext: '',
                    x: 'center',
                    textStyle: {
                        color: '#ccc'
                    }
                },

                tooltip: {
                    trigger: 'item',
                    formatter: function (params) {
                        /*注意:这里地图数据data里面的名称,也就是name字段值必须与anhui.json里面的各个市名称保持一致
                        不然鼠标悬浮会显示NaN*/
                        if (params.seriesIndex === 0) {//悬浮在站点
                            return params.name + ' : ' + params.data.value[2];
                            // }
                            // if(typeof(params.value)[2] == "undefined"){
                            //     return params.name + ' : ' + params.value;
                        } else if (params.seriesIndex === 1) {//悬浮在地图省范围内
                            return params.name + ' : ' + params.data.value;
                        } else {//悬浮在站点连线
                            return params.seriesName + " : " + params.data.toName + ' - ' + params.data.fromName;
                        }
                    }
                },
                legend: {
                    orient: 'vertical',
                    y: 'bottom',
                    x: 'right',
                    data: ['pm2.5'],
                    textStyle: {
                        color: '#fff'
                    }
                },
                visualMap: {
                    show: false,
                    min: 0,
                    max: 500,
                    left: 'left',
                    top: 'bottom',
                    text: ['高', '低'], // 文本,默认为数值文本
                    calculable: true,
                    seriesIndex: [1],
                    inRange: {
                        // color: ['#3B5077', '#031525'] // 蓝黑
                        // color: ['#ffc0cb', '#800080'] // 红紫
                        // color: ['#3C3B3F', '#605C3C'] // 黑绿
                        //color: ['#0f0c29', '#302b63', '#24243e'] // 黑紫黑
                        //color: ['#23074d', '#cc5333'] // 紫红
                        // color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#1488CC', '#2B32B2'] // 浅蓝
                        // color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#00467F', '#A5CC82'] // 蓝绿

                    }
                },
                // toolbox: {
                //     show: true,
                //     orient: 'vertical',
                //     left: 'right',
                //     top: 'center',
                //     feature: {
                //             dataView: {readOnly: false},
                //             restore: {},
                //             saveAsImage: {}
                //             }
                // },
                geo: {
                    show: true,
                    map: area,
                    label: {
                        normal: {
                            show: false
                        },
                        emphasis: {
                            show: false,
                        }
                    },
                    roam: true,
                    itemStyle: {
                        normal: {
                            areaColor: 'transparent',
                            borderColor: '#3fdaff',
                            borderWidth: 2,
                            shadowColor: 'rgba(63, 218, 255, 0.5)',
                            shadowBlur: 30
                        },
                        emphasis: {
                            areaColor: '#2B91B7',
                        }
                    }
                },
                series: [
                    {
                        name: '站点',
                        type: 'scatter',
                        coordinateSystem: 'geo',
                        data: convertData(data),
                        // symbolSize: function (val) {
                        //     return val[2] / 10;
                        // },
                        label: {
                            normal: {
                                formatter: '{b}',
                                position: 'right',
                                show: true
                            },
                            emphasis: {
                                show: true
                            }
                        },
                        itemStyle: {
                            normal: {
                                color: '#F4E925'
                            }
                        }
                    },
                    {
                        type: 'map',
                        map: area,
                        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: 'Top 5',
                    //     type: 'effectScatter',
                    //     coordinateSystem: 'geo',
                    //     data: convertData(data.sort(function (a, b) {
                    //         return b.value - a.value;
                    //     }).slice(0, 5)),
                    //     symbolSize: function (val) {
                    //         return val[2] / 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
                    // },
                    {
                        name: '正常线路',
                        type: 'lines',
                        coordinateSystem: 'geo',
                        zlevel: 2,
                        large: true,
                        effect: {
                            show: true,
                            constantSpeed: 30,
                            symbol: 'arrow',//ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'
                            symbolSize: 0,
                            trailLength: 0,
                        },

                        lineStyle: {
                            normal: {
                                color: '#0fff17',
                                /*
                                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                        offset: 0, color: '#58B3CC'
                                    }, {
                                        offset: 1, color: '#F58158'
                                    }], false),*/
                                width: 2,
                                opacity: 1.0,
                                curveness: 0.15
                            }
                        },
                        data: moveLine.normal
                    },
                    {
                        name: '异常线路',
                        type: 'lines',
                        coordinateSystem: 'geo',
                        zlevel: 2,
                        large: true,
                        effect: {
                            show: true,
                            constantSpeed: 30,
                            symbol: 'arrow',//ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'
                            symbolSize: 10,
                            trailLength: 0,
                        },

                        lineStyle: {
                            normal: {
                                color: 'rgb(255, 0, 0)',
                                width: 2,
                                opacity: 1,
                                curveness: 0.15
                            }
                        },
                        data: moveLine.warning
                    }

                ]
            };
            myChart.setOption(option);
            myChart.off('chick');
            //下钻其实就是点击事件,切换脚本而已
            myChart.on('click', function (area) {
                console.log(area.name);//获取点击的市名去读取数据对应的市名的json数据,所以要用第二个链接去下载所有需要的json文件
                //这里根据省市区域信息查询下钻数据去重新渲染图表
                $.ajax({
                    url: "",
                    data: "",//查询条件
                    type: "",
                    async: false,//设置同步
                    succesee: function (d) {
                        geoCoordMap = d.siteMap;
                        moveLine = d.moveLine;
                        data = d.siteConfig;
                        initMap(geoCoordMap, moveLine, data, area.name);
                    }
                })
            });

        });
    }

    function init() {
        //数据结构可以参考第一个demo链接里面的数据自己封装从后台获取即可,也可以直接用写死的模拟数据,数据结构保持一致即可
        var geoCoordMap = {};
        var moveLine = {};
        var data = [];
        $.ajax({
            url: context + '/hbConfig/heartBeatInfo.do',
            type: 'get',
            async: false,
            success: function (d) {
                geoCoordMap = d.siteMap;
                moveLine = d.moveLine;
                data = d.siteConfig;
                //一开始是获取安徽的数据,所以area一开始可以写死,之后下钻根据市名下钻
                initMap(geoCoordMap, moveLine, data, "anhui");
            },
            error: function () {

            }
        })

    }

    return {
        init: function () {
            init();
        }
    }
}(jQuery, document)

 

提供两个比较重要的链接:

1、http://gallery.echartsjs.com/editor.html?c=xn_Oh9Y92C  :安徽省市地图渲染demo

2、http://gallery.echartsjs.com/editor.html?c=xr1IEt3r4Q      :全国所有省市区县的地图json数据,在网上不经意间找到的一个资源链接,帮大忙了,感谢那位小伙伴

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值