echarts 地图 scatter点击事件_React实现高亮可点击地图

本文介绍如何在React应用中利用Echarts创建一个高亮且可点击的省市地图。通过设置地图坐标系、加载json文件,绘制散点图展示地级市名称,并配置点击事件来改变选中区域颜色。详细步骤包括地图坐标系初始化、散点图配置及点击事件处理。
摘要由CSDN通过智能技术生成

c3365e9b2b09ea333da5babb8bc1e4ad.gif

dc1e4b98811f99124f1842acecc8e18b.gif

目前越来越多的项目中开始使用地图,而对地图的需求也不仅仅是简单的纯展示,更多了各种各样的交互功能。今天这篇文章主要介绍的就react中通过Echarts实现一个高亮可点击的省市地图。接下来先看看效果图:

4f6566560ad201c0077ec5d3bdff642f.png

这个效果主要有以下几个关键点:

地图坐标系

首先我们需要在Echarts容器中初始化一个地图坐标系,这个需要在网上下载一个地图的json文件。可以按照自己的需求去网上搜索下载。准备好了json文件,我们就可以初始化地图坐标系了。

import GDJson from '../../../../statics/cdn/guangdong.json';
echarts.registerMap('GD', GDJson);

然后就是通过配置option绘制出具体的地图,此处我是通过绘制一个散点图,实现的各个地级市名字的显示,需要知道各个市的经纬度,这个可以在网上查到。然后通过dataRange设置了不同的value值所显示的颜色。具体配置如下所示:

var provienceData = [
      { name: '广州', type: 'areaCenterCity', value: 0, departId: '001021' },
      { name: '深圳', type: 'areaCenterCity', value: 0, departId: '001020' },
      { name: '佛山', type: 'areaCenterCity', value: 0, departId: '001004' },
      { name: '东莞', type: 'areaCenterCity', value: 0, departId: '001008' },
      { name: '中山', type: 'areaCenterCity', value: 0, departId: '001019' },
      { name: '珠海', type: 'areaCenterCity', value: 0, departId: '001011' },
      { name: '江门', type: 'areaCenterCity', value: 0, departId: '001015' },
      { name: '肇庆', type: 'areaCenterCity', value: 0, departId: '001005' },
      { name: '惠州', type: 'areaCenterCity', value: 0, departId: '001010' },
      { name: '汕头', type: 'areaCenterCity', value: 0, departId: '001007' },
      { name: '潮州', type: 'areaCenterCity', value: 0, departId: '001009' },
      { name: '揭阳', type: 'areaCenterCity', value: 0, departId: '001006' },
      { name: '汕尾', type: 'areaCenterCity', value: 0, departId: '001001' },
      { name: '湛江', type: 'areaCenterCity', value: 0, departId: '001018' },
      { name: '茂名', type: 'areaCenterCity', value: 0, departId: '001003' },
      { name: '阳江', type: 'areaCenterCity', value: 0, departId: '001016' },
      { name: '韶关', type: 'areaCenterCity', value: 0, departId: '001013' },
      { name: '清远', type: 'areaCenterCity', value: 0, departId: '001017' },
      { name: '云浮', type: 'areaCenterCity', value: 0, departId: '001002' },
      { name: '梅州', type: 'areaCenterCity', value: 0, departId: '001014' },
      { name: '河源', type: 'areaCenterCity', value: 0, departId: '001012' },
    ];
