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

2023-11-12

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

文章目录

0.前言

实现的效果:

在这里插入图片描述

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

1.引用模块

  • 引入layui模块,样式
  • 通过标签方式直接引入构建好的 echarts 文件
  • 引入广东的地图经纬度json文件,因为文件太大太多,所以就不全部显示了
    <script src="../lib/layui-v2.5.4/layui.js" charset="utf-8"></script>
    <script src="../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
    <script src="../lib/echars/echarts.min.js" charset="utf-8"></script>
    <script src="../lib/echars/guangdong.json" type="text/javascript"></script>

2.界面设计

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

代码如下:

<div class="layuimini-container">
        <div class="layuimini-main">
            <div class="layui-row layui-col-space15">
                <div class="layui-col-md9">
                    <div class="layui-row layui-col-space15">
                        <div class="layui-col-md12">
                            <div class="layui-card">
                                <div class="layui-card-body">
                                    <div class="map-container">
                                        <h2 style="padding-left: 16px; padding-top: 16px;font-weight: bold; color: #464343">广东</h2>
                                        <div id="map" style="height: 400px;"></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

3.数据准备

数据主要都是测试数据,随便取的经纬度
  • 首先需要明确要显示的地理位置和对应的物理量。先定义需要显示对应信息的位置坐标,按照[纬度,精度]的格式
// 坐标信息
        let geoCoorMap = {
            'A公司': [113.23083,24.903204],
            'B公司': [114.723092,23.983036],
            'C公司': [113.335367,23.13559],
            'D公司': [116.659557, 23.22528],
            'E公司': [111.863833, 22.045743],
            'F公司': [113.405404,24.18612],
            'G公司': [115.786377, 24.132908],
            'H公司': [114.413978,23.079883],
            'I公司': [111.918346, 23.435632],
            'J公司': [113.397617, 22.364724],
            'K公司': [110.086281, 21.647324]
        }   

  • 随后定义每个位置需要显示的量的值
// 每个位置需要显示的量的值
        let items = [{ name: 'A公司', value: ['0'] },
            { name: 'B公司', value: ['0'] },
            { name: 'C公司', value: ['0'] },
            { name: 'D公司', value: ['0'] },
            { name: 'E公司', value: ['0'] },
            { name: 'F公司', value: ['0'] },
            { name: 'G公司', value: ['1'] },
            { name: 'H公司', value: ['0'] },
            { name: 'I公司', value: ['0'] },
            { name: 'J公司', value: ['0'] },
            { name: 'K公司', value: ['0'] }
        ]
  • 为了简单,我先只设置一个值,如果需要其他值,可以自己设置。一般为0,这里我写的1表示的是鼠标起始位置所在点,图标与默认不一样,0为默认点。
随后需要对数据进行处理,将坐标信息和对应物理量的值合在一起。
		const convertDataWithName = function (data, geoCoordMap) {
            let res = [];
            data.forEach(item => {
                let geoCoord = geoCoordMap[item.name];
                if (geoCoord) {
                    res.push({
                        name: item.name,
                        value: geoCoord.concat(item.value)
                    });
                }
            });
            return res;
        };

4.实例地图

  • 接下来就是对于echarts 对象具体值的设置了,全局选项mapOption
