vue中使用ECharts实现中国地图

943 阅读1分钟

1、在vue中安装echarts,安装4.1.0版本,就不需要自己去下载地图数据

  npm install echarts

2、在组件中引入

import * as echarts from 'echarts';
import "echarts/map/js/china.js";
import "echarts/map/json/china.json";

3、HTML代码,直接附上完整代码

<template>
  <div class="amap-page-container">
    <div id="china_map" style="width: 1000px; height: 800px"></div>
  </div>
</template> 
 <script>
import * as echarts from 'echarts';
import "echarts/map/js/china.js";
import "echarts/map/json/china.json";
export default { 
 data () { 
   return {    }
  }, 
 methods: {  }, 
 mounted () { 
   // 初始化echarts实例 
   this.chinachart = echarts.init(document.getElementById('china_map'))    
// 进行相关配置    
this.chartOption = {
      tooltip: { 
// 鼠标移到图里面的浮动提示框 
       triggerOn: 'click', 
       enterable: 'true',        
// formatter详细配置: https://echarts.baidu.com/option.html#tooltip.formatter 
       formatter (params, ticket, callback) { 
         // params.data 就是series配置项中的data数据遍历 
         let localValue, 
           name, 
           warehouse, 
           warehouseList
          if (params.data) { 
           localValue = params.data.value
            name = params.name
            warehouseList = params.data.children
            warehouseList.forEach(e => { 
             warehouse += `<div class="row"> 
                       <div class="popTitle">${e.agencyName}${e.warehouse.length})个</div>
                        <div class="text"> 
                           ${e.warehouse.map((ck, index) => { 
               return `<div>${ck.ck}</div>` 
             }).join('')} 
                                    
</div>                    </div>` 
          
 })
          
} else { // 为了防止没有定义数据的时候报错写的 
           localValue = 0  
          name = ''  
          warehouse = ''  
        }   
       let htmlStr = `<div class="popBox"> 
         <div > 城市:${name}</div>
          <p >  
          库存量:${localValue} </p>` + warehouse + ` 
</div>`          
return htmlStr  
      }        
// backgroundColor:"#ff7f50",//提示标签背景颜色 
       // textStyle:{color:"#fff"} //提示标签字体颜色 
     },     
 // visualMap的详细配置解析:https://echarts.baidu.com/option.html#visualMap 
     visualMap: { // 左下角的颜色区域
        type: 'piecewise', // 定义为分段型 visualMap 
       min: 0, 
       max: 1000, 
       itemWidth: 40, 
       bottom: 60,  
      left: 20,  
      pieces: [ 
// 自定义『分段式视觉映射组件(visualMapPiecewise)』的每一段的范围,以及每一段的文字,以及每一段的特别的样式
          { gt: 9009, lte: 10000, label: '非常好', color: '#6ad86e' }, // (900, 1000]
         { gt: 500, lte: 900, label: '正常', color: '#9adcfa' }, // (500, 900] 
         { gt: 310, lte: 500, label: '警告', color: '#ffeb3b' }, // (310, 500]  
        { gt: 200, lte: 300, label: '较差', color: '#ff9800' }, // (200, 300]   
       { gt: 10, lte: 200, label: '非常差', color: 'orangered' }, // (10, 200]  
        { value: 0, label: '无数据', color: '#999' } //[0]

      ]    
  },     
 // geo配置详解: https://echarts.baidu.com/option.html#geo 
     geo: { // 地理坐标系组件用于地图的绘制 
       map: 'china', // 表示中国地图 
       roam: false, // 是否开启鼠标缩放和平移漫游
        zoom: 1.2, // 当前视角的缩放比例(地图的放大比例)
        label: { 
         show: true, 
       },        
itemStyle: { // 地图区域的多边形 图形样式。
          borderColor: 'rgba(0, 0, 0, 0.2)',
          emphasis: { // 高亮状态下的多边形和标签样式

            shadowBlur: 20, 
           shadowColor: 'rgba(0, 0, 0, 0.5)'  
        }   
     }    
  },   
   series: [   
     {       
   name: '', // 浮动框的标题(上面的formatter自定义了提示框数据,所以这里可不写) 
         type: 'map',  
        geoIndex: 0,   
       label: { 
           show: true  
        },  
        // 这是需要配置地图上的某个地区的数据,根据后台的返回的数据进行拼接(下面是我定义的假数据)
          data: [   
                    {  
            'name': '北京',  
            'value': 599, 
             'children': [{  
              agencyName: '江苏代理区', 
               warehouse: [  
                { 'ck': '江苏仓库' }, 
                 { 'ck': '江苏仓库1' },
                  { 'ck': '江苏仓库2' }, 
                 { 'ck': '江苏仓库3' },  
              ]   
           },    
          { 
               agencyName: '苏南代理区',
                warehouse: [ 
                 { 'ck': '苏南仓库' }, 
                 { 'ck': '苏南仓库1' }, 
                { 'ck': '苏南仓库2' },  
                { 'ck': '华苏南仓库3' },   
             ]  
            },    
          {     
           agencyName: '苏北代理区', 
               warehouse: [      
            { 'ck': '苏北仓库' },   
               { 'ck': '苏北仓库1' },   
               { 'ck': '苏北仓库2' },  
                { 'ck': '苏北仓库3' },   
             ]    
          },   
           ]      
      }, {   
           'name': '江苏',
              'value': 142, 
             'children': [
]
    },   
         {  
            'name': '黑龙江',  
            'value': 44 
           }, 
{              
'name': '新疆', 
             'value': 9999, 
             children: []   
         },
 {             
 'name': '深圳',  
            'value': 92, 
             children: [] 
           }, 
{             
 'name': '湖北',  
            'value': 810,  
            children: []   
         },
 {            
  'name': '天津',  
            'value': 310000, 
             children: []  
          },   
         {     
         'name': '徐州',   
           'value': 320300,    
          children: []    
        },   
         {       
       'name': '四川',  
            'value': 453,  
            'children': [{   
                       }]    
    }     
 ]   
 }    
// 使用刚指定的配置项和数据显示地图数据   
 this.chinachart.setOption(this.chartOption)  
}, 
 methods: {  }
}
</script>
<style>
.popBox { 
 max-height: 300px; 
 width: 200px; 
 overflow: auto; 
 font-size: 17px;
  line-height: 35px; 
 padding: 10px 20px;}
.popTitle { 
 margin-top: 20px;
}
</style>