let option = {
      dataRange: {
        show: false,
        x: 'left',
        y: 'bottom',
        splitList: [
          { start: 0, end: 0, color: '#13667e' },//当值为5时,区域背景
          { start: 5, end: 5, color: '#187fed' },//当值为5时,区域背景
        ],
      },
      geo: {
        map: 'GD',
        roam: false,
        zoom: 0.94,
        tooltip: {
          show: false,       //不显示提示标签
        },
        center: [113.122717, 22.900762],
        label: {
          normal: {
            show: false,//显示省份标签
            textStyle: { color: "#333333" }//省份标签字体颜色
          },
          emphasis: {//对应的鼠标悬浮效果
            show: false,
            textStyle: { color: "#333333" }
          }
        },
        itemStyle: {
          normal: {
            borderWidth: 1,//区域边框宽度
            borderColor: '#ffffff',//区域边框颜色
            areaColor: "#fff",//区域颜色
            label: { show: false }
          },
          emphasis: {
            areaColor: "#187fed",
          }
        },
      },
      series: [
        {
          type: 'scatter',  //'line'(折线图) | 'bar'(柱状图) | 'scatter'(散点图) | 'k'(K线图)
          //'pie'(饼图) | 'radar'(雷达图) | 'chord'(和弦图) | 'force'(力导向布局图) | 'map'(地图)
          coordinateSystem: 'geo',
          data: this.convertData(provienceData),
          symbolSize: 10,
          symbolRotate: 40,
          geoIndex: 0,
          label: {
            normal: {
              formatter: '{b}',
              position: 'bottom',
              show: true,
              color: '#fff',
            },
            emphasis: {
              show: false
            }
          },
          tooltip: {
            show: false,       //不显示提示标签
            formatter: '{c}',      //提示标签格式
            backgroundColor: "#fff",//提示标签背景颜色
            borderColor: '#ccc',
            borderWidth: 5,
            textStyle: { color: "#ccc" } //提示标签字体颜色
          },
          itemStyle: {
            normal: {
              color: '#fff'
            }
          }
        },
        {
          type: 'map',
          mapType: 'GD',
          geoIndex: 0,
          roam: false,
          zoom: 0.94,
          center: [113.122717, 22.900762],
          tooltip: {
            show: false,       //不显示提示标签
          },
          label: {
            normal: {
              show: false    //显示省份标签
            },
            emphasis: {
              show: false,
            }
          },
          itemStyle: {
            //正常样式
            normal: {
              borderWidth: 1,      //区域边框宽度
              borderColor: '#ffffff',  //区域边框颜色
              areaColor: "#187fed",
            },
            //鼠标事件区块样式
            emphasis: {
              areaColor: "#187fed",
            }
          },
          data: provienceData
        }
      ],
    }
    myChart.setOption(option);
convertData(data) {
    const geoCoordMap = {
      '广州': [113.480637, 23.325178],
      '深圳': [114.085947, 22.597],
      '佛山': [113.022717, 23.028762],
      '东莞': [113.746262, 23.006237],
      '中山': [113.382391, 22.521113],
      '珠海': [113.353986, 22.124979],
      '江门': [112.594942, 22.290431],
      '肇庆': [112.072529, 23.651546],
      '惠州': [114.412599, 23.079404],
      '汕头': [116.708463, 23.37102],
      '潮州': [116.832301, 23.761701],
      '揭阳': [116.055733, 23.343778],
      '汕尾': [115.364238, 22.974485],
      '湛江': [110.064977, 21.274898],
      '茂名': [110.919229, 21.959751],
      '阳江': [111.805107, 22.009222],
      '韶关': [113.591544, 24.801322],
      '清远': [113.051227, 24.285022],
      '云浮': [112.044439, 22.929801],
      '梅州': [116.117582, 24.299112],
      '河源': [114.997802, 23.946266],
    }
    var res = [];
    for (var i = 0; i       var geoCoord = geoCoordMap[data[i].name];
      if (geoCoord) {
        res.push({
          name: data[i].name,
          value: geoCoord.concat(data[i].value),
          area: data[i].area,
          type: data[i].type,
        });
      }
    }
    return res;
  }

最后则是为地图添加点击事件,点击某个区域的时候,更改某个区域的value值,进而改变其颜色

myChart.on('click', function (params) {
      for (let i = 0; i         provienceData[i].value = 0
        if (params.name === provienceData[i].name && _this.state.departName !== params.data.name) {
          provienceData[i].value = 5
        }
      }
     
     myChart.setOption(option);
});

这样一个高亮可点击选中的省市地图就坐好了。

dc38ea94c235ff0430c509078a166f80.gif

>>> 技术讨论群 <<<

请关注公众号,回复加群

d3a862ce2315f011285cfae2bc47726b.gif | 想知道更多?-

请动动你发财的小手点点关注

目前4000+人已关注加入我们

4501ffe58bd0d474d15bf6550fcbb67d.gif 86cba6f88b0106b39f57f79fda23ff09.gif 66ce08c8cb8e3c6659a5e51455aad2b1.gif 5d54b23e5a2fc871f10a7aae79707524.gif 7756d103570d469dc35294a0d819e7a2.gif 55d73767fc125c262aa1d40e018d199b.gif d983e533d9c5580b001411c98fb0278a.gif f53154d27a9e8766549d5fd8d8148e40.gif

99bc5f72d1b3f8a795b3360dfb01c7b8.gif 0fc9ca55bd5601a6f94cfa34abf024df.gif 696b3a6ec3cac72add37879485750f24.gif dbd0e211886ee4cb70db517552942b9b.gif 83002aac67c734128775cc22efcdaa24.gif 246366cd559bb6f9c4d190df8673f2da.gif 116deead0c409fee3ff8add9fbf5c039.gif 7756d103570d469dc35294a0d819e7a2.gif

7c4c7f682f449af661e0ea242c34a2a5.gif

 c55b6580a61a59290dafd41ec502b696.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值