Echarts地图自定义图标Symbol同时动态更改图标进行切换显示

深藏阁楼爱情的钟 2023-03-02 13:10 268阅读 0赞

Echarts地图自定义图标Symbol同时动态更改图标进行切换显示

文章目录

        • 0、前言
        • 1、引用模块
        • 2、界面设计
        • 3、数据准备
        • 4、实例地图
        • 5、动态修改气泡图标
        • 6、结束语

0.前言

实现的效果:

在这里插入图片描述

  • 实现广东显示地图,然后点击地图上的气泡,可以变换气泡
  • 可用于地图展示详细信息,同时可以选择更改气泡图标,可以自定义图标,也可以换成图片
  • 实现的效果会是点击气泡显示详细详细,同时鼠标移到每一个省份会显示对应省份的名称
  • 所有的东西都可以在echarts官网上搜索找到
  • 官方文档

1.引用模块

  • 引入layui模块,样式
  • 通过标签方式直接引入构建好的 echarts 文件
  • 引入广东的地图经纬度json文件,因为文件太大太多,所以就不全部显示了

2.界面设计

设计一个layui的布局选项卡,放置一个div用于显示地图
设置地图所在div的id

代码如下:

  1. <div class="layuimini-container">
  2. <div class="layuimini-main">
  3. <div class="layui-row layui-col-space15">
  4. <div class="layui-col-md9">
  5. <div class="layui-row layui-col-space15">
  6. <div class="layui-col-md12">
  7. <div class="layui-card">
  8. <div class="layui-card-body">
  9. <div class="map-container">
  10. <h2 style="padding-left: 16px; padding-top: 16px;font-weight: bold; color: #464343">广东</h2>
  11. <div id="map" style="height: 400px;"></div>
  12. </div>
  13. </div>
  14. </div>
  15. </div>
  16. </div>
  17. </div>
  18. </div>
  19. </div>
  20. </div>

3.数据准备

数据主要都是测试数据,随便取的经纬度
  • 首先需要明确要显示的地理位置和对应的物理量。先定义需要显示对应信息的位置坐标,按照[纬度,精度]的格式

    // 坐标信息

    1. let geoCoorMap = {
    2. 'A公司': [113.23083,24.903204],
    3. 'B公司': [114.723092,23.983036],
    4. 'C公司': [113.335367,23.13559],
    5. 'D公司': [116.659557, 23.22528],
    6. 'E公司': [111.863833, 22.045743],
    7. 'F公司': [113.405404,24.18612],
    8. 'G公司': [115.786377, 24.132908],
    9. 'H公司': [114.413978,23.079883],
    10. 'I公司': [111.918346, 23.435632],
    11. 'J公司': [113.397617, 22.364724],
    12. 'K公司': [110.086281, 21.647324]
    13. }
  • 随后定义每个位置需要显示的量的值

    // 每个位置需要显示的量的值

    1. let items = [{ name: 'A公司', value: ['0'] },
    2. { name: 'B公司', value: ['0'] },
    3. { name: 'C公司', value: ['0'] },
    4. { name: 'D公司', value: ['0'] },
    5. { name: 'E公司', value: ['0'] },
    6. { name: 'F公司', value: ['0'] },
    7. { name: 'G公司', value: ['1'] },
    8. { name: 'H公司', value: ['0'] },
    9. { name: 'I公司', value: ['0'] },
    10. { name: 'J公司', value: ['0'] },
    11. { name: 'K公司', value: ['0'] }
    12. ]
  • 为了简单,我先只设置一个值,如果需要其他值,可以自己设置。一般为0,这里我写的1表示的是鼠标起始位置所在点,图标与默认不一样,0为默认点。

随后需要对数据进行处理,将坐标信息和对应物理量的值合在一起。
  1. const convertDataWithName = function (data, geoCoordMap) {
  2. let res = [];
  3. data.forEach(item => {
  4. let geoCoord = geoCoordMap[item.name];
  5. if (geoCoord) {
  6. res.push({
  7. name: item.name,
  8. value: geoCoord.concat(item.value)
  9. });
  10. }
  11. });
  12. return res;
  13. };

