地图

地图图表的使用方式

百度地图API : 使用百度地图的 api , 它能够在线联网展示地图, 百度地图需要申请 ak

矢量地图 : 可以离线展示地图, 需要开发者准备矢量地图数据

1>ECharts 最基本的代码结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./lib/echarts.min.js"></script>
    <script src="./lib/jq.js"></script>
</head>
<body>
    <div id="box" style="width: 600px; height: 400px;"></div>
    <script>
        var box=echarts.init(document.getElementById("box"))
        var option={
       
        }      
        box.setOption(option)
    </script>
</body>
</html>

 2>准备中国的矢量 json 文件, 放到  json/map/ 目录之下

 

 

 3>使用 Ajax 获取 china.json

 $.get('json/map/china.json',function(ret){
                console.log(ret)
        })

 

 

 

 输出的就是中国各个省份的矢量地图数据

 4>在Ajax的回调函数中, 往 echarts 全局对象注册地图的 json 数据

   $.get('json/map/china.json',function(ret){
                //console.log(ret)
                echarts.registerMap('chinaMap',ret)   //chinaMap,可任意起
        })

5>获取完数据之后, 需要配置 geo 节点, 再次的 setOption

type : 'map'
map : 'chinaMap'

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./lib/echarts.min.js"></script>
    <script src="./lib/jq.js"></script>
</head>
<body>
    <div id="box" style="width: 600px; height: 400px;"></div>
    <script>
        var box=echarts.init(document.getElementById("box"))
        $.get('json/map/china.json',function(ret){
                //console.log(ret)
                echarts.registerMap('chinaMap',ret)
        
        var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap'//chinaMap需要和registerMap中的第一个参数保持一致
            }
        }      
        box.setOption(option)
    })
    </script>
</body>
</html>

 此时就可以显示地图当我们鼠标移入时,对应的省会也会显示

注意:此时的内容都在回调函数中

 

 

 地图的常见配置

  • 缩放拖动: roam

var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                roam:true,// 运行使用鼠标进行拖动和缩放
            }
        }

 此时我们在打开就可以实现拖动和缩放,拖动的范围受到div盒子大小的影响

 

 

  •  名称显示: label

 var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                roam:true,// 运行使用鼠标进行拖动和缩放
                label:{
                    show:true   //是否展示每一个省份的名称
                }
            }
        } 

 

 

  •  初始缩放比例: zoom

地图的缩放比例, 大于1代表放大, 小于1代表缩小

 var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                roam:true,// 运行使用鼠标进行拖动和缩放
                label:{
                    show:true   //是否展示每一个省份的名称
                },
                zoom:2   // 地图的缩放比例, 大于1代表放大, 小于1代表缩小
            }
        }   

 

 

  •  地图中心点: center

当前视角的中心点,用经纬度表示

 var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                roam:true,// 运行使用鼠标进行拖动和缩放
                label:{
                    show:true   //是否展示每一个省份的名称
                },
                zoom:2,  // 地图的缩放比例, 大于1代表放大, 小于1代表缩小
                center:[117.000923, 36.675807]   // 当前视角的中心点,用经纬度表示
            }
        }    

  此时刷新之后以山东为中心显示

 

 

 

对应的经纬度可以在ret中找到

 

 

 

 

 

 常见效果

显示某个区域

1>准备安徽省的矢量地图数据

2>加载安徽省地图的矢量数据

  <script>
        var box=echarts.init(document.getElementById("box"))
        $.get('json/map/anhui.json',function(ret){
                console.log(ret)
        var option={

        }      
        box.setOption(option)
    })
    </script>

3>在Ajax的回调函数中注册地图矢量数据

<script>
        var box=echarts.init(document.getElementById("box"))
        $.get('json/map/anhui.json',function(ret){
                // console.log(ret)
                echarts.registerMap('anhui',ret)
        var option={

        }      
        box.setOption(option)
    })
    </script>

4>配置 geo 的 type:'map' ,  map:'anhui'

   <script>
        var box=echarts.init(document.getElementById("box"))
        $.get('json/map/anhui.json',function(ret){
                // console.log(ret)
                echarts.registerMap('anhui',ret)
        var option={
            geo:{
                type:'map',
                map:'anhui'
            }
        }      
        box.setOption(option)
    })
    </script>

5>通过 zoom 调整缩放比例

  <script>
        var box=echarts.init(document.getElementById("box"))
        $.get('json/map/anhui.json',function(ret){
                // console.log(ret)
                echarts.registerMap('anhui',ret)
        var option={
            geo:{
                type:'map',
                map:'anhui',
                label: {
                  show: true
                 },
                zoom: 1.2,                
            },   
        }      
        box.setOption(option)
    })
    </script>

6>通过 center 调整中心点

   <script>
        var box=echarts.init(document.getElementById("box"))
        $.get('json/map/anhui.json',function(ret){
                // console.log(ret)
                echarts.registerMap('anhui',ret)
        var option={
            geo:{
                type:'map',
                map:'anhui',
                label: {
                  show: true
                 },
                zoom: 1.2,
                 center: [116.507676, 31.752889]
            },   
        }      
        box.setOption(option)
    })
    </script>

 

 

 

不同城市颜色不同

1>显示基本的中国地图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./lib/echarts.min.js"></script>
    <script src="./lib/jq.js"></script>