let mapOption = {
            // 提示框组件
            tooltip: {
                formatter: function (param) {
                    return param.name;
                },
                padding: 16
            },
            // 地理坐标系组件
            geo: [
                {
                    zoom: 1.2, // 初始缩放比例
                    // bottom: "-40%",
                    // top: "5%",
                    map: "guangdong", // 广东省地图
                    roam: false, // 支持鼠标滚轮缩放
                    itemStyle: {
                        areaColor: "#1C86EE", // 地图底色
                        borderColor: '#FFFFED' // 行政分区边界线颜色
                    },
                    emphasis: {
                        label: {
                            position: "insideBottom",
                            color: "#FFF" // hover地区时显示label颜色
                        },
                        itemStyle: {
                            areaColor: "#1aa094",  // hover地区时显示高亮区域的颜色
                            shadowOffsetX: 3,
                            shadowOffsetY: 3,
                            shadowBlur: 7,
                            shadowColor: "rgba(0, 0, 0, 0.8)"
                        }
                    }
                    // silent: true // 不显示hover效果,视觉效果更集中在点上,同时会屏蔽点击事件
                },
            ],
            // 地图上的标点(使用气泡图)
            series: [
                {
                    type: "scatter",
                    coordinateSystem: "geo",
                    data: convertDataWithName(items, geoCoorMap),
                    symbolSize: 40,
                    symbol: function(params) {
                        if(params[2] === '0') {
                            return 'pin'
                        } else  {
                            return 'diamond'
                        }
                    } ,
                    itemStyle: {
                        opacity: 1
                    }
                },
                {
                    type: 'effectScatter',
                    coordinateSystem: "geo",
                    data: null
                }
            ]
        }
官方文档提供资料如下:

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 等工具编辑导出。

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

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

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

  • 对地图进行实例化,同时赋给id为map的区域
		echarts.registerMap("guangdong", guangdong)
        let mapInstance = echarts.init(document.getElementById('map'))
        // 渲染地图
        mapInstance.setOption(mapOption)

5.动态修改气泡图标

图标点击事件
  • 判断点击的是气泡,执行更改对应值的代码方法
  • 通过更改对应位置的值来判断显示的图标
// 图标点击事件
        mapInstance.on('click', function(event) {
            // 判断点击的是图标
            if(event.componentSubType === "scatter") {
                changeitems(event.name)
                mapOption.series[0].data=convertDataWithName(changeitems(event.name), geoCoorMap)
                mapInstance.setOption(mapOption)
            }
        })
  • 定义一个方法,每次点击气泡的时候都动态更改值
		function changeitems(index) {
            items.forEach(item => {
                let name = item.name;
                if (name === index) {
                    item.value[0]='1'
                }else{
                    item.value[0]='0'
                }
            })
            return items
        } 

