echarts实现中国地图的下钻和返回上一级

首先我们需要知道echarts的地图的渲染需要依赖于json文件,例如:中国地图china.json,广东地图guangdong.json,广西地图guangxi.json;也就是每个不同的json文件渲染不同的地图,想要渲染中国地图,就用china.json的数据来渲染;
这些json文件在网上可以找到,json文件的数据是通过ajax或jquery的请求方式来进行获取,下面来渲染下中国地图:

<body>
  <div id="echarts" style="width:600px;height:400px;background: #4750e4;"></div>
</body>
<script>
	// 创建echarts实例对象
  	var mCharts = echarts.init(document.getElementById('echarts'))
  	$.get(`./json/jsonMap/china.json`, function (res) {
      // 注册地图的矢量数据
      echarts.registerMap('chinaMap', res)
      var option = {
        geo: {
          type: 'map',
          map: 'chinaMap', // 要与registerMap中的第一个参数保持一致
          roam: true,
          label: {
            show: true  // 展示省份的名称
          },
          zoom: 1, // 初始化的缩放比例
          // center: [87.617733, 43.792818]  // 地图的中心点
        }
      }
      mCharts.setOption(option)
    })
</script>

地图的下钻:实际上就是用不同的json文件来进行渲染,比如当点击广东省的时候,其实是用guangdong.json文件来进行渲染;

  let jsonMap = {
    "广东": "guangdong"
  }
  
  // 创建echarts实例对象
  var mCharts = echarts.init(document.getElementById('echarts'))
  
  // 注册点击事件
  mCharts.on('click', function (params) {
    let area = jsonMap[params.name]	// 这个为了获取被点击省份的json文件名
    getMap(area)  // 把被点击的json文件名传递后拼接在请求路径中
  });
  
  // 请求地图json数据
  function getMap(area) {
    $.get(`./json/jsonMap/${area}.json`, function (res) {
      // 注册地图的矢量数据
      echarts.registerMap('chinaMap', res)
      var option = {
        geo: {
          type: 'map',
          map: 'chinaMap', // 要与registerMap中的第一个参数保持一致
          roam: true,
          label: {
            show: true  // 展示省份的名称
          },
          zoom: 1, // 初始化的缩放比例
          // center: [87.617733, 43.792818]  // 地图的中心点
        }
      }
      mCharts.setOption(option)
    })
  }

返回到上一级:在渲染的时候先保存当前层级的json文件名,然后在进入下一个层级之前先把当前的层级json文件名作为下一个层级的父级json文件名,然后点击返回上一级时,用父级的json文件名请求的数据渲染即可;
完整的代码:

<!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>echarts地图</title>
  <script src="./lib/echarts.min.js"></script>
  <script src="./lib/jquery.min.js"></script>
</head>

<body>
  <button onclick="onBack()">返回上一级</button>
  <div id="echarts" style="width:600px;height:400px;background: #4750e4;"></div>
</body>
<script>
  let jsonMap = {
    "广东": "guangdong",
    "广西": "guangxi",
    "湖南": "hunan",
    "安徽": "anhui",
    "澳门": "aomen",
    "北京": "beijing",
    "重庆": "chongqing",
    "福建": "fujian",
    "甘肃": "gansu",
    "贵州": "guizhou",
    "海南": "hainan",
    "河北": "hebei",
    "黑龙江": "heilongjiang",
    "河南": "henan",
    "湖北": "hubei",
    "江苏": "jiangsu",
    "江西": "jiangxi",
    "吉林": "jilin",
    "辽宁": "liaoning",
    "内蒙古": "neimenggu",
    "宁夏": "ningxia",
    "青海": "qinhai",
    "山东": "shandong",
    "山西": "shanxi",
    "陕西": "shanxi1",
    "四川": "sichuan",
    "台湾": "taiwan",
    "天津": "tianjin",
    "香港": "xianggang",
    "新疆": "xinjiang",
    "西藏": "xizang",
    "云南": "yunnan",
    "浙江": "zhejiang"
  }

  // 定义两个变量,nowArea储存当前的区域,lastArea存储父级区域(当前的区域将作为下一个区域的父级)
  let nowArea, lastArea

  // 创建echarts实例对象
  var mCharts = echarts.init(document.getElementById('echarts'))

  // 初始化获取中国地图数据
  getMap('china')

  // 注册点击事件
  mCharts.on('click', function (params) {
    lastArea = nowArea  // 获取父级的区域
    let area = jsonMap[params.name]
    getMap(area)
  });

  // 返回上一级
  function onBack() {
    getMap(lastArea)
  }

  // 请求地图json数据
  function getMap(area) {
    $.get(`./json/jsonMap/${area}.json`, function (res) {
      // 注册地图的矢量数据
      echarts.registerMap('chinaMap', res)
      var option = {
        geo: {
          type: 'map',
          map: 'chinaMap', // 要与registerMap中的第一个参数保持一致
          roam: true,
          label: {
            show: true  // 展示省份的名称
          },
          zoom: 1, // 初始化的缩放比例
          // center: [87.617733, 43.792818]  // 地图的中心点
        }
      }
      mCharts.setOption(option)
      nowArea = area  // 记录当前的区域,作为下一层级的父级
    })
  }
</script>

</html>
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值