zoukankan      html  css  js  c++  java
  • 第一周周总结

    2020.02.22

    利用echarts中的中国地图,并将各省疫情相关数据显示在图上,此问题主要为地图的显示和数据的传输

    下面代码为该地图的显示,其利用了各个省的现成json数据来显示,并将疫情数据通过ajax异步传输给前端。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html style="height: 100%">
    <head>
    <meta charset="UTF-8">
    <title>地图</title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/dist/extension/dataTool.min.js"></script>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js"></script>
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
    </head>
    <body style="height: 100%; margin: 0">
    	<div id="ditu" style="height:100%"></div>
    	<script type="text/javascript">
    	$(function() {
    		$.get('${pageContext.request.contextPath}/servlet?method=quanguo',
    				function(data) {
    					init(data);
    				});
    
    	});
    	function init(data) {
    		var allData=data;
    		var dom = document.getElementById("ditu");
    		var myChart = echarts.init(dom);
    		var app = {};
    		option = null;
    		//各省份的地图json文件
    		var provinces = {
    		    '上海': 'ss/data-1482909900836-H1BC_1WHg.json',
    		    '河北': 'ss/data-1482909799572-Hkgu_yWSg.json',
    		    '山西': 'ss/data-1482909909703-SyCA_JbSg.json',
    		    '内蒙古': 'ss/data-1482909841923-rkqqdyZSe.json',
    		    '辽宁': 'ss/data-1482909836074-rJV9O1-Hg.json',
    		    '吉林': 'ss/data-1482909832739-rJ-cdy-Hx.json',
    		    '黑龙江': 'ss/data-1482909803892-Hy4__J-Sx.json',
    		    '江苏': 'ss/data-1482909823260-HkDtOJZBx.json',
    		    '浙江': 'ss/data-1482909960637-rkZMYkZBx.json',
    		    '安徽': 'ss/data-1482909768458-HJlU_yWBe.json',
    		    '福建': 'ss/data-1478782908884-B1H6yezWe.json',
    		    '江西': 'ss/data-1482909827542-r12YOJWHe.json',
    		    '山东': 'ss/data-1482909892121-BJ3auk-Se.json',
    		    '河南': 'ss/data-1482909807135-SJPudkWre.json',
    		    '湖北': 'ss/data-1482909813213-Hy6u_kbrl.json',
    		    '湖南': 'ss/data-1482909818685-H17FOkZSl.json',
    		    '广东': 'ss/data-1482909784051-BJgwuy-Sl.json',
    		    '广西': 'ss/data-1482909787648-SyEPuJbSg.json',
    		    '海南': 'ss/data-1482909796480-H12P_J-Bg.json',
    		    '四川': 'ss/data-1482909931094-H17eKk-rg.json',
    		    '贵州': 'ss/data-1482909791334-Bkwvd1bBe.json',
    		    '云南': 'ss/data-1482909957601-HkA-FyWSx.json',
    		    '西藏': 'ss/data-1482927407942-SkOV6Qbrl.json',
    		    '陕西': 'ss/data-1482909918961-BJw1FyZHg.json',
    		    '甘肃': 'ss/data-1482909780863-r1aIdyWHl.json',
    		    '青海': 'ss/data-1482909853618-B1IiOyZSl.json',
    		    '宁夏': 'ss/data-1482909848690-HJWiuy-Bg.json',
    		    '新疆': 'ss/data-1482909952731-B1YZKkbBx.json',
    		    '北京': 'ss/data-1482818963027-Hko9SKJrg.json',
    		    '天津': 'ss/data-1482909944620-r1-WKyWHg.json',
    		    '重庆': 'ss/data-1482909775470-HJDIdk-Se.json',
    		    '香港': 'ss/data-1461584707906-r1hSmtsx.json',
    		    '澳门': 'ss/data-1482909771696-ByVIdJWBx.json'
    		};
    
    	
    		loadMap('ss/data-1527045631990-r1dZ0IM1X.json', 'china');//初始化全国地图
    
    		var timeFn = null;
    
    		//单击切换到省级地图,当mapCode有值,说明可以切换到下级地图
    		myChart.on('click', function(params) {
    		    clearTimeout(timeFn);
    		    //由于单击事件和双击事件冲突,故单击的响应事件延迟250毫秒执行
    		    timeFn = setTimeout(function() {
    		        var name = params.name; //地区name
    		        var mapCode = provinces[name]; //地区的json数据
    		        if (!mapCode) {
    		            alert('无此区域地图显示');
    		            return;
    		        }
    
    		        loadMap(mapCode, name);
    		        
    		    }, 250);
    		});
    
    
    		// 绑定双击事件,返回全国地图
    		myChart.on('dblclick', function(params) {
    		    //当双击事件发生时,清除单击事件,仅响应双击事件
    		    clearTimeout(timeFn);
    		    
    		    //返回全国地图
    		    loadMap('ss/data-1527045631990-r1dZ0IM1X.json', 'china');
    		});
    
    		/**
    		 获取对应的json地图数据,然后向echarts注册该区域的地图,最后加载地图信息
    		 @params {String} mapCode:json数据的地址
    		 @params {String} name: 地图名称
    		 */
    		function loadMap(mapCode, name) {
    		    $.get(mapCode, function(data) {
    		        if (data) {
    		            echarts.registerMap(name, data);
    		            var option = {
    		                tooltip: {
    		                    show: true,
    		                    formatter: function(params) {
    		                        if (params.data) return params.name + '确诊:' + params.data['value']
    		                    },
    		                },
    		               
    		                visualMap: {
    		                    min: 0,
    		                    max: 1000,
    		                    left: 26,
    		                    bottom: 40,
    		                    showLabel: !0,
    		                    text: ["高", "低"],
    		                    pieces: [{
    		                        gt: 10000,
    		                        label: "> 10000 人",
    		                        color: "#7f1100"
    		                    }, {
    		                        gte: 1000,
    		                        lte: 9999,
    		                        label: "1000 - 9999 人",
    		                        color: "#ff5428"
    		                    }, {
    		                        gte: 100,
    		                        lt: 999,
    		                        label: "100 - 999 人",
    		                        color: "#ff8c71"
    		                    }, {
    		                        gt: 10,
    		                        lt: 99,
    		                        label: "10 - 99",
    		                        color: "#ffd768"
    		                    }, {
    		                        gt: 0,
    		                        lt: 9,
    		                        label: "1 - 9",
    		                        color: "#FFF0F5"
    		                    },{
    		                        value: 0,
    		                        color: "#ffffff"
    		                    }],
    		                    show: !0
    		                },
    		                series: [{
    		                    name: 'MAP',
    		                    type: 'map',
    		                    mapType: name,
    		                    selectedMode: 'false',//是否允许选中多个区域
    		                    label: {
    		                        normal: {
    		                            show: true
    		                        },
    		                        emphasis: {
    		                            show: true
    		                        }
    		                    },
    		                    data: allData
    		                }]
    		            };
    		            myChart.setOption(option);
    		            // curMap = {
    		            //     mapCode: mapCode,
    		            //     mapName: name
    		            // };
    		        } else {
    		            alert('无法加载该地图');
    		        }
    		    });
    		};
    		if (option && typeof option === "object") {
    			myChart.setOption(option, true);
    		}
    	}
    	</script>
    </body>
    </html>
    

      

    下边的代码为可下钻的中国地图,其可下钻到省市

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
    <script type="text/javascript" src="js/dataTool.js"></script>
    <script type="text/javascript" src="js/echarts.js"></script>
    </head>
    <body>
    <script type="text/javascript">
    /*注:源码就是下面这些,只要复制到开发工具就行,然后把
    地图json数据(下载地址:https://share.weiyun.com/5x12K4r)的路径放对,
    并且要导入echarts就可以渲染出来地图了*/
    var zhongguo = "map/data-china.json";
    var hainan = "map/data-hainan.json";
    var xizang = "map/data-xizang.json";
    var zhejiang = "map/data-zhejiang.json";
    var yunnan = "map/data-yunnan.json";
    var xinjiang = "map/data-xinjiang.json";
    var tianjin = "map/data-tianjin.json";
    var sichuan = "map/data-sichuan.json";
    var shanxi = "map/data-shanxi.json";
    var shangxi = "map/data-shangxi.json";
    var shanghai = "map/data-shanghai.json";
    var shangdong = "map/data-shangdong.json";
    var qinghai = "map/data-qinghai.json";
    var ningxia = "map/data-ningxia.json";
    var neimenggu = "map/data-neimenggu.json";
    var liaoning = "map/data-liaoning.json";
    var jilin = "map/data-jilin.json";
    var jiangxi = "map/data-jiangxi.json";
    var jiangsu = "map/data-jiangsu.json";
    var hunan = "map/data-hunan.json";
    var hubei = "map/data-hubei.json";
    var henan = "map/data-henan.json";
    var heilongjiang = "map/data-heilongjiang.json";
    var hebei = "map/data-hebei.json";
    var guizhou = "map/data-guizhou.json";
    var guangxi = "map/data-guangxi.json";
    var guangdong = "map/data-guangdong.json";
    var gansu = "map/data-gansu.json";
    var chongqing = "map/data-chongqing.json";
    var aomen = "map/data-aomen.json";
    var anhui = "map/data-anhui.json";
    var beijing = "map/data-beijing.json";
    var fujian = "map/data-fujian.json";
    var xianggang = "map/data-xianggang.json";
    
    echarts.extendsMap = function(id, opt) {
        // 实例
        var chart = this.init(document.getElementById('main'));
    
        var curGeoJson = {};
        var cityMap = {
            '中国': zhongguo,
            '上海': shanghai,
            '河北': hebei,
            '山西': shangxi,
            '内蒙古': neimenggu,
            '辽宁': liaoning,
            '吉林': jilin,
            '黑龙江': heilongjiang,
            '江苏': jiangsu,
            '浙江': zhejiang,
            '安徽': anhui,
            '福建': fujian,
            '江西': jiangxi,
            '山东': shangdong,
            '河南': henan,
            '湖北': hubei,
            '湖南': hunan,
            '广东': guangdong,
            '广西': guangxi,
            '海南': hainan,
            '四川': sichuan,
            '贵州': guizhou,
            '云南': yunnan,
            '西藏': xizang,
            '陕西': shanxi,
            '甘肃': gansu,
            '青海': qinghai,
            '宁夏': ningxia,
            '新疆': xinjiang,
            '北京': beijing,
            '天津': tianjin,
            '重庆': chongqing,
            '香港': xianggang,
            '澳门': aomen
        };
    
        var levelColorMap = {
            '1': 'rgba(241, 109, 115, .8)',
            '2': 'rgba(255, 235, 59, .7)',
            '3': 'rgba(147, 235, 248, 1)'
        };
    
        var defaultOpt = {
            mapName: 'china', // 地图展示
            goDown: false, // 是否下钻
            bgColor: '#404a59', // 画布背景色
            activeArea: [], // 区域高亮,同echarts配置项
            data: [],
            // 下钻回调(点击的地图名、实例对象option、实例对象)
            callback: function(name, option, instance) {}
        };
        if (opt) opt = this.util.extend(defaultOpt, opt);
    
        // 层级索引
        var name = [opt.mapName];
        var idx = 0;
        var pos = {
            leftPlus: 115,
            leftCur: 150,
            left: 198,
            top: 50
        };
    
        var line = [
            [0, 0],
            [8, 11],
            [0, 22]
        ];
        // style
        var style = {
            font: '18px "Microsoft YaHei", sans-serif',
            textColor: '#eee',
            lineColor: 'rgba(147, 235, 248, .8)'
        };
    
        var handleEvents = {
            /**
             * i 实例对象
             * o option
             * n 地图名
             **/
            resetOption: function(i, o, n) {
                var breadcrumb = this.createBreadcrumb(n);
                var j = name.indexOf(n);
                var l = o.graphic.length;
                if (j < 0) {
                    o.graphic.push(breadcrumb);
                    o.graphic[0].children[0].shape.x2 = 145;
                    o.graphic[0].children[1].shape.x2 = 145;
                    if (o.graphic.length > 2) {
                        var cityData = [];
                        var cityJson;
                        for (var x = 0; x < opt.data.length; x++) {
                            if(n === opt.data[x].city){
                                $([opt.data[x]]).each(function(index,data){
                                    cityJson = {city:data.city,name:data.name,value:data.value,crew:data.crew,company:data.company,position:data.position,region:data.region};
                                    cityData.push(cityJson)
                                }) 
                            }
                        }
                        
                        if(cityData!=null){
                            o.series[0].data = handleEvents.initSeriesData(cityData);
                        }else{
                            o.series[0].data = [];
                        }
                        
                        
                    }
                    name.push(n);
                    idx++;
                } else {
                    o.graphic.splice(j + 2, l);
                    if (o.graphic.length <= 2) {
                        o.graphic[0].children[0].shape.x2 = 60;
                        o.graphic[0].children[1].shape.x2 = 60;
                        o.series[0].data = handleEvents.initSeriesData(opt.data);
                    };
                    name.splice(j + 1, l);
                    idx = j;
                    pos.leftCur -= pos.leftPlus * (l - j - 1);
                };
    
                o.geo.map = n;
                o.geo.zoom = 0.4;
                i.clear();
                i.setOption(o);
                this.zoomAnimation();
                opt.callback(n, o, i);
            },
    
            /**
             * name 地图名
             **/
            createBreadcrumb: function(name) {
                var cityToPinyin = {
                    '中国': 'zhongguo',
                    '上海': 'shanghai',
                    '河北': 'hebei',
                    '山西': 'shangxi',
                    '内蒙古': 'neimenggu',
                    '辽宁': 'liaoning',
                    '吉林': 'jilin',
                    '黑龙江': 'heilongjiang',
                    '江苏': 'jiangsu',
                    '浙江': 'zhejiang',
                    '安徽': 'anhui',
                    '福建': 'fujian',
                    '江西': 'jiangxi',
                    '山东': 'shangdong',
                    '河南': 'henan',
                    '湖北': 'hubei',
                    '湖南': 'hunan',
                    '广东': 'guangdong',
                    '广西': 'guangxi',
                    '海南': 'hainan',
                    '四川': 'sichuan',
                    '贵州': 'guizhou',
                    '云南': 'yunnan',
                    '西藏': 'xizang',
                    '陕西': 'shanxi',
                    '甘肃': 'gansu',
                    '青海': 'qinghai',
                    '宁夏': 'ningxia',
                    '新疆': 'xinjiang',
                    '北京': 'beijing',
                    '天津': 'tianjin',
                    '重庆': 'chongqing',
                    '香港': 'xianggang',
                    '澳门': 'aomen'
                };
                var breadcrumb = {
                    type: 'group',
                    id: name,
                    left: pos.leftCur + pos.leftPlus,
                    top: pos.top + 3,
                    children: [{
                        type: 'polyline',
                        left: -90,
                        top: -5,
                        shape: {
                            points: line
                        },
                        style: {
                            stroke: '#fff',
                            key: name
                            // lineWidth: 2,
                        },
                        onclick: function() {
                            var name = this.style.key;
                            handleEvents.resetOption(chart, option, name);
                        }
                    }, {
                        type: 'text',
                        left: -68,
                        top: 'middle',
                        style: {
                            text: name,
                            textAlign: 'center',
                            fill: style.textColor,
                            font: style.font
                        },
                        onclick: function() {
                            var name = this.style.text;
                            handleEvents.resetOption(chart, option, name);
                        }
                    }, {
                        type: 'text',
                        left: -68,
                        top: 10,
                        style: {
    
                            name: name,
                            text: cityToPinyin[name] ? cityToPinyin[name].toUpperCase() : '',
                            textAlign: 'center',
                            fill: style.textColor,
                            font: '12px "Microsoft YaHei", sans-serif',
                        },
                        onclick: function() {
                            // console.log(this.style);
                            var name = this.style.name;
                            handleEvents.resetOption(chart, option, name);
                        }
                    }]
                }
    
                pos.leftCur += pos.leftPlus;
    
                return breadcrumb;
            },
    
           // 设置effectscatter
            initSeriesData: function(data) {
                var temp = [];
                for (var i = 0; i < data.length; i++) {
                    var geoCoord = geoCoordMap[data[i].name];
                    if (geoCoord) {
                        temp.push({
                            name: data[i].name,
                            value: geoCoord.concat(data[i].value),
                            crew:data[i].crew,
    						company:data[i].company,
    						position:data[i].position,
    						region:data[i].region
                        });
                    }
                };
                return temp;
            },
            zoomAnimation: function() {
                var count = null;
                var zoom = function(per) {
                    if (!count) count = per;
                    count = count + per;
                    // console.log(per,count);
                    chart.setOption({
                        geo: {
                            zoom: count
                        }
                    });
                    if (count < 1) window.requestAnimationFrame(function() {
                        zoom(0.2);
                    });
                };
                window.requestAnimationFrame(function() {
                    zoom(0.2);
                });
            }
        };
    
        var option = {
            backgroundColor: opt.bgColor,
             tooltip: {
                show: true,
                trigger:'item',
                alwaysShowContent:false,
                backgroundColor:'rgba(50,50,50,0.7)',
                hideDelay:100,
                triggerOn:'mousemove',
                enterable:true,
                position:['60%','70%'],
                formatter:function(params, ticket, callback){
                    return '简称:'+params.data.name+'<br/>'+'机组:'+params.data.crew+'万千瓦'+'<br/>'+'公司名称:'+params.data.company+'<br/>'+'所属大区:'+params.data.region+'<br/>'+'所在位置:'+params.data.position
                }
            },
            graphic: [{
                type: 'group',
                left: pos.left,
                top: pos.top - 4,
                children: [{
                    type: 'line',
                    left: 0,
                    top: -20,
                    shape: {
                        x1: 0,
                        y1: 0,
                        x2: 60,
                        y2: 0
                    },
                    style: {
                        stroke: style.lineColor,
                    }
                }, {
                    type: 'line',
                    left: 0,
                    top: 20,
                    shape: {
                        x1: 0,
                        y1: 0,
                        x2: 60,
                        y2: 0
                    },
                    style: {
                        stroke: style.lineColor,
                    }
                }]
            }, 
            {
                id: name[idx],
                type: 'group',
                left: pos.left + 2,
                top: pos.top,
                children: [{
                    type: 'polyline',
                    left: 90,
                    top: -12,
                    shape: {
                        points: line
                    },
                    style: {
                    	
                        stroke: 'transparent',
                        key: name[0]
                    },
                    onclick: function() {
                        var name = this.style.key;
                        handleEvents.resetOption(chart, option, name);
                    }
                }, {
                    type: 'text',
                    left: 0,
                    top: 'middle',
                    style: {
                        text: '中国',
                        textAlign: 'center',
                        fill: style.textColor,
                        font: style.font
                    },
                    onclick: function() {
                        handleEvents.resetOption(chart, option, '中国');
                    }
                }, {
                    type: 'text',
                    left: 0,
                    top: 10,
                    style: {
                        text: 'China',
                        textAlign: 'center',
                        fill: style.textColor,
                        font: '12px "Microsoft YaHei", sans-serif',
                    },
                    onclick: function() {
                        handleEvents.resetOption(chart, option, '中国');
                    }
                }]
            }],
            geo: {
                map: opt.mapName,
                roam: true,
                zoom: 1,
                label: {
                    normal: {
                        show: true,
                        textStyle: {
                            color: '#fff'
                        }
                    },
                    emphasis: {
                        textStyle: {
                            color: '#fff'
                        }
                    }
                },
                itemStyle: {
                    normal: {
                        borderColor: 'rgba(147, 235, 248, 1)',
                        borderWidth: 1,
                        areaColor: {
                            type: 'radial',
                            x: 0.5,
                            y: 0.5,
                            r: 0.8,
                            colorStops: [{
                                offset: 0,
                                color: 'rgba(147, 235, 248, 0)' // 0% 处的颜色
                            }, {
                                offset: 1,
                                color: 'rgba(147, 235, 248, .2)' // 100% 处的颜色
                            }],
                            globalCoord: false // 缺省为 false
                        },
                        shadowColor: 'rgba(128, 217, 248, 1)',
                        // shadowColor: 'rgba(255, 255, 255, 1)',
                        shadowOffsetX: -2,
                        shadowOffsetY: 2,
                        shadowBlur: 10
                    },
                    emphasis: {
                        areaColor: '#389BB7',
                        borderWidth: 0
                    }
                },
                regions: opt.activeArea.map(function(item) {
                    if (typeof item !== 'string') {
                        return {
                            name: item.name,
                            itemStyle: {
                                normal: {
                                    areaColor: item.areaColor || '#389BB7'
                                }
                            },
                            label: {
                                normal: {
                                    show: item.showLabel,
                                    textStyle: {
                                        color: '#fff'
                                    }
                                }
                            }
                        }
                    } else {
                        return {
                            name: item,
                            itemStyle: {
                                normal: {
                                    borderColor: '#91e6ff',
                                    areaColor: '#389BB7'
                                }
                            }
                        }
                    }
                })
            },
            series: [{
                type: 'effectScatter',
                coordinateSystem: 'geo',
                showEffectOn: 'render',
                rippleEffect: {
                    period:15,
                    scale: 4,
                    brushType: 'fill'
                },
                hoverAnimation: true,
                itemStyle: {
                    normal: {
                        color: '#FFC848',
                        shadowBlur: 10,
                        shadowColor: '#333'
                    }
                },
                data: handleEvents.initSeriesData(opt.data)
            }]
        };
    
        chart.setOption(option);
        // 添加事件
        chart.on('click', function(params) {
            var _self = this;
            if (opt.goDown && params.name !== name[idx]) {
                if (cityMap[params.name]) {
                    var url = cityMap[params.name];
                    $.get(url, function(response) {
                        //console.log(response);
                        curGeoJson = response;
                        echarts.registerMap(params.name, response);
                        handleEvents.resetOption(_self, option, params.name);
                    });
                }
            }
        });
    
        chart.setMap = function(mapName) {
            var _self = this;
            if (mapName.indexOf('市') < 0) mapName = mapName + '市';
            var citySource = cityMap[mapName];
            if (citySource) {
                var url = './map/' + citySource + '.json';
                $.get(url, function(response) {
                    // console.log(response);
                    curGeoJson = response;
                    echarts.registerMap(mapName, response);
                    handleEvents.resetOption(_self, option, mapName);
                });
            }
            
        };
    
        return chart;
    };
    
    $.getJSON(zhongguo, function(geoJson) {
        echarts.registerMap('中国', geoJson);
        var myChart = echarts.extendsMap('chart-panel', {
            bgColor: '#154e90', // 画布背景色
            mapName: '中国', // 地图名
            goDown: true, // 是否下钻
            // 下钻回调
            callback: function(name, option, instance) {
                //console.log(name, option, instance);
            },
           
        });
    })
    </script>
    <div id="main" style="100%;height:1000px;"></div>
    </body>
    </html>
    

      

  • 相关阅读:
    【shell】sed指定追加模式空间的次数
    【shell】sed后向引用替换文本
    【c++】一道关于继承和析构的笔试题
    【curl】cookie的分隔符
    【shell】grep使用正则表达式
    【leetcode】Remove Duplicates from Sorted Array
    【shell】awk格式对齐文本
    【shell】sed处理多行合并
    【leetcode】Permutations
    BWSAP BW Performance Tuning URLS LIST
  • 原文地址:https://www.cnblogs.com/zjl-0217/p/12963267.html
Copyright © 2011-2022 走看看