4.实例地图

  • 接下来就是对于echarts 对象具体值的设置了,全局选项mapOption

    let mapOption = {

    1. // 提示框组件
    2. tooltip: {
    3. formatter: function (param) {
    4. return param.name;
    5. },
    6. padding: 16
    7. },
    8. // 地理坐标系组件
    9. geo: [
    10. {
    11. zoom: 1.2, // 初始缩放比例
    12. // bottom: "-40%",
    13. // top: "5%",
    14. map: "guangdong", // 广东省地图
    15. roam: false, // 支持鼠标滚轮缩放
    16. itemStyle: {
    17. areaColor: "#1C86EE", // 地图底色
    18. borderColor: '#FFFFED' // 行政分区边界线颜色
    19. },
    20. emphasis: {
    21. label: {
    22. position: "insideBottom",
    23. color: "#FFF" // hover地区时显示label颜色
    24. },
    25. itemStyle: {
    26. areaColor: "#1aa094", // hover地区时显示高亮区域的颜色
    27. shadowOffsetX: 3,
    28. shadowOffsetY: 3,
    29. shadowBlur: 7,
    30. shadowColor: "rgba(0, 0, 0, 0.8)"
    31. }
    32. }
    33. // silent: true // 不显示hover效果,视觉效果更集中在点上,同时会屏蔽点击事件
    34. },
    35. ],
    36. // 地图上的标点(使用气泡图)
    37. series: [
    38. {
    39. type: "scatter",
    40. coordinateSystem: "geo",
    41. data: convertDataWithName(items, geoCoorMap),
    42. symbolSize: 40,
    43. symbol: function(params) {
    44. if(params[2] === '0') {
    45. return 'pin'
    46. } else {
    47. return 'diamond'
    48. }
    49. } ,
    50. itemStyle: {
    51. opacity: 1
    52. }
    53. },
    54. {
    55. type: 'effectScatter',
    56. coordinateSystem: "geo",
    57. data: null
    58. }
    59. ]
    60. }
官方文档提供资料如下:

series-scatter. symbol = ‘circle’ ,标记的图形。

ECharts 提供的标记类型包括 ‘circle’, ‘rect’, ‘roundRect’, ‘triangle’, ‘diamond’, ‘pin’, ‘arrow’, ‘none’

可以通过 ‘image://url’ 设置为图片,其中 URL 为图片的链接,或者 dataURI。

URL 为图片链接例如:‘image://http://xxx.xxx.xxx/a/b.png’

可以通过 ‘path://’ 将图标设置为任意的矢量路径。这种方式相比于使用图片的方式,不用担心因为缩放而产生锯齿或模糊,而且可以设置为任意颜色。路径图形会自适应调整为合适的大小。路径的格式参见 SVG PathData。可以从 Adobe Illustrator 等工具编辑导出。

如果需要每个数据的图形不一样,可以设置为如下格式的回调函数:

  1. (value: Array|number, params: Object) => string

其中第一个参数 value 为 data 中的数据值。第二个参数params 是其它的数据项参数。

  • 对地图进行实例化,同时赋给id为map的区域

    echarts.registerMap(“guangdong”, guangdong)

    1. let mapInstance = echarts.init(document.getElementById('map'))
    2. // 渲染地图
    3. mapInstance.setOption(mapOption)

5.动态修改气泡图标

图标点击事件
  • 判断点击的是气泡,执行更改对应值的代码方法
  • 通过更改对应位置的值来判断显示的图标

    // 图标点击事件

    1. mapInstance.on('click', function(event) {
    2. // 判断点击的是图标
    3. if(event.componentSubType === "scatter") {
    4. changeitems(event.name)
    5. mapOption.series[0].data=convertDataWithName(changeitems(event.name), geoCoorMap)
    6. mapInstance.setOption(mapOption)
    7. }
    8. })
  • 定义一个方法,每次点击气泡的时候都动态更改值

    function changeitems(index) {

    1. items.forEach(item => {
    2. let name = item.name;
    3. if (name === index) {
    4. item.value[0]='1'
    5. }else{
    6. item.value[0]='0'
    7. }
    8. })
    9. return items
    10. }

6.结束语

到此,就已经把实现的所有点都整理出来了!!!!
再来一遍效果图!!
在这里插入图片描述

如果有写错或者不足的地方,还请在评论区指正!!我会及时修改!!!!!!

请尊重原创,如需转载,还请注明原作者,原文链接,谢谢啦!!!

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,268人围观)

还没有评论,来说两句吧...

相关阅读