</head>
<body>
    <div id="box" style="width: 600px; height: 400px;"></div>
    <script>
        var box=echarts.init(document.getElementById("box"))
        $.get('json/map/china.json',function(ret){
                console.log(ret)
                echarts.registerMap('chinaMap',ret)
        
        var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                label:{
                    show:true
                }
            }
        }      
        box.setOption(option)
    })
    </script>
</body>
</html>

2>准备好城市空气质量的数据, 并且将数据设置给 series

 var airData = [
            { name: '北京', value: 50 },
            { name: '天津', value:45 },
            { name: '上海', value:30 },
            { name: '重庆', value: 80 },
            {name: '河北', value: 150 },
            { name: '河南', value:100 },
            { name: '云南',value: 20 },
            { name: '辽宁', value: 70 },
            { name: '黑龙江', value: 120},
            { name: '湖南', value: 185 },
            { name: '安徽', value: 137 },
            { name: '山东', value: 108 },
            { name: '新疆', value: 33},
            { name: '江苏', value:99 },
            { name: '浙江', value: 58 },
            { name: '江西', value: 76 },
            { name: '湖北',value: 300 },
            { name: '广西', value: 285 },
            { name: '甘肃', value: 197},
            {name: '山西', value: 64 },
            { name: '内蒙古', value: 70 },
            { name: '陕西',value: 57 },
            { name: '吉林', value: 24},
            { name: '福建', value: 82 },
            {name: '贵州', value: 64 },
            { name: '广东', value: 53 },
            { name: '青海',value: 88 },
            { name: '西藏', value: 97 },
            { name: '四川', value: 58 },
            {name: '宁夏', value: 54 },
            { name: '海南', value: 67 },
            { name: '台湾',value: 98 },
            { name: '香港', value: 105 },
            { name: '澳门', value: 167 },
            {name: '南海诸岛', value: 198 }
        ]

name:为省份名称,value代表该省份的空气质量

var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                label:{
                    show:true
                }
            },
            series:[
                {
                    data:airData
                }
            ]
        }   

3>将 series 下的数据和 geo 关联起来

geoIndex: 0         告诉这部分空气质量的数据需要关联到哪一个geo配置当中,0代表geo的索引号,只配置一个geo,所以索引值为0
type: 'map'      为series指明他的类型为map

var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                label:{
                    show:true
                }
            },
            series:[
                {
                    data:airData,
                    geoIndex:0,
                    type:'map'
                }
            ]
        }   

 

4>结合 visualMap 配合使用

visualMap 是视觉映射组件,和之前区域缩放 dataZoom 很类似,可以做数据的过滤,只不过dataZoom 主要使用在直角坐标系的图表,而 visualMap 主要使用在地图或者饼图中

var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                label:{
                    show:true
                }
            },
            series:[
                {
                    data:airData,
                    geoIndex:0,
                    type:'map'
                }
            ],
            visualMap:{
                min:0,
                max:300
            }
        }   

 min表示:这组空气数据中的最小值,它会自动将颜色配置给空气质量最小的城市

max表示:这组空气数据中的最大值,它会自动将颜色配置给空气质量最大的城市

 

 

我们可以使用inRange来指定显示的颜色

visualMap:{
                min:0,
                max:300,
                inRange: {
                     color: ['red', 'blue'] // 颜色的范围
                },
            }

 

 

 

  calculable: true  是否显示拖拽用的手柄(手柄能拖拽调整选中范围)

 visualMap:{
                min:0,
                max:300,
                inRange: {
                     color: ['red', 'blue'] // 颜色的范围
                },
                calculable: true 
            }

 

 

 

 

地图和散点图结合

1>准备好散点数据,设置给新对象的 data

var scatterData = [
             {
                  value: [113.665412, 34.757975]// 散点的坐标, 使用的是经纬度
                }
            ] 

 2>给 series 这个数组下增加新的对象

 var option={
            geo:{
                type:'map',// map是一个固定的值
                map:'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
                label:{
                    show:true
                }
            },
            series:[
                {
                    data:airData,
                    geoIndex:0,
                    type:'map'
                },
                {
                    data:scatterData, //涟漪动画散点的坐标数据
                   
                }

            ],
            visualMap:{
                min:0,
                max:300,
                inRange: {
                     color: ['red', 'blue'] // 颜色的范围
                },
                calculable: true 
            }
        }      

3>配置新对象的 type

type:effectScatter

 series:[
                {
                    data:airData,
                    geoIndex:0,
                    type:'map'
                },
                {
                    data:scatterData, //涟漪动画散点的坐标数据
                    type:'effectScatter',
                }

            ],

4>让散点图使用地图坐标系统

coordinateSystem: 'geo'   指明散点使用的坐标系统

  series:[
                {
                    data:airData,
                    geoIndex:0,
                    type:'map'
                },
                {
                    data:scatterData, //涟漪动画散点的坐标数据
                    type:'effectScatter',
                    coordinateSystem: 'geo'
                }

            ],

此时我们就可以看到效果

5>让涟漪的效果更加明显

rippleEffect: {  scale: 10 }

series:[
                {
                    data:airData,
                    geoIndex:0,
                    type:'map'
                },
                {
                    data:scatterData, //涟漪动画散点的坐标数据
                    type:'effectScatter',
                    coordinateSystem: 'geo',
                    rippleEffect: {  
                        scale: 10 
                    }
                }

            ],

 

posted @ 2021-11-08 23:34  keyeking  阅读(102)  评论(0编辑  收藏  举报