6.结束语

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

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

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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • word:表格中的文字居中

    如 操作 如下图 选择布局 点击2就可以把表格居中了 居中结果
  • 实时ETL解决方案总结

    问题导读1 实时ETL可以选择哪些架构部件 2 实时ETL有哪些实现方法 3 实时ETL有哪些难点 1 简述在架构实时ETL时的可以选择的架构部件 答 在建立数据仓库时 ETL通常都采用批处理的方式 一般来说是每天的夜间进行跑批 随着数据仓
  • 【MyBatis】一天之内快速掌握MyBatis的增删改查

    MyBatis 文章介绍 一共不到8000字 一天之内可以快速学会mybatis的增删改查 以及经常使用的操作 不讲废话 只将眼光聚焦到实操上 也可以搭配黑马的视频观看 看完之后 可以自己找个mybatis源码课继续学习 但是一般的业务代码
  • Eclipse的安装与基本操作(详解配图)

    不为失败找理由 只为成功找方法 所有的不甘 都是因为还心存梦想 在你放弃之前 好好拼一把 只怕心老 不怕路长 文章目录 一 简介 二 下载 三 使用Eclipse编写第一个Java程序 四 Eclipse的基本操作 1 背景 2 字体 五
  • Windows10系统MySQL服务器简单安装

    Windows10系统MySQL服务器简单安装 Mysql下载 安装 修改MySQL数据保存地址 修改服务 初始化数据库 修改root密码 新增用户 Mysql下载 MySql官网下载 下载地址 https dev mysql com do
  • 创建M32F103C8T6的工程文件之后编译为什么一堆错误?

    首先先看错误的提示是不是以下的显示 Rebuild started Project STM32F103C8T6 Using Compiler V6 15 folder F keil ARM ARMCLANG Bin Rebuild targ
  • 关于vxe-table全局引入的问题

    主要讲解一下vxe table全局引入然后使用碰到的问题 0 vxe table的官网地址 1 基本环境 1 vue版本为3 x以上 我的是3 2 13 2 依赖库 xe utils 注意 这篇博客的是vue3的脚手架搭建的 如果需要看低版
  • 毕业设计-机器视觉的疲劳驾驶检测系统-python-opencv

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • vue-admin-template,连接自己后台,二次开发必看

    第一步 找到 env development文件做如下修改 just a flag ENV development base api VUE APP BASE API api 第二步 找到 vue config js 配置跨域 关闭mock
  • Ubuntu 20版本将动态ip修改为静态ip时,ping 不通网络

    问题描述 在对Ubuntu 20版本将动态ip修改为静态ip时 ping www baidu com ping不通了 火狐浏览器没有了网路 下载不了东西 一直卡在这里不动 问题出在哪里还是配置ip dns 网关的问题 如果我们在当初安装ub
  • Spring:从零开始的Cloud生活(零)——Eureka 服务治理

    目录 Spring 从零开始的Cloud生活 零 Eureka 服务治理 1 Netfilx Eurake 2 搭建服务注册中心 3 服务提供者 4 高可用注册中心 5 服务发现和消费 之前对于SpringCloud都是一知半解的状态 现在
  • MySQL中的模糊查询

    1 表示任意0个或多个字符 可匹配任意类型和长度的字符 有些情况下若是中文 请使用两个百分号 表示 比如 SELECT FROM user WHERE u name LIKE 三 将会把u name为 张三 张猫三 三脚猫 唐三藏 等等有
  • python调用turtle(海龟画图),画一个正方形

    调用海龟画图 画一个正方形 方法一 调用海龟画图 import turtle bob turtle Turtle print bob 定义画图的方向 此处画了一个直角 bob fd 100 bob lt 90 加入以下步骤画了一个正方形 b
  • Linux Shell学习简单小结(更新中……)

    if fi bin bash 删除文件 和 新建文件 file readme function delFile if e file then rm f file echo del file fi function addFile if f
  • YOLO系列发展史

    YOLO You Only Look Once 是一种目标检测算法 由Joseph Redmon等人在2015年提出 它的主要思想是将目标检测任务看作是一个回归问题 并且可以在一个神经网络中同时预测目标的位置和类别 自2015年YOLO第一
  • ChatGPT会取代互联网程序员吗?

    ChatGPT会取代互联网程序员吗 ChatGPT是一个基于GPT 3模型的自然语言对话系统 它可以与用户进行自然 流畅 智能的对话交互 回答用户的问题 提供用户所需的信息 甚至生成一些有趣和创意的内容 ChatGPT最近火爆全网 一时间C
  • Linux系统启动分析

    文章目录 大体流程分析 一 BIOS 1 1 BIOS简介 1 2 POST 二 BootLoader GRUB 2 1 What s MBR 2 2 What s GRUB 2 3 boot img 2 4 core img lzma d
  • 我花了一夜用数据结构给女朋友写个H5走迷宫游戏

    文章目录 起因 分析 画线 棋盘 画迷宫 方块移动 结语 先看效果图 在线电脑尝试地址http biggsai com maze html 起因 又到深夜了 我按照以往在公众号写着数据结构 这占用了我大量的时间 我的超越妹妹严重缺乏陪伴而
  • Vue-数据驱动视图(一)数据监听机制

    前言 Vue的一大特点就是数据双向绑定 当数据发生变化时 也可以同时触发界面的变化 即数据驱动视图 要想实现数据驱动视图 那么有这么几个步骤 1 收集我们需要监听的数据 并给他配置个监听器 当数据状态发生变化时触发监听器 然后判断是否需要重
  • Echarts地图自定义图标Symbol同时动态更改图标进行切换显示

    Echarts地图自定义图标Symbol同时动态更改图标进行切换显示 文章目录 0 前言 1 引用模块 2 界面设计 3 数据准备 4 实例地图 5 动态修改气泡图标 6 结束语 0 前言 实现的效果 实现广东显示地图 然后点击地图上的气泡