• Echarts 地理信息可视化:基于地图显示坐标点信息


    Ecahrts 基于地理信息的可视化

    Echarts 是一款基于js的交互式图表工具
    这一模型可用于显示气候、地理、人流等各种信息。

    在这里插入图片描述

    1、环境

    • 在线调试echarts的功能可以在官网,选择实例下任意一个点开:

    在这里插入图片描述
    然后在左侧的编辑框中即可编辑(其中包含了自动渲染脚本,十分适合入门使用):
    在这里插入图片描述

    • 或者也可以下载到本地按照普通的js包调试, 这里是对应api教程

    2、地理信息绘制

    首先需要明确要显示的地理位置和对应的物理量

    //显示地理信息
    //主要参考了一下demo:
    //http://www.echartsjs.com/examples/editor.html?c=effectScatter-bmap
    //http://www.echartsjs.com/examples/editor.html?c=map-parallel-prices
    //http://www.echartsjs.com/examples/editor.html?c=line-simple 
    //http://www.echartsjs.com/examples/editor.html?c=pie-legend
    
    //首先先定义需要显示对应信息的位置坐标,按照[纬度,精度]的格式
    var geoCoordMap = {
        '位置1':[90.9180416971,41.0807155340],
        '位置2':[123.4965120599,51.0206466741],
        '位置3':[100.4728967514,26.1734892363],
        '位置4':[121.5121844054,31.2106872661],
        '位置5':[111.50148,31.2458353752],
        '位置6':[111.50148,24.2458353752],
        //ref:http://www.gpsspg.com/maps.htm  //这里可以得到对应地点的gps经纬度,也可批量查询
        //http://lbsyun.baidu.com/index.php?title=jspopular/guide/conflux 
        //http://lbsyun.baidu.com/custom/
    
    };
    //随后定义每个位置需要显示的量的值
    var data = [
         {name: '位置1', value: 19},
         {name: '位置2', value: 20},
         {name: '位置3', value: 32},
         {name: '位置4', value: 24},
         {name: '位置5', value: 46},
         {name: '位置6', value: 30},
    ];

    随后需要对数据进行处理,将坐标信息和对应物理量的值合在一起。

    
    var convertData = function (data) {
        var res = [];
        for (var i = 0; i < data.length; i++) {
            var geoCoord = geoCoordMap[data[i].name];    //首先根据data中的name作为键值读入地理坐标
            //var rjj1 = data[i].value;
            if (geoCoord) {
                res.push({
                    name: data[i].name,
                    value: geoCoord.concat(data[i].value)   //随后将地理坐标与对应信息值衔接起来
                    //成为了 [name 经度 纬度 value]的形式
    
                });
            }
        }
        //console.log(res)
        return res;
    };

    接下来就是对于echarts 对象具体值的设置了,全局选项option

    option = {
        title: {
            text: '地理信息显示  - 实时',    //整个图标的标题显示
            subtext: 'data from lalala',    //子标题显示
            sublink: 'http://somewhere',	//子标题超链接
            left: 'center',                 //标题位置 可以left center right
            textStyle : {
                color: '#2f2f2f',	//	定义字体颜色
                fontFamily:'STKaiti',  //定义字体
                //https://www.zhangxinxu.com/wordpress/2017/03/css-font-family-chinese-english/
                //这里可以找到各种字体对应的英文
                fontSize:'30',		//定义字体大小
            }
        },
        tooltip : {
            trigger: 'item'    //提示框
        },
        
        
        
        //这部分用来绘制每一个点的信息随时间的变化,叠加在地图上
        //for time serial lines  
        xAxis: {
            type: 'category',
            data: ['spring', 'summer', 'autumn', 'Winter'],    //x轴的各个时序指标
        },
        yAxis: {
            type: 'value',  //y值为数值
            splitLine:{show: false},//去除网格线
        },
        legend: {
        data:['位置1','位置2'],    //所要画的位置,作为画时序线的系列
        y: 'bottom',               //legend的y位置top bottom right left
        x: 'right',               //legend的x位置
        orient: 'vertical',       //图例的排序,垂直或者水平
        top: '80%',				//距离顶端的百分比,也可以用像素来做大小
        left: '5%'              //图例距离左端的百分比
        },
        grid: {
            top: '80%',bottom:'5%', left: '15%',right: '50%',
            //坐标轴距离上下左右的百分比
            opacity: '0.1'   //透明度
            
        },
        Opacity: 0.2,
        //for time
        //画时序图的坐标轴定义结束
        
        //******************************************************************//
        //百度地图api的设置
        bmap: {
                center: [111.43066322374, 31.090018034923],  //初始化中心点坐标
                zoom: 5,   			//放大级别,越大越细致
                roam: true,		//是否可以漫游拖动
                mapStyle: {    //地图各个指标的json定义
                	//参考://http://lbsyun.baidu.com/custom/
                    styleJson: [{
                        'featureType': 'water',  //水域
                        'elementType': 'all',
                        'stylers': {
                            'color': 'lightb'  //颜色
                            //'color': '1773c3'
                        }
                    }, {
                        'featureType': 'land',  //陆地
                        'elementType': 'all',
                        'stylers': {
                            'color': '#f3f3f3'
                            //'color': '#091632'
                        }
                    }, {
                        'featureType': 'railway',  //铁路
                        'elementType': 'all',
                        'stylers': {
                            'visibility': 'off'  //不显示
                        }
                    }, {
                        'featureType': 'highway',  //高速路
                        'elementType': 'all',
                        'stylers': {
                            'visibility': 'off'
                        }
                    }, {
                        'featureType': 'highway',  //高速路标签
                        'elementType': 'labels',
                        'stylers': {
                            'visibility': 'off'
                        }
                    }, {
                        'featureType': 'arterial',  //道路
                        'elementType': 'geometry',
                        'stylers': {
                            'visibility': 'off'
                        }
                    }, {
                        'featureType': 'arterial',
                        'elementType': 'geometry.fill',
                        'stylers': {
                            'color': '#fefefe'
                        }
                    }, {
                        'featureType': 'poi',  //point of interesting
                        'elementType': 'all',
                        'stylers': {
                            'visibility': 'off'
                        }
                    }, {
                        'featureType': 'green',   //绿地
                        'elementType': 'all',
                        'stylers': {
                            'visibility': 'off'
                        }
                    }, {
                        'featureType': 'subway',  //地铁
                        'elementType': 'all',
                        'stylers': {
                            'visibility': 'off'
                        }
                    }, {
                        'featureType': 'manmade',   //人造
                        'elementType': 'all',
                        'stylers': {
                            'color': '#d1d1d1'
                        }
                    }, {
                        'featureType': 'local',
                        'elementType': 'all',
                        'stylers': {
                            'color': '#d1d1d1'
                        }
                    }, {
                        'featureType': 'arterial',  
                        'elementType': 'labels',
                        'stylers': {
                            'visibility': 'off'
                        }
                    }, {
                        'featureType': 'district',  //行政区标签
                        'elementType': 'all',
                        'stylers': {
                            'color': '#eeeeee'
                        }
                    }, {
                        'featureType': 'building',  //建筑
                        'elementType': 'all',
                        'stylers': {
                            'color': '#d1d1d1'
                        }
                    }, {
                        'featureType': 'label',   	//标签字体填充
                        'elementType': 'labels.text.fill',
                        'stylers': {
                            'color': '#999999'
                        }
                    }]
                    //更多属性请参考:http://lbsyun.baidu.com/custom/
            }
        },
        //下面定义各个系列列表 子图画图的过程
        series : [
            {
                name: '全部',   //首先定义全部点用散点图画出来
                type: 'scatter',
                coordinateSystem: 'bmap',   //以地图为底图坐标
                data: convertData(data),  //数据来自于先前定义的函数
                symbolSize: function (val) {
                    return val[2] / 2;  //用值的大小来调整点的大小 
                    //[name:'位置',value:[经度0 纬度 value]]的形式,其中value为第二维量
                },
                label: {
                    normal: {
                        formatter: '{b}',
                        position: 'right',
                        show: false
                    },
                    emphasis: {
                        show: true
                    }
                },
                itemStyle: {
                    normal: {
                        color: 'green'   //点的颜色
                    }
                }
            },
            {
                name: 'Top 3',  //定义一个排序显示,显示值最大前三个
                type: 'effectScatter',  //特效散点图显示
                coordinateSystem: 'bmap',
                data: convertData(data.sort(function (a, b) {
                    return b.value - a.value;
                }).slice(0, 3)),   //拍出最大的三个值0,1,2  //从零开始是且为左包含
                symbolSize: function (val) {
                    return val[2]/2;  
                },
                showEffectOn: 'render',
                rippleEffect: {
                    brushType: 'stroke',    //渲染的形式,还可选fill
                    period:5,               //动画的时间。
                    scale:3.5,              //大小
                },
                hoverAnimation: true,
                label: {
                    normal: {
                        formatter: '{b}',
                        position: 'right',
                        show: true
                    }
                },
                itemStyle: {
                    normal: {
                        color: '#fb3c3c',
                        shadowBlur: 10,
                        shadowColor: '#db1c1c'
                    }
                },
                encode: {                    //可以定义 data 的哪个维度被编码成什么
                tooltip: [2],               // 表示维度 2 会在 tooltip 中显示,也可以写入多维显示
                //label: 0                 // 表示 label 使用维度 0。
                },
                cursor:"help",             //光标类型,http://www.w3school.com.cn/cssref/pr_class_cursor.asp
                zlevel: 1
            },
            {
                name: 'Top 4-6',   //后续4-5名的显示
                type: 'effectScatter',
                coordinateSystem: 'bmap',
                data: convertData(data.sort(function (a, b) {
                    return b.value - a.value;
                }).slice(3, 7)),   
                symbolSize: function (val) {
                    return val[2] / 2;
                },
                showEffectOn: 'render',
                rippleEffect: {
                    brushType: 'stroke',
                    scale:3.5,
                },
                hoverAnimation: true,
                label: {
                    normal: {
                        formatter: '{b}',
                        position: 'right',
                        show: true
                    }
                },
                itemStyle: {
                    normal: {
                        color: '#1f6ed4',
                        shadowBlur: 7,
                        shadowColor: '#0f5ec4'
                    }
                },
                encode: {                    //可以定义 data 的哪个维度被编码成什么
                tooltip: [2],              // 表示维度 2会在 tooltip 中显示。
                //label: 2                 // 表示 label 使用维度 2。
                },
                cursor:"help",
                zlevel: 1
            },
            //ref https://blog.csdn.net/luanpeng825485697/article/details/76832199
           
           //饼图统计
            {
                name: '汇总',
                type: 'pie', //饼图类型
                coordinateSystem: 'bmap',  //以地图为坐标系
                center: ['85%', '20%'],    //位置
                radius: '30%',  //饼的大小
                //title: 'daf',
                data:[
                     {name: '一级', value: 1},
                     {name: '二级', value: 3},
                     {name: '三级', value: 5},
                     {name: '四级', value: 7},
                     {name: '五级', value: 3},
                     ],
                itemStyle: {
                    opacity:0.7,  //透明度
            },
                
            },
            
            //add time-serial chart
            {
                name:'位置1',
                //coordinateSystem: 'bmap',
                data: [15, 32, 21, 8],  //位置1的时序变化信息
                type: 'line',
                smooth: true   //平滑画线
            },
            {
                name:'位置2',
                //coordinateSystem: 'bmap',
                data: [7, 60, 30, 24],
                type: 'line',
                smooth: true
            },        
        ]
    };
    //更多特性可查看配置项
    

    在这里插入图片描述

  • 相关阅读:
    053705
    053704
    053703
    053702
    053701
    053700
    053699
    053698
    053697
    HDU 3746 Cyclic Nacklace
  • 原文地址:https://www.cnblogs.com/Tom-Ren/p/9897797.html
Copyright © 2020-2023  润新知