千家信息网

vue2项目中如何封装echarts地图

发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,这篇文章主要介绍了vue2项目中如何封装echarts地图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue2项目中如何封装echarts地图文章都会有所收获,下面我们
千家信息网最后更新 2024年10月24日vue2项目中如何封装echarts地图

这篇文章主要介绍了vue2项目中如何封装echarts地图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue2项目中如何封装echarts地图文章都会有所收获,下面我们一起来看看吧。

    效果图

    先上个效果图吧,说明下实现的效果。

    • 1、广州区域地图

    • 2、自定义弹窗,显示选中地区的名称、区号,弹窗加了个小图片

    • 3、基本上图片、视频什么的,都可以在自定义弹窗上显示,这里只展示下自定义弹窗加图片的方式,视频同理的,不介绍了,有兴趣自己随便试试就好

    • 4、弹窗数据是从模拟接口取的

    注意

    1、vue中echarts 5.x以下版本和5.x以上版本引入的区别

    5.x以下版本

    import echarts from 'echarts'

    5.x以上版本

    import * as echarts from 'echarts'

    2、记得在vue.config.js中开启运行时编译功能

    runtimeCompiler: true

    实现

    数据准备

    |-- public        |-- data                |-- 4401.json                |-- mapdata.json        |-- images                |-- map-ic.png
    • 1、4401.json是广州区域的geojson数据,用来给echarts显示广州的区域地图

    • 2、mapdata.json是模拟接口请求的假数据,自己随便自定义了,在获取数据后,看情况处理下传到封装好的echarts地图模块就行,这里模拟接口请求的知识可参考这里: vue本地模拟服务器请求mock数据

    • 3、map-ic.png地图自定义弹窗用到的图片

    echarts地图模块封装

    |-- src    |-- components        |-- chart            |-- options    // 存放各种图表的option                |-- map    // 地图option                    |-- index.js

    具体代码如下:

    import * as echarts from 'echarts'const getSimpleMap = (jsonMap, data, config) => {  if (!echarts.getMap(jsonMap.mark)) {    echarts.registerMap(jsonMap.mark, jsonMap.json)  }  const defaultConfig = {    tooltip: {      // 窗口外框      trigger: 'item',      padding: 0,      borderWidth: 0,      borderColor: '#FFFFFF',      backgroundColor: '#FFFFFF',      formatter: (params) => {        const { data } = params        const str = `
    ${data.name}
    区号:
    ${data.hoverObj == null ? '' : data.hoverObj.adcode}
    ` return str } }, geo: { map: jsonMap.mark, type: 'map', layoutCenter: ['50%', '50%'], layoutSize: '150%', zoom: 0.65, roam: false, itemStyle: { normal: { areaColor: 'rgba(201, 229, 255, 1)', shadowColor: 'rgba(142, 201, 255, 1)', shadowOffsetX: -5, shadowOffsetY: 12 } } }, series: [ { type: 'map', map: jsonMap.mark, // 自定义扩展图表类型 zoom: 0.65, // 缩放 animationDuration: 1200, itemStyle: { // 地图样式 normal: { borderColor: '#FFFFFF', borderWidth: 3, areaColor: 'rgba(201, 229, 255, 1)' } }, label: { show: true, color: '#666666', fontSize: 12, fontWeight: 400 }, emphasis: { // 鼠标移入动态的时候显示的默认样式 label: { show: true, color: '#FFFFFF', fontSize: 15, fontWeight: 600 }, itemStyle: { areaColor: 'rgba(102, 182, 255, 1)', borderColor: '#FFFFFF', borderWidth: 2 } }, layoutCenter: ['50%', '50%'], layoutSize: '150%', data: data } ] } const opt = Object.assign({}, defaultConfig, config) const { legend, tooltip, series, geo, grid } = opt const chartOpt = { grid, legend, tooltip, geo, series } return chartOpt}export default { getSimpleMap}

    自定义弹窗主要是在tooltip的formatter里面实现,自定义好html弹窗,把params里要显示的数据显示到对应的地方就OK了。

    个人喜欢直接纯html实现好设计给的弹窗样式,然后直接复制到formatter里面。每次遇到不同的设计,就修改下formatter里面的html和匹配下要显示的数据就行了。这里可以进一步封装的,有兴趣的可以试试。

    页面调用

    • 1、 :chart-option="mapOpt"这个是给封装的echarts地图模块的传参,接口数据要经过处理,具体看下一节

    • 2、@click="handleMapClick"这里是点击地图时,对应区域的数据,用于有下一步的操作,例如地图下钻

    接口数据处理

    initMap(url) {    mapRequest(url).then((res) => {        const mapData = res.data        const jsonMap = { mark: this.mapName, json: mapData }        const data = mapData.features.map((item) => {          const { name, adcode } = item.properties          let hoverObj = {}          const objIndex = findElem(this.mapPopData, 'adcode', adcode)          if (objIndex !== -1) {            hoverObj = this.mapPopData[objIndex]          } else {            hoverObj = null          }          return {            name,            hoverObj: hoverObj          }        })        this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data)    }).catch((err) => {        console.log(err, '加载地图失败')    })}

    这里对地图geojson数据和接口返回数据进行匹配处理,达到弹窗数据是对应地区数据的效果。

    地图geojson数据是必有adcode字段的,所以接口数据mapPopData最好也是加上此字段,用来匹配。 上面代码里的hoverObj是匹配好的每个区域的数据,最终形成数组data,通过以下代码给封装的echarts模块传参

    this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data)

    具体代码可以参考echartMapTest文件夹里面的index.js文件

    代码总览

    涉及的文件如下(具体参考代码):

    |-- public        |-- data                |-- 4401.json                |-- mapdata.json        |-- images                |-- map-ic.png|-- src        |-- api                |-- map.js    // 获取地图geojson数据、地图弹窗接口模拟数据    |-- components        |-- chart            |-- index.vue    // 图表单文件组件,供界面调用            |-- index.js    // 实现自动化导入options里的图表option            |-- options    // 存放各种图表的option                |-- map    // 地图option                    |-- index.js    |-- views        |-- echartMapTest    // 实例所在            |-- index.vue            |-- index.scss            |-- index.js        |-- utils                |---utils.js|-- main.js    // 全局引入echarts图表

    关于"vue2项目中如何封装echarts地图"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"vue2项目中如何封装echarts地图"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

    地图 数据 封装 接口 代码 区域 图表 项目 图片 效果 文件 模块 版本 知识 处理 样式 广州 参考 兴趣 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库暂停停和停止是灰色的 怎样换电信的数据库 可以自学的网络技术 锡山区先进网络技术创新服务 it应用软件开发 公司网络安全规划与设计 大话西游手游君临天下服务器开服 华为云微认证软件开发技能认证 第二批一流网络安全学院授牌 数据库中2级索引和3级索引 为什么出现无法连接服务器 连云港学软件开发 土壤数据库的构建指的是什么 17年计算机网络技术真题 湖南分布式存储服务器云主机 数据库修改年月日 服务器管理凭证在哪里设置 数据库中字段类型文本 用户喜好数据库技术 网络安全这个职业怎么样 创造与魔法拆家服务器的物价 仙域服务器列表 培英中学计算机网络技术专业如何 服务器托管市场 大型数据存储服务器能用多久 长沙网络安全示范 服务器网关安全 蒙古马杯网络安全职业技能大赛 大数据库web管理工具 数据库活动进程数
    0