echarts实现省与中国地图之间的切换

echarts实现省与中国地图之间的切换

数据可视化这东西到处都需要使用,或早或晚echats这东西都要接触到,自然地图和可视化结合在一起也是早晚的需求,虽然地图之间的切换只是一个很小的功能,但说不定什么时候就要用到,现在看一看里面的坑也是好的!

效果差不多就是这样

点击省 -> 切换到省 -> 再点切换到中国地图

echarts实现省与中国地图之间的切换_第1张图片

echarts实现省与中国地图之间的切换_第2张图片

代码

// console.log('start')

import echarts from 'echarts'
import china from 'echarts/map/js/china'
// import sichuan from 'echarts/map/js/province/sichuan'
// import anhui from 'echarts/map/js/province/anhui'

//定义全国省份的数组
let provinces = ['shanghai', 'hebei','shanxi','neimenggu','liaoning','jilin','heilongjiang','jiangsu','zhejiang','anhui','fujian','jiangxi','shandong','henan','hubei','hunan','guangdong','guangxi','hainan','sichuan','guizhou','yunnan','xizang','shanxi1','gansu','qinghai','ningxia','xinjiang', 'beijing', 'tianjin', 'chongqing', 'xianggang', 'aomen', 'taiwan']
 
let provincesText = ['上海', '河北', '山西', '内蒙古', '辽宁', '吉林','黑龙江',  '江苏', '浙江', '安徽', '福建', '江西', '山东','河南', '湖北', '湖南', '广东', '广西', '海南', '四川', '贵州', '云南', '西藏', '陕西', '甘肃', '青海', '宁夏', '新疆', '北京', '天津', '重庆', '香港', '澳门', '台湾']

// 初始化echarts
let map = echarts.init(document.getElementById('map'))
// console.log(map)

// 定义初始加载的地图区域,中国地图
let selected = 'china'

// 定义加载地图的方法
// 参数为要显示地图区域的名字
let loadMap = (param) => {
  map.setOption({
    geo: {
      // map: 'china' | '四川'
      // 必须要先引入了对应地图的js文件或者json文件,在这一步的时候,echarts会自动将对应的JS文件注入,地图才会显示.
      map: param
    }
  })
}

// 第一次加载地图
loadMap(selected)

// 判断当前要加载的地图是不是省?
let isProvince = (name) => {
  return provincesText.some((province) => {
    return province === name
  })
}

// 定义方法加载某个省的地图文件
let loadScriptMap = (name, callback) => {
  // 获取这个省的拼音名字 name = '四川' => pinyinName = 'sichuan'
  let pinyinName = provinces[provincesText.indexOf(name)]
  console.log(pinyinName)
  // 引入这个对应的地图JS,如果是在项目中要打包,请将这些文件提取出来,放在静态资源中
  // build的时候这些文件不会被打包,无可加载资源地图是不会显示的!!!!
  let currentMap = require(`echarts/map/js/province/${pinyinName}`)
  callback(name)
}

// 监听地图点击事件
map.on('click', (ev) => {
  // 如果点击的是一个省,那就切换到这个省的地图
  if (isProvince(ev.name)) {
    selected = ev.name
    console.log(selected)
    // 从外部加载这个省的地图文件
    loadScriptMap(ev.name, loadMap)
  } else {
    // 否则切换中国地图
    selected = 'china'
    loadMap(selected)
  }
})

  • 1.要渲染地图,需要地图对应的js或json文件,在echart包里面,要显示省的地图的话也需要相对应的sichuan.js,并不是一个china.js就可以搞定的!
  • 2.要显示中国地图需要map: 'china',这是很明显的暗示,那要显示某个省的地图按道理就该这样写 map: 'sichuan',然而这样就错了,你必须要这样 map: '四川',你需要写汉字

最后要是有朋友想要参考一下github

你可能感兴趣的:(echarts实现省与中国地图之间的切换)